AppVitaminsGLP-1 Journey Companion

Free · runs entirely in your browser

GLP-1 Journey Companion — Excel Workbook Builder

Generate a genuine 25-sheet .xlsx workbook for keeping track of a GLP-1 journey: medication events, daily check-ins, symptoms, nutrition, movement, sleep, measurements and the questions you want to ask at your next appointment. It opens in Excel, Excel for the web, LibreOffice and Google Sheets, and it is yours to keep.

Real formulasConditional-format heatmapData barsDropdown validationPrint-ready reportNo macrosNo account

Read this before you use it

This is a personal organisation, journaling and appointment-preparation tool. It is not a medical device, not a diagnosis, not clinical decision support and not a dosing calculator. It never recommends, calculates, titrates, delays, splits or changes a dose, and it never says a level or a symptom is safe.

Seek medical care now for severe or worrying symptoms — severe or persistent abdominal pain, persistent vomiting, signs of dehydration, a severe allergic reaction, or anything that frightens you. Do not use a spreadsheet to decide whether to ask for help.

Build your workbook

Choose how you want to start, then download the file. Everything happens in this tab.

1. What should be in it?
2. Paper size for the printed report

The Appointment Snapshot is laid out to fit either size and scales to one page, so you can switch in the print dialog too.

3. Build it

Ready. The spreadsheet engine (ExcelJS 4.4.0, about 950 KB) is fetched from a public CDN the first time you press Build — that request carries no data of yours. Your own records never leave this device.

Where your data goes: nowhere

There is no account, no analytics, no tracking pixel and no upload. The only network request this page ever makes is for the ExcelJS library file from cdnjs.cloudflare.com, and it is made only when you press Build. Your backup file is read with the browser's own file reader, the workbook is assembled in memory, and the download is produced from that memory. If you would rather be certain, open your browser's network panel and watch.

What is actually in the workbook

Twenty-five sheets: eight for you, one that explains the data contract, ten that hold your records, and six that do the work.

The eight sheets you use

  • Start Here — what this is, what it is not, and a five-minute setup.
  • Home — days since your last recorded event, the estimated level, check-in count, report readiness, and a seven-day wellbeing strip.
  • Daily Check-in — a live read-only view of your last fourteen days, with a symptom-severity colour scale.
  • Medication — your twenty most recent events, with the half-life the model applied to each one and the estimated level just after it.
  • Progress — twelve weeks of weight, a seven-day trend, waist change, check-in consistency, movement and sleep, with data bars.
  • Insights — a symptom heatmap and two Pattern Finder comparisons, each carrying its own sample size.
  • Reports — the one-page Appointment Snapshot, with a print area and page setup already configured.
  • Settings — the mint cells everything else reads: your name, units, as-of date, window, discussion scenario and any half-life override.

The sheets that do the work

  • Calculations — live tables derived from your raw rows: parsed instants, safe doses, resolved half-lives, per-day estimated levels, days-since-event.
  • Model — a 370-row daily grid computing the estimated level, the labelled discussion scenario, dose markers and days since an event.
  • Lists & Validation — the dropdown lists behind every validated column.
  • Report Data — every number the reports print, in one place, so the screen and the page can never disagree.
  • Sources — the half-life assumptions with their source statements, basis and version, plus your override column.
  • Metadata — schema version, exchange contract version, the level equation and the exchange manifest.

Support sheets are protected against accidental edits. That protection is a convenience, not encryption — anyone with the file can remove it, and every raw record stays on the unprotected Data_ sheets, exportable and recoverable.

Spreadsheet features it actually uses

Spreadsheet features used by the generated workbook
FeatureWhereWhy
Real formulas (SUMPRODUCT, EXP, AVERAGEIFS, INDEX/MATCH)Calculations, Model, Report Data, every user sheetAround 19,000 formula cells. Change a row and everything downstream updates, as a spreadsheet should.
Conditional formatting — colour scalesInsights symptom heatmap, Daily Check-in severity, Model days-sinceSpec 8.3 prefers colour scales over native charts because they survive a Google Sheets import intact. Every cell still shows its number, so colour is never the only signal.
Conditional formatting — data barsModel level curve, Progress consistency and weight, symptom countsThe accumulation-and-decay shape, drawn without a chart object.
Data validation dropdownsStatus, injection site, active ingredient, measurement type, units, yes/noFed from the Lists & Validation sheet. Numeric columns are range-checked too.
Frozen panes, column widths, autofilterEvery sheetSo a 500-row table is usable on the first scroll.
Print area and page setupReports (A4 or US Letter), plus sane setup on every other sheetThe Appointment Snapshot prints on one page without clipping.
Sheet protectionThe six support sheetsStops an accidental keystroke breaking the model. Not cryptographic, and stated as such in the file.
Full recalculation on loadWorkbookFormulas are written without cached results, so the file asks its host to calculate everything the first time it opens.
No macros, VBA, ActiveX, external connections, slicers or Power QueryNowhereDeliberate. It is a plain workbook that opens without a security warning and imports into Google Sheets cleanly.

