windy-todo is a simple todo application delivered as a single page design. The product intent is narrow and explicit: one page on which a person can add todo items and view their todo items. There is no multi-page navigation, no account system, and no workflow beyond capturing a task and seeing it in the list.
The audience is a single everyday person — the "Todo user" — who wants to capture tasks and review them in one calm place. The design brief frames this as a small daily ritual that should feel light, optimistic, and tactile rather than administrative.
windy-todo is a single-page web application. The page is the entire product surface: it introduces the todo app and hosts both the add-item interaction and the list of todo items. The page is reachable without any identity step; no durable application-owned identity or account boundary is established by the source.
Actors
Accepted behavior
Ownership and delivery
The single page, named Todo, is the only destination. It is a custom first-party page owned by the application, reachable without an access requirement. Adding and viewing todo items both happen on this page. The backend and database support the page's behavior; they are not separate user-facing destinations.
Exclusions
No capabilities beyond adding and viewing todo items are established by the source. No authentication, accounts, sharing, collaboration, notifications, scheduling, categories, or multi-page navigation are part of the current product.
Removed from scope
windy-todo is a first-party, single-page web product. The whole experience lives on one page: the visitor lands on it, sees the todo list, types a task into the input, adds it, and sees it appear in the list. There is no sign-in, no separate settings area, and no second screen.
The frontend React application renders the page. The shared FastAPI backend serves the API the page uses to persist and retrieve todo items, and MariaDB stores them. These services exist to make the single page work; they do not introduce additional user-facing surfaces.
Everything described in this document is current. No future-horizon requirements were stated by the user.
The single page of the product. It introduces the todo app and hosts both adding and viewing todo items.
Information and state
Primary actions
Supporting actions
Domain entities
Component responsibilities
States
FR-1 — Single-page delivery (explicit) As a Todo user, I should use the todo app entirely on one page, so that I never have to navigate between screens.
FR-2 — Add a todo item (explicit) As a Todo user, I should add a todo item by typing its text and submitting, so that the task is captured.
FR-3 — View todo items (explicit) As a Todo user, I should see my todo items listed on the single page, so that I know what I have captured.
FR-4 — Toggle completion (required_inference) As a Todo user, I should mark a task complete or incomplete via its circular checkbox, so that the list reflects what is done.
FR-5 — Delete a task (required_inference) As a Todo user, I should remove a task via its delete glyph, so that the list stays accurate.
FR-6 — Clear completed tasks (required_inference) As a Todo user, I should clear all completed tasks via the "clear done" link, so that finished work leaves the list in one action.
Product context. A single everyday person using windy-todo as a small daily ritual. They open the one page, capture what they need to do, and glance at what remains. The product is personal and low-stakes; there is no team, no sharing, and no administrative overhead.
Primary goal. Capture tasks quickly and see them in one calm place, so nothing is forgotten and finishing a task feels satisfying.
Distinct accepted responsibilities.
Relevant inputs and decisions. The task text they type; whether a task is done; whether to remove a task or clear finished ones.
Interactions with other participants. None — the Todo user is the only human actor. The frontend, backend, and database support their actions without requiring any response from another person.
Observable success. Their tasks appear in the list immediately after adding, completion is visibly reflected, and the remaining count is accurate.
Muse and headline. Karim Rashid — sensual pop minimalism for a todo list that feels good to finish.
Mode. Light mode only.
Colour tokens
| Role | Hex | Usage |
|---|---|---|
| Background | #FBE9F4 | Bubblegum-pink ground filling the page |
| Surface | #FFFFFF | Glossy white cards and pill input |
| Text | #1E1B2E | All readable text on white and pink |
| Primary | #F0338C | Add button, checked-task fill, one hero accent blob |
| Accent | #B6F03A | Completion moment and small glossy blob |
| Muted | #7A6E86 | Secondary metadata only (counts, timestamps) |
Typography
-0.02em, soft rounded terminals.clamp(2.5rem, 6vw, 4.5rem) (40px mobile, 56px tablet, 72px desktop).Shape language. Capsules and blobs: pill input and buttons (border-radius: 999px), task rows as soft capsule cards (border-radius: 28px), section edges curved with a single large organic blob cut. Glossy white-to-transparent sheen on the primary button and one floating blob. No sharp corners, no hairline borders — separation comes from soft shadow and colour.
Layout. One centred column, max-width 720px, inside a soft pink field with generous breathing room. Top: chip row (wordmark left, "today · N" count chip right). Below: oversized lowercase wordmark, then full-width pill input with magenta circular add button pinned right, then stacked capsule task cards. Bottom: thin footer line with remaining count and "clear done" link. Everything stacks to a single column at 375px with the input and button wrapping to their own row.
Imagery. No photography. Two or three glossy CSS/SVG blobs — one large pink-to-magenta blob bleeding off the top-right, one small lime blob near the input, one white glossy capsule highlight — rendered as soft radial-gradient shapes with a specular streak. A tiny rounded checkmark glyph drawn as a thick stroke.
Accessibility. Readable text and controls stay whole at 375px, 768px, and 1280px; decoration may bleed off edges but never covers text or controls.
The first screen is a full-bleed bubblegum-pink field (#FBE9F4) with a large glossy magenta blob bleeding off the top-right corner and a small lime blob tucked behind the input. A small chip row sits at the very top: the wordmark mark on the left and a lime "today · N" count chip on the right.
The dominant element is an oversized lowercase "windy." wordmark in Comfortaa, set flush-left in a 720px column at clamp(2.5rem, 6vw, 4.5rem), sitting directly above a full-width white pill input with a magenta circular add button pinned to its right edge. The input is the hero, not an illustration. Below it, the first three task capsules peek into view.
There is no centred headline, no subtext paragraph, no blue button, and no gradient blob behind a centred stack. The composition is a single confident, flush-left column that carries the whole identity.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief
cubic-bezier(0.34, 1.56, 0.64, 1) on check and add; a glossy white specular sweep across the add button on hover; one floating blob drifting slowly behind the hero.prefers-reduced-motion removes the blob drift and the morph, replacing them with instant state changes; the static arrangement remains fully usable.prefers-reduced-motion, blob drift and morph are removed and replaced with instant state changes.#1E1B2E on white and pink is well above AA at body size; muted mauve #7A6E86 is used only for secondary metadata, never primary copy.frontend, backend, and database services.cubic-bezier(0.34, 1.56, 0.64, 1) used on check and add.
Press Enter to add

Press Enter to add
No comments yet. Be the first!