feat: build v1 Mews client: reader UI, gestures, Drift store, fetch actor

This commit is contained in:
randogoth 2026-10-11 09:33:25 +03:00
parent d5a0fcbf48
commit 01a36e8aee
56 changed files with 7287 additions and 2 deletions

13
SPEC.md
View file

@ -18,7 +18,7 @@ A Flutter browser/client for Mews Pages (see mews-spec).
## Approach
Local-first: all data is stored locally in a Drift database. Network operations (Nostr publishing, image upload) are secondary and never block local functionality.
Local-first: all data is stored locally in a Drift database. Network operations are secondary and never block local functionality.
# Architecture directives
@ -55,4 +55,13 @@ Use the `actors` package only where Dart Isolate isolation is genuinely useful:
## Persistence — Drift
- Use `drift` for all tables, DAOs, and queries.
- Keep database definitions in `database/` separate from UI code.
- Keep database definitions in `database/` separate from UI code.
## v1 reader UI
The v1 client presents one reader screen:
- An address field pinned at the top; it hides when the reader scrolls down and returns when they scroll up or reach the top.
- A swipe right goes back and a swipe left goes forward through the history stack.
- Scrolling a page fades in a FOB in the bottom-right corner; on pages that fit without scrolling it is present from the start. It opens a bottom sheet with the reader's presentation choices: typeface, text size, theme (light, dark, follow system), color variant (site, warm, cool, green, mono), and a bookmark and subscription toggle for the current page.
- Fonts are bundled. v1 ships Atkinson Hyperlegible; Verdana and Georgia follow once their font files are added to `app/assets/fonts/`. A font is one TTF plus one `fonts` entry in `app/pubspec.yaml` and one entry in `app/lib/presentation/reader/reader_fonts.dart`.