Native Excel charts are not used. The library that writes the file cannot produce them, and the design brief already preferred conditionally formatted cells because chart objects are the least reliable thing to carry through a Google Sheets round trip.

How the estimated level works

Estimated medication level — educational model, not a blood measurement

The number this workbook shows is mg-equivalent remaining under a simple textbook model. It is not a plasma concentration, it is not measured, and it is not a target. It never becomes a recommendation.

Every event you record contributes a decaying amount, and the estimate at any instant is the sum of those contributions:

Level(t) = SUM over every recorded event with EventTime ≤ t of
             DoseMg × EXP( −LN(2) × AgeDays ÷ HalfLifeDays )

That is the same equation the web app's engine evaluates, and the workbook writes it as a real spreadsheet formula rather than baking in numbers. The Model sheet cell looks like this — bounded ranges, blank-safe, wrapped so an empty workbook shows nothing rather than an error:

=IFERROR(IF(OR($A20="",$A20>$B$4,$B$3=0,$B$2>0),"",
   SUMPRODUCT(Calculations!$J$4:$J$303
            *(Calculations!$I$4:$I$303<=$A20)
            *(Calculations!$I$4:$I$303>0)
            *EXP(-LN(2)*($A20-Calculations!$I$4:$I$303)
                       /Calculations!$K$4:$K$303))),"")

The rules it follows

Half-life assumptions shipped in the Sources sheet

Half-life assumptions used by the model
Active ingredientHalf-life usedBasis
Tirzepatide≈ 5 daysPopulation average from manufacturer prescribing information
Semaglutide≈ 7 daysPopulation average from manufacturer prescribing information
Dulaglutide≈ 4.7 daysPopulation average from manufacturer prescribing information
Liraglutide≈ 0.54 days (about 13 hours)Population average from manufacturer prescribing information

Each row in the workbook carries its full source statement, its basis and its version, and you can enter your own override on Settings — which is then labelled userOverride so anyone reading the file can tell it apart from a reviewed value.

What the model deliberately leaves out

Those limitations are printed next to the model inside the workbook as well, not only here.

The data contract, so the two products are one product

Ten Data_ sheets hold your records as plain values. The web app reads and writes exactly the same shape, so a workbook and an app backup describe the same journey.

The importer refuses ambiguous duplicate headers, unknown schema major versions, invalid record ids and missing required columns rather than guessing at somebody's medication history.

Boundaries, kept

What it will do

  • Record what you enter, exactly as you enter it.
  • Show an educational medication-level estimate built on transparent, sourced, population-average assumptions.
  • Summarise your own records and show descriptive, non-causal associations with their sample sizes attached.
  • Help you prepare a clear one-page summary and a list of questions for an appointment.

What it will never do

  • Recommend, calculate, titrate, delay, accelerate, split or change a dose.
  • Convert pen clicks, syringe units, vial concentration or injection volume.
  • Diagnose a symptom, or call any level or any symptom safe.
  • Predict an outcome or claim medical-grade accuracy.
  • Discourage or delay you asking for help.
Urgent symptoms

Seek medical care now for severe or worrying symptoms — severe or persistent abdominal pain, persistent vomiting, signs of dehydration, a severe allergic reaction, or anything that frightens you. This workbook does not triage and must never be part of that decision.

Symptom and wellbeing wording throughout the workbook is descriptive, never diagnostic. Pattern Finder shows associations in your own entries; association is not causation, missing days change the picture, and nothing it displays is a reason to change what you take.

Questions people actually ask

Is this really free, and is there a catch?

It is free and there is no account, no email wall and no trial. The page is static: it generates the file in your browser and hands it to you. You own the file completely — edit it, rename the sheets you use, share it with a clinician, or keep it for years.

