# BusinessCard A SwiftUI iOS + watchOS app that creates and shares digital business cards with QR codes, quick share actions, customization, and contact tracking. Data syncs across devices via iCloud. ## Platforms - iOS 26+ - watchOS 12+ - Swift 6.2 ## Features ### My Cards - **Full-screen card display**: Swipe between your business cards in a full-screen view - Tap the **edit icon** (pencil) in the top right to edit the current card - Tap the **plus icon** to create a new card - Set a default card for sharing - **Modern card design**: Banner with company logo, overlapping profile photo, clean contact rows - **Profile photos**: Add a photo from your library or use an icon - **Company logos**: Upload a logo to display on your card's banner - **Rich profiles**: First/middle/last name, prefix, maiden name, preferred name, pronouns, headline, bio, accreditations - **Clickable contact fields**: Tap any field to call, email, open link, or launch app ### Share - **Dark-themed share sheet**: Sleek QR code display with prominent sharing options - Share options: copy link, SMS, email, WhatsApp, LinkedIn, and more - **Offline sharing toggle**: Share your card without internet connection - **Track shares**: Record who received your card and when - Placeholder actions for Apple Wallet and NFC (alerts included) ### Card Editor Access via the edit (pencil) icon in the My Cards tab: - **Horizontal color picker**: Scrollable theme swatches for quick selection - Theme picker with multiple color palettes (Coral, Midnight, Ocean, Lime, Violet) - **Expandable name section**: Prefix, first, middle, last, maiden name, suffix, preferred name, pronouns - **Edit all card details**: Name, role, department, company, headline, bio - **Accreditations**: Tag-based input with inline editing #### Dynamic Contact Fields Add unlimited contact fields of any type, reorder by drag-and-drop: - **Contact**: Email, phone, website, address - **Social Media**: LinkedIn, X/Twitter, Instagram, Facebook, TikTok, Threads, Bluesky, Mastodon, Reddit, Twitch, YouTube, Snapchat, Pinterest - **Developer**: GitHub, GitLab, Stack Overflow, CodePen - **Messaging**: Telegram, WhatsApp, Discord, Slack, Matrix, Signal - **Support & Funding**: Patreon, Ko-fi, Buy Me a Coffee, GitHub Sponsors - **Payment**: Venmo, Cash App, PayPal, Zelle - **Scheduling**: Calendly - **Other**: Custom links with any URL Each field has: - **Custom icons**: Brand-colored icons from asset catalog (not generic SF Symbols) - **Title/Label**: Add context like "Work", "Personal", or custom call-to-action - **Deep linking**: Opens native apps when available (X, Instagram, etc.) - **Drag-to-reorder**: Long press and drag to change order - **Suggestion chips**: Quick-fill suggestions for field titles - **Live preview**: "Preview card" button to see changes before saving - **Delete cards** you no longer need ### Contacts - Track who you've shared your card with - **Scan QR codes** to save someone else's business card - **Notes & annotations**: Add notes about each contact - **Tags**: Organize contacts with comma-separated tags - **Follow-up reminders**: Set reminder dates with overdue indicators - **Where you met**: Record event or location where you connected - Search contacts using localized matching (searches name, company, role, tags, notes) - Shows last shared time and the card label used - Swipe to delete contacts ### Widgets (Preview Only) - Phone widget preview mock - Watch widget preview mock ### watchOS App - Shows the default card QR code - Pick which card is the default on watch - **Syncs with iPhone** via App Groups ## Data Sync ### iCloud Sync (iOS) Cards and contacts are stored using SwiftData with CloudKit sync enabled. Your data automatically syncs across all your iPhones and iPads signed into the same iCloud account. ### iPhone to Watch Sync The iPhone app syncs card data to the paired Apple Watch via App Groups. When you create, edit, or delete cards on your iPhone, the changes appear on your watch. **Note**: The watch reads data from the iPhone. To update cards on the watch, make changes on the iPhone first. ## Architecture - **Clean Architecture**: Clear separation between Views, State, Services, and Models - **Views are dumb**: Presentation only, no business logic - **State is smart**: `@Observable` classes with all business logic - **Protocol-oriented**: Interfaces for services and stores - **SwiftData + CloudKit**: Persistent storage with iCloud sync - **One type per file**: Lean, maintainable files under 300 lines - **Reusable components**: Shared UI in `Views/Components/` - **Bedrock package**: Shared design system and utilities - **String Catalogs**: Localization for en, es-MX, fr-CA ## Dependencies ### Bedrock (Local Package) The app uses the [Bedrock](ssh://git@192.168.1.128:220/mbrucedogs/Bedrock.git) package for: - **Design constants**: `Design.Spacing`, `Design.CornerRadius`, `Design.Opacity`, etc. - **QR code generation**: `QRCodeGenerator`, `QRCodeImageView` - **Reusable UI components**: Settings views, badges, effects App-specific extensions are in `Design/DesignConstants.swift`. ## Project Structure ``` BusinessCard/ ├── Assets.xcassets/ │ └── SocialSymbols/ # Custom brand icons (LinkedIn, X, Instagram, etc.) ├── Design/ # Design constants (extends Bedrock) ├── Localization/ # String helpers ├── Models/ │ ├── BusinessCard.swift # Main card model │ ├── Contact.swift # Received contacts │ ├── ContactField.swift # Dynamic contact fields (SwiftData) │ └── ContactFieldType.swift # Field type definitions with icons & URLs ├── Protocols/ # Protocol definitions ├── Resources/ # String Catalogs (.xcstrings) ├── Services/ # Share link service, watch sync ├── State/ # Observable stores (CardStore, ContactsStore) └── Views/ ├── Components/ # Reusable UI (ContactFieldPickerView, AddedContactFieldsView, etc.) ├── Sheets/ # Modal sheets (ContactFieldEditorSheet, RecordContactSheet, etc.) └── [Feature].swift # Feature screens BusinessCardWatch/ # watchOS app target BusinessCardTests/ # Unit tests ``` ## Configuration ### Required Capabilities **iOS Target:** - iCloud (CloudKit enabled) - App Groups (`group.com.mbrucedogs.BusinessCard`) - Background Modes (Remote notifications) - Camera (for QR code scanning) **watchOS Target:** - App Groups (`group.com.mbrucedogs.BusinessCard`) ### CloudKit Container `iCloud.com.mbrucedogs.BusinessCard` ## Notes - Share URLs are sample placeholders - Wallet/NFC flows are stubs with alerts only - Widget UI is a visual preview (not a WidgetKit extension) ## Running 1. Open `BusinessCard.xcodeproj` in Xcode 2. Ensure Bedrock package is resolved (File → Packages → Resolve Package Versions) 3. Build and run on iOS Simulator or device ## Tests Unit tests cover: - vCard payload formatting - Default card selection - Contact search filtering - Create, update, delete cards - Contact tracking (new and existing contacts) - Theme and layout assignment - Social links detection - Contact notes and tags - Follow-up status and overdue detection - vCard parsing for received cards - Adding received cards via QR scan Run tests with `Cmd+U` in Xcode. ## Roadmap See [ROADMAP.md](ROADMAP.md) for planned features and implementation status. --- *Built with SwiftUI, SwiftData, and ❤️*