BusinessCard/ROADMAP.md

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 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)
  • 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
  • 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:

    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

  • 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 updateApplicationContext for 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 draggable and dropDestination modifiers
  • Single source of truth for names - Removed legacy displayName property
    • fullName computed from individual name fields (prefix, firstName, lastName, etc.)
    • vCardName for 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.md for details
  • fullName is computed, not stored - never add a displayName property

Last updated: January 10, 2026