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.xcprivacy declares accessed APIs with reasons
  • No force-unwraps
  • All Keychain access uses appropriate kSecAttrAccessible flags

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.