V Vitals Vault
Private health timeline

See the shape of your health over time.

A calm, encrypted place to record bloodwork, body signals, sleep, and movement. Your timeline is encrypted on this device, under a key the server never sees.

Tracking only. This app is not medical advice. Always discuss results and future analysis with your doctor.
Ferritin
µg/L · example data
All time
0 50 100 150 150 30 15 12 03-14 2023 19 09-05 2023 34 02-20 2024 58 08-11 2024 91 02-18 2025 118 08-12 2025
Ferritin Reference range Deficient · 15
How it works

Three steps, and you check the middle one.

Reading a lab report is the part worth automating. Trusting the result of that reading is not, so every parsed value is shown next to the text it came from before anything is saved.

  1. 1

    Drop in a lab PDF.

    Any lab, any layout, any language. The parser is not positional — it converts the document and reads it, so an Estonian or Portuguese report works the same as an English one.

  2. 2

    Check every row.

    Each value appears beside the verbatim line it was read from. Units converted to your catalog's unit are marked. Anything the catalog does not recognise is listed with a reason rather than silently dropped. Nothing enters your vault until you confirm.

  3. 3

    Watch the line, not the number.

    A result without its own printed range inherits the most recent one you did get, so a value is read against your own history rather than whichever band that particular lab happened to print.

What it tracks

About fifty-five analytes, plus the everyday signals.

The catalog carries each analyte's unit, precision, reference range and multilingual aliases — the aliases are what let a report name an analyte in its own language and still land in the right place.

HemoglobinHematocritWhite blood cellsRed blood cellsPlateletsMCVNeutrophilsLymphocytes
Total cholesterolLDLHDLTriglyceridesGlucoseHbA1cInsulin
CreatinineUreaeGFRUric acidALTASTGGTBilirubinAlbumin
TSHFree T4Free T3IronFerritinTransferrinSodiumPotassiumCalciumMagnesium
C-reactive proteinESRVitamin DVitamin B12Folate
WeightBlood pressureSleepExercise

Unit conversion is a lookup table, not a guess. The model transcribes what is printed; the arithmetic is deterministic, and a unit with no conversion rule is reported rather than imported as a bare number.

Encrypted on this device

The server stores a blob it cannot read.

A passphrase you choose is stretched with PBKDF2-SHA256 over 600,000 iterations into an AES-GCM-256 key that never leaves your browser.

Your identity, and one opaque encrypted blob. Lab PDFs are encrypted here before upload. Nothing on the server can read either one back.

Export the whole decrypted vault as JSON whenever you want. Lock it on this device with one click. No export fee, no lock-in.

Lose the passphrase and the data is gone — there is no reset link, because a reset link would mean we held the key. That is the trade this design makes.

One deliberate exception, stated plainly. Reading a lab report has to work on any layout in any language, which a browser cannot do alone — so an imported PDF is the one thing here that is not end-to-end encrypted. It travels over HTTPS like everything else, but the server decrypts it on arrival and hands it to Cloudflare's Workers AI to be converted and read. It lives in memory for that one request: this app never writes it to the database, never puts it in object storage, and never logs its contents. The values that come back are re-checked and encrypted here before they are saved, and the document itself is encrypted on this device before it is stored. Cloudflare states that Workers AI inputs and outputs are not used to train models — that is their policy, not something this app can enforce. Would you rather not make that trade? Enter results by hand and no document ever leaves this device.

Where it is going

Tracking, honestly.

Today this records, converts, charts and stores. It does not interpret. Analysis is planned and not built, and when it arrives it will still be a prompt to ask a better question at your next appointment — never a diagnosis, and never a replacement for your doctor.