kinetic-start is a project to build a simple calculator delivered as a single-page design. The product intent is narrow and explicit: one page that presents a working everyday calculator — number and operator entry, a computed result, and clearing — with no navigation away from that page. The audience is anyone who needs quick, accurate arithmetic and wants the tool itself to disappear behind the operation.
The design brief frames the calculator as a Braun instrument in the spirit of Dieter Rams: honest controls, a strict grid, muted warm surfaces, and a single saturated signal colour used only where the machine is speaking. The numbers are the content; decoration is excluded.
The product is a single-page calculator. There is exactly one page — Calculator — and it is the anonymous public entry: no account, no sign-in, and no identity establishment is required or provided. All accepted behavior (number entry, operator selection, result computation, clearing) happens on that one page.
Delivery is a first-party custom UI: a React frontend served to the browser, backed by the shared FastAPI backend process and a MariaDB database provisioned in the scaffold. The calculator's arithmetic is a client-side interaction on the single page; the backend and database are provisioned infrastructure and do not, by themselves, create product requirements, stored domain entities, or authentication. No future features are currently specified.
Not applicable — no reference directive with content_source was supplied.
The single page of the product, presented as a Braun-style instrument on a warm off-white workbench ground.
Information and state
clamp(56px, 9vw, 120px), never wrapping.Primary actions
Supporting actions
Domain entities
Component responsibilities
States
FR-1 — Single-page calculator delivery (explicit) As a Calculator User, I should get a simple calculator delivered as a single page, so that I can perform arithmetic without navigating anywhere else.
FR-2 — Number entry (required_inference) As a Calculator User, I should enter digits and a decimal point, so that I can build the operands of my calculation.
FR-3 — Operator selection (required_inference) As a Calculator User, I should select plus, minus, multiply, or divide, so that I can specify the operation.
FR-4 — Compute result (required_inference) As a Calculator User, I should press equals, so that I can see the computed result of my expression.
FR-5 — Clear and start over (required_inference) As a Calculator User, I should clear the calculation, so that I can correct a mistake or begin a new calculation.
FR-6 — Legible, whole controls at all viewports (explicit — design constraint) As a Calculator User, I should see the wordmark, labels, numbers, and every key fully inside the viewport and their container at 375px, 768px, and 1280px, so that I can read and press everything without clipping.
clamp() and never wraps.Product context. An everyday person who needs quick, accurate arithmetic and opens the single Calculator page to do it. They are not signing in, not managing anything, and not navigating — the page is the tool.
Primary goal. Get an accurate result from an arithmetic expression with minimal friction, on a page whose controls are honest and whose numbers are the content.
Distinct accepted responsibilities.
Relevant inputs or decisions. Which digits to enter, which operator applies, when to press equals, and when to clear. The user reads machine state from colour (orange equals and active operator) and from the expression line.
Interactions with other accepted participants. None — the calculator is a single-user, single-page tool with no counterparty, recipient, or shared state.
Observable success. The result appears in the oversized tabular readout, the expression line reflects what was entered, and the user can continue or clear without leaving the page.
Failure/recovery: If the expression is invalid (for example, division by zero), the readout shows an error indication instead of a number. The user presses clear, the page returns to the fresh state, and they begin a new calculation.
The creative direction is authoritative for this section.
Muse and headline. Dieter Rams — "Less, but better: a calculator as a Braun instrument."
Colour tokens (light mode)
#EFEBE4 (warm off-white ground)#E3DED4 (calculator body, slightly deeper warm grey)#1A1A18 (near-black ink for all numerals and labels)#D94E1F (Braun orange — reserved exclusively for the equals key and the active operator)#F2B705 (mustard — memory/clear row only)#8C877C (secondary labels, hairline rules)#1A1A18 at 12% opacityTypography
clamp(56px, 9vw, 120px) tabular; operator keys 22/20/18; labels 11px small-caps; helper copy 14/14/13. All numerals tabular-lining.Shape language
0 1px 0 rgba(0,0,0,0.06) contact line.Layout
Imagery. No photography. The instrument itself is the imagery: the keypad as a diagrammatic object, hairline rules, small-caps metadata labels, and a tiny pictogram row (plus, minus, multiply, divide) as thick 2px-line geometric glyphs. A faint 12-column grid guide may appear as a 1px rule behind the readout at 4% opacity.
The first screen is the calculator, presented like a Braun product on a workbench. The warm off-white page (#EFEBE4) holds a single 18px-radius calculator slab offset slightly right of centre, with an oversized tabular result (clamp(56px, 9vw, 120px)) bleeding to the left edge of the slab and the expression line in small-caps beneath it. The wordmark "KINETIC START" sits top-left in 11px small-caps with a 1px rule running the full viewport width beneath it, and a tiny "CALC / 001" model number at the right. There is no centred headline, no subtext block, and no button stack: the keypad is the hero, with the orange equals key as the only saturated element on the page.
Signature moves carried into implementation:
:active with a 90ms release, no shadow lift.Interaction Model: Static Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
:active with a 0ms delay and a 90ms release; the result readout updates without transition, with a 120ms opacity crossfade only when the value changes length. The outcome is the machine's state made visible — the active operator and equals key in orange, the result in the oversized readout.:active; the result still updates instantly.clamp() and never wraps; no element covers any part of a label, number, or control.prefers-reduced-motion, the page provides the identical usable static arrangement minus the readout crossfade.backend, database, and frontend services as listed in the initial scaffold inventory.#D94E1F, reserved for the equals key and the active operator.No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!