A Turkish, independent anime tracker that keeps its catalogue in a local SQLite database and watch progress in versioned, validated browser storage. Uses deterministic generated cover art instead of licensed posters, and is verified end to end with Vitest unit tests plus headless Playwright flows.
Next projectAdaptive Router for AgentsSearch Turkish and romanized titles, open a series, track per-season episode progress, advance an episode with one click from the list, score 1–10, set a watch status, and filter a personal list. Recently updated entries surface first.
Cover art without licensing. Rather than hotlink copyrighted posters, each series carries a poster_motif and a palette index, and a DataPoster renderer turns that pair into a deterministic cover. The same series always draws the same image, the visual identity stays coherent, and the project carries no image-licensing exposure.
The database is the only source of truth. Catalogue data never appears as a TypeScript array, JSON blob or component-level object; it is reached only through a server-side catalogue repository, and reads are cached with explicit cache tags that are invalidated after catalogue mutations.
The guest list lives in a versioned localStorage schema that is validated on read, with an explicit fallback path for corrupt storage — smoke-tested rather than assumed.
The project carries a written content-voice contract: functional copy stays literal and direct, expressive language is rationed to roughly one sentence per screen, and anime metaphors are deliberately kept out of navigation, buttons, filters and validation messages. Every user-facing string is resolved from a typed Turkish locale dictionary — none are hardcoded in components, routes, repositories, hooks or tests.
In development. The current slice is a working desktop tracker on a first-party curated catalogue; expanding beyond that catalogue is the open product decision.
better-sqlite3, Next.js Cache Components with tagged server cachelocalStorage schema