opal-start is a simple calculator delivered as a single page design. A visitor opens the page, enters numbers and arithmetic operators, and sees the current calculation and its result in an oversized readout. A clear control lets them start over. The product is deliberately minimal: one page, one keypad, one display, no navigation, no accounts, and no marketing sections.
The audience is anyone who needs quick everyday arithmetic — a person who wants a dependable, legible calculator that feels hand-made rather than corporate. The design language is "charming clarity": pixel-perfect, friendly symbols in the spirit of Susan Kare, with the numbers as the hero and every key reading instantly.
opal-start is a single-page web application. The frontend is a React application that renders the one Calculator page. The shared FastAPI backend process provides the application API surface, and MariaDB is provisioned as the application-owned persistent store. The calculator's arithmetic entry, display, and clearing behavior is a client-side interaction on the single page; the provisioned backend and database are infrastructure available to the application and do not by themselves introduce accounts, saved history, or domain entities.
Actors:
Current accepted behavior:
Ownership: the Calculator page is the anonymous public entry surface and owns all accepted human interaction — digit and operator entry, result display, and clearing. No provider or external destination owns any accepted behavior.
Removed from scope
opal-start is delivered as one first-party page, reachable anonymously with no sign-in, no account, and no persisted user state. The page is both the entry point and the entire product: there is no separate landing page, no navigation menu, and no second destination. All accepted work — entering numbers and operators, computing and viewing a result, and clearing to start over — happens within the Calculator page.
The backend and database are provisioned infrastructure for the application; the current accepted calculator behavior does not require server-side persistence, identity, or history, and none is introduced. Future ideas are kept out of the current page and acceptance criteria.
The single page of the product, and its anonymous public entry. A warm paper ground holds a compact wordmark, a small tracked page title, and one oversized off-white keypad panel slightly offset from centre, containing the readout and the key grid.
Information and state
Primary actions
Supporting actions and components
Domain entities
States
FR-1 — Single-page calculator delivery (explicit) As a Calculator User I should get the calculator as a simple single page design 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 so that I can build the calculation I want to compute.
FR-3 — View the current calculation and its result (explicit) As a Calculator User I should view the current calculation and its result on the page so that I can see what I entered and what it evaluates to.
FR-4 — Clear the calculation to start over (explicit) As a Calculator User I should clear the calculation so that I can start over with a fresh calculation.
FR-5 — Key press feedback (required_inference) As a Calculator User I should see each key respond when I press it so that I know my input registered.
Product context. A person who needs quick everyday arithmetic and opens opal-start's single page directly. They arrive anonymously — no account, no profile, no saved history — and expect the calculator to be immediately usable.
Primary goal. Get an accurate result for a simple calculation on one page, without navigating elsewhere or learning an interface.
Distinct accepted responsibilities.
Relevant inputs and decisions. Which digits and operators to enter, when to press equals to compute, and when to clear and begin again. The user decides when a calculation is complete and when to discard it.
Interactions with other participants. None. The Calculator User is the only active human participant; no counterparty, recipient, or provider is affected by the calculation.
Observable success. The readout shows the correct result for the entered calculation, the current calculation remains visible, and clearing returns the page to a fresh initial state — all within the single page.
The creative direction is authoritative: "Charming clarity" — a calculator built from pixel-perfect, friendly symbols, in the spirit of Susan Kare. The emotional register is calm, trustworthy, and quietly delightful; the numbers are the hero and every key reads instantly.
Palette (light mode)
| Role | Hex | Use |
|---|---|---|
| Background (paper) | #F4EFE6 | Warm paper ground, ~60% of the surface |
| Surface (keys/panel) | #FFFDF8 | Off-white keypad panel and key tiles, ~30% |
| Text (ink) | #1B1B1B | Display digits, key labels, outlines |
| Primary (pine green) | #2F6B4F | Operator keys and the equals key |
| Accent (coral) | #E0533D | The clear key and the single live operator indicator only |
| Muted | #8A8272 | Secondary labels and hairline pixel rules |
Roughly 60% paper, 30% off-white keys, 10% green/coral signal.
Typography
clamp(48px, 12vw, 104px); title clamp(28px, 5vw, 44px); key labels clamp(20px, 3.2vw, 26px); micro-labels 12px uppercase tracked +0.14em; helper text 14px.Shape language. Chunky pixel-friendly tiles with hard 4px radii and 2px ink outlines. A stepped "pixel corner" treatment — small square notches cut from corners — on the display bezel and the equals key, so edges feel drawn on a grid, not smoothed. Keys are square-ish and uniform, with a 2px bottom shadow that reads as a physical press rather than a soft float.
Layout. Single centred column on the paper ground: compact wordmark top-left, oversized readout panel spanning the column width, then a strict 4-column keypad grid with even gutters. The clear key sits as its own full-width row above the keypad in coral; digits and operators share the grid below. One page, no scrolling required on desktop, stacking cleanly to a narrower keypad at 375px with keys fully inside the viewport.
Imagery. No photography. The visual content is the interface itself plus a few pixel pictograms: a small pixel calculator glyph in the wordmark, a tiny pixel "AC" badge, and a faint pixel-grid texture in the paper ground at very low contrast. Everything is drawn from squares and symbols.
Avoid. Rounded pill buttons or soft offset drop shadows; gradient blobs, glass panels, or blurred surfaces; photography or 3D renders; Bootstrap blue or indigo accents; Inter, Roboto, Poppins, or system-ui type; identical hover-lift card grids; decorative animation beyond key-press and cursor blink; any second page, nav menu, or marketing sections.
Readability constraint. Headlines, wordmarks, labels, numbers, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit, with no other element covering them. Decoration may bleed off edges; readable text and controls may not.
The hero is the calculator itself, not a marketing banner. A warm paper field (#F4EFE6) holds a single oversized off-white keypad panel (#FFFDF8), slightly offset from centre, with the readout filling its top third in huge VT323 numerals (clamp 48–104px), right-aligned to a blinking pixel cursor. Beneath it, the 4-column key grid sits in ink-outlined tiles with stepped pixel corners and a 2px hard shadow that snaps down on press — a physical, drawn-on-a-grid keypad. The page title sits small and tracked above the panel; the full-width coral clear key (#E0533D) is the one hot block on the screen, sitting above the digit grid. A printed pixel-grid texture bleeds off the right edge as decoration only. There is no centred headline-plus-subtext-plus-button composition anywhere.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
prefers-reduced-motion, the pressed state is static with no blink, and the page remains fully usable.
Display 0
Session only · no history saved

Display 0
Session only · no history saved
No comments yet. Be the first!