verdant-page is a simple calculator delivered as a single-page design. The product intent is narrow and explicit: one page on which a visitor can enter numbers and arithmetic operators to build a calculation, see the current expression and the computed result, and clear the calculation to start over. The design must be simple and must remain a single page.
The audience is anyone who needs quick, accurate everyday arithmetic from one self-contained page — no account, no navigation, no surrounding application. The page is both the introduction to the calculator and the calculator itself.
This document is the System Requirements Document for the project. It specifies the single page, its components and states, the functional behavior of composing, evaluating, and clearing a calculation, the one active persona, the end-to-end flows, and the visual and technical direction.
verdant-page is a single-page web calculator. A React frontend renders one page — Calculator — containing a header band with a circular badge stamp and an oversized wordmark, a bordered paper chassis holding an ink-black display panel (live expression line plus oversized tabular readout), a 4-column key grid with a tall orange equals key, and a full-width AC key beneath the grid. A shared FastAPI backend and a MariaDB database are provisioned as infrastructure; the calculator's arithmetic is performed in the page itself, so no application-owned persistent data or domain entities are required by the accepted behavior.
Actors:
Accepted behavior: composing a calculation from digits, a decimal point, and the four arithmetic operators; displaying the current expression and the computed result; clearing the calculation. Access is public and anonymous — no identity, account, or session continuity is required or provided.
Removed from scope
The product is a single, publicly reachable page. There is no anonymous-to-authenticated boundary because no accepted behavior requires identity: a visitor opens the page and immediately has the full calculator. All calculation state lives in the page for the duration of the visit; nothing is persisted, resumed, or shared between visitors.
The delivery boundary is the one page named Calculator. Everything the user does — building an expression, reading the result, clearing — happens within that page. The provisioned backend and database exist as shared infrastructure but carry no calculator domain responsibility in the current scope; they are not user-facing surfaces and do not introduce stored data, accounts, or history. Future ideas (for example, additional calculator functions or saved history) are out of current scope and are not represented on the page.
Information and state
0.=, the readout shows the computed result and the expression line shows the evaluated expression.0.Primary actions
0–9 to append digits to the current number.. to enter a decimal point in the current number.+, −, ×, ÷ to set the pending operation.= key to evaluate the expression and show the result.AC key to clear the calculation and start over.Supporting actions and controls
Domain entities
Component responsibilities
7 8 9 ÷ / 4 5 6 × / 1 2 3 − / 0 . = + — with = as the tall orange key spanning two rows at the right edge.States
0 with an empty expression line.AC or entering a new number.AC always returns the page to the cleared state; entering a digit after an error begins a fresh calculation.FR-1 — Single-page calculator delivery (explicit) As a Calculator User I should reach the entire calculator on one page so that I can do arithmetic without navigating anywhere.
FR-2 — Enter numbers and operators to build a calculation (explicit) As a Calculator User I should enter numbers and arithmetic operators so that I can build the calculation I want.
0–9, ., and operator keys +, −, ×, ÷.=.FR-3 — See the current expression and computed result (explicit) As a Calculator User I should see the current expression and its computed result so that I can confirm what I am calculating and read the answer.
=.AC or a new number.FR-4 — Clear the calculation to start over (explicit) As a Calculator User I should clear the calculation so that I can start over cleanly.
AC key.0.AC is always available and always returns the page to the cleared state, including from an error state.Product context. The Calculator User opens verdant-page to perform quick, accurate everyday arithmetic. They arrive with no account and no prior state; the page is a self-contained utility they use in the moment and leave.
Primary goal. Get an accurate result from a calculation they build on the page, with minimal friction.
Distinct accepted responsibilities.
Relevant inputs and decisions. The user decides which digits, decimal point, and operators to enter, when to press = to evaluate, and when to press AC to reset. They read the expression line to confirm what they have entered and the display panel to read the answer.
Interactions with other participants. The Calculator User is the only active human participant. The frontend performs the arithmetic and display updates in response to their key presses; no other human participant is involved, and no handoff or shared state exists.
Observable success. The display shows the correct computed result for the expression entered, and AC reliably returns the page to a clean 0 state for the next calculation.
0.+, −, ×, or ÷); the operator appears in the expression line.= key. The frontend evaluates the expression and the display panel shows the computed result in oversized tabular numerals, with the evaluated expression above it.Failure/recovery. If the expression is invalid or undefined (for example division by zero), the readout shows an error indication. The user presses AC to clear, or enters a new number to begin again.
AC key.0.Failure/recovery. AC is always available, including from an error state, and always returns the page to the cleared state.
AC to clear and re-enters the calculation from the start.= to evaluate.The creative direction is authoritative: Honest arithmetic, hand-built after Aaron Draplin. The register is sturdy, plain-spoken, and satisfying to press — workwear colours, thick strokes, badge geometry, and all-caps labels.
Colour tokens (light mode)
#E8DCC3#F3EAD6#1C1A17#1C1A17#E4571E — equals key, operator keys, focus rings, the one badge stamp#8A7C63 — secondary labels and hairline rules#D9A227 and denim #2F4A63 — tiny badge/rule details only, never large fieldsTypography
clamp(40px, 9vw, 104px); display readout clamp(44px, 8vw, 88px) tabular; expression line 18–22px; key labels 20–26px uppercase; micro-labels 11–12px with 0.14em tracking.Shape language
Layout
7 8 9 ÷ / 4 5 6 × / 1 2 3 − / 0 . = + — with equals as the tall orange key spanning two rows at the right, and a full-width AC key beneath the grid.Imagery
+ − × ÷ = set inside the keys, ruled panels, and flat shapes. A single halftone-dot texture may sit at low opacity on the kraft ground as paper grain.The first screen is the calculator itself as a piece of equipment, not a marketing hero. A full-bleed kraft ground carries a header band across the top with a circular badge stamp at the left and the Alfa Slab One wordmark set oversized in ink. Beneath it, the bordered paper chassis dominates the centre with its ink-black display panel holding an oversized tabular readout. The orange equals key is the only hot accent in the frame and reads instantly as the destination of the eye. There is no centred headline-plus-subtext-plus-button stack, no gradient, and no floating card grid — the dominant element is the physical key grid with its hard offset shadows.
Signature moves:
clamp(44px, 8vw, 88px), right-aligned, with the live expression in muted ink above it.Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
translate(2px, 2px) over 90ms, collapsing its hard offset shadow to zero — a real button press with no bounce — and the display digits snap in without easing to show the updated expression or result.0, and the 4-column key grid with the orange equals key spanning two rows.prefers-reduced-motion, the stripe holds still and key presses become a colour flash instead of movement; the display continues to update.+, −, ×, ÷ with a decimal point; no scientific functions, memory, or percentages are in scope.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!