Split the page into five tabs
Fourteen panels sat in one column, so reaching the weight curve meant scrolling past sleep, timing, walks and counts. The page had only grown — walks, walk patterns, training and the excluded-day marker all landed on the same scroll — and folding panels away, while it helps, is a per-panel fiddle you then have to undo to look at anything. They are grouped by subject now: Today (overview, sleep & wake, history), Sleep, Walks, Habits (pee/poo/meal timing and counts) and Growth (weight, training, notes). No tab holds more than three. The day bar and the log buttons stay above them on every tab, because logging has to be one tap from wherever you are, and the tab bar sticks under the day bar — two stacked stickies need the second's offset to be the first's height, so that height is measured and published as --day-bar-h rather than guessed. What gets hidden is the wrapper, never the sections inside it. walk-timeline and walk-trend carry their own hidden, set by renderWalkPatterns once a walk exists, and hiding them directly would clobber it. render() still draws every panel on every pass, hidden tabs included. Nothing measures layout — the charts scale through their viewBox, and the one getBoundingClientRect belongs to the timer pill — so drawing into a hidden wrapper is safe, and a tab is never briefly stale when you arrive on it. That pill's own check gains an explicit "is the card's tab showing": a hidden element measures as zeroes, which gave the right answer here by coincidence rather than by rule. Back returns to Today from any tab in one press, and a second press leaves. Exactly one history entry is ever live, armed on leaving Today and spent on returning — including when the return is a tap on the Today tab, which would otherwise strand the entry and make the next press appear to do nothing. An entry per switch is what a browser does unaided, and is why tabbed apps get a reputation for trapping you. Folding is untouched and composes: tabs group, folding tunes what shows within a group. Both selectors that reach for panels are descendant selectors, so the extra nesting cost them nothing. The reordering was scripted rather than done by hand — fourteen sections moving between five wrappers is how you silently lose one — and a check now asserts every panel sits in exactly one tab, that buttons and wrappers correspond, and that the aria pairs are wired. The first run of that script dropped three explanatory comments along the way, which is exactly the sort of thing it exists to catch.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
[
|
||||
{ "date": "2026-09-07", "text": "The page is split into five tabs — Today, Sleep, Walks, Habits and Growth — instead of one long column of fourteen panels. Today has the overview, sleep & wake and the day's history; Sleep and Walks each have their day-by-day chart, their when-it-happens grid and their trend; Habits has the pee, poo and meal timing and counts; Growth has weight, training and notes. Getting to the weight curve no longer means scrolling past everything else. The day bar and the log buttons sit above the tabs and stay there whichever one you're on, so logging is still one tap from anywhere. Folding a panel by tapping its heading works exactly as before, inside its tab, and the app reopens on the tab you left it on. The back button (or the back gesture) returns you to Today from wherever you are, and pressing it again leaves the app — always two presses to get out, however much you'd been flicking between tabs beforehand" },
|
||||
{ "date": "2026-09-07", "text": "Guest links can be copied whenever you want. Settings → Guest access now shows each live link's URL next to it with a Copy button, instead of showing it once when you created it and never again. If you lose the message you sent, or want to pass the same link to someone else, you can just take it again rather than making a new one and leaving whoever already had the old one locked out. Links you made before this change can't be shown — only a scrambled form of those was kept — so revoke one and create a fresh one if you need its URL back" },
|
||||
{ "date": "2026-09-07", "text": "Fixed buttons that were meant to be hidden but showed anyway. A guest opening an entry the owner logged saw Delete and Save on it — they never worked (the server refuses the change) but they had no business being there. The same fault had been quietly affecting three other things for a while: the 🌳 pedigree button appeared before you had set a pedigree ID, “Send a test notification” appeared when reminders weren't available, and the exercise dialog offered Delete while you were adding a new exercise rather than editing one. One styling rule was overriding every one of them" },
|
||||
{ "date": "2026-09-07", "text": "A day can now be left out of the stats. Open the day, tap “⊘ Not counted” next to the overview heading, and it stops feeding the charts and averages — useful when someone else had the puppy and the record is thinner than the day really was, so it isn't fair to count it. Nothing is deleted or hidden: the day's own overview, history and sleep & wake list are exactly as they were, just dimmed and labelled, and you can switch it back at any time. In the day-by-day charts the day keeps its place but is drawn as a hatch instead of a bar, so a deliberate gap can't be misread as a day the puppy barely slept. Weigh-ins and notes still count wherever they fall — those are facts you recorded, not behaviour a sparse day distorts — so the weight curve and the Notes log are untouched. The Timing panel throws away gaps that reach across a skipped day rather than measuring them, which would otherwise turn two normal days into one enormous fake gap" },
|
||||
|
||||
Reference in New Issue
Block a user