6.7 KiB
BusinessCard Roadmap
This document tracks planned features and their implementation status.
✅ Completed Features
High Priority (Core User Value)
-
Dynamic contact fields system - Unlimited fields with custom ordering
- New
ContactFieldSwiftData model for flexible field storage ContactFieldTypestruct with 30+ field types across 8 categories- Drag-to-reorder support with haptic feedback
- Sheet-based field editor with type-specific keyboards and placeholders
- Multiple fields of the same type allowed (e.g., multiple emails)
- New
-
Custom social icons - Brand-colored icons from asset catalog
- Custom
.symbolsetassets for all major platforms - LinkedIn, X/Twitter, Instagram, Facebook, TikTok, Threads
- Bluesky, Mastodon, Reddit, Twitch, YouTube, Discord
- GitHub, Telegram, Slack, Matrix, Patreon, Ko-fi
- Proper
Image()vsImage(systemName:)handling viaiconImage()helper
- Custom
-
Extended name fields - Prefix, maiden name, pronouns
- Expandable name section in editor
- Prefix (Dr., Mr., Mrs., etc.)
- Maiden name with parentheses formatting in display name
- Preferred name with quotes formatting
- Pronouns displayed next to name on card
-
Accreditations as tags - Tag bubble UI with inline editing
- Horizontal ScrollView of tag chips
- Tap to edit, check to save, x to delete
- Comma-separated storage for vCard compatibility
-
Clickable contact fields - Deep linking to apps and actions
- Email → mailto:
- Phone → tel:
- Social links → app deep links or web fallback
- Address → Maps
- Website → Safari
-
More card fields - Social media links, custom URLs, pronouns, bio
- Added: pronouns, bio, LinkedIn, Twitter/X, Instagram, Facebook, TikTok, GitHub
- Added: 2 custom link slots (title + URL)
- vCard payload includes social profiles
-
Profile photo support - PhotosPicker integration
- Added PhotosPicker to CardEditorView
- Photos stored as Data with
@Attribute(.externalStorage) - Photos display on cards, in editor preview, and contact avatars
-
Contact notes/annotations - Add notes, tags, follow-up reminders
- Added: notes field (free text)
- Added: tags (comma-separated, displayed as chips)
- Added: follow-up date with overdue indicators
- Added: "where you met" field
- Added: email and phone for received contacts
- Full ContactDetailView for editing annotations
-
Save received cards - Scan a QR to add someone else's card
- Added QRScannerView with camera integration
- Parses vCard data from scanned QR codes
- Creates contacts marked as
isReceivedCard - "Scan Card" button in Contacts toolbar
-
watchOS companion app - Show default card QR code on Apple Watch
- Full-screen default card display (no card picker)
- QR codes pre-generated on iPhone (CoreImage not available on watchOS)
- Syncs via WatchConnectivity framework
- Automatic sync when cards created, edited, or deleted on iPhone
🔲 Planned Features
High Priority (Photo Sharing via App Clip)
-
App Clip for instant card sharing - Recipients get full card with photo, no app install
- Solves the QR code size limitation for photos
- Recipient scans QR → App Clip loads instantly → "Add to Contacts" with photo
- Uses CloudKit for ephemeral card storage (auto-deletes after save)
Implementation phases:
-
CloudKit Setup
- Enable CloudKit capability
- Create
SharedCardrecord type (name, role, company, vCard data, photo asset) - Add
expiresAtfield for auto-cleanup - Implement upload function in main app
- Implement cleanup (delete expired cards on app launch)
-
App Clip Target
- Create App Clip target (<15MB)
- Configure Associated Domains (
appclips:yourapp.com) - Build minimal UI: card preview + "Add to Contacts" button
- Fetch card from CloudKit using URL parameter
- Use
CNContactStoreto save contact with photo - Call delete/mark-complete on CloudKit after save
-
Main App Integration
- New "Share via App Clip" option in ShareCardView
- Upload card to CloudKit on share
- Generate QR code with App Clip URL
- Show QR code for scanning
-
App Store Configuration
- Configure App Clip experience in App Store Connect
- Set up App Clip Code or Smart App Banner (optional)
- Test invocation URLs
Lower Priority (Advanced)
-
Real NFC - Write card to NFC tags
- Requires NFC entitlements
- Requires physical NFC cards/tags
- Write vCard data to NFC
-
Apple Wallet - Add card to Wallet
- Requires PKPass generation
- May need backend for signing passes
- Display QR in Wallet app
-
Team features - Shared team cards
- Requires user accounts
- Requires backend infrastructure
- Team branding, shared templates
-
Track share recipients - Record who you shared your card with
- Add contact entry when sharing
- Track share date, method, and recipient info
- View share history per card
🔧 Technical Improvements
Completed
- SwiftData persistence with CloudKit sync
- Bedrock integration - Design system, QR code generator
- iOS-Watch sync via WatchConnectivity framework
- ⚠️ App Groups do NOT work for iPhone ↔ Watch (different devices)
- Uses
updateApplicationContextfor persistent sync - Watch app must be embedded in iOS app with "Code Sign On Copy" checked
- Unit tests for models, stores, and new features
- Fixed data persistence - Removed aggressive store deletion on startup
- Custom symbol assets - Brand icons in asset catalog with proper rendering
- Drag-and-drop reordering - Using
draggableanddropDestinationmodifiers - Single source of truth for names - Removed legacy
displayNamepropertyfullNamecomputed from individual name fields (prefix, firstName, lastName, etc.)vCardNamefor plain vCard export- No stored displayName that can get out of sync
Planned
- WidgetKit extension - Real home screen widgets
- Spotlight indexing - Search cards from iOS search
- Siri shortcuts - "Share my work card"
- App Intents - iOS 17+ action button support
📝 Notes
- Features marked with 🔲 are planned but not yet implemented
- Features requiring backend are deferred until infrastructure is available
- Priority may shift based on user feedback
- watchOS uses WatchConnectivity (NOT App Groups) - see
Agents.mdfor details fullNameis computed, not stored - never add adisplayNameproperty
Last updated: January 10, 2026