Everything overdue, longest first. A row that has been overdue three weeks is not a reminder any more, it is furniture — do it, change its interval, or take it off the board.
This page cannot notify you. A browser tab has no access to Reminders, Calendar or the Clock, and on iOS its timers stop running the moment you switch apps or lock the phone \u2014 so a dwell that finishes while you are elsewhere rings late, when you come back, or not at all. Everything below hands off to iOS instead of pretending otherwise.
With this on, starting a dwell here also starts a real timer on your phone, so it rings on the lock screen whether or not you are looking at this page. It needs a Shortcut to receive the duration \u2014 the recipe is below.
The one-off is for anything not on the board \u2014 laundry, a rest between sets, something in the oven. It goes straight to the Clock and never touches this page.
1. Protocol Timer — receives a duration from this page and starts a real timer.
New Shortcut, named exactly what you put in the Shortcut box above. One action: Start Timer. Set the unit to seconds and tap the number field, then pick the Shortcut Input variable. That is the whole thing. Test it by turning the toggle on and tapping any dial on the board.
2. Protocol Reminders — writes your alerts into Reminders each morning.
Actions in order: Get Contents of URL pointed at your sync URL, with method GET and a header x-sync-key set to your sync key (both are on the Sync tab). Then Get Dictionary Value, key alerts. Then Repeat with Each. Inside the repeat: Get Dictionary Value key l from Repeat Item for the title, Get Dictionary Value key atPretty from Repeat Item, then Text reading Today at followed by that value, then Get Dates from Input, then Add New Reminder with the title and that date as the alert. End Repeat.
Then in the Shortcuts app under Automation, add a Time of Day automation for whenever you wake, running that shortcut, with Run Immediately on and Notify When Run off.
Alerts here are a published list, not a live connection. Change a time and the Shortcut picks it up the next morning — or run it by hand to see it now.
The chain is one view of this and it is the most fragile one. The grid is the honest one — a bad night is one square in a season, which is what it actually was.
One missed day never breaks the run. Two consecutive missed days do. Completing anything renews the grace, so the only way to lose a run is to actually stop for two days — not to have one late night.
Everything that isn't daily, whether or not it's due today. The grid is the next seven days starting with today — fixed weekday items in plain text, floating and anchored ones in italic on the day they actually land, with an overdue count if they're already late. Tap any row in the list below to open its schedule.
Grouped by what happens if you cut it. Every price and duration is editable — these are ballpark drugstore figures, not live prices. Put in what you actually pay and the math becomes yours. Duration is months per unit at daily use.
There is no single correct price — the same 8oz Living Proof bottle sells for $14 to $40 depending on seller, and the cheap end is usually marketplace resellers where haircare gets diverted or counterfeited. Prices here are brand-direct anchors. Overwrite with what you actually paid.
Duration is the number that matters more and the one nobody can look up. Hit Opened one today when you start a bottle and Ran out when it's done — after one cycle the estimate becomes measured, and the monthly figure becomes real.
Ceilings are generic category defaults and they are the weakest numbers here — they can’t know that your hair type or skin puts you in a sub-category with a higher floor. When a research chat establishes what a category actually costs for you, overwrite the ceiling. That’s the number that makes the orange flags mean something.
What each thing actually is, what it's for, and why it earns a step. Read once — you shouldn't need it twice.
Keeps this file's state on a server you own, so your streak survives a new copy of the file and your phone and desktop show the same thing. Local storage stays the source of truth — the server is a mirror. Lose signal and nothing breaks; it catches up when you're back.
These are baked in — you shouldn't need this. It's here for the night you swap something and don't want to wait on a rebuilt file. The type is what rewrites the instructions, sets the timers, and decides which steps exist; the name is just so the step says what's in your hand.
No dates, no schedule, no streak. Nothing in here ever goes late, nothing counts against a day, and nothing follows you to tomorrow — it just sits until you get to it.