verdant-calculator is a simple, single-page calculator. It exists to do one thing: let a person enter an arithmetic expression and see the correct result. There is no brand story, no marketing surface, no onboarding, and no account. The product is a small everyday utility — a precision instrument on a quiet page.
The audience is a single person doing arithmetic in a quiet moment: entering numbers and operators, reading the displayed result, and clearing or correcting the current entry to begin a new calculation. The product succeeds when the page returns the correct result for the expression that person entered.
The entire product is delivered as one page. This is an explicit, binding constraint from the authoritative requirement thread ("create a simple single page project for calculator") and is reflected in the page contract as an exact page count of one.
verdant-calculator is a single-page, client-side arithmetic utility. The one page — Calculator — is the public entry surface and the only destination. It contains the calculator interface for entering expressions, evaluating them, displaying results, and clearing the current calculation.
Actors. The only active human actor is the Calculator User. There are no other personas, no administrators, no operators, and no external recipients. No system, provider, or external service is a persona; arithmetic evaluation is performed by the page itself as an internal system process supporting the user's interaction.
Accepted behavior. The calculator performs arithmetic calculations and shows the result to the user. The user enters numbers and operators, reads the displayed result, and clears or corrects the current entry to start a new calculation.
Ownership. All accepted behavior is owned by the single first-party page, Calculator. There is no provider-owned surface, no external destination, and no headless delivery.
Narrow exclusions. This document does not introduce history, memory, saved calculations, accounts, sign-in, sharing, export, unit conversion, scientific functions beyond the arithmetic operators shown on the keypad, or any second page. Nothing in the source requests them.
The product is delivered as one first-party page that any visitor can open and use immediately. Access to the Calculator page requires no identity: there is no sign-in, no account creation, and no session continuity, because the accepted behavior is a single self-contained calculation that produces its result on screen and needs no durable, actor-specific state to be privately owned or resumed. The page is public and ephemeral by design.
Everything the product does happens on that one page. There is no separate anonymous pre-identity lifecycle, because there is no protected state behind an access boundary. There is no future-horizon section in the authoritative source; no deferred capabilities are recorded, and none are implied.
Not applicable. No reference directive in the authoritative source declares a content_source, so no source content inventory is produced.
The single page of the product. It is the public entry surface, requires no identity, and owns the complete calculator lifecycle: expression entry, evaluation, result display, and clearing.
Information and state
VERDANT / CALCULATOR set left in 13px uppercase Archivo with +0.14em tracking, and MODEL 001 set right in muted #6E6B63.#6E6B63, sitting directly above the result inside the display plate. Scrolls horizontally when it overflows.clamp(56px, 14vw, 132px) with −0.02em tracking, ink #111111, sized so a 9-digit number still fits inside the plate at 375px.#00A05A at a time, marking the operator currently in effect.CLEAR · SIGN · PERCENT legends, a small 24px concentric-circle diagram in muted ink, and a code line.Primary actions
Supporting actions
Domain entities
Component responsibilities
States
0.FR-1 — Single-page 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 an arithmetic expression (explicit) As a Calculator User, I should enter numbers and operators, so that I can build the calculation I want to perform.
#00A05A.FR-3 — Evaluate and display the result (explicit) As a Calculator User, I should have the calculator perform the arithmetic and show me the result, so that I get the answer to my calculation.
FR-4 — Clear the current calculation (explicit) As a Calculator User, I should clear the current calculation, so that I can start a new one without leftover state.
0.FR-5 — Correct the current entry (explicit) As a Calculator User, I should correct the current entry, so that a mistyped number does not force me to abandon the calculation.
FR-6 — Sign toggle (explicit) As a Calculator User, I should toggle the sign of the current entry, so that I can enter negative values without retyping.
FR-7 — Percent (explicit) As a Calculator User, I should convert the current entry to its percentage value, so that I can use percentages in a calculation.
FR-8 — Read the expression tape (explicit) As a Calculator User, I should see the expression I have entered, so that I can confirm what will be evaluated before I commit it.
Product context. The Calculator User is the sole active human role in this product. They arrive at a single page with no account, no history, and no prior state, in a quiet moment, to do a piece of everyday arithmetic. Nothing about the product asks them to identify themselves, and nothing about their work persists after they leave.
Primary goal. To enter an arithmetic expression and read the correct result.
Distinct accepted responsibilities. This role owns the entire product lifecycle on one page: building an expression from digits, the decimal point, and the four arithmetic operators; committing it with equals; reading the result; and clearing or correcting the current entry to start a new calculation. They also use sign and percent to shape the value they are entering. No other actor shares or splits this work.
Relevant inputs and decisions. The role decides what expression to enter, when to commit it with equals, whether the displayed result is the one they wanted, and whether to continue calculating from it or clear and start again. Their inputs are keypad presses; their decisions are made by reading the expression tape and the result display.
Interactions with other accepted participants. None. There is no second human participant, no counterparty, and no recipient of the calculation. The result is for the Calculator User alone, on screen, and creates no obligation, transfer, or durable relationship with anyone else.
Observable success. The result display shows the correct value for the expression the user entered, and the expression tape shows the expression that produced it. Failure is observable too: an invalid or non-finite evaluation shows an explicit error state rather than a wrong number, and clear returns the page to a usable empty state.
VERDANT / CALCULATOR and MODEL 001, the display plate with an empty expression tape and a result of 0, the 4×5 keypad, and the metadata strip. The entrance sequence plays once — top rule and wordmark fade in over 400ms, then the display plate, then the keypad rows stagger in 60ms apart.#00A05A for the screen.0, ready for a new calculation.0.0.The creative direction is authoritative for this section. It is an austere reference after Peter Saville: one coded artefact on silence. The emotional register is calm, exact, and slightly cold — a precision instrument on a gallery plinth, not a friendly app. The name verdant-calculator supplies the only colour code: a single exact green, used as code rather than decoration.
Palette — light mode
| Role | Hex | Use |
|---|---|---|
| Background | #F2F0EB | Paper-bone ground; the field the artefact sits on |
| Surface | #E7E4DC | Slightly deeper bone for the keypad plate and display housing |
| Text | #111111 | Ink for all readable type and digits |
| Primary | #1C3A2E | Deep pine: the equals key, the top rule, focus rings, the wordmark |
| Accent | #00A05A | Exact Saville spot green — appears once per screen, on the active operator key or the decimal point, never as a fill field |
| Muted | #6E6B63 | Metadata, key legends, the function row |
Proportion. 80% bone ground, 15% ink and pine structure, 5% spot green. No gradients, no shadows, no blue anywhere.
Typography
clamp(56px, 14vw, 132px); wordmark 13px uppercase tracked; section labels 11px uppercase tracked +0.18em; key legends 18px mono; expression tape 13px mono; footnote 11px muted.Shape language. Hard edges only — 0px radii on every key, rule, and panel. Exact 1px hairlines in ink at 20% opacity divide the display from the tape and the tape from the keypad, echoing a printed spec sheet. Keys are flat rectangles with a 1px border and no fill change on hover; the only filled shapes are the pine equals key and the single spot-green operator key. Nothing is rounded, nothing is bevelled, nothing casts a shadow.
Layout. One centred artefact on a bone field, held to a strict 4-column grid inside a max-width of 420px at mobile and 480px at desktop, with the whole assembly sitting in the upper-middle third of the viewport and a wide silent margin below. Order top to bottom: a hairline top rule carrying VERDANT / CALCULATOR left and MODEL 001 right; the display plate with right-aligned expression tape above the right-aligned result; a full-width hairline; a 4×5 keypad of flat rectangles; a bottom metadata strip with CLEAR · SIGN · PERCENT legends and a small code line. At 375px the grid keeps four columns with 8px gutters and 44px minimum key height; at 768px and 1280px the artefact simply centres with more silence around it.
Imagery. No photography, no illustration, no icons beyond typographic glyphs. The "image" is the calculator itself treated as a found artefact: the display digits at specimen scale, the hairline rules, the colour code. A single geometric diagram may appear in the bottom metadata strip — a small concentric-circle or grid mark in muted ink, 24px, purely referential, like a catalogue figure number.
Avoid. Any blue or indigo in any state, including focus rings and link colours; rounded corners, pill buttons, or any radius above 0px; drop shadows, glows, gradients, glass or blur effects; hover-lift cards or any card grid; filled colour fields other than the pine equals key and the single spot-green operator; photography, 3D renders, blob shapes or character illustration; friendly micro-copy, emoji or exclamation marks; bouncy, elastic or spring easing of any kind.
The first screen is not a SaaS hero — it is a specimen card.
A bone #F2F0EB field with a wide silent margin. In the upper-middle third, a single centred instrument: a 1px hairline-bordered plate holding the expression tape in IBM Plex Mono 13px muted, and beneath it the current value at clamp(56px, 14vw, 132px) in Archivo 300, right-aligned, ink #111111, sized so a 9-digit number still fits inside the plate at 375px. Above the plate, a full-bleed hairline rule with VERDANT / CALCULATOR set 13px uppercase tracked left and MODEL 001 right in muted. Below, the 4×5 keypad of flat 1px-bordered rectangles, with the equals key filled deep pine #1C3A2E and exactly one operator key marked in spot green #00A05A. No gradient, no blob, no button-with-shadow, no photograph — the dominant element is the oversized number and the silence around it.
The signature moves are: the oversized right-aligned result digit block set like a type specimen with the expression tape directly above it, both held inside a 1px hairline plate; a single spot-green key per screen so the "verdant" name is a colour code rather than a theme, with the equals key alone filled deep pine; a full-bleed hairline top rule that turns the page header into a catalogue plate caption; a keypad of perfectly flat 0px-radius rectangles whose only press feedback is an instant 80ms border shift to pine; and a bottom metadata strip in IBM Plex Mono 11px muted, reading like the figure legend of a printed sleeve.
Interaction Model: Static (direction) Motion Tempo: still Hero Dimensionality: flat
clamp(56px, 14vw, 132px) in Archivo 300, with the 13px mono expression tape directly above it, both inside a 1px hairline plate on a bone field.VERDANT / CALCULATOR left and MODEL 001 right; the display plate with an empty tape and 0; the 4×5 keypad with the pine equals key and one spot-green operator key; the metadata strip below. A single restrained entrance plays once: the top rule and wordmark fade in over 400ms, then the display plate, then the keypad rows stagger in 60ms apart — once, never again.prefers-reduced-motion, the entrance sequence is skipped entirely and the page renders in its final composed state: no fades, no stagger, no cross-fade on commit — the value simply changes. The expression tape remains horizontally scrollable so every part of a long expression can be brought fully into view. All readable text and controls stay whole and inside their container at 375px, 768px, and 1280px.No 3D or WebGL scene is requested or direction-derived; the hero dimensionality is flat and no Canvas/R3F/Drei dependency is required.
NFR-1 — Single page (explicit) The product is delivered as exactly one page. No additional routes, pages, or destinations are created.
NFR-2 — No identity or account (required_inference) The Calculator page is publicly reachable with no sign-in, no account creation, and no session continuity. The accepted behavior produces a result on screen and requires no durable, actor-specific state to be privately owned or resumed, so no application-owned identity is established.
NFR-3 — Client-side arithmetic (required_inference) Arithmetic evaluation happens on the page itself. No server round-trip is required for a calculation, and no calculation data leaves the browser.
NFR-4 — Readable text and controls at every viewport (explicit, from the creative direction)
Headlines, wordmarks, labels, numbers, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit. No other element covers any part of them. The result display uses clamp(56px, 14vw, 132px) so a 9-digit number fits inside the plate at 375px.
NFR-5 — Reduced motion (explicit, from the creative direction)
With prefers-reduced-motion, the page provides a usable static arrangement: the entrance sequence is skipped and the expression tape remains horizontally scrollable so every item can be brought fully into view.
NFR-6 — No blue, no radius, no shadow (explicit, from the creative direction) No blue or indigo appears in any state, including focus rings and link colours. No corner radius above 0px. No drop shadows, glows, gradients, glass, or blur effects.
NFR-7 — Accessible focus indication (required_inference)
Focus rings use deep pine #1C3A2E, consistent with the palette's structural colour and the prohibition on blue, so keyboard users can see which key has focus.
Constraints (binding)
Assumptions (narrow, labeled)
CLEAR · SIGN · PERCENT legends and its operator and equals keys.Explicit exclusions
clamp(56px, 14vw, 132px) that shows the current entry or the committed result.#00A05A key on the screen.#00A05A, appearing once per screen as a colour code rather than a theme.#1C3A2E, used for the equals key, the top rule, focus rings, and the wordmark.CLEAR · SIGN · PERCENT legends, a small concentric-circle diagram, and a code line.

No comments yet. Be the first!