Does my health data get uploaded anywhere?

No. There is no server to upload to. The only network request this page makes is fetching the ExcelJS library from a public CDN when you press Build, and that request contains nothing but a request for a JavaScript file. Your backup file is read locally with the browser's file reader and the workbook is assembled in memory. You can verify all of this in your browser's network panel.

Will it work in Google Sheets?

Yes — that constraint shaped the design. There are no macros, no ActiveX, no external data connections, no slicers, no Power Query and no native chart objects, because those are the things that break or vanish on import. The visual layer is built from conditional formatting, colour scales and data bars, which Google Sheets imports reliably. Upload the .xlsx to Drive and open it with Google Sheets.

Does it work in LibreOffice, Numbers or Excel for the web?

It is a standard OOXML workbook with conventional formulas, so it opens in Excel for Windows and Mac, Excel for the web and LibreOffice Calc. Apple Numbers will open it but is the least faithful of the four with conditional formatting, so if Numbers is your main tool, expect the heatmap to look plainer than it does elsewhere. The numbers are the same everywhere.

Why are there no charts?

Two reasons, and they point the same way. The library that writes the file cannot create native chart objects, and native charts are the single least reliable thing to carry through a Google Sheets import. So the workbook draws the medication-level curve with data bars and the symptom pattern with a conditionally formatted heatmap, both of which survive intact. If you want a native chart, every underlying table is a plain range — select it and insert one in three clicks.

Why is the estimated level blank?

Most likely one of three things. There are no usable dose rows yet. Or an event has no active ingredient, so the model cannot find a half-life — add the ingredient on Data_doseEvents, or a half-life on Settings. Or every event is dated after your as-of date, which excludes them from history by design. The workbook leaves the estimate blank rather than showing a number it knows is wrong.

Why is the as-of date a typed value instead of TODAY()?

Because a volatile date makes a saved file lie to you. With TODAY(), a workbook you print in March reads differently in June, and a demonstration file goes stale the moment it is opened. The as-of date is a fixed cell on Settings: move it forward when you add rows, and every report, window and estimate moves with it deliberately.

Can I import a backup from the older version of the app?

Yes. The builder accepts the current JSON backup, the same backup wrapped in a data or dataset field, and the older av_glp1_v1 payload — which it migrates using the app's own migrator, so the numbers cannot drift between the two products. Your original file is never modified.

Is there a pen-click or dose converter in here?

No, and that is deliberate. Converting clicks, units, concentration or injection volume is exactly the kind of arithmetic where a spreadsheet error becomes a medication error, and a downloaded file gets copied, edited and passed on with no way to correct it. Record what your pen and your prescriber tell you, in the units on the label. If you are unsure about a dose, ask your pharmacist or prescriber — not a spreadsheet.

How do I share it with my clinician?

Open the Reports sheet and print it, or save it as PDF. It is one page, laid out to fit A4 and US Letter, and it labels every figure as patient-entered, derived or estimated so nobody has to guess where a number came from. The questions you typed on Data_appointments print with it.

The support sheets are protected. What if I want to change a formula?

Go ahead — the protection has no password. In Excel it is Review → Unprotect Sheet, in Google Sheets it is a protected-range you can remove. The protection exists so a stray keystroke does not silently break the model, not to lock you out of your own file. Every raw record lives on the unprotected Data_ sheets regardless.

How much data can it hold?

Every range is bounded on purpose, so the file stays fast and the formulas stay auditable: 300 medication events (about six years of weekly dosing), 500 daily check-ins, 500 measurements, 400 nutrition rows, 400 activity rows, 200 milestones, 60 appointments and 40 medication plans. If you outgrow that, start a second workbook for the next period — the record ids keep the two halves distinguishable.

Why a spreadsheet at all

A web app is convenient right up to the moment your browser storage is cleared, a phone is replaced, or a clinic asks for something they can read. A spreadsheet is the opposite: slow to type into, but permanent, portable, printable, and readable by anything for the next twenty years without asking permission from a company that may not exist by then. Keeping both means the daily entry can be quick and the archive can be durable.

The two share one schema and one calculation model on purpose. The estimated level you see on the web app and the estimated level the workbook computes come from the same equation with the same event rules and the same sourced half-lives, so moving between them never quietly changes the number.

AppVitamins · personal organisation and education only · no diagnosis, no clinical interpretation, no dose recommendation.