amber-calculator is a simple calculator delivered as a single page. The product intent is narrow and explicit: a user opens one page, enters numbers and operators, and reads the arithmetic result. There is no multi-page application, no account system, and no workflow beyond basic calculation.
The audience is anyone who needs a plain, trustworthy calculator — a public utility. The design brief frames it as "a public utility calculator for anyone" that needs "calm trust, exact numbers and one clear keypad." The visual identity follows an austere, gallery-like reference (muse: Peter Saville): one amber instrument on a dark ground, sharp corners, hairline rules, and a single spot colour.
This document is the System Requirements Document for the product. It specifies the single page, its components and states, the one active persona, the calculation journey, and the visual and technical constraints that govern delivery.
amber-calculator is a first-party, single-page web calculator. The one page, Calculator, is the anonymous public entry: no sign-in, no account, and no identity establishment are required or provided. A visitor lands directly on the calculator and can immediately enter numbers and operators and read results.
All calculation interaction is owned by the first-party Calculator page. The shared backend (FastAPI) and MariaDB database are provisioned infrastructure; the accepted calculator behavior is a client-side arithmetic interaction on a single page and does not require server-side persistence, accounts, or domain records. The backend and database remain available as the application's shared service foundation but do not introduce product capabilities, entities, or authentication.
Current scope is exactly the single calculator page and its arithmetic interaction. There are no future-horizon features specified by the user; anything beyond a simple single-page calculator is out of scope.
The single page. Anonymous public entry; no authentication. One centred column: display block on top, 4×5 key grid below, metadata line at the foot.
Information and state
clamp(56px, 18vw, 128px).OP 04 — DIVIDE).Primary actions
Supporting actions
Domain entities
OP 04 — DIVIDE).Component responsibilities
#3A3A3A border; equals key is a solid amber block; keys show a solid amber fill on press and no other change.States
FR-1 — Single-page calculator (explicit) As a Calculator user, I should open a single page that presents a calculator, so that I can perform arithmetic in one place.
FR-2 — Number entry (explicit) As a Calculator user, I should press number keys to enter operands, so that I can build the numbers I want to calculate.
FR-3 — Operator selection (explicit) As a Calculator user, I should select an operator (add, subtract, multiply, divide), so that I can specify the operation to perform.
OP 04 — DIVIDE).FR-4 — Compute result (explicit) As a Calculator user, I should press the equals key to compute the result, so that I can see the outcome of my calculation.
FR-5 — Clear and reset (required_inference) As a Calculator user, I should clear the current entry and pending operation, so that I can recover from a mistake or start a new calculation.
FR-6 — Coded operation label (explicit, from creative direction) As a Calculator user, I should see a small caps metadata line at the foot showing the coded operation label, so that I can confirm which operation is active.
OP 04 — DIVIDE.OP 04 — DIVIDE).Failure/recovery: If the user enters an invalid operation (e.g. divide by zero), the display shows a clear error indication. The user presses the clear key to reset and begins again.
The creative direction is authoritative for this section.
#121212 (near-black ground, ~80% of the page)#1C1C1C#F2EFE9 (off-white)#E8A020 (amber — display glow, equals key, title rule)#E8A020 (amber)#8A857C#3A3A3A (1px)clamp(56px, 18vw, 128px).The calculator is the hero. On the public entry (the Calculator page), a large off-white result number sits left-aligned in a dark display block. A thin amber rule runs the full page width above it as the only ornament. The keypad sits below in a strict 4×5 grid of flat bordered keys, with the equals key as a solid amber block. A faint amber grid of hairlines sits behind the display as a coded reference diagram. A small caps metadata line at the foot shows a coded operation label (e.g. OP 04 — DIVIDE). The composition recomposes only accepted content and controls — the display, the keypad, and the metadata line — with no new behaviour or destination.
Interaction Model: Static (direction) Motion Tempo: still Hero Dimensionality: flat
Landing Hero Motion Brief
#121212 ground; full-width amber hairline; dark display block with a large left-aligned off-white number; faint amber hairline grid behind the display; 4×5 grid of flat bordered keys with a solid amber equals key; small caps metadata line at the foot.prefers-reduced-motion, the result appears without the 120ms fade (instant display); the key press fill remains as a static state change. The layout is unchanged and fully usable.font-size: clamp(...)) to fit; no other element covers any part of them.prefers-reduced-motion, provide a usable static arrangement; the result appears without the fade.#F2EFE9 on #1C1C1C surface and amber #E8A020 on #121212 maintain readable contrast; keys are focusable and operable by keyboard.OP 04 — DIVIDE).
Keyboard: digits, . + − * /, Enter to compute, Esc to clear.

Keyboard: digits, . + − * /, Enter to compute, Esc to clear.
No comments yet. Be the first!