prism-callcator is a simple calculator delivered as a single page. The product intent is a fast, no-friction calculation tool: a visitor opens the page, enters numbers and operations, sees the running result, and clears or corrects the entry to start a new calculation. The audience is broad and utility-minded — students, professionals, and anyone reaching for a quick sum — and the experience must feel exact, legible, and quietly confident rather than playful or gimmicky.
The design language is Swiss geometric rigour: a strict modular grid, flush-left type, pure colour used as signal, and a calculator surface that is itself the hero of the page. The single-page constraint is a hard product constraint: entry, computation, and clear interactions are all embedded in one page, with no separate destinations.
prism-callcator is a single-page web calculator. The page presents an oversized flush-left headline and metadata block alongside a white calculator surface framed by a visible grid. The calculator surface contains a tabular-figure display and a keypad of square keys separated by 1px dividers, with a single red circular equals key breaking the rectangle.
The product has one active human actor, the Calculator User, who enters numbers and operations, observes the running result, and clears or corrects the entry. There is no account, no sign-in, and no persisted user state: the page is anonymous and public, and each visit begins from a fresh display of 0.
Delivery is a React frontend served as the single page, backed by the shared FastAPI backend process and a MariaDB database provisioned in the scaffold. The calculator's arithmetic is performed in the page itself; the backend and database are provisioned infrastructure and do not carry calculator domain state, because the accepted product has no persistence, history, or account requirement.
Removed from scope
The user asked for a simple single-page calculator design. That request is the whole current product: one page, one calculator, no surrounding application. The page is the anonymous public entry surface — a visitor lands on it and can immediately calculate, with no identity establishment, no gating, and no navigation to any other destination.
The single-page constraint is treated as exact. Entry, computation, clear, and correction all live inside the one page; there is no separate results page, history page, settings page, or help page. The backend and database exist as provisioned infrastructure but are not required to make the accepted calculator work, and no future capability is implied by their presence.
Everything beyond a working single-page calculator — calculation history, saved calculations, accounts, sharing, scientific functions — is outside the current delivery boundary and is not part of this document's current requirements.
Information and state
PRISM / CALCULATOR / 01 with 0.12em tracking, separated from the body by a 1px black rule.CALCULATE in Archivo 700 at clamp(40px, 8vw, 96px), stacked over a thin black rule and a small all-caps metadata block.clamp(32px, 6vw, 64px), right-aligned within the display cell, initial value 0.#E63329) while active.Primary actions
0–9 append digits to the current entry.+, −, ×, ÷ select the pending operation and mark that key active in red.0 and discards any pending operation and entry.Supporting actions
Domain entities
Component responsibilities
States
0 on first paint.0 with no pending operation.0; delete removes the last digit; entering a new digit after an error starts a fresh entry.FR-1 — Open the calculator page As a Calculator User I should open the single calculator page and immediately see a working calculator, so that I can start a calculation without any setup.
0 and the full keypad available; access — anonymous, no identity required; failure/recovery — if the page fails to load, reloading the page restores the initial state; continuation — the user begins entering digits.0, all digit, operator, decimal, equals, clear, and delete keys present and operable.FR-2 — Enter digits As a Calculator User I should press digit keys to build a number in the display, so that I can enter the operands of my calculation.
0–9; observable result — the digit is appended to the current entry and the display updates; failure/recovery — none beyond clear/delete; continuation — the user presses an operator or equals.1, 2, 3 shows 123; pressing a digit while the display shows 0 replaces the 0 with that digit.FR-3 — Enter a decimal point As a Calculator User I should press the decimal key to enter fractional numbers, so that I can calculate with non-integer values.
0. is started if the entry is empty; failure/recovery — a second decimal point in the same entry is ignored; continuation — further digits extend the fractional part.. then 5 from a fresh state shows 0.5; pressing . twice in one entry leaves a single decimal point.FR-4 — Select an operator As a Calculator User I should press an operator key to choose the pending operation, so that the calculator knows what to do with the next operand.
+, −, ×, or ÷; observable result — the current entry is stored as the pending operand, the operator is stored as pending, and the pressed operator key is shown in the red accent; failure/recovery — pressing a different operator before entering a second operand replaces the pending operator; continuation — the user enters the second operand.8 and pressing +, the + key is red and the display still shows 8; pressing × instead makes × red and + inactive.FR-5 — Evaluate with equals As a Calculator User I should press the equals key to see the result of my calculation, so that I get the answer I came for.
7, +, 5, = shows 12; pressing = again with no new operator leaves 12 displayed.FR-6 — Clear the calculation As a Calculator User I should press the clear key to reset the calculator, so that I can start a new calculation from zero.
0, the pending operand and operator are discarded, and no operator key is shown active; failure/recovery — clear is always available and always succeeds; continuation — the user begins a new entry.0 with no active operator.FR-7 — Delete the last digit As a Calculator User I should press the delete key to remove the last entered digit, so that I can correct a mistyped entry without starting over.
0; failure/recovery — delete on an empty or 0 display leaves 0; continuation — the user continues typing.123 displayed, pressing delete shows 12; pressing delete again shows 1; pressing delete again shows 0.FR-8 — Handle division by zero As a Calculator User I should be told when I divide by zero rather than shown a misleading number, so that I understand the calculation cannot be completed.
÷ and a zero divisor; observable result — the display shows an error indication instead of a numeric result; failure/recovery — pressing clear resets to 0, and pressing a digit starts a fresh entry; continuation — the user corrects the divisor or starts over.5, ÷, 0, = shows an error indication; pressing clear then shows 0.FR-9 — Keyboard input As a Calculator User I should be able to use my keyboard for digits, operators, decimal, equals, and clear/delete, so that I can calculate quickly without reaching for the mouse.
4+4 then Enter shows 8; pressing Escape clears to 0.FR-10 — Reduced-motion behaviour As a Calculator User who prefers reduced motion I should see instant state changes with no transitions, so that the calculator remains comfortable and usable.
prefers-reduced-motion: reduce; observable result — key-press flashes and the result crossfade become instant; failure/recovery — not applicable; continuation — all calculation behaviour is unchanged.Product context. The Calculator User is anyone who needs a quick sum — a student checking homework, a professional totalling figures, or a passer-by working out a split bill. They arrive at the page with a number in mind and no patience for setup, sign-in, or explanation. They judge the tool in the first second: does it look exact, and can they type immediately?
Primary goal. Get a correct arithmetic result as fast as possible, then either continue calculating from that result or clear and start again.
Distinct accepted responsibilities.
Relevant inputs and decisions. Which operator applies; whether the current entry is complete; whether to chain another operation onto the result or clear; whether to correct a digit or start over.
Interactions with other participants. None. The Calculator User is the only active human actor; the calculator computes locally and no other person, provider, or counterparty is affected by the calculation.
Observable success. The display shows the expected result after equals; the active operator is visibly marked in red; clear returns the display to 0; a mistyped digit is removed by delete; division by zero is clearly signalled rather than silently producing a wrong number.
0 and the full keypad available; no sign-in or setup is required.+, −, ×, or ÷). The current entry is stored as the pending operand and the pressed key turns red to show it is active.0.0.0, the pending operand and operator are discarded, and no operator key remains red.÷, enters 0, and presses equals.0 and starts a corrected calculation, or presses a digit to begin a fresh entry.0.The visual language is Swiss geometric rigour after Josef Müller-Brockmann: grid-locked type, flush-left composition, and pure colour used as signal.
Colour tokens (light mode)
#F7F5F0 — warm off-white ground.#FFFFFF — pure white calculator surface.#111111 — black for type and grid rules.#111111 — black for structure and primary keys.#E63329 — saturated red, used only for the equals key, the active operator, and the single geometric mark in the hero.#8A8780 — secondary labels and hairline rules.Colour is functional: red means action, black means structure, white means surface. No other hues are introduced; blue and indigo are forbidden.
Typography
-0.02em; weight 700 for the oversized headline, 500 for labels, 400 for body.clamp(40px, 8vw, 96px).clamp(32px, 6vw, 64px).0.12em tracking.Shape language
Layout
Imagery
Readability constraint. Headlines, labels, numbers, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit; decoration may bleed or overlap but never covers readable text or a control.
The public entry is a full-viewport asymmetric composition on warm off-white. The left seven columns carry an oversized flush-left CALCULATE headline in Archivo 700 at clamp(40px, 8vw, 96px), stacked over a thin black rule and the all-caps metadata line PRISM / CALCULATOR / 01. The right five columns carry the calculator surface — a white rectangle with a 1px black border, flush to the grid — whose display shows 0 in tabular Archivo at 64px. A single large red circle sits at the bottom-right of the calculator as the equals key, breaking the rectangle. Hairline vertical rules run from the header through the calculator to the footer, making the 12-column structure itself the decoration. There is no centred headline, no gradient, and no call-to-action button: the calculator is the hero, framed by the grid.
Interaction Model: Static Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
0 display and the single red circular equals key — set against the oversized CALCULATE headline and the visible grid.CALCULATE flush-left across the left seven columns over a hairline rule and the PRISM / CALCULATOR / 01 metadata line; the white calculator surface flush to the right five columns with 0 in the display; the red circle at its bottom-right; hairline vertical grid rules running the full height.0. (explicit — no access requirement stated; required_inference for the anonymous entry)prefers-reduced-motion removes all transitions. (required_inference)prism-callcator. (labeled assumption)+, −, ×, ÷), digits, a decimal point, equals, clear, and delete — the minimum set implied by "simple calculator". (labeled assumption)+, −, ×, ÷) awaiting the second operand, shown in red while active.0 and discards any pending operand and operator.PRISM / CALCULATOR / 01.
PRISM / CALCULATOR / 01

PRISM / CALCULATOR / 01
No comments yet. Be the first!