task-tracker is a simple task tracker website. It exists so that one person can keep a calm, quick, ordered view of their own to-dos: see what is still to do, add new tasks, mark tasks complete, and remove tasks they no longer need. The product is deliberately small — the requester specified that the website has only 2 pages: a Landing page and a tasks page — and every requirement in this document fits inside that boundary.
The audience is an individual who wants a fast, quiet place to manage their own task list, with no dashboards, no sidebars, and no account ceremony. The task list is durable: it survives across sessions, so returning to the tasks page shows the same list the user left.
task-tracker is delivered as a two-page web application:
Both pages are openly reachable; there is no sign-in, registration, or account management anywhere in the product. Task data is stored durably by the application so the list persists across sessions.
The single active human actor is the Task tracker user. The application itself owns persistence and the mechanical state changes of a task (created, completed, removed).
Delivery uses three provisioned services: a frontend React application serving the two pages, a shared backend FastAPI process exposing the task APIs, and a database (MariaDB) holding the application-owned task records. The backend is the only service that talks to the database; the frontend talks only to the backend.
Removed from scope
The requester asked for a simple task tracker with exactly two pages. That is the whole current product: a public Landing page that introduces the tracker and routes the visitor to the tasks page, and a tasks page where the user does the actual work of managing their list.
Access is intentionally open. Neither page requires identity, and the product does not create accounts. Because the task list must survive across sessions, the application stores tasks durably on the server side; the user's list is the application's own data, not a per-account record. Nothing in the accepted requirements asks for differentiated permissions, sharing, or multi-user separation, so none is introduced.
Everything described in this document is current. No future-phase capabilities are committed.
Information and state
Primary action
Supporting actions
Domain entities
Component responsibilities
States
Information and state
Primary actions
Supporting actions
Domain entities
Component responsibilities
States
FR-1 — Two-page website (explicit) As a Task tracker user, I should get a task tracker website that consists of exactly two pages — Landing and the tasks page — so that the product stays as simple as requested.
FR-2 — Landing entry and link to tasks (required_inference) As a Task tracker user, I should land on a public Landing page that explains the tracker and links to the tasks page, so that I know what the product does and can start.
FR-3 — View tasks (explicit) As a Task tracker user, I should see my tasks on the tasks page, so that I know what I still need to do.
FR-4 — Add a task (explicit) As a Task tracker user, I should add new tasks to my task list, so that I can record what I need to do.
FR-5 — Mark a task complete (explicit) As a Task tracker user, I should mark tasks as complete, so that my list shows what is done.
FR-6 — Remove a task (explicit) As a Task tracker user, I should remove tasks I no longer need, so that my list stays relevant.
FR-7 — Durable task storage (required_inference) As a Task tracker user, I should find my task list unchanged when I come back, so that the tracker is dependable.
Product context. An individual who wants a calm, quick place to see and manage their own to-dos. They arrive at the Landing page with no account and no setup, read what the tracker does, and move to the tasks page to work on their list.
Primary goal. Keep a short, accurate list of what they need to do — add what comes up, mark what is finished, and delete what no longer matters — and find that list intact when they return.
Distinct accepted responsibilities.
Relevant inputs and decisions. The task text they type; which task to complete; which task to remove. They decide when the list is accurate enough to leave.
Interactions with other participants. None beyond the application itself. There is no sharing, assignment, or second human participant in the accepted behaviour; the application stores and returns their list.
Observable success. The tasks page shows exactly the tasks they expect, with correct completion states, and the same list is present on their next visit.
The creative direction is authoritative: Systematic clarity, after Massimo Vignelli — order, reliability, quiet confidence.
Colour tokens (light mode)
#F7F5F0 (warm paper ground)#FFFFFF (pure white task rows and hero panel)#111111 (black type dominates)#E63946 (Vignelli red — primary CTA, active nav underline, incomplete status dot)#F4C430 (mustard — only a thin 4px rule or the completion checkmark fill)#7A7A7A (secondary metadata)Typography
-0.03em; uppercase for section labels and page titles, sentence case for the oversized landing headline.clamp(56px, 9vw, 128px); section headings 32–48px; body 16px; micro-labels 11px uppercase with 0.12em tracking.Shape language
#111 rules separate sections and task groups.Layout
Imagery
The Landing page is a left-aligned type composition, not a centred SaaS hero. A 900-weight Archivo headline at clamp(56px, 9vw, 128px) occupies the left 8 of 12 columns across three lines — "Your tasks. / In order. / Done." — with a 4px mustard rule running the full viewport width beneath it. To the right, a single flat white panel shows a miniature static task list: three rows with black text, one red status square, one struck-through completed row, rendered as a diagram with hairline rules and no device frame or shadow. The primary CTA is a solid red rectangle (#E63946) with a white uppercase 12px label pinned to the bottom-left of the type block. No subtext paragraph, no gradient, no floating cards.
The tasks page carries the same logic as a subway line map: TO DO and DONE labels in 11px uppercase with 0.12em tracking, each preceded by a full-width 1px black rule, with flat white rows beneath.
Interaction Model: Static (direction) Motion Tempo: still Hero Dimensionality: flat
Landing Hero Motion Brief
Tasks page motion
clamp(...)) to fit; no other element covers any part of them. Decoration may bleed or be cropped, but never readable text or controls.prefers-reduced-motion, the landing fade is removed and all state changes render immediately in their final arrangement.frontend, backend, database — where the frontend depends on the backend and the backend depends on the database.
task-tracker
A calm, quick place to see and manage your own to-dos.
Add, complete, remove— one list, in order
Type what needs doing and record it in the list.
Check a task off — the status square turns mustard and the row moves down.
Delete finished or abandoned tasks so the list stays relevant.

task-tracker
A calm, quick place to see and manage your own to-dos.
Add, complete, remove— one list, in order
Type what needs doing and record it in the list.
Check a task off — the status square turns mustard and the row moves down.
Delete finished or abandoned tasks so the list stays relevant.
No comments yet. Be the first!