terra-page is a simple calculator delivered as a single-page design. The product intent is narrow and complete: one anonymous visitor opens one page, enters numbers and arithmetic operators to build a calculation, sees the current expression and the computed result, and can clear the calculation to start a new one. There is no account, no second page, no modal flow, and no onboarding overlay.
The audience is the everyday person who needs quick arithmetic — a single anonymous "Calculator User" who wants a correct answer without leaving the page. The page is also the product's public entry: it explains itself by being the working instrument, presented as a labelled industrial object rather than a sterile utility.
This document is the System Requirements Document for terra-page, written for the requester, Diya Trivedi.
terra-page is a single-page calculator. The current delivery is one custom page, Calculator, which is the anonymous public entry and the only destination. It composes digits and operators into an expression, evaluates and displays the result, and clears the calculation. The page is served by a React frontend, with a shared FastAPI backend available for application APIs and a MariaDB database provisioned for application-owned persistent data; neither the backend nor the database is required to add product behavior for this calculator, and no domain entities, authentication, or persistence are introduced by this product.
The only active human actor is the Calculator User. There are no system, provider, or external actors in the accepted product behavior; arithmetic evaluation is a local page responsibility.
Removed from scope
The product is a single page with no access barrier. The Calculator page is anonymously reachable and requires no identity, sign-in, or account; there is no application-owned identity, no session continuity requirement, and no differentiated permissions or role-based visibility. Every visitor sees the same calculator and the same behavior.
Everything the product does happens on that one page: building the expression, showing the result, and clearing. There is no second page, no modal flow, no onboarding overlay, and no future-horizon capability accepted in the current requirements. The backend and database are provisioned infrastructure that the calculator does not need to fulfill its accepted behavior; they remain available for application APIs but add no product requirement here.
The single page and anonymous public entry. It presents the calculator as a labelled industrial object and is the sole owner of all accepted calculator behavior.
Information and state
Primary actions
Supporting actions and controls
Domain entities
Component responsibilities
States
FR-1 — Single-page calculator delivery (explicit) As a Calculator User, I should use the calculator on a single page, so that I can do arithmetic without navigating anywhere.
FR-2 — Enter numbers and arithmetic operators (explicit) As a Calculator User, I should enter numbers and arithmetic operators to build a calculation, so that I can express the arithmetic I want performed.
FR-3 — See the current expression and computed result (explicit) As a Calculator User, I should see the current expression and the computed result, so that I can confirm what I entered and read the answer.
FR-4 — Clear the calculation and start a new one (explicit) As a Calculator User, I should clear the calculation and start a new one, so that I can reuse the calculator for a fresh calculation.
Product context. An anonymous everyday person who needs quick arithmetic. They arrive at the single Calculator page with no account and no prior state; the page is both the product's public entry and the working instrument.
Primary goal. Get a correct arithmetic result quickly, on one page, without leaving it.
Distinct accepted responsibilities.
Relevant inputs and decisions. Which digits, decimal point, and operators to enter; when to press equals to evaluate; when to clear and start over. The user decides when the calculation is complete and when to reset.
Interactions with other accepted participants. None. The Calculator User is the only active human actor; arithmetic evaluation is a local page responsibility with no handoff to another participant.
Observable success. The correct result appears as the largest element on the page, the expression is visible above it, and the user can clear and start a new calculation without reloading or navigating.
The creative direction is authoritative: "Quoted arithmetic — a calculator as a tagged industrial object", muse Virgil Abloh.
Colour tokens (light mode)
#E9E7E2#F7F6F3#111111#FF4A00 — rationed to exactly three places: the equals key, the spec-tag stripe, and the quoted label.#6E6B66Contrast is black-on-bone and bone-on-black, both far above 4.5:1. No second accent colour; no indigo or Bootstrap-blue anywhere.
Typography
clamp(56px, 12vw, 120px); expression line 18–24px; key labels 20–24px; micro-labels 11px caps.Shape language
Layout
Imagery
Avoid
#2563EB-family accents; rounded pill buttons, soft drop shadows, or glass panels; centred marketing hero with subheadline and CTA button; stock photography, 3D blobs, or gradient meshes; more than one accent colour (orange stays rationed); Inter, Roboto, Poppins, or system-ui type; decorative bounce or spring easing on key presses; any second page, modal flow, or onboarding overlay.The first screen is the calculator itself as a physical object: a bone-white slab (#F7F6F3) with a 2px ink outline and a flat offset black shadow, sitting slightly off-centre on a concrete-grey field (#E9E7E2), with a safety-orange hazard-stripe bar running across its top edge and a clipped-corner spec tag reading "TERRA-PAGE — CALCULATOR — No. 001" pinned above it in quoted, letterspaced caps.
The dominant element is the oversized result numeral (up to 120px, Archivo 200, tabular) bleeding to the left edge inside the slab, with the expression line small and right-aligned above it. There is no headline-plus-subtext-plus-button stack, no gradient, and no centred marketing hero — the working instrument is the hero. A thin ruled measurement scale runs down the slab's left edge like a ruler on a tool, and a single 14px muted instruction line sits below the slab, separated by a hairline rule.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
translateY(2px) with the ink shadow collapsing; result numerals swap with a 120ms crossfade; the hazard stripe slides 12px on operator selection. No bounces, no easing theatrics, no ambient loops.prefers-reduced-motion, key presses and result updates apply instantly with no translate or crossfade; the hazard stripe reflects operator selection by position without sliding; the static arrangement keeps all readable text and controls whole and inside the viewport and their containers.font-size: clamp(...) with its mobile size) to fit, and no other element covers any part of them. Decoration and texture may be cropped or bled, but never over readable text or controls.prefers-reduced-motion.
Enter digits and a decimal point, choose +, −, × or ÷, then press equals to read the result. Use the clear key to wipe the expression, the answer and the selected operator, and start a fresh calculation.

Enter digits and a decimal point, choose +, −, × or ÷, then press equals to read the result. Use the clear key to wipe the expression, the answer and the selected operator, and start a fresh calculation.
No comments yet. Be the first!