Changelog
What's actually shipped.
New product. No testimonials yet — we're not inventing any. Here's what's shipped instead, and the test suite you can run yourself.
2026-10-12
A logged amount below zero no longer counts toward a vial
What was wrong: A dose amount below zero can arrive in an edited or imported backup. If it was logged as done, the app subtracted a negative amount, so what was left in that vial read higher than it was, and its run-out date later. The dose-log export also printed a draw below zero for it.
What happens now: A dose below zero can't be logged as done. An entry already logged that way counts as nothing taken from the vial, and the export shows no draw for it. Nothing you saved is rewritten or deleted. If a vial's remaining amount or run-out date moved earlier after this update, open that compound and check its dose amount for a minus sign.
What happens now: A dose below zero can't be logged as done. An entry already logged that way counts as nothing taken from the vial, and the export shows no draw for it. Nothing you saved is rewritten or deleted. If a vial's remaining amount or run-out date moved earlier after this update, open that compound and check its dose amount for a minus sign.
2026-10-12
The vial tools: one note corrected, one hint added
What was wrong: The "How long will a vial last?" tool said its Days per vial figure is the day of the last full dose. When your dose doesn't divide the vial evenly, the figure is the day of the first dose the vial can't fully cover, which is the day you need a new vial. The figure itself has not changed. Neither tool said how to enter a blend. A blend entered as the vial's total with a dose for one component gave doses and days about as many times too high as there are components.
What happens now: The note describes the figure correctly, and both tools say how to enter a blend. If you used either tool for a blend that way, work it out again with the vial and the dose in the same terms.
What happens now: The note describes the figure correctly, and both tools say how to enter a blend. If you used either tool for a blend that way, work it out again with the vial and the dose in the same terms.
2026-10-12
The run-out date tool: lead time in whole days
What was wrong: The run-out date tool's reorder lead time box took part of a day, such as 2.5, and rounded it to the nearest whole day without saying so. When it rounded down, the reorder-by date allowed less lead time than you typed.
What happens now: The box takes whole days only. A part of a day is refused with a note, and no result is shown until the box holds a whole number or is left empty.
What happens now: The box takes whole days only. A part of a day is refused with a note, and no result is shown until the box holds a whole number or is left empty.
2026-10-12
Typing a comma for the decimal point no longer gives a wrong number
What was wrong: In some browsers, including Chrome, the number boxes in the app and on the free "How long will a vial last?" and run-out date tools silently dropped a comma. A dose typed as 0,25 was saved as 25, and the draw shown for it was 100 times too large. 1,5 was read as 15.
Who was affected: Anyone who typed a comma instead of a dot as the decimal point in any number box. Numbers typed with a dot were always read correctly.
What happens now: A comma is refused, never converted, and so is anything that is not a plain number. Dose, vial and water boxes also refuse zero and minus signs. Each refusal shows a note under the box saying what to change, and nothing is saved from it. Entries you saved earlier are not changed. If you ever typed a comma into a number box, open Compounds and Orals in the app and check those numbers, and work out any tool result again using a dot.
Who was affected: Anyone who typed a comma instead of a dot as the decimal point in any number box. Numbers typed with a dot were always read correctly.
What happens now: A comma is refused, never converted, and so is anything that is not a plain number. Dose, vial and water boxes also refuse zero and minus signs. Each refusal shows a note under the box saying what to change, and nothing is saved from it. Entries you saved earlier are not changed. If you ever typed a comma into a number box, open Compounds and Orals in the app and check those numbers, and work out any tool result again using a dot.
2026-10-12
Build 172 — past entries show what you logged; eight corrections
1. History, Today and the as-needed list now show the amount each entry recorded.What was wrong: After you logged a dose, those screens rebuilt the amount they displayed from your current protocol. So if you later changed a dose, earlier entries appeared to change with it. For example, an entry logged at 4.0 units read 8.0 units after the dose was doubled. The stored record and the dose-log export were never changed. Only the display followed the edit.
What happens now: Each entry shows the amount stored with it, in its own unit. An older entry that stored no amount says "Amount not recorded" rather than showing a number we would have to reconstruct. A dose you haven't logged yet still shows your current plan. On History, and for a blend on Today, it is labelled "if logged now:". For a single compound on Today, and in the as-needed list, the plan shows without that label until you log it.
2. The dose-log export (Power) states each amount in its own unit.Two columns are added at the end:
3. Editing or cloning a compound no longer changes its dose unit.What was wrong: The compound editor's unit menu offers mg and mcg. A compound stored in any other unit showed an empty unit menu when opened. This affects imported compounds in IU, mL, capsules, tablets, g and others. Saving it, or cloning it, even without changing anything, stored no unit, and the app reads a missing unit as mg. The number stayed the same; its unit silently became mg. For a compound in g, that made the dose 1,000 times smaller. Dose changes and dose slots saved without a unit of their own take the compound's unit, so they changed with it.
What happens now: The menu shows the stored unit, for example "IU (as stored)", and saving keeps it. You can still choose mg or mcg on purpose.
If you edited or cloned one before this build: Open it and check its unit. If it shows mg and the number was not in mg, the draw, run-out and reorder figures shown for it were worked out as if it were. This fix can't tell what the unit used to be, so it can't put it back. The editor sets mg or mcg. To get another unit back, restore a backup made before the edit, or import the plan again. Either one replaces everything currently in the app, including anything logged since. Before you do, save what you have now with Data → Export backup (JSON).
4. Settings now lists exactly what Power adds.The note a Power user sees in Settings said that blends were part of Power. Blends have been free since 2 September 2026. The same note left out three things Power does include: applying a scenario as a dated dose change, Data check, and the dose-log export. The Free version of the same note listed four of the seven. Both notes now read the same list as the Power sheet itself, under the heading "Power unlocks:", so they can't disagree again. Nothing moved between Free and Power.
5. Imported files with unusual record ids are handled like any other.What was wrong: Some parts of the app looked records up in a way that mishandled a few unusual ids: the number 0, or reserved words such as "constructor". These parts were affected: Data check, the protocol change history, the dose-log export, the calendar's reorder marker, the as-needed date picker and the spare-vial list. Examples: A compound whose id was 0 could export under another compound's name. A dose logged from the as-needed list could be saved with a date the app could not read. A unit spelled like one of those reserved words could be read as a mass.
Who was affected: The app never creates ids like these itself. They can only arrive in an imported file.
What happens now: Every one of those screens treats such ids and units exactly as it treats ordinary ones.
6. "What if I changed the dose?" on a compound with dose slots."What if I changed the dose?" now works on a compound with dose slots. Choose the slot under "Which dose". The draw shown is that slot's own. Days left, run-out and reorder-by still count every dose the compound takes, with that slot's dose changed and the others as they are. Before this build it used the compound's base dose, which a compound with slots does not use. On a compound with dose slots, a what-if is no longer offered as a dose change to apply. A slot has no dated dose changes: to change a slot's dose, edit the compound. On a compound without slots, applying a what-if works as before. If you applied a what-if to a compound with dose slots before this build, it saved a dated dose change that the slots override. It did not change any draw, run-out or reorder date. Before this build the Calendar could also show it as a dose change on the day you applied it; it no longer does, because a compound with dose slots does not use dated dose changes. It is still stored. It would take effect only if you later turn off dose slots on that compound, and it would then be listed under that compound's Dose changes, where you can remove it.
7. Data check lists logged entries that name no compound.Data → Data check now lists any logged entry that names no compound: the entries a Done tap could save, before Build 171, on a plan imported without its compounds' identities. Each shows its date and its amount, and, if it is counted against a vial, which one. You can delete it or keep it as it is; VialMath does not guess which compound it was meant for. This list is shown with or without Power.
8. Data check lists doses logged under the unit misreading fixed in Build 171.Before Build 171, a dose change or dose slot saved without a unit was read as mg even when its compound was in another unit, and a dose logged then recorded that reading. Build 171 fixed the reading but left those entries as they were written (see Build 171, item 3). Data → Data check now lists such an entry when the dose change or slot it was logged under has not been edited since. Each shows the amount it was recorded as, what its dose change or slot comes to in the compound's own unit, and, if it is counted against your current vial, by how much. You can delete it or keep it as it is. Where the compound's unit is a mass, you can also record the entry as the mass its dose change or slot comes to; the figures it had are kept with the entry. VialMath changes nothing unless you choose to. This list, and each of these choices, is shown with or without Power.
9. On a compound with dose slots, days remaining, run-out and reorder-by now count today's remaining doses slot by slot.What was wrong: These figures take off the doses still to come today. On a compound with dose slots, the app worked that out as the day's total less the amount logged so far today. When a dose logged today had a different amount from the one its slot now holds, for example after you changed that slot's dose later the same day, the amount left to come was wrong, and the three figures could read later or earlier than the doses give, for the rest of that day. The remaining amount in the vial was not affected.
What happens now: The doses still to come today are the slots due today that have no entry yet, each at its current dose. Compounds without dose slots are unchanged.
10. Wording.One sentence in the Guide ("Bringing in a plan from somewhere else") said the app has "no analytics". It now says "no analytics inside the app", matching the privacy lines elsewhere in the app.
Nothing about where your protocol data goes changed. It still never leaves your device unless you export or print it yourself.
What happens now: Each entry shows the amount stored with it, in its own unit. An older entry that stored no amount says "Amount not recorded" rather than showing a number we would have to reconstruct. A dose you haven't logged yet still shows your current plan. On History, and for a blend on Today, it is labelled "if logged now:". For a single compound on Today, and in the as-needed list, the plan shows without that label until you log it.
2. The dose-log export (Power) states each amount in its own unit.Two columns are added at the end:
dose_amount and dose_unit. The dose_mg column now holds a figure only when the dose is a mass. It is blank for IU, mL, capsules and other units. Entries brought in through a CSV import are marked "derived from your protocol when imported", because their amount came from your plan at import time and not from the file. The first six columns keep their order. For mass-only logs, the existing columns are byte-for-byte what they were, except in two cases. One is an entry whose amount or draw is below zero (see "A logged amount below zero no longer counts toward a vial"). The other is an entry logged before this build whose dose slot or compound is no longer in your plan, for example because you removed that slot, changed its dose, or turned off multiple doses a day: the app can't tell which unit it was logged in, so dose_mg and working are blank, and its amount is in dose_amount.
3. Editing or cloning a compound no longer changes its dose unit.What was wrong: The compound editor's unit menu offers mg and mcg. A compound stored in any other unit showed an empty unit menu when opened. This affects imported compounds in IU, mL, capsules, tablets, g and others. Saving it, or cloning it, even without changing anything, stored no unit, and the app reads a missing unit as mg. The number stayed the same; its unit silently became mg. For a compound in g, that made the dose 1,000 times smaller. Dose changes and dose slots saved without a unit of their own take the compound's unit, so they changed with it.
What happens now: The menu shows the stored unit, for example "IU (as stored)", and saving keeps it. You can still choose mg or mcg on purpose.
If you edited or cloned one before this build: Open it and check its unit. If it shows mg and the number was not in mg, the draw, run-out and reorder figures shown for it were worked out as if it were. This fix can't tell what the unit used to be, so it can't put it back. The editor sets mg or mcg. To get another unit back, restore a backup made before the edit, or import the plan again. Either one replaces everything currently in the app, including anything logged since. Before you do, save what you have now with Data → Export backup (JSON).
4. Settings now lists exactly what Power adds.The note a Power user sees in Settings said that blends were part of Power. Blends have been free since 2 September 2026. The same note left out three things Power does include: applying a scenario as a dated dose change, Data check, and the dose-log export. The Free version of the same note listed four of the seven. Both notes now read the same list as the Power sheet itself, under the heading "Power unlocks:", so they can't disagree again. Nothing moved between Free and Power.
5. Imported files with unusual record ids are handled like any other.What was wrong: Some parts of the app looked records up in a way that mishandled a few unusual ids: the number 0, or reserved words such as "constructor". These parts were affected: Data check, the protocol change history, the dose-log export, the calendar's reorder marker, the as-needed date picker and the spare-vial list. Examples: A compound whose id was 0 could export under another compound's name. A dose logged from the as-needed list could be saved with a date the app could not read. A unit spelled like one of those reserved words could be read as a mass.
Who was affected: The app never creates ids like these itself. They can only arrive in an imported file.
What happens now: Every one of those screens treats such ids and units exactly as it treats ordinary ones.
6. "What if I changed the dose?" on a compound with dose slots."What if I changed the dose?" now works on a compound with dose slots. Choose the slot under "Which dose". The draw shown is that slot's own. Days left, run-out and reorder-by still count every dose the compound takes, with that slot's dose changed and the others as they are. Before this build it used the compound's base dose, which a compound with slots does not use. On a compound with dose slots, a what-if is no longer offered as a dose change to apply. A slot has no dated dose changes: to change a slot's dose, edit the compound. On a compound without slots, applying a what-if works as before. If you applied a what-if to a compound with dose slots before this build, it saved a dated dose change that the slots override. It did not change any draw, run-out or reorder date. Before this build the Calendar could also show it as a dose change on the day you applied it; it no longer does, because a compound with dose slots does not use dated dose changes. It is still stored. It would take effect only if you later turn off dose slots on that compound, and it would then be listed under that compound's Dose changes, where you can remove it.
7. Data check lists logged entries that name no compound.Data → Data check now lists any logged entry that names no compound: the entries a Done tap could save, before Build 171, on a plan imported without its compounds' identities. Each shows its date and its amount, and, if it is counted against a vial, which one. You can delete it or keep it as it is; VialMath does not guess which compound it was meant for. This list is shown with or without Power.
8. Data check lists doses logged under the unit misreading fixed in Build 171.Before Build 171, a dose change or dose slot saved without a unit was read as mg even when its compound was in another unit, and a dose logged then recorded that reading. Build 171 fixed the reading but left those entries as they were written (see Build 171, item 3). Data → Data check now lists such an entry when the dose change or slot it was logged under has not been edited since. Each shows the amount it was recorded as, what its dose change or slot comes to in the compound's own unit, and, if it is counted against your current vial, by how much. You can delete it or keep it as it is. Where the compound's unit is a mass, you can also record the entry as the mass its dose change or slot comes to; the figures it had are kept with the entry. VialMath changes nothing unless you choose to. This list, and each of these choices, is shown with or without Power.
9. On a compound with dose slots, days remaining, run-out and reorder-by now count today's remaining doses slot by slot.What was wrong: These figures take off the doses still to come today. On a compound with dose slots, the app worked that out as the day's total less the amount logged so far today. When a dose logged today had a different amount from the one its slot now holds, for example after you changed that slot's dose later the same day, the amount left to come was wrong, and the three figures could read later or earlier than the doses give, for the rest of that day. The remaining amount in the vial was not affected.
What happens now: The doses still to come today are the slots due today that have no entry yet, each at its current dose. Compounds without dose slots are unchanged.
10. Wording.One sentence in the Guide ("Bringing in a plan from somewhere else") said the app has "no analytics". It now says "no analytics inside the app", matching the privacy lines elsewhere in the app.
Nothing about where your protocol data goes changed. It still never leaves your device unless you export or print it yourself.
2026-10-03
Typing a comma for the decimal point no longer gives a wrong number
What was wrong: In some browsers, including Chrome, the number boxes on the free calculator silently dropped a comma. A dose typed as 0,25 was read as 25, and the draw shown was 100 times too large. 1,5 was read as 15. A minus sign gave a negative draw instead of an error.
Who was affected: Anyone who typed a comma instead of a dot as the decimal point in any box. Numbers typed with a dot were always read correctly.
What happens now: The boxes take digits and one dot only. A comma, a minus sign, zero, or anything that is not a plain number blanks every result and shows a note under that box saying what to change. If you ever typed a comma into this calculator, work that calculation out again using a dot.
Who was affected: Anyone who typed a comma instead of a dot as the decimal point in any box. Numbers typed with a dot were always read correctly.
What happens now: The boxes take digits and one dot only. A comma, a minus sign, zero, or anything that is not a plain number blanks every result and shows a note under that box saying what to change. If you ever typed a comma into this calculator, work that calculation out again using a dot.
2026-10-01
The free calculator works in one direction
It goes from a dose you enter to the units and millilitres to draw. It no longer turns a number of units back into a dose: a count of units does not say which syringe scale it was measured on, and the calculator cannot know. The 29 August entry below describes the behaviour this removes.
2026-09-29
Build 171 — imported plans: every compound keeps its own identity; a dose change or slot without a unit uses its compound's unit; doses that are not a mass no longer get a syringe draw
1. Plans imported without record ids now work.What was wrong: The app's "import a plan from an AI assistant" instructions tell the assistant not to write record ids, because the app assigns them. The app did assign them to mixed vials, but not to compounds or other records. A plan imported that way therefore had compounds that the app could not tell apart: every Today card showed the first compound's name; one Done tap marked every card as logged; the log was recorded against the first compound and its vial.
What happens now: Every record without an id is given one when a file is imported. Plans already stored this way are fixed the next time the app opens. Ids already in a file are never changed.
What we did not do: Doses logged while this was happening are left as they were written. The app does not guess which compound an entry was meant for. Some of them may still be counted against the first compound's vial, so that vial's remaining amount can read lower, and its run-out date earlier, than they should.
2. A dose that is not a mass no longer gets a syringe draw.What was wrong: A syringe draw is computed from a dose in mg or mcg and the vial's concentration in mg per mL. A dose entered in another unit (IU, mL, capsules and so on) was put through the same arithmetic as if it were milligrams. The draw, run-out and reorder figures shown for it were therefore wrong.
What happens now: For such a dose, the app shows "No draw: this dose is in IU. A draw needs a dose in mg or mcg." (with the dose's own unit). It says "Run-out not computed" instead of projecting a date. Data check lists the dose with the unit it was entered in. Your entry is kept as you typed it. The app does not convert or change it.
3. A dose change or dose slot entered without a unit now uses its compound's unit.What was wrong: A dose change or dose slot with no unit of its own was read as mg, even when its compound was in mcg. For a compound in mcg, the draw shown for such an entry was 1,000 times too large, and its run-out date was far too early. This mostly arose in plans brought in by import.
What happens now: Such an entry uses the compound's own unit, which is what the plan meant.
What we did not do: Doses logged under such an entry before this build are left as they were written. If one was logged with the draw shown then, that compound's vial can still read lower, and its run-out date earlier, than they should. From Build 172, Data check lists such an entry when the dose change or slot it was logged under has not been edited since; see Build 172, item 8, for what you can do with it.
What happens now: Every record without an id is given one when a file is imported. Plans already stored this way are fixed the next time the app opens. Ids already in a file are never changed.
What we did not do: Doses logged while this was happening are left as they were written. The app does not guess which compound an entry was meant for. Some of them may still be counted against the first compound's vial, so that vial's remaining amount can read lower, and its run-out date earlier, than they should.
2. A dose that is not a mass no longer gets a syringe draw.What was wrong: A syringe draw is computed from a dose in mg or mcg and the vial's concentration in mg per mL. A dose entered in another unit (IU, mL, capsules and so on) was put through the same arithmetic as if it were milligrams. The draw, run-out and reorder figures shown for it were therefore wrong.
What happens now: For such a dose, the app shows "No draw: this dose is in IU. A draw needs a dose in mg or mcg." (with the dose's own unit). It says "Run-out not computed" instead of projecting a date. Data check lists the dose with the unit it was entered in. Your entry is kept as you typed it. The app does not convert or change it.
3. A dose change or dose slot entered without a unit now uses its compound's unit.What was wrong: A dose change or dose slot with no unit of its own was read as mg, even when its compound was in mcg. For a compound in mcg, the draw shown for such an entry was 1,000 times too large, and its run-out date was far too early. This mostly arose in plans brought in by import.
What happens now: Such an entry uses the compound's own unit, which is what the plan meant.
What we did not do: Doses logged under such an entry before this build are left as they were written. If one was logged with the draw shown then, that compound's vial can still read lower, and its run-out date earlier, than they should. From Build 172, Data check lists such an entry when the dose change or slot it was logged under has not been edited since; see Build 172, item 8, for what you can do with it.
2026-09-25
Build 170 — the home-page demo's new picture
The narrated demo on the home page now uses a motion walkthrough of the real app, with synthetic example data, and a designed cover image. The narration and length (1 minute 22 seconds) are unchanged. No change to the app's arithmetic.
2026-09-24 · later
Build 169 — the demo re-voiced
The home-page demo was re-voiced with the same synthetic narrator voice our other videos use. The script, the length and the caption text are unchanged; only the caption timings moved to match the new voice. No change to the app's arithmetic.
2026-09-24 · later
Build 168 — clearer wording for the water you add, and a narrow-screen fix
The water field when you add a compound is now labelled "Water added (mL)". A note under it says: "Enter the amount of water you actually used. VialMath calculates from the values you enter; it does not choose or recommend a reconstitution amount." The first-compound walkthrough asks "How much water did you add?", no longer "How much water will you add?", with the same note. On very narrow screens (about 320 pixels), the streak dots and the bottom tab labels no longer overflow their space. No change to the app's arithmetic.
2026-09-24 · later
A new narrated demo, hosted on this site
The demo on the home page is new: a 1-minute, 22-second
walkthrough, narrated in a synthetic voice, using synthetic example data only. It is
now a file on vialmath.app itself rather than a YouTube embed, so watching it does
not contact YouTube. Captions and a text transcript are available with the video.
The privacy page now says the same.
2026-09-24
Build 167 — corrected privacy and site copy, mobile navigation fix, restored changelog history
This build corrects a line in the app's Data screen that said VialMath “never phones
home” — it does check its own version number, as this changelog and the privacy page
have said since 2 September 2026. It carries the corrected privacy-policy wording in the entry
above (analytics and referral disclosure, licence and IP wording, email-signup and
purchase-record disclosure, third-party fonts and video), a mobile fix so the test-suite links
on this site and the trust page are tap-friendly on narrow screens, a one-token code fix so an
email-reminders signup now records which reminders you chose instead of “unknown”,
and the two 13 September 2026 entries below that this site had been missing. Two known
display-only defects — a Trip Packing shortfall that can round to “0.0 mg”
instead of showing the true remainder, and a Trip Packing sealed-vial count that can read
today's count instead of the trip-start count — and two pre-existing defects carried over
from build 166 — the “what if” panel for slot-based compounds, and a blend
with no dosed member falling back to an overstated concentration — are recorded as known
issues for build 168 and do not change the core arithmetic. Nothing about how VialMath handles
your protocol data changed: it still never leaves your device.
2026-09-24
We said the app is counted by nothing at all. That stopped being true on 1 September.
On 30 August we wrote that the app itself is counted by nothing at all, and that the line
was not moving. Two days later it moved, and we did not say so. Since 1 September, the buttons
in the app that open our website — “See what's in Power”, the Buy links and
“Set up reminders” — have carried a short fixed tag naming the button, and our
page counter keeps a daily total for each tag. The tag is written into the app's code. It never
carries anything you entered or anything that identifies you, and nothing is sent unless you
tap. But it does tell us which part of the app a visit came from, so “counted by nothing
at all” was wrong from that day, and so were the lines on our privacy, trust and home
pages that said the same. They now say exactly what happens. In the same release we corrected
a line in the app itself: its Data screen said VialMath “never phones home”, but the
app checks our website for its own version number, as our privacy page has said since 2
September. Your protocol data never left your device, and still doesn't. The details are on the
privacy page.
2026-09-13 · later
Your reorder alert could show two different dates. Fixed — twice, the same day.
Found while making a demo video, not by a user report, which is worse: it means it had
been live a while. The app has two ways of asking “when do I need to reorder?”
— one that looks only at the vial currently open, and one that also counts sealed
spare vials sitting on your shelf. They are supposed to agree. For a compound with spares
on hand, they didn’t: the Vials card said a reorder-by date had already passed, while
the Dashboard and Shopping list — one tab away, same compound — said you were
covered for weeks yet. Both were doing correct arithmetic on a different question, and
nothing forced them to publish the same answer. Fixed by routing every screen through one
calculation: the Vials card, the Dashboard, the Shopping list, the calendar's reorder
marker and the calendar export all now read the same spare-aware date.
Fixing that surfaced a second, smaller disagreement the same day: on the reorder-by date itself, some parts of the app already treated the deadline as passed, while others waited until the day after. “Reorder by <date>” means order on or before that date — so on the date itself, nothing has passed yet. Every surface now uses that reading, including one place a first check missed: a status marker on the coverage view that had the comparison written backwards, so a plain search for the wrong version of the rule never would have found it.
Fixing that surfaced a second, smaller disagreement the same day: on the reorder-by date itself, some parts of the app already treated the deadline as passed, while others waited until the day after. “Reorder by <date>” means order on or before that date — so on the date itself, nothing has passed yet. Every surface now uses that reading, including one place a first check missed: a status marker on the coverage view that had the comparison written backwards, so a plain search for the wrong version of the rule never would have found it.
2026-09-13
We were pointing you at a $39 payment page before you'd tried the app — on the site and inside it
Looked at our own numbers and didn't like what they said: the homepage's main button
went straight to checkout for software you had never opened, and it was sending more
people to that $39 page than to the free app. Fixed — the homepage's primary
button now opens the free app first; buying is still one tap away, just not the first
thing offered.
The same problem was hiding inside the app itself, and this half is the one we should have caught sooner. The bar that shows while you're trying the example data is supposed to disappear the moment you start entering your own real protocol — that's the whole point of it. It never did. Nothing in the code ever told it to hide, so it could sit there telling you “you're viewing demo data… buy $39” directly over the top of your own protocol, already saved. Fixed: the bar now hides the moment your data becomes real, and it also gained a direct “start with my own protocol” button, so leaving the example data behind doesn't require finding your own way out of it first.
The same problem was hiding inside the app itself, and this half is the one we should have caught sooner. The bar that shows while you're trying the example data is supposed to disappear the moment you start entering your own real protocol — that's the whole point of it. It never did. Nothing in the code ever told it to hide, so it could sit there telling you “you're viewing demo data… buy $39” directly over the top of your own protocol, already saved. Fixed: the bar now hides the moment your data becomes real, and it also gained a direct “start with my own protocol” button, so leaving the example data behind doesn't require finding your own way out of it first.
2026-09-02 · later
We said VialMath makes one network call. It makes two. Here is the second one.
Until today this site said — in four places, including the privacy policy
and an invitation to “open your browser’s own network panel and
check” — that the only call VialMath ever makes is the one-time
licence check. That was wrong. The app also fetches its own
Our own privacy policy had already named this exact scenario: it promised disclosure if a future release ever added “a recurring call of any kind (a re-validation check, an update check…)”. The check shipped and the page did not catch up. We found it by auditing our own published claims against the running code, and we have kept the check and fixed the words — not the other way round.
Corrected in the same pass: the homepage promised a “spreadsheet-ready CSV” export on the free tier. The only CSV export in the app is the dose log, which is part of Power. Your full backup in JSON contains everything and is free, and always will be; the wording now says exactly that. And the in-app Power notice listed five capabilities when seven are gated, so a free user who clicked a Power feature could be shown a list that did not contain it.
Two defects went with them, both ours, both a day old. The reorder “order by” date — which this site sells by name — could never appear, because the code read one field name and the form wrote another; two unit tests had invented the missing field and passed while the feature was dead. And the free tier could not be entered at all: the two-item limit was counting the example data we ship, so a first-time visitor’s first compound was met with a paywall. Both are fixed, both now have tests that fail if they return.
version.json when it opens or returns to the foreground, compares the
build number with its own, and shows a banner if a newer build exists. That request
carries no licence key, no identifier, no cookie and no protocol data; it is
the app asking what version it should be. It exists because VialMath installs as a
PWA, where a stale cached copy is invisible — you would go on using an old
build believing it was current, which for a calculator is the worst failure
available.
Our own privacy policy had already named this exact scenario: it promised disclosure if a future release ever added “a recurring call of any kind (a re-validation check, an update check…)”. The check shipped and the page did not catch up. We found it by auditing our own published claims against the running code, and we have kept the check and fixed the words — not the other way round.
Corrected in the same pass: the homepage promised a “spreadsheet-ready CSV” export on the free tier. The only CSV export in the app is the dose log, which is part of Power. Your full backup in JSON contains everything and is free, and always will be; the wording now says exactly that. And the in-app Power notice listed five capabilities when seven are gated, so a free user who clicked a Power feature could be shown a list that did not contain it.
Two defects went with them, both ours, both a day old. The reorder “order by” date — which this site sells by name — could never appear, because the code read one field name and the form wrote another; two unit tests had invented the missing field and passed while the feature was dead. And the free tier could not be entered at all: the two-item limit was counting the example data we ship, so a first-time visitor’s first compound was met with a paywall. Both are fixed, both now have tests that fail if they return.
2026-09-02
We cut what the free tier includes, and we had said we wouldn’t
The awkward half first. VialMath Free now tracks two active items, not
three. That is a reduction, not a reshuffle — Free does less today than it
did yesterday. Yesterday these terms said Free’s contents “may grow, and
will never shrink.” That was a stronger promise than we could keep, we broke it
one day after publishing it, and it has been removed from the terms rather than
quietly reworded around. The version that carried it is kept, dated, at
prior versions of the terms.
If you are already using Free with two or three items: nothing of yours is
deleted or hidden. Everything you entered stays visible and stays exportable, and you
can still edit and end what is there — the new limit applies to adding,
not to what you already have. If you want a copy off this device, take a backup from
the Data view.
Moving the other way in the same release: blends are now in Free, having been
behind Power since launch. That is not offered as a trade and it does not make the
paragraph above smaller. We also removed a formula from one of our own social posts
that was wrong by a factor of 100 — if you saw it, the correct step is
dose ÷ concentration × 100 = units on a U-100 syringe.
Two corrections made the same day, said plainly rather than edited out:
this limit was briefly published as one item before we settled on two —
one did not leave enough room to see what the app actually does, and the cap can only
ever rise from here, never fall again. And Power is now $39 once, not $49. We
raised it to $49 yesterday and have brought it down today; it may rise again later,
but anything you buy at $39 stays yours at $39.
Power’s promise is unchanged: everything in Power on the day you buy it is yours
for good, Power never loses a feature, and nothing will ever be sold above Power.
2026-09-01
VialMath now has a free tier — and the price of the paid one went up
Two changes, and the second one is the awkward half, so it goes first.
The price is now $49, not $29, and the “first 49 at $29” founder
price is gone. Nobody had bought at $29 — there is no one this takes anything
from — but it was published, so it gets said plainly rather than quietly edited out.
VialMath Free is the other half: the calculator, up to three active items with
their schedules, Today, your full history, vial tracking and your run-out date. No
account, no card, no trial clock, and it does not expire. Power is $49 once and
removes the limit, adding cycle windows, blends, inventory, reorder timing and
several doses a day.
What is never behind the paywall, and this is the part worth holding us to:
the arithmetic being correct, the equation being shown, your backup, your export, your
history and your privacy. Power means more capable. It never means less trustworthy
unless you pay. We have also written down something we were not asked to:
nothing will ever be sold above Power — no third tier, ever.
2026-09-01
We were throwing away the work of anyone who tried the app without buying
The calculator page invited people to “try the full app — no
signup”. It did open the full app — and every number typed into it went to
a scratch space that was discarded when the tab closed. Someone could enter their whole
protocol, close the browser, and find nothing there. That was us asking people to do
real work and then deleting it, and it is fixed: the moment you enter anything of
your own, the example data steps aside and your protocol is saved properly, on your
device, whether or not you ever pay. The example is dropped rather than kept alongside,
because it is someone else’s data and it would otherwise quietly distort every
run-out date and vial count you saw afterwards.
2026-08-31
A multi-component vial could show half the draw. Fixed — and here is how to check yours.
Found in real use, not in testing. If you set up a vial that holds more than one
peptide, there are two different numbers you could put in the vial-size field: the
total mg in the vial, or the mg of the one component you dose against.
Some people had been typing the per-component number, because that is what makes the
draw come out right. Then they mixed a fresh vial, correctly typed the vial’s
true total, and the draw silently halved — still shown to one
decimal place, still looking exactly as confident as before. Doing the honest thing
broke the arithmetic, which is our fault and not the user’s.
What to check: open a multi-component vial in Compounds. If there is no
component breakdown card under it, it is not modeled as a blend — edit it, tick
the blend option, and enter each component with its own mg. The draw is then computed
from the component you dose, and the vial event can carry the honest total. Two guards
shipped with the fix: removing the last component from a blend now warns you that the
draw will be computed from the vial total instead, and the case is covered by a
regression test that asserts the exact 2× relationship.
2026-08-31
Mixing a vial now asks whether to take one off your inventory
Four different places in the app let you mix a fresh vial, and not one of them
touched your vial inventory. So the count on your shelf and the count in the app
drifted apart the moment you mixed anything — and because spare stock feeds the
run-out projection, an uncounted vial told you that you were covered for
longer than you actually were. Now every one of those four asks: it names the
sealed vial it would draw from and takes one off if you say yes. It picks the sealed
row whose mg matches the vial you actually mixed, and if it cannot tell which vial
came off the shelf, it asks nothing and changes nothing rather than guessing.
2026-08-31
Two people, one vial
If you and someone else draw from the same vial, each dose can now be tagged to a
person and counted separately, while the vial itself burns down once. Set it on a dose
slot; the person shows as a badge wherever that dose appears. Nothing about it leaves
your device — it is a label on your own data, like every other field here.
2026-08-31
Your demo work is no longer thrown away when you activate
Anything you entered while trying the app used to vanish the moment you put in a
licence key — which is precisely the wrong moment to lose someone’s work.
It now carries over. Short how-to videos also went up, linked from inside the guide:
the playlist is here.
2026-08-30
We corrected our own privacy policy
Our policy said “no analytics.” That was accurate about the app and
inaccurate about this website, where the home page has been counting page
views. Nobody complained — we found it ourselves while adding that same counter
to the rest of the public pages, and we are not going to quietly widen a promise we
had already outgrown. So: the policy now says exactly what happens. Our public
pages record that a page was viewed and which site linked to it — no cookies,
no IP address, no fingerprint, no third-party analytics, nothing that could tell one
visitor from another. The app itself is still counted by nothing at all, and
that line is not moving. Read it on the privacy page.
Addendum, 24 September 2026: the last sentence stopped being true on 1 September — see the 24 September 2026 entry above.
Addendum, 24 September 2026: the last sentence stopped being true on 1 September — see the 24 September 2026 entry above.
2026-08-29
The calendar tells you what changes
Tap any day and see what starts and what stops on it, not just
what's due. On a protocol with a dozen moving parts, the thing you actually lose
track of is the transition — something beginning on Thursday, something else ending
the same week. The month grid marks those days; the day panel names them.
2026-08-29
The calculator solves both directions
Fill in either the dose or the units — whichever you were given — and the
other is worked out. Someone tells you "two units"; you want to know what that is in
mcg. It now answers that, and the app and the
free calculator run the
identical code, with a test that fails if they ever disagree. (Removed on 2026-10-01; see that entry.)
2026-08-29
Supplements can be entered the way they're actually labelled
Oral items were limited to mg and mcg, which quietly made most of a real
supplement stack impossible to record — a multivitamin is one capsule, not a
milligram amount, and creatine is measured in grams. Now: g, IU, mL, capsules,
tablets, softgels, gummies, scoops, drops and sprays.
2026-08-29
Installs properly on iPhone
Adding VialMath to an iPhone home screen produced a blank tile instead of the
app icon — iOS doesn't accept the SVG icon we were serving. Fixed, along with the
Android install icons. It now installs and opens like an app on both, with no store
and no account.
2026-08-29
A narrated walkthrough, and a correction to the old one
New 53-second demo, rebuilt
because the previous one showed screens from before this week's work. Worth saying
plainly: every frame of the old one opened on a black screen for about half a second
— a bug in how the video was assembled, now fixed and checked on every render.
Addendum, 24 September 2026: the 53-second demo this entry describes has since been replaced. The link in this entry now opens the current demo — see “A new narrated demo, hosted on this site” above.
Addendum, 24 September 2026: the 53-second demo this entry describes has since been replaced. The link in this entry now opens the current demo — see “A new narrated demo, hosted on this site” above.
2026-08-28
Public test suite published
Every calculation VialMath ships now runs in the open, at
vialmath.app/tests — anyone
can load the same code the app uses and watch the assertions pass in their own
browser.
2026-08-27
v1 complete — 181 automated tests passing (1,106 as of September 2026)
Concentration and draw-unit math, cycle and schedule detection, run-out
projection, CSV import, calendar export, and the retroactive-logging vial
recount all covered.
2026-08-27
Retroactive logging and named blends added
Built after reading real low-star reviews of competitor trackers — forgetting
to log a dose, and wanting to group compounds under your own name, were two of
the most common complaints in that research.