Running out is a scheduling failure, not a supply failure, and it is entirely preventable with one extra column.
The column is doses remaining in the current vial, decremented each time you inject. Not calculated on demand, decremented. A number you can read without thinking, which is what makes it useful on the day you would otherwise not think about it.
From that, the reorder date falls out. Doses remaining times the interval gives days remaining. Subtract however long delivery takes plus a margin, and that is when you order. Write that date down as a single line at the top of the log rather than recomputing it.
Two things make the estimate go wrong in the same direction every time, so build in slack for both. Dead space means you get fewer doses out of a vial than the arithmetic promises. And a reconstituted vial has a usable window that may expire before the doses run out, in which case the calendar, not the count, is the binding constraint.
The second one catches people out because it is invisible in a dose count. A vial with three doses left that was mixed six weeks ago may already be past the point where you want to use it. Only the reconstitution date tells you, which is why it belongs on the tape and in the log.
I keep doses per vial worked out in the Peptide Tracker & Calculator when I mix, then just count down. Recomputing it every week is exactly the kind of small recurring task that gets skipped.
One more habit: order before you are at one dose remaining, not at zero. A gap in a schedule is worth avoiding for its own sake, and it is the one variable here entirely within your control.