Phase 6 — Every Radio on the Strip: Flutter full parity
23 JUL AT 10:53 PM

Phase 6 — Every Radio on the Strip: Flutter full parity

0 LOVES 1 VIEWS
The same song in every car: the app reaches full parity with the web — in-body chips, the CEWL Tags section, tappable chips, Browse/Copy/Share, and the /tags/{slug} browse screen. 47 files, 291 tests green, full live smoke. Shipped 2026-06-11.

Wolfman broadcasts; every radio on the strip plays the same song. Phase 6 tunes the app in: full interactive parity with the web, chosen deliberately by the Flutter team over render-only. Three surfaces, mirroring kontent exactly: the in-body tag block (grey chips, group-only path, tappable → the tag screen); the CEWL Tags section in the shared lightbox with Browse / Copy link / Share; and the tag browse screenPostsListPage with a TagHeader mirroring the category screen end-to-end, fed by Phase 5's GET /tags/{slug}/posts.

A mirror-shaped phase: freezed models for tag_items, one renderer case at the silent-drop dispatch (unknown kinds render nothing — the exact trap the enum posture exists for), one in-body widget, the CEWL wiring, and the browse layer — route, page param, bloc tag branch, repository call.

The prototype, on the phone

Phone-frame mockup of the app CEWL lightbox showing a Tags section with four tags above a WebLinks row

The interactive Phase 6 prototype: the shared CEWL lightbox on mobile with the Tags section above WebLinks — the exact parity target the Flutter build mirrored, down to the per-row more sheet.

What shipped — and the catches

  • 47 files, +2871/−241. Models, renderer case, in-body widget, CEWL Tags section, tappable chips via context.go('/tags/:slug'), the browse screen, and the tag branch on PostsListBloc.
  • Site-aware share links. The Copy/Share deep-link URL had a hardcoded domain baked in from an earlier feature; the sub-decision made it site-aware before it shipped.
  • The modal-Browse double-pop. Browsing from the more-sheet popped both the sheet and the lightbox in a way that broke the return path — caught in live smoke, fixed before the commit.
  • Dedup by tag.id. The CEWL aggregate dedups across blocks by id — the reason tag.id is a named part of the Phase 5 contract.
  • Proof: flutter test 291/291 green, flutter analyze zero new, and a full live smoke on the real app via Marionette — including the native macOS share sheet and clipboard verification.
American Graffiti — Tags as a Content Block (master)
American Graffiti — Tags as a Content Block (master)
Jul 23, 2026 American Graffiti
← Back to American Graffiti