Skip to content
one-more-refactorPublic

About

flick's web client — a Svelte 5 speed-reading app; the reference implementation of the flick API.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

flick-web

kind: app status: live

ci release commits since license

The web client for flick — Svelte 5 + Vite, built with Bun. A pure client of the flick API; the contract is CONTRACTS.md.

Since 1.2 the marketing landing is native: the same Svelte app, the same i18n engine (en/de/es), the same design tokens — served at / to signed-out visitors, with /science and the legal pages as plain routes. The separate Astro site (and the brief /app/ split) is history; landing motion is Web Animations API only, so the AGPL story stays clean.

the reader, playing

  • Reader — frame-accurate rAF scheduler, fixed ORP pivot, scrubber, WPM control, sentence stepping, context ribbon.
  • Library — paste, PDF, EPUB, .txt, Kindle clippings, or a URL; full-text search; tags; trash with restore.
  • Habit — streaks, daily goal, stats, a year-in-review "wrapped", friends + shared links.
  • Guest-first — read with no account; sign up later and your library merges in.
  • Craft — six themes × light/dark, i18n (en/de/es), installable PWA.

themes

How it's shaped

No router library — one state machine in App.svelte, with URL routing + back-button support layered on:

stateDiagram-v2
    [*] --> landing
    landing --> library : Start reading (mints a guest)
    landing --> auth : log in
    auth --> onboarding : new account
    auth --> library : returning
    onboarding --> library : done / skip
    library --> reader : open a book (/read/id)
    reader --> library : esc / back
    library --> stats
    stats --> library
    library --> premium
    premium --> library
Loading

The reader never computes pacing — it plays server timelines on a rAF accumulator:

flowchart LR
    api["GET /api/books/:id/timeline"] --> tl["timeline<br/>[text, orp, weight] …"]
    tl --> sched["rAF accumulator<br/>dwell = weight × 60000 / wpm"]
    sched --> word["ORP word<br/>pivot fixed, accent colored"]
    sched -- "~5 s + pause/exit" --> ckpt["PUT position + words read"]
Loading

Design law

Monospace only. Square corners. One accent at a time. No gradients, glows, or shadows. Motion is earned (Web Animations API, not a library — even on the landing).

Develop

Needs the backend on :8484 (Vite proxies /api).

bun install && bun run dev   # http://localhost:5173
bun run check && bun run build

Releases: bump package.json, tag vX.Y.Z, push the tag — CI verifies the version matches, runs the checks, and publishes the release.

License

AGPL-3.0-only.


one more

part of one more — small tools that keep their data in plain files and never ask you to make an account.

About

flick's web client — a Svelte 5 speed-reading app; the reference implementation of the flick API.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages