kinetic-calculator is a simple calculator delivered as a single-page design. The product intent is narrow and complete: one screen, one keypad, one display, where a visitor can perform everyday arithmetic — enter numbers and operators, see the running result, and clear or correct the entry to start again — without leaving the page.
The audience is anyone who needs a fast, correct calculation: students, freelancers, shoppers, and desk workers. There is no brand, no onboarding, no dashboard, and no account. The joy of the product comes from the keypad itself: the interface's response to the pointer and the thumb is the product, while the arithmetic stays dead simple.
The requester is Diya Trivedi (IN). The project is named kinetic-calculator.
kinetic-calculator is a single-page, anonymous, client-facing calculator. It is delivered as a React frontend served alongside a shared FastAPI backend process and a MariaDB database provisioned in the initial scaffold. The calculator's arithmetic, display, expression strip, history ticker, and keypad interaction are the product; the backend and database are provisioned infrastructure and do not by themselves introduce accounts, persistence of calculations, or domain entities.
Actors:
Accepted behavior in scope:
Narrow exclusions: no second page, no modal, no settings panel, no onboarding overlay, no account or sign-in, no scientific functions beyond the arithmetic operators shown on the keypad, no persistence of calculation history across sessions, and no dashboards.
Removed from scope
The user asked for a simple single-page design of a calculator. That request is the whole product: one anonymously reachable page that owns number and operator entry, the result display, the running expression, a short history of recent results, and clearing the calculation. There is no identity requirement — the calculator is public and ephemeral, and nothing about a calculation needs to be privately owned, resumed, or bound to a participant. No account, sign-in, or provisioning flow is introduced.
The single page is the entire current delivery. There is no future horizon stated by the user; anything beyond the accepted calculator behavior is out of scope for this document. The provisioned backend and database remain available infrastructure but carry no accepted calculator responsibility, and no server-side or persistent behavior is invented to justify them.
The single, anonymously reachable public entry page. It is a full-viewport dark stage with no scroll on desktop: the display well occupies the left 60% and the 4×5 keypad occupies the right 40%, aligned to a strict 8pt grid. On tablet the display stacks above the keypad; at 375px the display well compresses to a single 96px-tall band, the expression strip scrolls horizontally, and the keypad fills the remaining height with 56px-minimum tap targets. Everything fits inside the viewport at 375, 768, and 1280 with no element overlapping the display numerals or the keys.
Information and state
0) ready to be typed.128 × 4 −) in Space Mono 400, above the display, with a 2px acid inner rule along the display well's bottom edge that fills left-to-right proportionally to the length of the running expression.prefers-reduced-motion), and the live operator state is shown in acid yellow.Primary actions
0–9 and the decimal point to build the current number.÷, ×, −, + to select an operation; the selected operator enters the pending state.= key to resolve the calculation; the result number does a 200ms scale-from-0.96 settle.AC to clear the calculation and start fresh.DEL to delete the last entered digit.Supporting actions and component responsibilities
#2A2A30 borders, perfect squares on desktop and 1:1.15 rectangles on mobile, separated by 8px gutters. Each key tilts up to 4deg toward the pointer on hover (CSS transform, no library) and depresses 2px with a 90ms cubic-bezier(0.2,0.8,0.2,1) snap on press.Domain entities
States
AC or DEL to resume entry.AC clears the calculation and history of the current expression; DEL removes the last digit so the user can correct a mistyped entry.prefers-reduced-motion, every animation collapses to an instant state change and the operator pulse becomes a static acid underline.FR-1 — Single-page calculator delivery (explicit) As a Calculator user, I should get a simple calculator delivered as a single page, so that I can perform everyday 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 a number, so that I can enter the operands of my calculation.
0–9 or the decimal point.DEL removes the last entered digit so a mistyped entry can be corrected.=.FR-3 — Operator selection (explicit) As a Calculator user, I should press an operator key to choose an operation, so that I can combine operands.
÷, ×, −, or +.AC clears the pending operator and expression.=.FR-4 — Resolve the calculation (explicit) As a Calculator user, I should press the equals key to resolve my calculation, so that I see the correct result.
= key.AC or DEL to recover.FR-5 — Clear the calculation (explicit)
As a Calculator user, I should press AC to clear the calculation, so that I can start a new calculation.
AC.FR-6 — Delete the last digit (explicit)
As a Calculator user, I should press DEL to remove the last entered digit, so that I can correct a mistyped entry without clearing everything.
DEL.DEL leaves the display unchanged.AC.FR-7 — Running expression and history visibility (explicit) As a Calculator user, I should see the running expression and the last three results, so that the calculator shows its working like a piece of instrumentation.
FR-8 — Cursor-reactive keypad (explicit) As a Calculator user, I should feel the keypad respond to my pointer and press, so that entry feels physical rather than transactional.
prefers-reduced-motion, all animation collapses to an instant state change and the operator pulse becomes a static acid underline.Product context. The Calculator user is an anonymous visitor who needs a fast, correct calculation — a student, freelancer, shopper, or desk worker. They arrive at the single Calculator page with no account, no onboarding, and no prior state; the page is the whole product.
Primary goal. Get the correct result of an everyday arithmetic calculation without leaving the page.
Distinct accepted responsibilities.
=.AC or correct the entry with DEL to start a new calculation.Relevant inputs and decisions. Which digits and decimal point to enter, which operator to select, when to resolve with =, and whether to correct with DEL or clear with AC.
Interactions with other accepted participants. None beyond the calculator itself; the Calculator user is the only active human participant, and the frontend application performs the arithmetic and renders the response.
Observable success. The correct result appears in the display, the expression strip shows the completed chain, and the result is recorded in the history ticker — all without leaving the page.
÷, ×, −, or +). The operator enters the pending state in acid yellow and the operator keys carry the slow 3s acid pulse.= key. The result appears in the display with a 200ms scale-from-0.96 settle, the expression strip shows the completed chain, and the result is pushed into the history ticker (keeping the last three).Failure/recovery. If the calculation divides by zero or produces an undefined result, the display shows an error state; the user presses AC to clear or DEL to correct and resumes entry.
DEL. The last entered digit is removed from the display and the expression strip updates.Failure/recovery. If the entry is already empty, DEL leaves the display unchanged and the user continues.
AC. The display returns to the waiting number, the expression strip empties, and the pending operator state clears.prefers-reduced-motion, every animation collapses to an instant state change and the operator pulse becomes a static acid underline.The creative direction is authoritative for this section. Muse: Yugo Nakamura — interaction as delight, a calculator that answers your hands. Headline concept: the calculator IS the hero.
Mode. Dark mode only.
Colour tokens (exact hex by role).
| Role | Hex | Usage |
|---|---|---|
| Background | #0E0E10 | Near-black graphite ground, ~70% of the screen |
| Surface | #1A1A1E | Key plates |
| Text | #F4F4F2 | Numerals and readable text |
| Primary | #E8FF3A | Acid yellow — equals key and live operator state only |
| Accent | #FF5C36 | Burnt orange — clear/delete and active-result caret |
| Muted | #6B6B72 | Operator glyphs at rest and hairline key borders |
| Key border | #2A2A30 | 1px key borders |
No blue, no gradient, no glass. The acid yellow is the single hot accent and belongs to the equals key and the live operator state — nothing else.
Typography.
AC, DEL, ÷, ×, −, +, =).Shape language. Hard-edged keys with 14px radii and 1px #2A2A30 borders — a calculator body, not a pill festival. The display well is a wide rectangle with a 2px acid inner rule along its bottom edge that fills left-to-right as the expression grows. Keys are perfect squares on desktop, 1:1.15 rectangles on mobile, separated by 8px gutters. No blobs, no frosted panels, no drop shadows beyond a 1px inner top highlight.
Layout. One full-viewport dark stage, no scroll on desktop. Left 60% is the display well; right 40% is the 4×5 keypad on a strict 8pt grid, with the equals key spanning two rows in acid yellow. On tablet the display stacks above the keypad; at 375px the display well compresses to a single 96px-tall band, the expression strip scrolls horizontally, and the keypad fills the remaining height with 56px-minimum tap targets. Everything fits inside the viewport at 375, 768, and 1280 with no element overlapping the display numerals or the keys.
Imagery. No photography, no illustration, no 3D props. The graphic content is the interface itself plus one procedural element: a faint 24px dot-grid etched into the background at 6% opacity that ripples outward in a single 400ms wave from whichever key was last pressed.
Avoid. Blue or indigo anywhere; Inter, Roboto, Arial, Helvetica, Poppins, or system-ui for headings or numerals; gradient-blob backgrounds, frosted glass, or a grid of identical hover-lift cards; a centred headline + subtext + button hero; playful bounce easing on the result number or springy overshoot beyond the 6px digit arrival; photography, illustration, emoji, or 3D props standing in for the interface; any second page, modal, settings panel, or onboarding overlay; decorative motion that runs without a user action other than the pending-operator pulse.
The public entry is the Calculator page itself, and the calculator is the hero. A full-bleed near-black stage (#0E0E10) holds a 148px acid-lit result number occupying the left two-thirds, flush right against the display well's inner rule, while the keypad's dark plates sit on the right like a machined control panel. The only saturated colour on first paint is the acid-yellow equals key and the thin rule under the display. There is no headline, no subhead, no CTA button, and no gradient — the first thing a visitor sees is a number waiting to be typed and a keypad that visibly reacts to the cursor.
Signature moves, all recomposing accepted content and controls:
128 × 4 −) and a three-result history strip below in muted grey.Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief
cubic-bezier(0.2,0.8,0.2,1) snap and fires a single 400ms dot-grid ripple from that key; the new numeral slides in from the right with a 6px overshoot and settles over 240ms; pressing = resolves the calculation and the result number does a 200ms scale-from-0.96 settle. Every motion is a response to a user action.prefers-reduced-motion, every animation collapses to an instant state change and the operator pulse becomes a static acid underline; the layout remains fully usable and readable.prefers-reduced-motion, every animation collapses to an instant state change and the operator pulse becomes a static acid underline.backend, database, and frontend.÷, ×, −, +) plus =, AC, DEL, and the decimal point.prefers-reduced-motion state in which every animation collapses to an instant state change and the operator pulse becomes a static acid underline.
awaiting input

awaiting input
No comments yet. Be the first!