mellow-start is a small, single-page calculator design. The product intent is narrow and deliberate: one page where a person enters numbers and operators and immediately sees the calculated result, presented with the calm, "super normal" restraint of Naoto Fukasawa's design language. There is no account, no navigation, no history, and no second screen — the calculator is the page.
The audience is a general calculator user who wants fast, quiet arithmetic on one page: a student checking a sum, a shopper totalling a basket, anyone who needs a quick answer without ceremony. The experience should feel like a well-made physical object — warm paper ground, soft raised keys, one oversized ink numeral, and a single terracotta equals key as the only point of heat.
This document is the System Requirements Document for mellow-start, written for the requester, Diya Trivedi.
mellow-start delivers exactly one page, Calculator, which is simultaneously the public entry surface and the working surface. A visitor lands directly on the calculator, presses keys, and reads the result. There is no separate landing page, no sign-in, and no other destination.
The active human actor is the Calculator user, who enters numbers and operators and reads the calculated result. The system performs the arithmetic and renders the display state. The frontend React application owns the keypad, the display panel, and the input/result state; the shared FastAPI backend and MariaDB are provisioned infrastructure available to the application but are not required to carry any accepted calculator behavior, since no accepted requirement calls for persistence, accounts, or server-side computation.
Removed from scope (concepts not present in the accepted requirements; listed to prevent adjacent expansion):
mellow-start is a first-party, single-page web experience with no access boundary: the Calculator page is publicly reachable and requires no identity, because no accepted behavior creates durable actor-specific state, a commitment, an entitlement, or a value transfer that must remain bound to a particular person. Nothing is stored between visits.
All accepted behavior is current. The calculator's arithmetic, keypad, and display are the whole product. The provisioned backend and database exist as shared infrastructure for the application but carry no current calculator requirement; they are not surfaced as product behavior, and no domain entities, authentication, or data model are implied by their presence. There is no future-horizon requirement in the authoritative thread; anything beyond the single-page calculator is out of scope for this document.
The single page. A centered column on a warm paper ground, containing a small-caps label row above a wide result panel, and a 4-column keypad directly below.
Information and state
0.Primary actions
0–9: enter digits into the current number..: begin a fractional part of the current number.+, −, ×, ÷: record the current number as the pending operand, record the operator, and prepare for the second operand.=: compute the pending operation with the current number and show the result. This is the only key carrying the terracotta accent #C2703D.C: reset the display to 0 and discard any pending operand and operator.Supporting actions and controls
Domain entities
+, −, ×, ÷).Component responsibilities
#FBF9F5 holding the oversized ink numeral at clamp(48px, 12vw, 128px), flush left, with tabular figures so digits do not shift as they change.#C2703D, the single hot point on the page.States
0 immediately with no data fetch.0 with no pending operand — this is the normal first frame, not an error.= replaces the display with the computed result, which fades in over 160ms.C returns the calculator to a usable state.C always returns to 0 with no pending operand or operator, from any state including error.FR-1 — Enter numbers and operators and see the result (explicit) As a Calculator user, I should enter numbers and operators and see the calculated result, so that I can do quick arithmetic on one page.
C or a new digit entry restores a usable state.FR-2 — Digit entry (explicit, as the mechanics of FR-1)
As a Calculator user, I should press digit keys 0–9 to build the number I am entering, so that the display reflects exactly what I have typed.
0 is replaced rather than appended.C clears.FR-3 — Decimal entry (explicit, as the mechanics of FR-1) As a Calculator user, I should press the decimal point key to enter a fractional number, so that I can calculate with non-integers.
FR-4 — Choose an operator (explicit, as the mechanics of FR-1)
As a Calculator user, I should press +, −, ×, or ÷ to choose the operation, so that the calculator knows what to do with my next number.
= completes the operation.FR-5 — Compute the result (explicit, as the mechanics of FR-1) As a Calculator user, I should press the equals key to see the calculated result, so that I get my answer.
C or a new digit entry recovers.FR-6 — Clear (explicit, as the mechanics of FR-1)
As a Calculator user, I should press C to reset the calculator, so that I can start a fresh calculation.
0 and any pending operand and operator are discarded.FR-7 — Keyboard operation (required_inference) As a Calculator user, I should be able to operate the calculator from the keyboard, so that the single page is usable without a pointer.
., +, -, *, /, Enter/=, and Escape/c on a focused page.Product context. A general calculator user who arrives at mellow-start with a small, concrete arithmetic task — a sum, a difference, a product, a division — and wants the answer in seconds. They are not looking for a tool to learn, configure, or return to; they are looking for a well-made object that does one thing quietly.
Primary goal. Enter numbers and operators and see the calculated result on one page, with no friction between the thought and the answer.
Distinct accepted responsibilities.
Relevant inputs and decisions. Which numbers to enter, which operator applies, when the entry is complete enough to compute, and whether to continue from the result or clear and start fresh.
Interactions with other accepted participants. None. The Calculator user is the only active human actor; the system computes and displays, but no other person participates in or is affected by the calculation.
Observable success. The result panel shows the correct computed value for the entered numbers and operator, the numeral is legible at every viewport, and the user can immediately begin another calculation or clear the page.
What makes this role distinct. The role's entire work is a short, self-contained input-and-read loop on a single surface. There is no handoff, no stored state, no return visit, and no decision that outlives the page — which is precisely why the product needs no identity, no history, and no second destination.
0 and the keypad is ready. No sign-in or navigation occurs.0 on the first press.+, −, ×, or ÷). The current number is held as the pending operand and the operator is recorded; the display is ready for the second number.C to reset to 0 and start fresh.÷, and entered 0 as the second number.C, which returns the display to 0 and discards the pending operand and operator, or simply begins a new digit entry, which starts a fresh number.., an operator, the second number, and Enter (or =). The display changes exactly as if the corresponding on-screen keys were pressed.Escape (or c) to clear, returning the display to 0.The creative direction — Super normal arithmetic after Naoto Fukasawa — is authoritative for this section.
Muse and headline. Naoto Fukasawa; the headline idea is super normal arithmetic — a quiet, obvious, well-made everyday object.
Palette (light mode)
| Role | Hex | Use |
|---|---|---|
| Background | #F2F0EB | Warm paper ground covering most of the page |
| Surface | #FBF9F5 | Soft-white result panel and key pads |
| Text | #2B2A27 | Ink numeral and labels |
| Primary | #3F4A3C | Forest-green fill for the result bar and primary key treatment |
| Accent | #C2703D | Terracotta, used only on the equals key |
| Muted | #8A867D | Hairline rules and secondary labels |
Typography. Zen Kaku Gothic New for both headings and body. Headings at Medium weight with wide tracking on small-caps labels; large calm numerals with tabular figures. Modular scale 1.25: 96 / 64 / 40 / 28 / 18 / 16. Display numeral clamp(48px, 12vw, 128px).
Shape language. Soft rounded blocks with 20px radii. Keys are gentle raised pads with a single soft shadow. No outlines and no gloss.
Layout. One centered column on the warm paper ground. A wide result panel sits above a 4-column keypad. Small-caps labels sit above the panel on a hairline rule.
Spacing rhythm. Generous, even padding around the panel and between keys; the keypad reads as one calm block rather than a grid of separate tiles.
Imagery style. No photography. The keypad itself is the only object, lit by one soft shadow.
Avoid. Blue or indigo accents; gradient blobs; glass panels; neon glow; bouncy key animation; stock photography.
Readability. Headlines, labels, numerals, 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.
The first screen is the calculator, composed as a single calm object on a warm paper field.
#F2F0EB holds the composition.#8A867D, anchoring the surface without decoration.#FBF9F5 carries one oversized ink numeral at clamp(48px, 12vw, 128px), flush left, in tabular figures so the number never jitters as it changes.#C2703D: the single hot point that tells the eye where the answer is made.The concept recomposes only accepted content — the display, the digits, the four operators, equals, and clear — into a hero that is the working surface itself. Nothing is added that the calculator does not already do.
Interaction Model: Static (direction) Motion Tempo: still Hero Dimensionality: flat
Landing Hero Motion Brief
0 flush left, 4-column keypad below, terracotta equals key as the only hot point.prefers-reduced-motion, the press travel and result fade are removed; keys show a static pressed state (a subtle surface shift) and the result appears immediately. The layout is unchanged and fully usable.clamp(48px, 12vw, 128px).prefers-reduced-motion.0.+, −, ×, ÷, digits 0–9, a decimal point, equals, and clear. No scientific or memory functions are assumed.C or a new digit entry.+, −, ×, ÷) awaiting the second number.#C2703D.C) — resets the display to 0 and discards any pending operand and operator.
Type digits and + − × ÷ ; press Enter to computeEsc clears

Type digits and + − × ÷ ; press Enter to computeEsc clears
No comments yet. Be the first!