shadow-start is a simple calculator delivered as a single-page design. The product intent is a self-contained, anonymous utility: a person opens one page, enters numbers and operations, and reads the computed result — no setup, no accounts, no navigation beyond that one screen. The design must be simple and must remain a single page.
The audience is any anonymous visitor who needs a quick calculation and wants to trust the result immediately. The interface is treated as a single engineered instrument rather than a marketing experience: a top identification rail, an oversized right-aligned numeric display, and a fixed four-column keypad with a single saturated equals key.
shadow-start is delivered as a React frontend served alongside a shared FastAPI backend process and a MariaDB database, provisioned via docker-compose. The calculator itself is a client-side, single-page instrument: number entry, operation selection, and result computation happen on the one Calculator page. The backend and database are provisioned infrastructure available to the application; the accepted calculator behavior does not require server-side persistence, accounts, or stored history, so no domain entities, authentication, or data model are introduced by this document.
Actors:
Accepted behavior: a single anonymous Calculator page hosting number entry, operation selection, an equals action, a clear action, and a live numeric display of the current entry and computed result.
Narrow exclusions: no multi-page navigation, no accounts or sign-in, no saved calculation history, no scientific or programmer modes, no unit conversion, no sharing or export.
Removed from scope
The product is one page. Everything the Calculator User needs — the display, the digits, the four operations, equals, and clear — lives inside a single calculator frame on that page. Access is anonymous and public: there is no identity establishment, no session continuity, and no protected state, because the accepted behavior creates no durable actor-specific state, commitment, or value transfer. The backend and database are provisioned and available, but the current accepted scope does not require them to store or serve calculator state; they remain part of the delivery platform without adding product behavior.
Current horizon: the single-page calculator as described. No future features are accepted in this document.
The single, anonymously reachable page. It is the complete product surface.
Information and state
clamp(52px, 10vw, 104px).Primary actions
Supporting actions
Domain entities
Component responsibilities
States
0; no operator active.FR-1 — Single-page calculator delivery (explicit) As a Calculator User, I should reach the complete calculator on one page, so that I can calculate without navigating anywhere else.
FR-2 — Number entry (explicit) As a Calculator User, I should enter numbers using the digit keys, so that I can compose the values I want to calculate.
FR-3 — Operation selection (explicit) As a Calculator User, I should select an operation (+, −, ×, ÷), so that I can specify what to do with my numbers.
FR-4 — Compute result (explicit) As a Calculator User, I should press equals to compute the result, so that I can read the answer.
FR-5 — Clear (explicit) As a Calculator User, I should clear the calculator, so that I can start a fresh calculation.
0 and no operator is active.FR-6 — Keyboard input (required_inference) As a Calculator User, I should use my keyboard for digits, operators, equals, and clear, so that I can calculate quickly without reaching for the pointer.
Product context. An anonymous visitor who arrives at shadow-start needing a quick arithmetic answer. They have no account, no prior state, and no expectation of a multi-step product experience — the page is the tool.
Primary goal. Get a correct result from one self-contained screen as fast as possible, and trust it.
Distinct accepted responsibilities.
Relevant inputs or decisions. Which digits to enter, which operation to apply, when to press equals, and when to clear. The user decides when a calculation is complete.
Interactions with other accepted participants. None beyond the calculator itself; there is no counterparty, recipient, or other human participant in the accepted behavior.
Observable success. The display shows the correct computed value immediately after equals, with the active operation clearly indicated beforehand and a clean reset available afterward.
0 and no operator active.Failure/recovery. If the user divides by zero, the display shows a clear error; pressing a digit or clear returns to normal entry.
0 and any active operator fill is removed.The creative direction is authoritative: Dieter Rams functional clarity for instant arithmetic.
Palette (light mode)
#E9E4DA — warm mineral off-white.#F7F3EB — pale paper.#171715 — near-black.#D94A16 — orange, reserved for the active operator and the equals key.#F2B705 — yellow, used only for the small status dot.#77736C.Typography
clamp(52px, 10vw, 104px) (52px minimum on mobile); page title 14px; labels 11px; key legends 22px mobile to 28px desktop; helper text 14px.Shape language. Strict rectangular modules with 2px corner radii, 1px graphite rules, circular signal indicators, and physical-looking depressed key states. No soft glass, blobs, floating cards, or decorative shadows.
Layout. One centered instrument column usable at 375px: narrow top identification rail, large right-aligned display, then a 4-column keypad of equal square keys. At 768px and above, the calculator remains a deliberate central object (560px-wide pale-paper device offset slightly right at 1280px) while a slim left rail carries the title, short instruction, and keyboard shortcut legend. All controls remain within the primary calculator frame.
Imagery. No stock imagery, no decorative illustration. The calculator interface is the hero; a faint technical baseline grid and tiny schematic operator marks provide functional ornament.
The first screen is a full-height warm-grey instrument field, not a marketing hero. At 375px, a complete calculator occupies the safe central column with a 52px-to-104px right-aligned number display. At 1280px, it expands to a 560px-wide pale-paper device offset slightly right, while a narrow black typographic rail on the left reads "CALCULATE" in stacked uppercase letters. A single orange equals key anchors the lower-right corner of the keypad, with one small yellow status dot in the top rail. All readable type and controls stay inside the device and viewport; only the faint construction grid may bleed outward.
Signature moves:
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
0, no operator active, yellow status dot in the top rail.clamp(...) with its mobile size) to fit; no element covers readable text or controls.prefers-reduced-motion, provide a usable static arrangement with identical static state changes.frontend, backend, and database services.

No comments yet. Be the first!