Dashboard
One-time license check at activation. Your protocol data never leaves your device — no accounts, no sync, no analytics inside the app.
Syringe prep
The load-up checklist — everything due, with draw units (the marks on a U-100 insulin syringe) shown for each, off-days excluded automatically. Checking an item off here is just for loading; it does not log a dose (do that in Today).
Mix a vial
Know both numbers? Type them in, or apply a saved recipe above. Don’t know the water? Leave it empty, fill in vial size, dose and target draw below, and it works the water out for you — that is the only value it ever fills in.
Today
History
Last 30 days. Tap anything you forgot to log — the logged-at time is recorded separately from the dose date.
Compounds
A phase is a name, a start date, and the compounds in it — set them all up in one go instead of adding them one at a time. Everything you add inherits the phase name and start date, and you can change any of it afterwards.
Blends
Group compounds you've already entered under a name you choose, and log one dose for the whole group at once. A blend's dose is separate from each compound's own schedule: if a compound has its own schedule too, Today lists both. The app never reacts to what's in a blend.
Orals / Supplements
Oral items you take alongside your protocol — name, dose, and timing are entirely your own words, never a preset. They appear in Syringe prep and Today next to your injectable compounds.
Vial logistics
New to reconstitution? A "vial" is the sealed container you mix with water; "draw units" are the marks on a U-100 insulin syringe (100 units = 1 mL) — this tab does the arithmetic between the two so you know where to draw to.
Reconstitution calculator
This works out the water. Fill in vial size, dose and target draw, and leave Water volume blank — that is the only value it ever fills in. Pure arithmetic on the numbers you enter; it never recommends a number.
Vial size is the number printed on your vial's label. Water is the bacteriostatic or sterile water volume you draw in — leave it blank if that's what you want calculated.
Dose is the amount you take each time you draw.
Target draw is the mark on a U-100 insulin syringe (100 units = 1 mL) where you want the plunger to land.
Saved recipes
Named reconstitutions you've saved — pick "Apply" on a refill instead of re-entering vial size and water. Local to this device only.
Shopping list
What runs out, and when — pulled from your own vial data, soonest first — plus anything you add yourself. This states dates only; it never suggests an item, a quantity, a vendor, or a place to buy anything.
Vial Inventory
Vials you have on hand beyond whatever is currently mixed and active — sealed stock and any already-mixed spares. Feeds the burn forecast and the trip packing list.
Trip Packing List
Pick a date range. For each compound and oral item, see how many doses fall in it and how many vials to bring — rounded up, with the math shown, and flagged if you'd run out.
Calendar
Doses, cycle on/off shading, gate-check and lab dates, reorder-by dates, and weigh-ins for the month. Tap a day for its detail. This complements the .ics export in Data, it doesn't replace it.
Gate checks
A gate check is a decision point you set, with a date and a logged outcome — your own question, answered in your own words. The app never tells you what to decide.
Bloodwork / Labs
Schedule pre/mid/post-cycle lab dates. The app reminds you the date is due and lets you log "done" plus your own free-text note — it never reads or interprets a value.
Decisions
Your decision log — your record of what you decided and why, newest first. It's every gate check you have logged an outcome for, kept as a permanent, reviewable record.
Metric log
Your goal
Records / milestones
Track a second metric (optional) — workouts, steps, anything you choose to name
Records / milestones
Data
One-time license check at activation. Your protocol data never leaves your device — no accounts, no sync, no analytics inside the app.
Data check
Where two numbers you entered no longer agree, both are shown side by side. It checks your data, never your protocol — VialMath has no opinion about what you take.
Power prompts on this device
Kept on this device only and never sent anywhere. It records the name of the VialMath feature you reached for — never anything you typed.
Back up your data
Email reminders
Your protocol data never leaves this device. The app asks vialmath.app for its own version number, so it can show you when an update is ready, and it shows when you last backed up — but only while it's open. It can't tell you what changed, and it can't reach you when it's closed. If you'd like update news or a backup reminder by email, you can leave an address on our website. Entirely optional; nothing here is locked.
Opens on the website. Nothing from your protocol is sent — the app has no way to send it.
Printable protocol summary
A clean, printable one-pager of your own compounds, blends, orals and schedules — no medical content, just what you entered.
Calendar reminders
Downloads an .ics file with scheduled doses, reorder-by dates, and pending gate-check due dates as calendar events — import it into any calendar app for native reminders. No push notifications required.
Restore from backup
Importing overwrites all current data in this app.
Import history from CSV
Bring in historical entries from a spreadsheet or another tracker. You choose which column is which, and nothing commits until you confirm the preview.
Start fresh
Clears every compound, blend, oral item, log, gate check, and metric entry on this device — including any sample or leftover data from a prior demo. Back up first if you want to keep anything; this cannot be undone.
Phases
A phase is a stretch of your protocol — “the next twelve weeks are cutting”. It has its own dates and is not tied to any peptide: your cycles run through phase boundaries, some starting, some stopping, some carrying on. Entirely optional.
Settings
Your version
Interface
This does not change your dashboard cards — those are the checkboxes further down. Simple hides three less-common panels (Blends, Gate checks, Labs) from the More menu; Full shows everything. Interface only: nothing about your data changes either way, and you can switch back any time.
Dashboard cards
Choose which cards show on your Dashboard. Turning a card off never changes what it computes — only whether you see it.
Guide
How this app works, in plain language. This explains the app — never how to dose or what to take.
Adding your first compound
Watch: add your first compound (1:03)
Six things, and the app works out the rest: a name, the vial size in mg, the water you added in mL, your dose and its unit, a schedule, and a start date. From those it computes the concentration, the draw in units, when each dose is due, and when the vial runs out.
Setting up a phase or cycle
A phase here is three things and nothing more: a name, a start date, and the compounds in it. There is no separate cycle object to learn. That is deliberate — it is how a real multi-compound protocol was actually loaded into this app, and the heavier machinery went unused.
- Compounds → Start a new phase. Name it whatever you call it — “Phase 2B”, “Cycle 1”, “Winter run”. It is a label; the app never interprets it.
- Give it a start date. Everything you add inherits it, so you type it once instead of once per compound.
- Add each compound in turn. Four questions each: what you call it · is it reconstituted (vial mg + water mL) or pre-mixed/oral · the dose and its unit · how often. Then it offers to add another to the same phase.
- Finish. Everything appears immediately in Syringe prep, Today, Vials and Calendar, with the draw maths done.
When something drops out mid-phase — open it in Compounds and set an End date. That stops it appearing from that day forward and keeps every dose you already logged. Do not delete it; deleting loses the history.
Which schedule type? Most protocols are Daily or Specific weekdays. Use N-on / M-off cycle only for a genuinely repeating on/off rhythm that continues indefinitely — “5 days on, 2 off, forever”. If you mean “12 weeks then stop”, that is a start date and an end date, not a cycle. As needed never appears in Prep or the daily count and lives in its own section.
If your dose changes partway — a ramp or a taper — do not create a second compound. Open the one you have and add each change under Dose changes: a date and the new amount. The app always shows the dose valid for today and flags the day a change begins.
Bringing in a plan from somewhere else (including an AI)
Watch: import your protocol from an AI (1:11)
If you plan your protocol somewhere else — a spreadsheet, a note, or with an AI assistant — you do not have to retype it. The app imports a JSON file, and you can have whatever you are already using produce that file for you.
1. Copy the block below and give it to your assistant, along with your plan in whatever form you have it.
Convert the protocol below into a single JSON file for the VialMath app. Output ONLY the JSON, no commentary.
Top level: {"schemaVersion": 1, "compounds": [], "orals": [], "blends": [], "logs": [], "gateChecks": [], "metricEntries": [], "vialInventory": [], "reconRecipes": [], "prepChecks": {}, "profile": {}}
Each entry in "compounds" uses these fields:
name string - whatever I call it
vialSizeMg number - mg in the vial as sold; null if not reconstituted
waterMl number - mL of bacteriostatic water added; null if not reconstituted
noRecon boolean - true for anything pre-mixed or oral (no vial maths)
doseAmount number - dose per administration
doseUnit string - "mg" or "mcg"
startDate string - "YYYY-MM-DD"
endDate string - "YYYY-MM-DD", or omit if it has no end
phase string - optional label, e.g. "Phase 2B"
leadTimeDays number - reorder warning lead time; use 7 if unspecified
schedule object - see below
doseSteps array - optional, for a ramp: [{"fromDate":"YYYY-MM-DD","doseAmount":2,"doseUnit":"mg"}]
vialEvents array - each vial I have actually MIXED, oldest first:
[{"mixedDate":"YYYY-MM-DD","vialSizeMg":10,"waterMl":2}]
Omit entirely for anything noRecon. Do not add an "id" — the app
assigns those.
"schedule" is one of:
{"type":"daily"}
{"type":"weekdays","weekdays":[1,4]} 0=Sunday ... 6=Saturday
{"type":"cycle","cycleOnDays":5,"cycleOffDays":2,"cycleStartDate":"YYYY-MM-DD"}
{"type":"dates","specificDates":["YYYY-MM-DD"]}
{"type":"asNeeded"}
Rules:
- Use "cycle" ONLY for a repeating on/off rhythm that continues indefinitely. A fixed run
like "12 weeks then stop" is a startDate plus an endDate, NOT a cycle.
- Oral or pre-mixed items go in "orals" with noRecon:true and no vial fields.
- "vialEvents" is what makes run-out and reorder dates work. vialSizeMg and waterMl on the
compound describe the vial as bought; a vialEvent is the day I actually mixed one. Without
at least one, the app can compute my draw but has no start point to count down from.
- ONLY write a vialEvent if my plan actually says when I mixed that vial. If it does not,
leave vialEvents out and tell me — I will press "Mix new vial" in the app and enter the
date myself. Never guess a mix date, and never assume it is the same as startDate.
- Do not invent doses, dates or compounds. If something is missing from my plan, leave the
field out and list what you could not fill in AFTER the JSON, as a separate note.
My protocol:
[paste your plan here]
2. Save what it gives you as a .json file.
3. In the app: More → Data → Import data (JSON) and pick the file.
Import REPLACES everything currently in the app. Do it before you log anything you care about, or export a backup first (Data → Export backup) so you can put it back.
Check it landed right. Open Today or Syringe prep and read the draw units for each dose against what you expected. An assistant can misread a plan; the app will faithfully compute whatever it was given, so check the number that becomes a physical dose. Nothing is sent anywhere — the file is read on your device and the app has no accounts, no sync and no analytics inside the app.
- What this app does. It performs arithmetic on the numbers you type in — concentration, draw units, schedules, vial burn, reorder timing, packing counts. It never recommends a dose, a compound, or a protocol, and it never judges any number you enter as high, low, safe, or risky.
- The tabs, quick tour.
- Syringe prep — today's/tomorrow's load-up checklist. Checking something off here is just for loading; it doesn't log a dose.
- Today — where you actually mark a dose done or skipped. This is the real log.
- History — the last 30 days, so you can log anything you forgot on the day it happened.
- Compounds — every item you track: name, vial size, water volume, dose, and schedule — including dose changes, cycle windows, no-reconstitution, and a "PRN / on-demand" section for anything logged on-demand rather than on a schedule.
- Blends — a name you choose for a group of your own already-entered compounds, logged together as one event.
- Orals — oral/supplement items in your own words: name, dose, timing.
- Vials — live status per compound: concentration, milligrams used and remaining, days remaining, projected run-out and reorder-by date. Draw units live on Syringe prep and Today, next to the dose you are actually about to take.
- Shopping list — every compound's reorder-by date in one dated list, soonest first. States dates only — no vendors, no prices, no suggested quantities.
- Inventory — spare vials on hand (sealed or already mixed) beyond what's currently in use.
- Pack — pick a date range and see how many doses and vials to bring on a trip.
- Calendar — a month view of everything scheduled, plus reorder/gate/lab dates.
- Gate checks / Labs — your own reminders and free-text notes for dates you set. The app never reads or interprets a value you log.
- Decisions — a permanent record of every gate check you've logged an outcome for.
- Metric — a log for any single number over time (weight, or anything else you choose to track), plus an optional second series for anything else you want to name — workouts, steps, whatever you choose.
- Settings — Simple/Full (which panels show in the More menu) and which Dashboard cards you see. Interface-only; nothing about your data changes either way.
- Data — backup, restore, CSV import, and calendar (.ics) export.
- Add your first compound. Go to Compounds → fill in a name, vial size (mg), water volume (mL), your dose and its unit, a schedule type, and a start date. Save it, and it immediately appears everywhere — Syringe prep, Today, Vials, Calendar — with its math computed automatically. The first time you have zero compounds, a guided setup walks you through the same questions one at a time — every field starts blank; skip it any time and use the regular form instead, or reopen it later from the empty-state button on Compounds.
- Clone an existing compound. On any compound card, "Clone" opens the Add Compound form pre-filled with that compound's own numbers as a starting point for a new one — edit anything (usually at least the name) before saving. Nothing here is invented; it only ever copies your own already-entered data.
- Dose changes (a ramp over time). If your dose changes over the cycle (e.g. a ramp), add each change under "Dose changes" on the compound: a date + the new amount. The app always shows the dose valid for today, and flags the day a change begins in Syringe prep and Calendar with a "dose changes to X on this date" marker.
- Multiple cycle windows (separate blocks with gaps). If you run a compound in separate blocks with gaps — Cycle 1, a break, Cycle 2 — add each block under "Cycle windows" on the compound (label + start + end). The compound only shows as due inside a window — it goes quiet in the gaps automatically, even on a day the schedule above it would otherwise fire.
- No-reconstitution compounds (pre-mixed or oral). For pre-mixed or oral compounds — nothing to reconstitute — check "No reconstitution" on the compound. The app then tracks the dose only (e.g. "20 mg") and skips the vial/draw math and its prompts everywhere: Syringe prep, Today, Vials, Calendar.
- As-needed / on-demand items. For anything you take on demand rather than on a schedule, set the compound's schedule to "As needed (on-demand)." It stays out of your daily Syringe prep list and due count entirely and lives instead in the "PRN / on-demand" section at the top of Compounds — log it there on whatever date you actually took it.
- How the reconstitution math works, in plain language. Concentration is just the vial size divided by the water volume (mg per mL). Draw units are your dose divided by that concentration, times 100 — because a standard U-100 syringe is marked in hundredths of a milliliter. Change any one of the three numbers and everything recalculates instantly. The app never picks a number for you.
- Reconstitution calculator (works out the water). On the Vials tab, fill in vial size, dose and target draw, and leave Water volume blank. Calculate works out how much water puts that dose at that target draw — that is the only value it ever fills in. Vial size, dose and target draw are always numbers you type.
- Syringe prep vs. Today vs. History — what's the difference? Syringe prep is a loading checklist (nothing is logged yet). Today is where a dose actually gets marked done or skipped — that's the log. History lets you catch up on any day you forgot to open the app.
- Packing for a trip. Go to Pack, choose a start and end date, and the app totals every dose due in that window per compound and oral item, rounds up to whole vials needed, and checks that against anything you've logged in Inventory.
- Calendar. Shows every scheduled dose, cycle on/off shading, and any gate-check, lab, or reorder-by date landing on that day. Tap a day for its detail.
- Backup, restore, and export. Data → "Export backup (JSON)" downloads your protocol and everything you have logged in it; your Power key is not in the file (it is in your Gumroad receipt). "Import data" overwrites current data with a backup file — it asks you to confirm first. "Import history from CSV" lets you bring in old spreadsheet entries, with a preview step before anything is committed. "Export calendar (.ics)" gives you a file you can import into any calendar app for native reminders.
- Your protocol stays on this device. There are no accounts, no sync and no cloud copy. Your protocol data leaves this device only when you export or print it yourself.
Feedback
This opens your email app. We only send the message you type here — never your protocol data.
Send feedback
No mail app set up? Copy your message and send it to [email protected] however you like.