heroic-calculator is a simple calculator delivered as a single-page design. The product intent is narrow and complete: give anyone who needs quick arithmetic a friendly, legible, tactile little machine on one page — enter numbers and operators, see the running expression and the result, and clear or correct input to start a new calculation, all without navigating away.
The audience is broad and anonymous: students, shoppers, desk workers — anyone who needs a fast calculation and nothing more. There is no account, no saved history, and no second page. The design language (a Susan Kare-inspired, pixel-crafted keypad on warm paper) serves that audience by making the numbers crisp and the keys feel physical, so playfulness never costs clarity.
This document is the System Requirements Document for the project; it specifies the single page, its components, the calculator behavior, the visual system, and the delivery boundary.
heroic-calculator is a first-party, browser-delivered, single-page calculator. The entire product is one anonymous page — Calculator — which both introduces the simple calculator (wordmark, one plain sentence, pixel-icon "what it does" tiles) and hosts the working calculator body (expression and result display, 4×5 keypad, clear). There is no navigation chrome, no second route, and no login: the page is reachable by anyone and holds no durable per-user state.
All calculation behavior runs in the page itself as the user types and presses keys; the shared backend and database exist as provisioned infrastructure but carry no calculator domain requirements (no accounts, no saved calculations, no history). Nothing about the calculator is deferred to a future release; the current scope is the whole product.
Not applicable — no reference directive supplies a content_source.
The single page. Anonymous, publicly reachable, no identity required. Two-column composition at ≥1024px (editorial left, calculator body right); stacked with the calculator first below 1024px.
Information and state
Primary actions
Supporting actions
Domain entities
Component responsibilities
States
FR-1 — Single-page calculator delivery (explicit) As a Calculator User, I should get the whole calculator on one page, so that I can do arithmetic without navigating anywhere.
FR-2 — Digit and decimal entry (explicit) As a Calculator User, I should press digit keys (and the decimal point) to build the number I want to calculate with, so that I can enter any operand.
FR-3 — Operator selection (explicit) As a Calculator User, I should press an operator key (÷ × − +) to choose the operation, so that I can chain arithmetic.
FR-4 — Evaluate with equals (explicit) As a Calculator User, I should press equals to see the result of my expression, so that I get the answer.
FR-5 — Clear with AC (explicit) As a Calculator User, I should press AC to clear everything and start a new calculation, so that I can begin fresh.
FR-6 — Correct input (explicit) As a Calculator User, I should use backspace to remove the last digit and ± to toggle the sign of the current operand, so that I can fix mistakes without starting over.
FR-7 — Error handling for invalid arithmetic (required_inference) As a Calculator User, I should see a clear message when an operation cannot be computed (such as division by zero), so that I understand why there is no result and can recover.
FR-8 — Keyboard input (required_inference) As a Calculator User, I should be able to type digits, operators, Enter, and Escape on my keyboard, so that I can calculate quickly without reaching for the mouse.
FR-9 — Reduced-motion respect (explicit, from creative direction) As a Calculator User who prefers reduced motion, I should get instant state changes without the load reveal or fade-swap, so that the calculator remains usable and comfortable.
prefers-reduced-motion: reduce.Product context. Anyone who needs quick arithmetic — a student checking homework, a shopper totaling a basket, a desk worker splitting a bill — arriving at a single anonymous page with no account and no history to manage.
Primary goal. Get the correct result of an arithmetic expression quickly, on one page, without navigating away.
Distinct accepted responsibilities.
Relevant inputs or decisions. Which operands and operators to enter; when to press equals; whether to correct or clear after a mistake or error.
Interactions with other accepted participants. None — the calculator is a solo, local interaction; no other human participant is affected by the calculation.
Observable success. The correct result appears in the display as the largest type, the expression line shows what was evaluated, and the user can immediately clear and start again — all without leaving the page.
Muse and headline: Susan Kare — "a calculator drawn one pixel at a time." Friendly competence: a well-loved little machine, tactile and legible; playfulness never costs clarity of numbers.
Palette (light mode)
#F3EFE4#FFFDF6#1E1C22#2E5E4E#E4572E#7A7468Typography
clamp(40px, 8vw, 96px) Space Grotesk medium; result display clamp(36px, 9vw, 72px) tabular; key labels 22–26px; body 16–18px; micro-labels 12px Silkscreen caps.Shape language
Layout
Imagery
Readability rule: headlines, wordmarks, labels, numbers, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling via clamp(...); decoration may crop or bleed but never covers readable text or controls.
The first screen is an asymmetric two-column composition on warm paper. Left: an oversized Space Grotesk wordmark HEROIC CALCULATOR (clamp 40–96px) stacked over a pixel-badge mark and one plain sentence, with a horizontal row of chunky-outlined icon tiles beneath. Right: the calculator body itself as the dominant object — a near-white slab with a 6px ink double-frame, a large tabular result display at top, and a 4×5 keypad of 2px-outlined keys with 3px offset shadows; the pine equals key and tomato AC key give it two spots of colour. The slab sits unrotated with a hard 8px ink shadow, not a soft glow. No centred headline, no gradient, no blue button.
Signature moves: keys are physical (2px outline, 4px radius, 3px solid offset shadow that collapses on press so the key visibly sinks 2px); the pixel-art badge mark built from a 16×16 inline-SVG grid repeats as an 8px dot texture behind the calculator; the result display is the largest type on the page, tabular numerals that blink in digit by digit; a custom 16×16 pictogram set for ÷ × − + ±\x20\xe2\x8c\xab AC drawn on one grid so the keypad reads as one icon family; operator and equals keys solid pine with off-white glyphs, AC outlined in tomato — colour codes function, never decoration.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
prefers-reduced-motion removes the reveal and fade-swap while preserving all functionality.#1E1C22 on #FFFDF6/#F3EFE4 at full contrast; Silkscreen never used for body copy or long numerals.#2E5E4E used for operator and equals keys.#E4572E used for the equals outline, active operator, and AC key.
HEROIC CALCULATOR
A friendly little machine for quick sums: add, subtract, multiply and divide with big, legible numbers.
What it does
Keyboard ready · Enter = · Esc clears

HEROIC CALCULATOR
A friendly little machine for quick sums: add, subtract, multiply and divide with big, legible numbers.
What it does
Keyboard ready · Enter = · Esc clears
No comments yet. Be the first!