| Interaction | Yellow |
A distinctive swipe and turn deck. The carve haptic language (src/lib/haptics.ts, used in 45 files). Reduce Motion is honored in Swipe (swipe.tsx:122, SwipeCard.tsx:193). Native stack with swipe-back (app/(app)/_layout.tsx). |
The first card turn stalled 130 to 280 ms; the fix is WIP (#346). The tab bar and sheets are drawn in JavaScript (components/TabBar.tsx, Sheet, Takeover), so iOS won't move them into the Duo band or out of the fold. No peek or context menus. Keyboard handling is per screen (KeyboardAvoidingView in 2 files, Spotlight's fix in #335). |
| Visuals and Graphics | Yellow |
A cohesive identity: runes, ochre on basalt, poster palettes and a single glass recipe (brand-identity.md §4–6). |
Glass is an expo-blur approximation, because iOS 26's native glass drew nothing (Glass.tsx:33-37, #332). Layout bugs on the title page, the Me page and while scrolling (#332 comment). Trailers and the map are web views. |
| Innovation | Red |
Nothing uses the newest Apple technology yet. On the Duo's inner display Saga runs in a black frame until it builds with the iOS 27.1 SDK (#347 §5). |
The Duo spread plus hinge-aware movie night (#347) is the one credible path. |
| Delight and Fun | Yellow |
The card turn, chapters, runes and stamps. Strong personality. |
Blippo+ shows that personality reaches the finals but doesn't win on its own. |
| Inclusivity | Red |
225 accessibilityLabels. Button equivalents for every swipe. Reduce Motion in Swipe. |
Dynamic Type isn't capped or checked; only Icon.tsx:244 opts out (#332). Reduce Transparency isn't handled anywhere (zero hits), although brand-identity.md §6 says it falls back to granite. VoiceOver custom actions exist only on DismissableRow.tsx:131, not the card. Swipe outcomes are coded by color. US English only. |
| Social Impact | Not a fit | Not pursued. |
| Outside the app | Red |
No associatedDomains in app.json, so links open Safari. No expo-notifications, widgets, Live Activities, App Intents or Spotlight indexing (#61). The share sheet is only used for profiles (lib/share-profile.ts:74). |
expo-widgets is stable in SDK 56 and later. expo-app-intents is alpha in SDK 58. |
| iPhone Duo | Red |
orientation: "portrait" and supportsTablet: false (app.json). Layout already follows the window (27 uses of useWindowDimensions, Uniwind breakpoints). |
Needs SDK 58 and Xcode 27.1, a Spread primitive, the rail in the band, fold-safe sheets and a hinge module (#347). |
| Apple TV | Yellow |
The same app built on react-native-tvos with focus on Tap/Button. Checked on the simulator only, on 2026-10-06 (docs/tv.md). TV v1 (#344) is on a break and aimed at Google TV and Roku. |
Never driven with a real Siri Remote. Trailers and the map don't open. No Top Shelf, no tvOS store path, no phone-to-TV handoff beyond sign-in. |
| Performance and offline | Yellow |
A persisted query cache paints Me, Library and preferences at once on a cold start (lib/query-client.ts:83-93). Session startup works offline (contexts/auth.tsx:115). |
No measured launch-time or 120 Hz budget on device. FloatingBar fades a blurred parent (#332 comment). |
| iPad | Later |
supportsTablet: false. |
Once the Duo's regular-width spread exists, iPad mostly comes with it. Decide after Phase 2. |