PlanBoard — Hardening Checklist
1. Functional correctness (per platform)
- iPhone: navigation, drag, card detail sheet all work
- iPad: split-view, drag between columns, inspector all work
- Mac: sidebar, toolbar, command menu, multi-window, menu bar all work
- CloudKit sync round-trips across all three within 5 s
- Widget on iOS updates within 30 min of card change
- Menu bar on Mac updates immediately on card change
- AppIntents work in Shortcuts on every platform
2. Cross-platform smell tests
- Mac app feels like a Mac app (passes a Mac user’s first-impression test)
- iOS app does not show Mac-only chrome (toolbars, command menus)
- iPad app uses split-view, not a phone-style stack
- No “iOS popover on Mac” antipatterns
- Keyboard navigation works on Mac (Tab cycles focus, arrows navigate lists)
- Right-click context menus on Mac match left-side gestures on iOS
3. Platform decision record
-
Every
#if os(...)block in the codebase has an entry in platform-decision-record.md - Each entry has a date, file reference, and one-line rationale
- Entries reviewable in PR diffs
4. Security & privacy
- No analytics, no third-party trackers
- Privacy Nutrition Label: User Content (Linked, Not used for tracking)
-
PrivacyInfo.xcprivacydeclares accessed APIs with reasons - No force-unwraps
-
All Keychain access uses appropriate
kSecAttrAccessibleflags
5. Performance
- Cold launch < 1.5 s on each platform
- CloudKit sync latency < 5 s when online
- Card drag-and-drop is smooth at 60 FPS
- Widget refresh < 500 ms
- Mac menu bar popover opens < 100 ms
- Memory peak with 5 boards × 50 cards: < 80 MB
6. Accessibility
- VoiceOver works on all three platforms
- Dynamic Type up to accessibility5
- Keyboard-only navigation works on Mac
- Color contrast WCAG AA
- No motion-required interactions
7. App Store Review (per platform)
- iOS: screenshots, privacy policy, App Review notes
- macOS: notarization passes, App Review notes
- Both: privacy nutrition label accurate
- Both: same bundle ID (acceptable; different is also fine)
- Test the upgrade path: install old version, install new version, data preserved
8. Documentation
- README with screenshots from all 3 platforms
- Architecture diagram showing the 3-layer view sharing
- Platform decision record committed
- ADRs reflect shipped build
- Interview talking points rehearsed
- Demo video showing universal sync across devices
Sign-off
Read interview-talking-points.md, then platform-decision-record.md.