purple-calculator is a simple calculator delivered as a single-page design. The product intent is narrow and explicit: a person opens one page, enters numbers and arithmetic operators, sees the computed result, and can clear the current calculation to start a new one. The audience is anyone who needs quick everyday arithmetic on phone or desktop, anonymously, in seconds — the product is a casual utility, not an instrument for professional or financial work.
The design brief is deliberately expressive: the project name signals that colour is part of the product, and the creative direction treats the calculator itself as a glossy, tactile object in violet. Simplicity of function and richness of surface are both requirements; neither may compromise the other, and legibility and speed of use take precedence over decoration.
purple-calculator is a single-page, anonymous web calculator. The page presents a wordmark, a result readout, and a 4×5 keypad inside one capsule-shaped calculator body. The Calculator User enters digits and arithmetic operators; the readout shows the current entry and the computed result; a clear control resets the calculation so a new one can begin. All of this happens on the one page named Calculator.
The application is delivered as a React frontend served alongside a shared FastAPI backend process and a MariaDB database service. The calculator's arithmetic and its display state are a client-side interaction on the single page; the provisioned backend and database are available infrastructure and do not by themselves create stored calculations, accounts, or history. No identity, session, or persistence of calculations is required by the accepted requirements.
Actors: one active human persona, Calculator User, acting anonymously on the public Calculator page. No other human participants are affected by a calculation — the result is observed by the same person who entered it — so no handoff to a second participant exists. The backend and database are non-persona infrastructure actors.
Removed from scope
The product is a first-party, application-owned single page with no access requirement: it is reachable anonymously and immediately usable. There is no sign-in, no account, no saved history, and no sharing. Because a calculation produces no durable relationship, obligation, entitlement, or value transfer that must remain bound to a person, application-owned identity is neither required nor introduced.
The delivery boundary is the one page. Everything the Calculator User does — entering numbers, entering operators, reading the result, and clearing — occurs within the Calculator page's own working surface. The provisioned FastAPI backend and MariaDB service exist as the project's shared runtime infrastructure; they are not used to store calculations or user data under the current requirements, and no additional pages, routes, or services are introduced. Future ideas are kept out of the current scope (see Section 11).
The single page of the product, and its anonymous public entry surface. It explains the simple calculator, accepts numbers and operators, displays the result, and supports clearing to begin a new calculation.
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 reach the calculator as a single page, so that I can calculate without navigating anywhere else.
FR-2 — Enter numbers (explicit) As a Calculator User, I should enter numbers using the digit keys, so that I can supply the operands of my calculation.
FR-3 — Enter arithmetic operators (explicit) As a Calculator User, I should enter arithmetic operators, so that I can combine operands into an expression.
FR-4 — See the computed result (explicit) As a Calculator User, I should see the computed result after evaluating my expression, so that I learn the answer to my calculation.
FR-5 — Clear the current calculation (explicit) As a Calculator User, I should clear the current calculation, so that I can start a new one.
FR-6 — Tactile key feedback (required_inference) As a Calculator User, I should receive immediate visual confirmation when I press a key, so that I can trust that my input registered.
FR-7 — Readable, whole controls at every viewport (explicit, from design constraints) As a Calculator User, I should see the wordmark, readout, key legends, and every key fully inside the viewport and their container at 375px, 768px, and 1280px, so that I can read and press everything without clipping.
Product context. An anonymous visitor who needs quick everyday arithmetic — a sum, a percentage split, a running total — on a phone or desktop. They arrive with no account, no prior state, and no expectation of saved history; the visit lasts seconds. The project's expressive violet surface is part of what they encounter, but their purpose is the number.
Primary goal. Enter numbers and arithmetic operators, read the correct computed result, and be able to clear and reuse the calculator for the next calculation.
Distinct accepted responsibilities.
Relevant inputs and decisions. Which numbers and operators to enter; when the expression is complete enough to evaluate; whether to continue from the result or clear.
Interactions with other participants. None. The result is observed by the same person who entered the calculation, so no second human participant is affected and no handoff occurs. The backend and database are infrastructure, not participants in the user's work.
Observable success. The readout shows the correct result for the entered expression, the page remains a single page throughout, and clear returns the calculator to a usable idle state for the next calculation.
The creative direction is authoritative for this section: Sensual pop minimalism, in violet — a calculator you want to press, after the muse Karim Rashid.
Mode. Dark mode only.
Colour tokens (exact hex, by role)
#2A1440 — deep aubergine-violet covering the whole page.#3D1F5C — lifted violet capsule with a glossy top sheen.#F7EEFF — near-white on both grounds, body-size contrast well above 7:1.#B14BFF — violet for operator keys and the equals capsule.#C6FF4A — acid lime, used only for the equals/result affordance and the live result ring; never for body text.#9B86B5 — secondary labels (key legends, operator hints) at 16px and above only.No white or near-white page ground; no blue or indigo anywhere; no violet-on-white primary surface.
Typography
Shape language. Capsules and blobs only: every key is a full pill or squircle (999px / 38% radius); the calculator body is a soft capsule with a 44px radius; section dividers are curved bands. Glossy highlight arcs sit on the top-left of keys and the body as a 1px white 18%-opacity stroke plus a soft inner sheen. No sharp corners, no hairline grids, no hard rules.
Spacing rhythm. 20px page margins at mobile; 12px gutters between keys; 44px minimum touch targets; generous internal padding inside the capsule so the readout breathes.
Imagery style. Glossy 3D primitives as decoration only — a blurred violet sphere and a small lime torus floating at low opacity behind the calculator at 1280px, cropped by the page edge, never overlapping keys or the readout. No photography, no stock people; gloss lives in highlights on solid colour, not in gradients used as the primary surface.
The public entry is the calculator itself as the only object on the page: a single glossy aubergine capsule, 460px wide at desktop, floating against the deep violet ground with a soft lime rim-light on its left edge and a blurred violet sphere bleeding off the top-right corner.
The result readout occupies the capsule's top third at 72px in near-white Quicksand tabular numerals, right-aligned, with a thin lime underline that grows digit by digit as the user types. Below it, the keypad reads as candy pills — each key a full capsule with a top-left white gloss stroke — and the equals key is a tall lime capsule spanning two rows, the only lime element on the page.
Above and behind, an oversized vertical "purple" wordmark in Comfortaa 700 runs up the right third at 30% opacity, deliberately cropped by the viewport at 1280px and reduced to a curved band behind the calculator at 768px. It is decoration and never overlaps the calculator, the readout, or any key legend. There is no centred headline-plus-subtext-plus-button stack and no gradient-blob field; the calculator's own surface carries the drama.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief
cubic-bezier(0.34,1.56,0.64,1); the readout cross-fades the old value out and the new one in with a 140ms rise of 6px; on evaluate, a lime ring around the equals capsule pulses once. The outcome is a tactile, legible confirmation of every entry and of the final result.#2A1440; the readout shows its idle zero with the lime underline at rest; the vertical "purple" wordmark is cropped at the right edge; the blurred sphere bleeds off the top-right; the lime equals capsule anchors the keypad.prefers-reduced-motion every transition becomes an instant state change and the background drift stops; the static arrangement keeps the same composition, with all text and controls whole and fully visible.#F7EEFF on #2A1440 and #3D1F5C keeps body-size contrast well above 7:1; muted #9B86B5 is used only at 16px and above.prefers-reduced-motion all transitions become instant and the decorative drift stops, while the page remains fully usable.frontend, backend, and database services from the initial scaffold inventory.prefers-reduced-motion state in which all transitions become instant and decorative drift stops.

No comments yet. Be the first!