5.0 KiB
5.0 KiB
AI Implementation Context
This file summarizes project-specific context, architecture, and conventions to speed up future AI work.
Project Summary
BusinessCard is a SwiftUI app for building and sharing digital business cards with QR codes. It includes iOS screens for cards, sharing, customization, contact tracking, and widget previews, plus a watchOS companion to show a default card QR code.
Key Constraints
- iOS 26+, watchOS 12+, Swift 6.2.
- SwiftUI with
@Observableclasses and@MainActor. - Protocol‑oriented architecture is prioritized.
- No UIKit unless explicitly requested.
- String Catalogs only (
.xcstrings). - No magic numbers in views; use Bedrock's
Designconstants. - Uses Bedrock package for shared design system and utilities.
Core Data Flow
AppStateowns:CardStore(cards and selection)ContactsStore(contact list + search)ShareLinkService(share URLs)
- SwiftData with CloudKit for persistence and sync.
- App Groups for iOS-Watch data sharing.
- Views read state via environment and render UI only.
Dependencies
Bedrock Package
Located at /Frameworks/Bedrock (local package). Provides:
Design.Spacing,Design.CornerRadius,Design.Opacity, etc.QRCodeGeneratorandQRCodeImageViewfor QR codes- Reusable settings components
App-specific extensions are in Design/DesignConstants.swift:
Design.CardSize- card dimensions, avatar, QR sizesDesign.Shadow.offsetNone- zero offset extensionColor.AppBackground,Color.CardPalette,Color.AppAccent,Color.AppText
Important Files
Models
-
BusinessCard/Models/BusinessCard.swift— SwiftData model with:- Basic fields: name, role, company, email, phone, website, location
- Rich fields: pronouns, bio, social links (LinkedIn, Twitter, Instagram, etc.)
- Custom links: 2 slots for custom URLs
- Photo:
photoDatastored with@Attribute(.externalStorage) - Computed:
theme,layoutStyle,vCardPayload,hasSocialLinks
-
BusinessCard/Models/Contact.swift— SwiftData model with:- Basic fields: name, role, company
- Annotations: notes, tags (comma-separated), followUpDate, metAt
- Received cards: isReceivedCard, receivedCardData (vCard)
- Photo:
photoData - Computed:
tagList,hasFollowUp,isFollowUpOverdue - Static:
fromVCard(_:)parser
-
BusinessCard/Models/CardTheme.swift— card theme palette -
BusinessCard/Models/CardLayoutStyle.swift— stacked/split/photo
Protocols (POP)
BusinessCard/Protocols/BusinessCardProviding.swiftBusinessCard/Protocols/ContactTracking.swiftBusinessCard/Protocols/ShareLinkProviding.swift
State
BusinessCard/State/AppState.swift— central state containerBusinessCard/State/CardStore.swift— card CRUD, selection, watch syncBusinessCard/State/ContactsStore.swift— contacts, search, received cards
Services
BusinessCard/Services/ShareLinkService.swift— share URL helpersBusinessCard/Services/WatchSyncService.swift— App Group sync to watch
Views
RootTabView.swift— tabbed shellCardsHomeView.swift— hero + card carouselCardEditorView.swift— create/edit cards with PhotosPickerBusinessCardView.swift— card display with photo and social iconsShareCardView.swift— QR + share actions + track shareCustomizeCardView.swift— theme/layout controlsContactsView.swift— tracking list with sectionsContactDetailView.swift— full contact view with annotationsQRScannerView.swift— camera-based QR scannerQRCodeView.swift— wrapper for Bedrock's QRCodeImageViewWidgetsView.swift— preview mockups
Design + Localization
BusinessCard/Design/DesignConstants.swift— extends BedrockBusinessCard/Resources/Localizable.xcstringsBusinessCard/Localization/String+Localization.swift
watchOS
BusinessCardWatch/BusinessCardWatchApp.swiftBusinessCardWatch/Views/WatchContentView.swiftBusinessCardWatch/State/WatchCardStore.swiftBusinessCardWatch/Resources/Localizable.xcstrings
Localization
- All user-facing strings are in
.xcstrings. - Supported locales: en, es‑MX, fr‑CA.
- Use
String.localized("Key")for non-Text strings.
Testing
BusinessCardTests/BusinessCardTests.swiftcovers:- vCard payload formatting
- Card CRUD operations
- Contact search and filtering
- Social links detection
- Contact notes/tags
- Follow-up status
- vCard parsing for received cards
Known Stubs / TODOs
- Apple Wallet and NFC flows are alert-only placeholders.
- Share URLs are sample placeholders.
- Widget previews are not WidgetKit extensions.
- See
ROADMAP.mdfor full feature status.
If You Extend The App
- Add new strings to the String Catalogs.
- Use
Design.*from Bedrock for spacing, opacity, etc. - Add app-specific constants to
DesignConstants.swift. - Keep view logic UI-only; push business logic to state classes.
- Prefer protocols for new capabilities.
- Add unit tests for new model logic.
- Update
ROADMAP.mdwhen adding features.