velvet-calculator is a simple, single-page calculator. The product intent is deliberately narrow: one page where a person enters numbers and operators and reads the result on that same page. There is no multi-page application, no account, and no surrounding workflow — the calculator itself is the whole product.
The audience is everyday users who want a quick, pleasant calculator in the browser. The design brief asks for something soft, modern, and easy to touch: a frosted keypad on a warm plum ground rather than the plain white calculator template.
This document is the System Requirements Document for velvet-calculator. It specifies the single page, its components and states, the one active human persona, the calculation journey, and the visual and technical direction.
velvet-calculator is delivered as a first-party web application with a single page, Calculator. The page is the anonymous public entry: anyone who opens the app lands directly on the working calculator with no sign-in, no account creation, and no gated state. There is no application-owned identity, no session continuity requirement, and no differentiated permission or visibility — every visitor sees the same calculator.
All calculation interaction is owned by the Calculator page in the browser. The provisioned backend (FastAPI) and database (MariaDB) are part of the deployment inventory but carry no accepted product behavior for this release: the calculator's arithmetic and display state live in the page itself, and no durable user data is created, stored, or retrieved. The database is provisioned infrastructure only and does not justify domain entities, authentication, or persistence requirements.
The current delivery horizon is exactly this one page. Nothing beyond a simple single-page calculator is in scope now; any future expansion would be a separate, explicitly requested change.
The single page of the product. It is the anonymous public entry and the complete working surface: number and operator entry, the running expression, and the result all live here.
Information and state
clamp(48px, 10vw, 96px)), warm white on the frosted glass slab.Primary actions
0–9 to append digits to the current number.+, −, ×, ÷ to choose the operation (amber glow on press).Supporting actions
Domain entities
Component responsibilities
#FF6B4A), the only coral key, 1.5× wider than the others, anchored at the bottom right of the keypad.#FFC24B) glow on press with a 160ms light sweep.States
0 in the result display with an empty expression.FR-1 — Open the calculator As a Calculator user, I should open the app and land directly on the working Calculator page, so that I can start calculating immediately.
0; access — anonymous, no sign-in; failure/recovery — none applicable; continuation — begin entering digits.FR-2 — Enter digits and decimal point As a Calculator user, I should press digit keys and the decimal point to build a number, so that I can enter the operands I want to calculate with.
FR-3 — Choose an operator As a Calculator user, I should press an operator key to choose addition, subtraction, multiplication, or division, so that I can combine operands.
+, −, ×, or ÷; input — operator key press; observable result — the operator is recorded in the expression and the key glows amber with a 160ms light sweep; access — anonymous; failure/recovery — pressing an operator with no operand entered uses the current displayed value; continuation — enter the next operand.FR-4 — Evaluate the expression As a Calculator user, I should press the equals key to evaluate the expression, so that I can read the result.
FR-5 — Clear and recover As a Calculator user, I should press clear to reset the calculator, so that I can start a new calculation or recover from an error.
0; access — anonymous; failure/recovery — clear is always available, including in the error state; continuation — begin a new entry.0 displayed.FR-6 — Press feedback on keys As a Calculator user, I should see keys lift 2px and glow when pressed, so that the keypad feels physical and responsive.
Product context. An everyday person who opens velvet-calculator in a browser to do a quick calculation. They arrive with no account and no prior state; the calculator is the entire product they see.
Primary goal. Enter a calculation — numbers and operators — and read the result on the same page, quickly and without friction.
Distinct accepted responsibilities.
+, −, ×, ÷).Relevant inputs and decisions. Which numbers to enter, which operator to apply, when to press equals, and when to clear. The user decides when a calculation is complete by reading the result slab.
Interactions with other accepted participants. None. The Calculator user is the only active human persona; there is no counterparty, recipient, or approver in this product.
Observable success. The result appears in the frosted result slab in large tabular digits after pressing equals, and the user can continue from it or clear and start again.
0 above the keypad.+, −, ×, or ÷); the operator is recorded in the expression and the key glows amber with a 160ms light sweep.0 and start a new calculation.0.The creative direction — Layered glass keys on a warm plum ground, muse Michal Malewicz — is authoritative for this section.
Mode. Dark mode.
Colour tokens (exact hex by role).
#2A1B2E — deep plum ground, filling roughly 70 percent of the surface.#3B2740 — frosted plum keys and glass slab.#F7EEF4 — warm white on plum.#FF6B4A — hot coral, marking the equals key only.#FFC24B — amber, marking operator keys.#B79BB4 — secondary and subdued text.Typography.
clamp(48px, 10vw, 96px).Shape language. Frosted rounded keys with 1px light borders and 20px radii; soft floating layers with wide soft shadows.
Layout. One centred keypad column, 4 by 5 keys, maximum 420px wide. The result panel floats above the keys as a glass slab.
Imagery. No photos. Soft gradient light behind the glass panel and small glass 3D primitives as quiet corner decoration only.
Avoid. No white page background; no blue or indigo accents; no grid of identical hover-lift cards; no gradient blob behind the headline; no Inter, Roboto, or system fonts.
Readability constraint. Headlines, labels, numbers, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example clamp(...)) to fit; decoration and motion may be cropped or bled off edges but never cover readable text or controls.
The public entry is the Calculator page itself: a dark plum full screen holding one floating frosted keypad slab at centre. The result digits glow warm white across the top of the slab, rendered in tabular figures at clamp(48px, 10vw, 96px). The keypad is a single centred 4-by-5 column, maximum 420px wide, with frosted rounded keys (1px light borders, 20px radii) sitting above the plum ground. The equals key is the only coral key and is 1.5× wider than the others, anchoring the bottom right; operator keys carry the amber accent. Soft gradient light sits behind the glass panel, and small glass 3D primitives appear as quiet corner decoration only. The concept recomposes only the accepted calculator content and controls — it adds no new behavior or destination.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief
0, the coral equals key at bottom right, soft gradient light behind the glass.clamp(48px, 10vw, 96px).prefers-reduced-motion, provide a usable static arrangement with no lift, sweep, or fade.[required_inference][explicit][explicit][explicit][explicit][explicit]+, −, ×, ÷ keys, marked with the amber accent.
velvet-calculator — daily arithmetic
Keyboard works too — Enter equals, Esc clear

velvet-calculator — daily arithmetic
Keyboard works too — Enter equals, Esc clear
No comments yet. Be the first!