Left is the settings screen today — stock Android widgets, default font, the everyday mixed with the technical. Right is the same settings held to the main page’s craft, with the mental model sorted: everyday up top, developer config behind “Advanced”.
Rebuild SettingsActivity in Kotlin to match the aesthetic.
+ Works pre-login, offline, no bridge
– Two design systems forever; serif/feel never quite matches; drifts again
A /settings route in the PWA, same tokens & components. Native keeps only the OS-permission bridge.
+ One design system; consistent by construction; never drifts
– Needs a small JS↔native bridge for notification access
Everyday settings in the web; a tiny native “Setup” for first-run bootstrap config (URLs, token).
+ Best of both; clean first-run
– Slightly more surface to maintain than pure web
Pick where settings live (web pre-selected — it’s the only option that makes “same craft” structural rather than a promise). Confirm the regrouping (Voice · Appearance · Notifications · Advanced) and the controls (our oxblood toggle, weight-led theme chips). I’ll also unify the oxblood token (#7a2436 everywhere; native is currently #5B1A1A). Then C locks and we revisit D · the main chat.