BusinessCard/ROADMAP.md

161 lines
5.9 KiB
Markdown

# BusinessCard Roadmap
This document tracks planned features and their implementation status.
## ✅ Completed Features
### High Priority (Core User Value)
- [x] **Dynamic contact fields system** - Unlimited fields with custom ordering
- New `ContactField` SwiftData model for flexible field storage
- `ContactFieldType` struct 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)
- [x] **Custom social icons** - Brand-colored icons from asset catalog
- Custom `.symbolset` assets 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()` vs `Image(systemName:)` handling via `iconImage()` helper
- [x] **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
- [x] **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
- [x] **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
- [x] **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
- [x] **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
- [x] **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
- [x] **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
---
## 🔲 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:**
1. **CloudKit Setup**
- [ ] Enable CloudKit capability
- [ ] Create `SharedCard` record type (name, role, company, vCard data, photo asset)
- [ ] Add `expiresAt` field for auto-cleanup
- [ ] Implement upload function in main app
- [ ] Implement cleanup (delete expired cards on app launch)
2. **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 `CNContactStore` to save contact with photo
- [ ] Call delete/mark-complete on CloudKit after save
3. **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
4. **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
- [x] **SwiftData persistence** with CloudKit sync
- [x] **Bedrock integration** - Design system, QR code generator
- [x] **iOS-Watch sync** via App Groups
- [x] **Unit tests** for models, stores, and new features
- [x] **Fixed data persistence** - Removed aggressive store deletion on startup
- [x] **Custom symbol assets** - Brand icons in asset catalog with proper rendering
- [x] **Drag-and-drop reordering** - Using `draggable` and `dropDestination` modifiers
### 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
- [ ] **Migrate legacy properties** - Move all cards to new ContactField array
---
## 📝 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
- Legacy contact properties (email, phone, linkedIn, etc.) maintained for backward compatibility
---
*Last updated: January 9, 2026*