Add installable PWA (Option A — iPhone-first, no service worker)
Make the app installable to the iOS home screen and launch standalone (full-screen, no browser chrome, dark status bar). Add manifest.webmanifest, square app icons (ten31-app-icon.svg -> 192/512/apple-touch-icon), the apple-mobile-web-app + manifest <head> tags, viewport-fit=cover, and a pre-auth /manifest.webmanifest route. No service worker by design.
This commit is contained in:
+27
@@ -280,6 +280,33 @@ backlog. **Scoped 2026-06-19 (plan below); not yet started.**
|
||||
The comps are signed-off prototypes, **not drop-in** (Claude Design runtime, seed data) — each
|
||||
surface is re-authored in the app's React idiom and wired to the **real API**.*
|
||||
|
||||
#### Mobile PWA — installable home-screen app — BUILT 2026-06-20 (deploy pending)
|
||||
|
||||
**Option A (iPhone-first, no service worker).** Makes the app installable to the iOS home
|
||||
screen and launch **standalone** (full-screen, no Safari chrome, dark themed status bar,
|
||||
splash). Shipped: `frontend/manifest.webmanifest` (`display:standalone`, `start_url:/`,
|
||||
`theme_color`/`background_color` = the brand base `#0b1118` already reserved for this in
|
||||
`design/tokens.tokens.json`); square icons generated from `ten31-app-icon.svg` (full-bleed
|
||||
`#0b1118` + white "T31", maskable-safe) → `icon-192.png`/`icon-512.png`/`apple-touch-icon.png`
|
||||
(180); `<head>` gains `rel=manifest`, `theme-color`, the `apple-mobile-web-app-*` metas
|
||||
(status bar `black` — opaque, so content never slides under the notch), `apple-touch-icon`,
|
||||
and `viewport-fit=cover` (so the tab bar's existing `env(safe-area-inset-bottom)` clears the
|
||||
home indicator). One pre-auth backend route serves `/manifest.webmanifest` as
|
||||
`application/manifest+json` (`backend/server.py`); icons serve via the existing `/assets/`
|
||||
handler. **No service worker** — on iOS the install prompt doesn't exist regardless (A2HS is
|
||||
always manual via Share), standalone display needs none, and a cache-first SW would reintroduce
|
||||
the stale-shell class the render-smoke gate guards against. Verified: render-smoke green +
|
||||
live-curl (manifest + icons 200 pre-auth, correct content-types). **Deploy:** ships in the
|
||||
next s9pk with the mobile phases.
|
||||
- **Known minor:** the iOS status bar is fixed `black` at launch (can't follow the in-app
|
||||
light/dark toggle); a barely-perceptible seam vs the `#0b1118` app. Acceptable; dark is default.
|
||||
- **Deferred (not needed for iPhone):** a network-first service worker → Android's "Install"
|
||||
prompt + faster relaunches; the JSX-precompile build-step (ROADMAP below) is the better lever
|
||||
if relaunch speed is ever a felt problem.
|
||||
- **Adjacent issue (not PWA, noted while here):** a phone in **landscape** can exceed the 768px
|
||||
breakpoint and render the *desktop* layout; `orientation:portrait` in the manifest hints at
|
||||
this but iOS ignores it for home-screen apps. Revisit if it bites during device-testing.
|
||||
|
||||
#### Phase 8 — conform to the FINAL Claude Design mockups (mobile) — **NEXT SESSION (scoped 2026-06-19)**
|
||||
|
||||
*Phases 0–7 built the mobile surfaces + light theme. Phase 8 closes the gap to the **final** design + functional parity. Two independent agent passes ran 2026-06-19 (functional-parity + visual-conformance); their findings + the source-of-truth correction below drive this plan.*
|
||||
|
||||
Reference in New Issue
Block a user