A native iOS app for tracking 1:1 meetings with managers and career goals. Built with SwiftUI and CloudKit for secure, private data storage in your personal iCloud account.
Career Companion helps employees prepare for, conduct, and follow up on 1:1 meetings with their managers while tracking career goals and achievements for performance reviews. Your data is stored securely in your personal iCloud account and is never shared with anyone.
- 1:1 Meeting Management - Prepare agendas, capture notes, track action items
- Flexible Relationships - Track 1:1s with managers, mentors, peers, stakeholders, or any custom relationship type
- User-Defined Types - Create custom relationship types and meeting types to fit your workflow
- IC & Manager Modes - Switch between tracking meetings with your manager or your direct reports
- Multiple Managers/Reports - Track 1:1s with multiple people, filter by relationship type
- Demo Mode - Explore the app with sample data before starting fresh
- Career Goals Tracking - Set goals, track progress, record achievements
- Performance Reports - Generate reports for performance reviews
- Calendar Integration - Sync meetings to your iOS calendar via EventKit
- Siri Shortcuts - "When is my next 1:1?", "Add action item", and more
- Apple Watch App - View meetings, complete action items, log sentiment from your wrist
- AI Suggestions - Smart agenda suggestions based on meeting history (iOS 18+)
- Data Export/Import - Full backup to JSON/CSV, restore from backup
- iOS Widgets - Quick access to action items and upcoming meetings
- Export & Share - Copy agendas to Slack, Teams, or email
- Animated Splash Screen - Beautiful launch animation with custom branding
| Home | Meetings | Career Goals |
|---|---|---|
| Dashboard with action items and upcoming 1:1 | Active meeting with agenda and notes | Goals progress and achievements |
- Two Main Entry Points: 1:1 Meetings and Career Goals
- Action Items Overview: Prioritized list with quick-complete actions
- Upcoming 1:1 Card: Countdown to next meeting with agenda preview
- Career Progress Snapshot: Active goals and recent achievements
- Quick Stats: Open items, completed this week, goals progress
- Create and reorder agenda items with drag-and-drop
- Auto-populate from incomplete action items
- Export agenda to Slack, Teams, or email
- One-tap copy to clipboard
- Interactive agenda with checkboxes
- Meeting timer
- Weekly planning sections (optional):
- This Week's Goals (auto-populated from previous meeting)
- Progress Updates
- Key Metrics (carries over between meetings)
- Next Week's Goals (carries to next meeting)
- Structured feedback sections:
- What Went Well
- What Didn't Go Well
- Blockers
- Escalations
- Quick-add action items with owner and due date
- Sentiment tracking (week and meeting ratings)
- Title, description, due date, priority
- Owner assignment (self or manager)
- Status tracking (open, in progress, completed)
- Links and comments
- Automatic carry-over to next meeting
- Categories: Technical, Leadership, Communication, Domain Knowledge
- Progress tracking with visual indicators
- Target dates and milestones
- Success metrics and tracking methods
- Priority ordering (primary/secondary)
- Link achievements to goals
- Impact statements with evidence
- Import from "What Went Well" sections
- Visibility settings (private, manager, public)
- Select date range (quarter, half-year, year, custom)
- Choose goals and achievements to include
- Generate formatted reports
- Export as PDF, Markdown, or plain text
- Share via email, Slack, or Teams
| Widget | Sizes | Features |
|---|---|---|
| Action Items | Small, Medium, Large | Open items count, top items list, overdue alerts |
| Next Meeting | Small, Lock Screen | Countdown, manager name, date/time |
| Career Goals | Medium | Active goals with progress rings |
- iOS 18+ minimum deployment target
- watchOS 10+ for Apple Watch companion app
- Swift 5.9+
- SwiftUI for all UI components
- CloudKit for secure iCloud storage
- StoreKit 2 for in-app purchases
- EventKit for calendar integration
- App Intents for Siri Shortcuts
- WidgetKit for home screen widgets
- MVVM architecture pattern
All data is stored in CloudKit's private database, which means:
- Data is encrypted in your personal iCloud account
- Never shared with the app developer or third parties
- Automatically syncs across all your Apple devices
- Persists even if the app is deleted
CareerCompanion/
├── CareerCompanionApp.swift # App entry point
├── Core/
│ ├── CloudKit/
│ │ ├── CloudKitManager.swift # CloudKit operations
│ │ └── CloudKitRecordable.swift # Protocol for models
│ ├── DemoData/
│ │ └── DemoDataProvider.swift # In-memory demo data
│ ├── Intents/
│ │ ├── AppIntents.swift # Siri Shortcuts definitions
│ │ └── ShortcutsManager.swift # Shortcut donations
│ ├── Models/
│ │ ├── AppSettings.swift # App settings (demo mode, user role, premium)
│ │ ├── Enums.swift # Status, Priority, etc.
│ │ ├── PremiumFeatures.swift # Free tier limits, feature flags
│ │ ├── Manager.swift
│ │ ├── Meeting.swift
│ │ ├── AgendaItem.swift
│ │ ├── ActionItem.swift
│ │ ├── CareerGoal.swift
│ │ └── Achievement.swift
│ └── Services/
│ ├── AIManager.swift # AI suggestions (iOS 18+)
│ ├── CalendarManager.swift # EventKit integration
│ ├── ExportImportService.swift # Data export/import
│ └── SubscriptionManager.swift # StoreKit 2 integration
├── Design/
│ ├── Colors.swift # WCAG AA color palette
│ ├── Typography.swift # Dynamic Type support
│ ├── Spacing.swift # 8pt grid system
│ ├── Theme.swift # Button styles, etc.
│ └── Components/
│ ├── Card.swift
│ ├── EmptyState.swift
│ ├── ProgressRing.swift
│ └── SentimentPicker.swift
├── Features/
│ ├── Home/
│ ├── Meetings/
│ ├── ActionItems/
│ ├── Career/
│ ├── Premium/
│ │ ├── UpgradeView.swift # Full upgrade screen
│ │ └── UpgradePromptSheet.swift # Contextual upgrade prompts
│ ├── People/
│ │ ├── PeopleListView.swift # Standalone people list
│ │ ├── AddPersonView.swift # Add person form with callback
│ │ └── PersonRow.swift # Reusable person row component
│ ├── Settings/
│ │ ├── SettingsView.swift
│ │ ├── PremiumSettingsSection.swift
│ │ ├── ManageTypesView.swift
│ │ ├── ExportView.swift
│ │ └── ImportView.swift
│ └── Onboarding/
│ ├── OnboardingView.swift
│ ├── DemoModeSheet.swift
│ └── SplashScreenView.swift # Animated launch screen
├── CareerCompanionWidget/
│ ├── ActionItemsWidget.swift
│ ├── NextMeetingWidget.swift
│ ├── CareerGoalsWidget.swift
│ └── WidgetBundle.swift
└── CareerCompanionWatch/ # Apple Watch App
├── CareerCompanionWatchApp.swift
├── WatchHomeView.swift
├── WatchHomeViewModel.swift
├── WatchMeetingDetailView.swift
├── WatchActionItemsView.swift
└── WatchQuickLogView.swift
Manager (Person)
├── id, name, email
├── relationshipType (My Manager, Direct Report, Mentor, Peer, custom...)
├── tags (optional filtering tags)
└── createdAt
Meeting
├── id, date, status, perspective
├── meetingType (1:1, Career Development, Project Sync, custom...)
├── agendaItems, notes
├── thisWeekGoals, thisWeekProgress, keyMetrics, nextWeekGoals
├── wentWell, didntGoWell, blockers, escalations
├── weekSentiment, meetingSentiment
└── actionItems
ActionItem
├── id, title, description
├── dueDate, priority, status, owner
├── links, comments
└── sourceMeeting
CareerGoal
├── id, title, description, category
├── targetDate, status, priority
├── successMetrics, trackingMethod
├── progress (0-100%)
└── achievements
Achievement
├── id, title, description
├── dateAchieved, impactStatement
├── linkedGoals, evidenceLinks
├── tags, visibility
└── sourceMeeting
- Xcode 15.0 or later
- iOS 18.0+ device or simulator
- watchOS 10.0+ simulator (for Watch app testing)
- Apple Developer account (for CloudKit)
- iCloud account signed in on device
-
Clone the repository
git clone https://github.com/camilopires/CareerCompanioniOS.git cd CareerCompanioniOS -
Open in Xcode
open CareerCompanion.xcodeproj
-
Configure Signing
- Select the project in the navigator
- Go to Signing & Capabilities
- Select your Development Team for all targets:
CareerCompanionCareerCompanionWidgetExtensionCareerCompanionWatch
-
Update Bundle Identifiers (optional)
- Default:
com.careercompanion.app - Widget:
com.careercompanion.app.widget - Watch:
com.careercompanion.app.watch
- Default:
-
Build and Run
- Select your target device/simulator
- Press
Cmd + Rto build and run
Career Companion includes a Demo Mode that lets you explore the app with sample data before committing to your own data:
- During Onboarding: After the welcome slides, demo mode activates automatically
- Explore with Sample Data: Navigate through meetings, action items, and career goals
- Start Fresh: Tap "Start Fresh" in the bottom sheet to begin with your own data
- Re-enable Anytime: Toggle demo mode on/off in Settings
Demo data is stored in-memory only and is never saved to your iCloud account.
On first run, Xcode will automatically:
- Create the CloudKit container in your iCloud account
- Set up the required record types
- Configure subscriptions for sync
This app is designed to meet WCAG 2.1 AA standards with comprehensive support for assistive technologies.
- Color Contrast: All text meets 4.5:1 minimum ratio (documented in
Colors.swift) - Dynamic Type: 100% support using semantic font styles
- Dark Mode: Complete dark mode support with adaptive colors
- Color Independence: Status indicators include text labels, not just colors
- High Contrast: Enhanced colors when system high contrast is enabled
- Touch Targets: Minimum 44x44pt touch areas (defined in
Spacing.touchTarget) - Keyboard Navigation: Full external keyboard support
- Reduce Motion: All animations respect
UIAccessibility.isReduceMotionEnabled- Splash screen animations disabled
- Button scale effects disabled
- Progress ring animations disabled
- Page indicator animations disabled
- Accessibility Labels: All interactive elements have descriptive labels
- Accessibility Hints: Complex interactions explained (e.g., "Double tap to view details")
- Accessibility Traits: Buttons, selected states, and other traits properly set
- Combined Elements: Related content grouped for efficient navigation
- Hidden Decorative Elements: Icons and images that don't convey information are hidden
- Dynamic Announcements: Filter changes and completions announced to VoiceOver users
- Form Validation: Disabled buttons explain why they're disabled
The app includes an accessibility test suite (CareerCompanionTests/Accessibility/) covering:
- Touch target size verification
- Color contrast ratio calculations
- Accessibility label validation
- Component and screen-level tests
| Color | Usage | Light | Dark |
|---|---|---|---|
| Primary | Actions, links | Blue | Light Blue |
| Success | Completed, positive | Green | Green |
| Warning | Attention needed | Orange | Orange |
| Error | Overdue, failures | Red | Red |
Uses San Francisco (system font) with Dynamic Type:
- Large Title: Navigation headers
- Title 1-3: Section headers
- Headline: Card titles
- Body: Primary content
- Caption: Metadata, timestamps
8pt grid system with consistent values:
xxs: 4ptxs: 8ptsm: 12ptmd: 16ptlg: 24ptxl: 32ptxxl: 48pt
- Slack: Formatted with emoji and markdown
- Teams: Microsoft Teams compatible
- Email: Clean plain text
- Markdown: Full markdown formatting
- PDF: Formatted, printable document
- Markdown: For documentation systems
- Plain Text: Universal compatibility
- Long press on home screen
- Tap the
+button - Search for "Career Companion"
- Choose widget size and add
| Widget | Size | Description |
|---|---|---|
| Action Items | Small | Count of open items |
| Action Items | Medium | Top 3 items with overdue count |
| Action Items | Large | Full list with details |
| Next Meeting | Small | Countdown with date |
| Next Meeting | Circular | Days until meeting |
| Next Meeting | Rectangular | Date and manager name |
| Career Goals | Medium | Progress rings and goal list |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- 1:1 Meeting management
- Action items tracking
- Career goals and achievements
- Performance report generation
- iOS widgets
- Export to Slack/Teams
- Demo Mode for onboarding exploration
- IC/Manager mode switching
- Multiple people support (managers or direct reports)
- Multiple managers filtering
- Calendar integration (EventKit)
- Siri Shortcuts (App Intents)
- Apple Watch companion app
- AI-powered suggestions (iOS 18+)
- Data export/import (JSON/CSV)
- Enhanced team view for managers
- Flexible relationship types (My Manager, Direct Report, Mentor, Peer, Stakeholder, custom)
- User-defined meeting types (1:1, Career Development, Project Sync, custom)
- Manage Types settings screen for custom types
- "Other 1:1s" section on dashboards for non-manager/report meetings
- Relationship type filter in meetings list
- Meeting type badges on meeting cards
- Weekly goals tracking with auto-carry-over from previous meeting
- Progress updates section for ongoing work
- Key metrics tracking that persists across meetings
- Next week's goals that carry forward automatically
- All new sections are optional - use what's relevant
- Premium Monetization - Freemium model with StoreKit 2
- Free tier: 1 person, 10 action items, 3 goals, 5 achievements
- Premium (£19.99 lifetime): Unlimited everything + power features
- 30-day free trial for new users
- Premium-Only Features
- Weekly goals & metrics tracking
- Performance reports
- AI suggestions
- Calendar sync
- Data export/import
- Custom types
- Apple Watch app
- Upgrade Experience
- Upgrade prompts when hitting limits
- Full upgrade view with feature showcase
- Restore purchases support
- Premium status in Settings
- People Quick Access - Manage people directly from dashboards
- "Add Your First Person" button when no people exist (no more "Go to Settings")
- "Add a new person" option at top of person picker when scheduling meetings
- Auto-select newly added person in meeting creation flow
- Standalone People views extracted for reuse across the app
- Improved UX Flow
- Tappable empty states that open AddPersonView directly
- Seamless person creation during meeting scheduling
- App Branding & Logo
- Custom app icon with Career Companion logo
- Logo displayed on onboarding welcome screen
- Logo in Settings > About screen
- Animated Splash Screen
- Beautiful launch animation with logo
- Characters animate upward toward the star
- Spring animation with haptic feedback
- Respects reduce motion accessibility setting
- Branding Consistency
- Updated all "OneToOne" references to "Career Companion"
- Premium features now branded as "Career Companion Premium"
- Comprehensive Accessibility Audit
- Full WCAG 2.1 AA compliance review
- 16 files updated with accessibility improvements
- Reduce Motion Support
- All animations now respect system reduce motion setting
- SentimentPicker, ProgressRing, Card, Theme button styles
- Onboarding page indicators and transitions
- VoiceOver Improvements
- Filter changes announce item counts
- Action item completion announcements
- Form validation hints on disabled buttons
- Goal status included in progress ring labels
- PersonRow includes relationship type in labels
- Accessibility Test Suite
- AccessibilityTestCase base class with helpers
- Component accessibility tests
- Screen-level accessibility tests
- Integration APIs (Slack, Teams, Notion)
- Competency framework templates
- Goal templates library
- Watch complications
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with SwiftUI and CloudKit
- Icons from SF Symbols
- Accessibility guidelines from WCAG 2.1
- Issues: GitHub Issues
- Discussions: GitHub Discussions