sweet-todo is a simple todo application delivered as a single page design. Its product intent is narrow and complete: one person opens one page, adds todo items, sees their todo items on that page, and marks todo items as complete. The design constraint is explicit and hard — the product is a single page, and the design must remain simple.
The audience is a single individual capturing and clearing small tasks in a spare minute. The page is the whole product: there is no navigation, no second destination, and no account requirement. The experience should read as a beautifully printed notebook page — confident, unhurried, instantly legible — rather than a dashboard or a feature-rich productivity suite.
sweet-todo is a one-page web application. The single page, Todo, is the public entry surface and the only destination. It anonymously hosts the complete accepted lifecycle: adding a todo item, viewing the current list of todo items, and marking a todo item complete.
Current delivery comprises three provisioned services:
Actors:
Accepted behavior in scope: add a todo item; view todo items on the single page; mark a todo item complete; see the remaining count. Access is anonymous — no identity, sign-in, or account is required or established, because the accepted journeys do not require private per-user continuity and the page contract specifies access requirement none.
Narrow exclusions: no additional pages, no navigation or menu, no editing or deleting of todo items, no due dates, priorities, tags, projects, or categories, no sharing or collaboration, no notifications, no accounts or authentication, no reporting or analytics surfaces.
Removed from scope
The product is delivered entirely as one first-party page owned by the application. The Todo page is anonymously reachable: a visitor lands on it and can immediately add, view, and complete todo items without establishing identity. Because the accepted scope contains no per-user private state, no commitment bound to a specific participant, and no entitlement or value transfer, no application-owned identity is introduced. There is no sign-in, registration, invitation, or provisioning flow, and none is implied by the page.
The frontend renders the page and its states; the backend exposes the todo item APIs; the database persists todo items so the list is present on return. All three are current. Nothing in the accepted thread establishes a future horizon; the boundaries above are exclusions, not deferred work.
The single page of the product, anonymously accessible, hosting the full add / view / complete lifecycle.
Information and state
Primary actions
Supporting actions
Domain entities
Component responsibilities
Each requirement is stated as a story point with provenance, lifecycle facts, and observable acceptance.
FR-1 — Add a todo item (explicit)
As a Todo user I should add a todo item so that a task I need to do is captured on the page.
FR-2 — View todo items on the single page (explicit)
As a Todo user I should view my todo items on the single page so that I can see everything I have to do in one place.
FR-3 — Mark a todo item complete (explicit)
As a Todo user I should mark a todo item complete so that I can see what I have finished.
FR-4 — See the remaining count (required_inference)
As a Todo user I should see how many todo items remain so that I know at a glance what is left.
FR-5 — Persist todo items across visits (required_inference)
As a Todo user I should find my todo items still on the page when I return so that the list is a durable record of what I have to do.
Product context. A single individual with a short list of small tasks, opening sweet-todo in a spare minute on whatever device is at hand. There is no team, no shared workspace, and no account — the page is a personal notebook page.
Primary goal. Capture a task the moment it comes to mind, see the whole list at a glance, and cross items off with a small, satisfying gesture.
Distinct accepted responsibilities.
Relevant inputs and decisions. The task text typed into the composer; the decision of which item to mark complete; whether to retry after a failed add or completion.
Interactions with other accepted participants. None. The Todo user is the only active human persona; the frontend, backend, and database serve the user's actions without requiring any response from another person.
Observable success. The new item appears in the list and the input clears; completed items show a vermilion tick and a strike rule; the footer numeral matches the number of open items; the list is still there on return.
What makes this role distinct. The role's entire work is a three-gesture ritual — type, submit, cross off — on one page. There is no administration, no configuration, no collaboration, and no permission to reason about; the design, not the feature set, carries the experience.
The creative direction is authoritative for this section. Muse: Tobias van Schneider; headline: "Things to do." — editorial swagger for a one-page todo: oversized type, warm paper, one hot red.
Colour tokens (light mode)
| Role | Hex | Use |
|---|---|---|
| Background | #F4F0E8 | Warm off-white paper ground |
| Surface | #FBF8F1 | Barely-lighter card surface holding the todo list |
| Text | #141210 | Near-black ink for all type |
| Primary | #E0351F | Hot vermilion: headline full stop, Add button, active checkbox, count numeral |
| Accent | #E0351F | Same single vermilion — no second accent |
| Muted | #8A8073 | Metadata, hairline rules, completed-task strikethroughs |
No gradients, no second accent colour, no blue, indigo, or violet anywhere.
Typography
clamp(48px, 11vw, 152px); section title 40/28; task text 20/18; UI labels 13px small caps tracked +0.12em; body 17/16. Line-height 0.9 for display, 1.5 for body.Shape language. Sharp corners everywhere — zero border-radius on cards, inputs, and buttons. Hairline 1px rules in muted grey divide the list; the Add control is a solid vermilion rectangle with square edges. Generous whitespace, no shadows, no pills, no rounded blobs.
Layout. Asymmetric editorial grid on a 12-column frame: the headline block occupies columns 1–9 and bleeds its baseline rule full width; the composer sits in columns 1–7 as a single underlined input with the square red Add button flush right; the list below is a stack of full-width rows with a left checkbox, task text, and a right-aligned small-caps timestamp, each separated by a hairline. A thin footer line holds the remaining-count numeral in large Playfair. Single column at 375px, composer and list full-bleed with 24px gutters.
Imagery. No photography and no illustration — typography and the paper ground are the image. Optional single gesture: an oversized vermilion full stop after the headline, and a faint warm grain texture on the background at 3% opacity.
Readability constraint. Headlines, labels, numbers, task text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit; no element covers any part of them. Decoration and texture may bleed or overlap, but never readable text or controls.
The first screen is a printed page, not a SaaS hero. A near-full-viewport warm paper ground (#F4F0E8) carries an enormous Playfair Display headline — "Things to do." — anchored bottom-left at clamp(48px, 11vw, 152px), spanning columns 1–9, with the full stop in vermilion #E0351F. A single hairline rule runs edge to edge beneath it. Immediately under the rule, left-aligned, sits the composer: one underlined input with the square vermilion Add button flush right — the only interactive element above the fold. There is no subheadline, no centred stack, no button pair, and no gradient. The list begins below the fold on desktop, partially visible as a cue to scroll.
Signature moves, all recomposing accepted content and controls:
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
prefers-reduced-motion, the headline and rule appear immediately in their final positions, the Add button shows its label without the hover swap animation, and completion applies the muted grey and strike-through instantly with no draw. All content and controls remain fully usable and whole.prefers-reduced-motion.
Enter to add · one line, one task
Book the dentist for a check-up
Feb 11 · 09:20Post the signed lease to the landlord
Feb 11 · 09:14Water the fig tree
Feb 10 · 07:45Reply to Mira about Saturday
Feb 10 · 18:02 · DoneThe rest can wait

Enter to add · one line, one task
Book the dentist for a check-up
Feb 11 · 09:20Post the signed lease to the landlord
Feb 11 · 09:14Water the fig tree
Feb 10 · 07:45Reply to Mira about Saturday
Feb 10 · 18:02 · DoneThe rest can wait
No comments yet. Be the first!