deep-medicine is a personal medicine register built around a single, repetitive act: a person stands in a kitchen with a pill bottle, a blister box, or a folded paper insert in hand, and needs that medicine recorded without typing every line of the label. The product lets the Medicine registrant scan the label on the medicine box, bottle, or paper insert, extracts the detail information from that scan, fills the extracted details into a registration form, and lets the registrant complete and submit the form to register the medicine. Registered medicines persist in the registrant's own list so they can be revisited later.
The audience is ordinary people — not clinicians — who keep medicines at home and want certainty rather than cheer. The interface is treated as a precision instrument: dark, steady, unhurried, with one amber signal that tells the registrant the scan is locked and one teal signal that tells the registrant an extracted field is verified.
This document is the System Requirements Document for deep-medicine, written for the requester, Aynishet Alemu.
deep-medicine is delivered as a first-party web application with a custom React interface, a shared FastAPI backend, and application-owned persistent storage in MariaDB. Label extraction is performed by the backend through the provisioned LiteLLM gateway, which in turn reaches the model provider; PostgreSQL exists only to support LiteLLM and holds no application-owned medicine data.
The product owns its identity. Because a registrant must privately own and resume a durable list of registered medicines, and because each registration must remain bound to the correct registrant, the application establishes identity on first use through self-service enrollment and verifies returning registrants before any protected medicine record is reachable. The Landing page, Sign Up, and Login are anonymously reachable; Scan Label, Register Medicine, and My Medicines require a verified session. No differentiated roles, permissions, or shared-state visibility controls exist: every registrant sees only their own medicines.
The current delivery horizon covers the complete scan → extract → fill → complete → register → revisit lifecycle. Nothing beyond that lifecycle is committed. There is no clinician workflow, no prescription handling, no pharmacy or inventory integration, no sharing of records between people, and no dosing advice or interaction checking.
Removed from scope
FR-1 — Scan a medicine label As a Medicine registrant, I should scan a label from a medicine box, bottle, or paper insert so that I do not have to type the label myself. (explicit)
FR-2 — Extract detail information from the scanned label As a Medicine registrant, I should have the detail information extracted from my scanned label so that the registration form is populated for me. (explicit)
FR-3 — Fill the extracted details into the registration form As a Medicine registrant, I should see the extracted details filled into the registration form so that I can confirm or correct them before registering. (explicit)
FR-4 — Complete the form to register the medicine As a Medicine registrant, I should complete the form and submit it so that the medicine is registered. (explicit)
FR-5 — Self-service enrollment As a Medicine registrant, I should be able to enroll myself on first use so that I can begin scanning and registering medicines. (required_inference)
FR-6 — Returning verification As a returning Medicine registrant, I should verify myself before reaching my medicine records so that my registered medicines stay private to me. (required_inference)
FR-7 — Captured scan available before extraction As a Medicine registrant, I should have my captured label scan held before extraction runs so that extraction has a source and I can retake it if the capture is poor. (required_inference)
FR-8 — Revisit registered medicines As a Medicine registrant, I should see my registered medicines in a durable list so that I can revisit what I have recorded. (required_inference)
Product context. The Medicine registrant is an ordinary person at home with medicine boxes, bottles, and folded paper inserts on hand. They are not a clinician. The task is repetitive and slightly anxious: read a label correctly and get it recorded. They want certainty, not cheer, and they want to stop retyping small print.
Primary goal. Turn a physical medicine label into a saved, correct registration with as little manual typing as possible.
Distinct accepted responsibilities.
Relevant inputs and decisions. Which label source they are scanning (box, bottle, or paper insert); whether a capture is legible enough to keep or must be retaken; whether each extracted value is correct; whether the form is complete enough to submit.
Interactions with other accepted participants. The registrant is the only active human persona. The backend performs extraction on their behalf through the LiteLLM gateway and the model provider, and the registrant sees and acts on the result — the teal locked marks, the champagne "needs you" ticks, and the gauge count. No other person participates in or is affected by a registration.
Observable success. The gauge reads the locked-field count, every "needs you" tick is resolved, submission succeeds, and the medicine appears in My Medicines where the registrant can open it again later.
The muse is MARQ by Garmin — a precision instrument for the medicine shelf. The headline register is calm authority: machined titanium, dark and steady, with one amber signal for a locked scan and one teal signal for a verified field.
Colour tokens (dark mode, authoritative):
| Role | Hex | Use |
|---|---|---|
| Background | #14171A | Graphite-titanium ground, ~70% of every screen |
| Surface | #1E2226 | Panels one step up from the ground |
| Text | #EDEAE3 | Warm off-white body and values |
| Primary | #C8A263 | Champagne instrument metal: rules, gauge ticks, primary action fill (dark text on champagne), focus rings |
| Accent | #3FA8A0 | Teal signal only: extraction locked / field verified, live scan reticle — never body text or large fills |
| Muted | #8A8F94 | Labels and metadata at 12–13px uppercase with 0.14em tracking |
| Hairline | #C8A263 at 25% opacity | 1px borders on panels |
No blue, indigo, or violet anywhere — including links, focus rings, and chart fills.
Typography:
clamp(44px, 9vw, 128px); h2 clamp(30px, 4.6vw, 56px); h3 28px; body 17px; label 12px; micro 11px; gauge numerals clamp(40px, 7vw, 88px).Shape language: machined, not soft — 2px radii on inputs and buttons (instrument bezels), 8px on large panels, 0px on data rows and rules. Circular gauges and half-dial arcs recur for scan confidence, dose counts, and register totals. 1px hairline rules everywhere; tick marks at 8px intervals along section edges; chamfered corners on the scan viewport frame with four corner brackets like a camera reticle.
Layout: a dark instrument console. Fixed 72px left rail on desktop (icon + condensed label, champagne active tick), collapsing to a bottom tab bar at 375px. Strict 12-column grid, 24px gutters, max 1240px. Data is always tabular — label/value pairs in ruled rows, never free-floating cards. Register Medicine is a two-pane split: left 5 columns pin the captured label image with corner brackets and a zoom loupe; right 7 columns hold the extracted fields as ruled rows.
Imagery: macro photography on graphite — a pill bottle cap at 45°, blister foil in raking light, the edge of a folded paper insert — all in the same warm single-source studio light with deep shadow. Topographic hairline contour patterns as faint background texture at 6% opacity. Medicine-form pictograms (box, bottle, insert) drawn as 1.5px line icons. No stock people, no illustration for its own sake.
Avoid: white or near-white grounds; blue, indigo, or violet anywhere; rounded 16–24px cards in a grid with hover-lift shadows; centred headline + subtext + gradient blob heroes; Inter, Roboto, Poppins, Manrope, or system-ui; springy or bouncy easing; friendly illustrated characters or pastel sticker shapes; glassmorphism blur panels over gradients.
The public entry is a full-bleed graphite stage, not a centred SaaS hero. The left 7 columns carry a stacked uppercase Saira Condensed headline — "SCAN THE LABEL. / KEEP THE RECORD." — with the second line set in champagne and bleeding to the right edge of its column. Beneath it, a single ruled row of three instrument readouts (BOX · BOTTLE · PAPER INSERT) with tick marks at 8px intervals. The right 5 columns hold the dominant element: a large circular instrument bezel, champagne-ringed with tick marks around the rim, containing a macro photograph of a pill bottle label, with a teal scan line sweeping across it on a 2.4s loop and four corner brackets framing the crop. The CTA sits pinned under the headline as a champagne-filled bezel button with a dark label, aligned flush-left, never centred.
The concept recomposes only accepted content and controls: the three label sources the registrant can scan, the scan act itself, and the single entry action into enrollment. Every readable headline, label, numeral, and control stays whole inside the viewport and its container at 375px, 768px, and 1280px; the macro photograph and topographic texture may bleed and crop freely.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: dimensional_css
Landing Hero Motion Brief
prefers-reduced-motion the sweep line becomes a static bracket glow, gauge arcs appear at their final value, and numbers appear final. The layout remains fully usable and every readable element stays whole.prefers-reduced-motion. (explicit — creative direction)#EDEAE3 on #14171A and #1E2226 meets body-text contrast; champagne #C8A263 is used for rules, ticks, focus rings, and filled primary actions with dark labels. (basic_default)
Scan a label from a medicine box, bottle or paper insert — its details are extracted and filled into the registration form, then you register the medicine.

Scan a label from a medicine box, bottle or paper insert — its details are extracted and filled into the registration form, then you register the medicine.
No comments yet. Be the first!