Backend / dev:
- Bind dev server to 0.0.0.0 and allow Tailscale MagicDNS + tailnet-IP origins
in ALLOWED_HOSTS / CORS / CSRF so the app is reachable over Tailscale
- Unified, idempotent dev launcher (Django + media + shadow watch), hot reload,
no manual compiles
Frontend:
- Migrate fetches to re-frame :http-xhrio with failure handling; surface
network / load / save errors where the user expects them
- Extract markdown + link formatting into tl.md: parse/serialize round-trip
(recursive chip serialization fix), block markdown (headings/lists/paragraphs)
- Timeline-opening links: navigate the stack to any reachable timeline;
autocomplete lists all timelines (root included, orphans dropped) with a live
preview that pushes the stack and reverts on commit/cancel
- Annotation pane shows the current context's description with edit-in-context
(drops into the parent timeline for marks, pops back when done) + root content
- Fixes: deep-link playhead seek, replay-from-end, mobile input zoom, notch
safe-area insets, autofocus the content field, freeze form to snapshot context
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>