Injection log
Log each injection — peptide, dose, route, site, notes. Your log stays in this browser. No account, no server, no ads.
No entries yet.
Why log injections
- Rotate sites. Repeat injection into the same site causes local irritation, fibrosis, and slower absorption. Seven-site rotation is the baseline standard.
- Catch dose drift. Multi-peptide stacks are easy to mis-time. A written record surfaces accidental double-doses or long gaps before they affect your bloodwork.
- Correlate side effects. Mark notes on water retention, sleep change, injection soreness, mood — the pattern only shows up in weeks of data, not a single entry.
This v1 is intentionally narrow: one peptide + one dose + one site per entry. Side-effect severity tracking and bloodwork reminders ship in later releases.
Log FAQ
Where is my data stored?
In your browser's localStorage under key vialfile-log-v1. Nothing is sent to a server in this v1. When we add sync (opt-in), your existing entries will migrate over cleanly.
Can I export or back up my log?
Export + import are coming in the next release. For now you can inspect the raw JSON in browser devtools (localStorage.getItem('vialfile-log-v1')) and copy it elsewhere as a backup.
Why only 7 sites?
Because that's the rotation peptide users actually follow — both delts, abdomen, both glutes, both thighs. Granular sub-quadrants (upper-left abdomen vs lower-right abdomen) added visual complexity without behavioral value in v1.
What happens if I switch browsers?
Your log stays on the original browser until you export and re-import, or until we ship cloud sync. Private-mode windows have their own storage scope that clears on close.
What's the "→ vial #<id>" cue under each entry?
Each row's trailing "→ vial #<id>" cue tells you which open vial the FIFO allocation walk drew this dose from — the same walk that drives the days-of-supply projection on /inventory.html (and the low-supply banners on /digest.html and /stack.html). Open vials are sorted by openedAtIso ascending; doses logged after the oldest open vial was opened are allocated to it first, and overflow advances to the next open vial when the leading one fills. The id is the first 8 hex chars of the vial uuid — enough entropy to disambiguate the typical user's vials at-a-glance, while keeping the row compact alongside the dose / route / site triple. The cue collapses to nothing when no vial allocates (no open vials for that peptide, the entry pre-dates the oldest open vial, or the FIFO walk exhausted before reaching this entry). Pure projection over vialfile-inventory-v1 + vialfile-log-v1 — no separate storage key, no derived state to drift.
What's the "side-effect 6h later: severity 3 (headache)" line under each entry?
When you log a side-effect on /sideeffects.html for the same peptide within 24 hours after a logged injection, this row picks up a one-line shadow: "side-effect <Xm or Xh> later: severity <1-5> (<symptom>)". It closes the consequences-attribution loop on the LOG page — answers "did this dose cause something?" right where you're looking at the dose. The shadow window is half-open [entry timestamp, entry timestamp + 24h) — an effect logged at the exact dose time is included, an effect logged at the 24h mark is excluded. Sub-hour deltas render in minutes, ≥1h renders in floored hours. The cue picks the EARLIEST eligible side-effect after the dose — ties (same timestamp) broken by first-seen order. If two doses are minutes apart and a single side-effect lands inside both 24h shadows, the cue attaches to BOTH rows by design — you can't always tell which dose caused it, both candidates surface. Severity gate mirrors the side-effect form's validation byte-for-byte (integer 1-5); hand-crafted or legacy entries with non-integer or out-of-range severity skip silently. Pure projection over vialfile-log-v1 + vialfile-sideeffects-v1 — no separate storage key, no derived state to drift. Mirrors the calc page's "Last effect: severity 3 — 5 days ago (headache)" aside, but answers the *forward-looking* question "what happened after this dose?" rather than the *backward-looking* "what did I feel last time?".
What's the warn-tinted "inventory mismatch" line under an entry?
When the cumulative dose you've logged for a peptide first exceeds the total capacity of all your recorded vials (open + sealed combined), the crossing entry gets a warn-tinted "inventory mismatch — log claims X mg, inventory has Y mg" cue. It fires exactly once — on the first entry that pushed the cumulative over the limit — telling you "your log claims more was drawn than your inventory records can account for." Use this as a prompt to add missing vials on /inventory.html, or to check for erroneous duplicate log entries. The calculation uses raw mgInVial for all non-empty vials — the injection log is treated as the authoritative record of usage, so it intentionally ignores any manually-set mgUsed baseline (subtracting it from the same entries we're summing would double-count). Collapses silently when no inventory is recorded for the peptide — you can use the log without tracking vials. Pure projection over vialfile-log-v1 + vialfile-inventory-v1; no separate storage key, no derived state to drift.
What's the "Bloodwork due in Nd — book your draw soon" line under an entry?
When you log an injection for a peptide that has a bloodwork protocol set up on /bloodwork.html with a next-due date within 7 days, the log row surfaces a one-line muted reminder: "Bloodwork due in Nd — book your [peptide] draw soon." If the bloodwork date has already passed, the hint reads "Bloodwork overdue — book your draw soon." The reminder closes the pre-draw loop on the LOG page — when you're recording an injection days before a scheduled panel, the question is often "should I do this dose now or wait until after the draw?" surfacing the upcoming bloodwork right at the injection moment helps you decide. Hidden when no bloodwork protocol exists for that peptide or when the next draw is more than 7 days out. Pure read-only derivation from vialfile-bloodwork-v1 — the log page never writes bloodwork data. Manage protocols on /bloodwork.html.