infini-todo is a deliberately minimal personal todo utility delivered as a single page. The product intent is narrow and complete: one anonymous visitor opens the page, types a task, adds it, and sees their current list of tasks in that same view. There is no navigation, no account, no second screen, and no surrounding application shell.
The audience is a single person — the "Todo user" — who wants to capture tasks and review them in one place without ceremony. The design brief treats the page as a poster: oversized typography, hard colour blocks, a ruled list, and one hot accent. The product's value is the speed and small delight of getting a thought onto the page and seeing it counted.
This document is the System Requirements Document for infini-todo, prepared for Diya Trivedi.
infini-todo is a single-page web application. The page is the anonymous public entry surface and the working surface at once: it explains the app through its own poster-like composition and, in the same view, hosts the add-task input and the current task list.
Actors
Accepted behavior
Ownership and delivery
Narrow exclusions
Removed from scope
The user asked for "a simple single page design of todo." That is both a product statement and a hard structural constraint: the entire product is one page. The page is publicly reachable with no identity step, because nothing in the accepted behavior requires a durable, privately owned, resumable state tied to a person — the user adds tasks and views them in the same session on the same page.
The page carries two responsibilities that are cohesive rather than separate: it is the anonymous entry (the poster composition that presents the app) and the working surface (input plus list). Because the entry context and the working lifecycle share the same view, the same state, and the same completion outcome, they belong to one destination, not two.
Current delivery is a first-party custom UI. There are no provider-owned or external destinations, and no headless delivery. Anything beyond adding and viewing tasks — accounts, multi-page navigation, sharing, reminders, integrations — is outside the current boundary and is not implemented.
The single page of infini-todo. Anonymous, no identity required. It is simultaneously the public entry (poster composition) and the working surface (add input and task list).
Information and state
Primary actions
Supporting actions and states
Domain entities
Component responsibilities
States
FR-1 — Single-page delivery (explicit) As a Todo user I should use the entire product on one page, so that I never navigate away to do my work.
FR-2 — Add a todo item (explicit) As a Todo user I should add a todo item by entering its text and submitting, so that my task is captured.
FR-3 — View todo items (explicit) As a Todo user I should view my todo items on the single page, so that I can see what I have captured.
FR-4 — Complete a task (required_inference) As a Todo user I should mark a task complete via its 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 — Count display (required_inference) As a Todo user I should see the open and done counts, so that I know the state of my list at a glance.
Product context. A single person using a tiny personal-productivity utility. They arrive at the page with a thought to capture and no patience for setup. There is no account, no onboarding, and no second screen — the page is the whole product.
Primary goal. Get a task onto the page quickly and see the current list in one view.
Distinct accepted responsibilities.
Relevant inputs and decisions. The task text itself; whether a task is done; whether a task should be removed.
Interactions with other participants. None beyond the application, which holds the list state and renders counts and completion styling. There is no second human participant in the accepted behavior.
Observable success. Their tasks are visible as ruled rows on the single page, the counts match the list, and adding, completing, and deleting all take effect immediately in the same view.
Failure and recovery. If the user submits empty or whitespace-only text, no row is added; the field retains focus so the user can type a real task.
Failure and recovery. With no tasks, the user sees the empty ruled frame and zero counts, and proceeds to Flow 1.
Failure and recovery. Toggling the checkbox again returns the task to open and removes the strike.
Failure and recovery. No undo is specified; the removal is immediate and the user can re-add the task if needed.
The creative direction is authoritative for this section. Muse: Paula Scher. Headline idea: type as architecture for a one-page todo — a poster-sized idea on a single sheet, not a dashboard.
Mode. Light mode only.
Colour tokens (exact hex by role)
| Role | Hex | Use |
|---|---|---|
| Background (paper) | #F4EFE6 | Warm paper ground carrying everything |
| Surface | #FFFFFF | Input field and list rows only |
| Text | #111111 | Pure black type and rules |
| Primary (poster red) | #E4321B | Hero colour block, ADD button, completion strike, count |
| Accent (mustard) | #F2C51D | Thin ticker band and focus ring only — never a second dominant |
| Muted | #6F6A62 | Metadata only |
Proportions. Roughly 70% paper, 20% black type, 8% red, 2% yellow.
Typography
-0.01em, leading 0.86, set enormous and stacked so words become blocks; the word TODO may be rotated 90° as a spine label.clamp(56px, 11vw, 128px); secondary display 32/44; section labels 12px uppercase tracked +0.14em; task text 18/20; meta 13px.Shape language. Hard edges everywhere — zero border radius. Full-bleed flat colour blocks butted directly against each other, black 2px rules as dividers, diagonal band cuts between hero and list, thick black outlines on the input and button. Sticker-free, shadow-free, no glass, no gradients.
Layout. Poster grid: full-width red band at the top holding the oversized TODO wordmark bleeding off the right edge; a black spine strip down the left with the rotated label. Below, an asymmetric two-column split at 1280px (5 columns of stacked type, 7 columns of input + list), collapsing to one column at 768px and 375px with the display type wrapping to two or three stacked lines. The task list is a ruled table: a thick black rule per row, checkbox left, task text, delete glyph right.
Imagery. Typography is the image. No photography, no illustration, no icons beyond a thick-line black checkbox square and a bold ×. Optional halftone dot texture in the red band at 8% opacity as the only texture.
Readable text and controls. Headlines, wordmarks, labels, numbers, task text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit. Decoration and motion may crop, bleed, rotate, or overlap, but never cover readable text or controls. The ticker may cross the viewport edge by design because it moves; under reduced motion it wraps to a static line.
The public entry is a poster, not a SaaS hero. The top of the page is a full-bleed poster-red (#E4321B) band roughly 55vh tall. Inside it, the word TODO in Anton at clamp(56px, 11vw, 128px), uppercase, stacked on two lines and deliberately cropped by the right viewport edge, in paper-white (#F4EFE6). A rotated black spine strip runs down the left edge carrying INFINI in 12px tracked uppercase and the open/done count as vertical tracked type, like the spine of a poster book.
Beneath the red band, butted flush against it with a hard diagonal cut, sits the paper ground holding the add-task input as a thick black-outlined field on white with a solid red ADD button. There is no centred headline, no subtext, no blue, no gradient. A mustard (#F2C51D) hairline ticker under the input scrolls the count phrase continuously. The task list below is a hard-ruled table — 2px black rules between rows, no cards, no shadows, a chunky square checkbox that fills solid red with a left-to-right strike through the task text on completion.
The signature moves are: the oversized cropped TODO wordmark as the hero image; the rotated INFINI spine strip with vertical counts; the hard-ruled task table with chunky checkbox and strike; the mustard ticker; and the hard diagonal colour-block cut between hero and list. Sections collide rather than fade.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: flat
Landing Hero Motion Brief
prefers-reduced-motion, with the ticker becoming a wrapped static line.#111111 on paper #F4EFE6 and white #FFFFFF surfaces maintains full contrast for task text; the mustard accent is confined to a hairline and focus ring so it never carries body text.
2 OPEN·1 DONE·KEEP GOING

2 OPEN·1 DONE·KEEP GOING
No comments yet. Be the first!