frozen-lunar is a single-page personal to-do web application. Its product intent is narrow and complete: an everyday user opens one page, adds tasks, marks tasks complete, and deletes tasks, while the list persists in the browser on that device. The interface uses a light theme throughout. There is no login and no backend.
The audience is the individual personal user — someone who wants a light, calm, local-only tool for keeping track of what needs doing. The product is domestic and tactile rather than corporate: getting things done should feel like arranging objects on a warm wooden table, not operating a dashboard.
The entire product is one page. All interaction — adding, completing, deleting, filtering, and reading the running counts — happens on that page, anonymously, with no account and no server.
frozen-lunar is delivered as a single custom web page, 待办事项单页, which is also the anonymous public entry surface. A visitor lands directly on the working to-do list; there is no gate, no sign-in, and no separate landing screen.
Actors
Accepted behavior
Ownership and exclusions
All product behavior is owned by the single page. There is no authentication surface, no account management, no server API, no database, and no multi-device sync. These are explicit exclusions, not deferred features.
frozen-lunar is a local-only, anonymous, single-page tool. The user's data lives in their own browser; nothing is transmitted anywhere. Because there is no login and no backend, there is no identity establishment step, no session, and no protected destination — the one page is fully usable on first visit.
The delivery boundary is deliberately tight:
The design language is warm modernism in the spirit of Charles & Ray Eames: a cream ground, warm paper surfaces, walnut hairlines, teal as the primary action and completed-state colour, and tomato as the single hot accent. The interface itself is the main image, treated like a mid-century printed form.
Not applicable — no reference directive supplies a content_source.
The single page of the product, and the anonymous entry surface. It is a single centred column, max-width 760px, on a cream ground (#F4EDE1), with a wide 96px top margin on desktop and a 24px margin at 375px.
Information and state
Primary actions
Supporting actions
Domain entities
id, title, completed (boolean), createdAt (timestamp). Persisted as an ordered collection in local storage.Component responsibilities
clamp(44px, 9vw, 112px), with a single tomato pill "Add a task" pinned beneath the headline at the left edge. On desktop, a ruled stat panel stack sits to the right.States
prefers-reduced-motion, all transitions are removed and rows are static; the hero's 6px scroll drift is disabled.FR-1 — Single-page delivery (explicit) As a 待办事项使用者, I should reach the entire product on one page, so that I never navigate away to do my work.
FR-2 — Add a task (explicit) As a 待办事项使用者, I should add a task by entering a title, so that new work is recorded in my list.
FR-3 — Mark a task complete (explicit) As a 待办事项使用者, I should mark a task complete, so that my list reflects what is done.
FR-4 — Delete a task (explicit) As a 待办事项使用者, I should delete a task, so that items I no longer need leave my list.
FR-5 — Light theme (explicit) As a 待办事项使用者, I should see the product in a light theme, so that it feels calm and readable.
FR-6 — Browser-local persistence (explicit) As a 待办事项使用者, I should have my list saved in my browser, so that it is still there when I return on the same device.
FR-7 — No login, no backend (explicit) As a 待办事项使用者, I should use the product without signing in, so that I can start immediately.
FR-8 — Running counts (required_inference) As a 待办事项使用者, I should see how many tasks are open, done, and total, so that I can read my progress at a glance.
FR-9 — Filter the list (required_inference) As a 待办事项使用者, I should filter the list to All, Open, or Done, so that I can focus on what still needs doing.
Product context. An everyday individual keeping a personal list of things to do. They open frozen-lunar on their own device, in their own browser, without an account. The tool is theirs alone: nothing is shared, nothing syncs, nothing is sent anywhere.
Primary goal. Keep a short, honest list of what needs doing and see it settle as items get done — with as little ceremony as possible.
Distinct accepted responsibilities.
Relevant inputs and decisions.
Interactions with other accepted participants. None. The persona is the only human actor; the browser's local storage is a system store that silently holds and restores their list. There is no counterparty, recipient, or approver.
Observable success. The list on screen matches what the user intends to do: new items appear at the top, completed items read as struck-through and italic, deleted items are gone, the counts agree with the list, and the same list is still there the next time they open the page on that device.
Constraints carried from source. No login, no backend, light theme, single page, data stored in the browser. The persona never encounters an account, a permission, or a server error.
待办事项单页 loads directly — no sign-in, no gate.待办事项单页 with at least one open task visible.待办事项单页 and hovers over (or focuses) a task row.待办事项单页 with a mixed list of open and done tasks.Muse and headline. Charles & Ray Eames — "Today, arranged." Warm modernism for a list that feels like a well-made object: warm mid-century materials and joyful colour inside strict order, kept light as explicitly requested.
Mode. Light only. There is no dark mode and no theme toggle.
Colour tokens (light mode)
| Role | Hex | Use |
|---|---|---|
| Background | #F4EDE1 | Cream ground carrying the page |
| Surface | #FFFBF4 | Warm paper for cards, add bar, stat panels |
| Text (ink) | #2B2620 | All text |
| Primary | #1F5C55 | Primary action, completed-state colour, active filter chip, teal tick and strikethrough |
| Accent | #D9502E | Single hot accent: the add button and destructive/urgent moments |
| Muted | #8A7E6D | Secondary text |
| Mustard | #E0A32E | Small category chips and thin underlines only |
| Walnut | #6E4B2A | Hairlines, rules, timestamps, outlined chips |
Proportion roughly 70% cream, 20% paper, 10% colour. Cards and the add bar sit on warm paper with a 1px walnut hairline.
Typography
clamp(44px, 9vw, 112px) anchors the hero.Shape language. Organic-modern: soft 14px radii on cards and the add bar, 999px pill for the add button and filter chips, 8px on checkboxes. Sections are separated by 1px walnut rules and thin mustard underlines; a few offset rounded rectangles behind the hero echo Eames modular panels. No glass, no blobs, no drop shadows beyond a 2px warm-paper offset.
Layout. Single column, max-width 760px, centred on the cream ground with a wide 96px top margin on desktop. Hero: a stacked display line over a full-width cream band with a small teal rule. Below it a horizontal stat strip (Open / Done / Total) as three ruled panels, then the add bar pinned above the list, then the task list as ruled rows with a checkbox, task title, small walnut timestamp, and a hover-revealed delete glyph. Filter chips (All / Open / Done) sit flush right on the same rule as the list header. Everything collapses to a single 24px-margin column at 375px.
Imagery. No stock photography. Warm flat illustration only: a small hand-drawn Eames-style geometric motif (stacked arcs and a dot grid) in teal and mustard beside the hero, a thin mustard rule pattern as a section divider, and simple pictograms for the stat panels. The interface itself is the main image, treated like a mid-century printed form.
Readability guarantee. Headlines, wordmarks, labels, numbers, cards' text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit. No other element covers any part of them. Decoration and motion may be cropped, bled, or overlapped as the direction asks, provided they cover no readable text or control.
Avoid. Bootstrap blue or indigo on white; glassmorphism, blur panels, gradient blobs; Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins; a grid of identical hover-lift cards; a centred headline + subtext + blue button hero; dark mode or graphite grounds; bouncy spring animations or confetti; photographic hero imagery.
The exhibition-catalogue cover that is also the working list.
The public entry — which is the product itself — opens on a full-width cream band, not a card. Above the headline sits a small teal geometric motif of three stacked arcs, hand-drawn in feel. Beneath it, flush left, an oversized Jost headline reads "Today, arranged." at clamp(44px, 9vw, 112px), with a single tomato pill "Add a task" pinned beneath the headline at the left edge. To the right on desktop, a ruled stat panel stack (Open / Done / Total) in warm paper with walnut hairlines balances the composition.
The effect is the cover of an Eames exhibition catalogue that happens to be a to-do list: no centred headline, no gradient, no blue button. The hero is not a separate marketing screen — the add pill in the hero is the same add action the user uses all day, and the stat panels are the same counts that update as they work. Below the band, the list reads as a printed form: ruled rows, square checkboxes, Fraunces titles, small walnut timestamps, and a delete glyph that appears only on hover or focus. Completed rows flip to italic with a teal strikethrough that draws left to right.
The concept recomposes only accepted content and controls — the add action, the counts, the list, the filters — into a poster-like arrangement. It introduces no new behavior, page, or destination.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: layered_2d
Landing Hero Motion Brief
prefers-reduced-motion, all transitions are removed, the hero drift is disabled, and rows are static; the page presents the same composed arrangement with no movement.NFR-1 — Single page (explicit) The product consists of exactly one page. There are no additional routes, screens, or navigation destinations.
NFR-2 — Light theme (explicit) The interface renders in a light theme at all times, using the cream ground and warm paper surfaces defined in Section 6. No dark mode is provided.
NFR-3 — Browser-local data only (explicit) All task data is stored in the user's browser local storage. No task data is transmitted to any server. Rationale: the source explicitly requires local storage and no backend.
NFR-4 — No login (explicit) There is no authentication, account, or session. The page is fully usable anonymously on first visit.
NFR-5 — No backend (explicit) There is no server-side component, API, or database for this product. All logic runs in the browser.
NFR-6 — Responsive readability (explicit, from design constraints) Readable text and controls stay whole and inside the viewport and their container at 375px, 768px, and 1280px. Decoration may be cropped or overlapped; readable text and controls may not.
NFR-7 — Reduced motion (explicit, from design constraints)
With prefers-reduced-motion, all transitions are removed and the page presents a usable static arrangement.
NFR-8 — Persistence resilience (required_inference) A failed local-storage read renders an empty list rather than an error page; a failed write leaves the in-memory list authoritative and surfaces a non-blocking notice. Rationale: the accepted local-persistence lifecycle must remain usable when storage is unavailable, without introducing a backend or account.
localStorage — the only data store.Constraints (explicit, binding)
Assumptions (narrow, labeled)
Explicit exclusions

2 open, 2 done, 4 total.

2 open, 2 done, 4 total.
No comments yet. Be the first!