Releases: IsabelleTan/BabyTracker
Release list
1.12.0
New features
Export full event history as JSON
The Stats page now has an Export button that downloads all events for the current baby as a JSON file. The export covers the complete history regardless of the selected time range, making it easy to back up or analyse data externally.
Stats default to All time
When the Stats page first loads it now selects the "All time" range instead of the default fixed window. Fixed ranges (week, month, etc.) are clamped to the date of the first recorded event so the chart never shows empty leading space.
Output location shown for all feed types; sleep duration labels added
The event timeline previously only showed the output location label for breast feeds. It now appears for all feed types. Sleep events additionally display a formatted duration label (e.g. "2 h 15 min") directly on the timeline row.
1.11.3
1.11.3
Performance
Timeline renders fewer unnecessary updates
The event timeline now avoids re-rendering rows that have not changed. Scrolling through a long day of events is noticeably smoother on low-end devices.
Event sheet opens faster
Internal timer logic in the event logging sheet has been extracted into a dedicated useTimer hook and now runs more efficiently, reducing jank when the sheet first appears.
Infrastructure
- Dropped five frontend dependencies — axios, clsx, tailwind-merge, CVA, and tw-animate-css have been removed. Network calls now use the native
fetchAPI; utility CSS helpers are inlined. The production bundle is smaller as a result. - Added
isSleepEventhelper — a small shared utility now centralises thesleep_start/sleep_endtype-check that was previously duplicated across several files. - TypeScript cast clean-up — a handful of unsafe
ascasts in the frontend have been replaced with proper type narrowing. - Removed stale generated files —
CHANGELOG.md, a temporary dependency-analysis document, and two staleREADME.mdlines have been deleted. The.gitignorehas been updated to prevent similar artefacts from being committed in future. npm audit fix— locked transitive dependency versions to address low-severity audit findings.
1.11.0
1.10.1
1.10.0
1.9.0
What's Changed
- refactor: split funMessages, fix sync queue, deduplicate output helpers by @IsabelleTan in #157
- refactor: TrackedStat domain object, sleep window fix, chart helper extraction by @Roald87 in #158
- refactor: add BabyRecord and remove is_new by @Roald87 in #159
- refactor: replace loading/error boolean pairs with FetchStatus union by @Roald87 in #160
- refactor: replace 4 AwardFlags booleans with a set of claimed award names by @Roald87 in #161
- refactor: consolidate time formatting and fix chart axis units by @Roald87 in #162
- refactor: replace dashed boolean with strokeStyle union and update chart line styles by @Roald87 in #163
- feat: show individual datapoints on median charts by @Roald87 in #164
1.8.0
1.7.1
1.7.0
Release Notes
1.7.0
New features
Longest potty streak in Leaderboard Records
The Records section now tracks the longest run of consecutive parenting days on which at least one potty event was logged. A "New!" badge appears when the current streak is the all-time longest.
5-minute time wheel snapping
The time picker in the event logging sheet now snaps to 5-minute intervals, making it faster to log events to the nearest five minutes without over-precise scrolling.
Bug fixes
Potty streak counter could overcount by one day
The home screen streak badge checked for any potty event in the last 24-hour window rather than strictly within the current parenting day (05:00–05:00). An event logged the previous evening would remain visible the next morning and incorrectly increment the counter. The check is now scoped to the current parenting day, consistent with the server-side computation.
Night session events did not update immediately on log or delete
Logging or deleting an event on the home screen updated the main timeline immediately but left the night session summary stale until the next background sync. Both views now update together.
Year picker could show a stale year when reopening the event sheet
The year wheel was initialised once on component mount rather than when the sheet opened, so events logged near a year boundary could display the wrong year pre-filled. The picker now resets correctly each time the sheet opens.
Time wheel felt like it reached the end
The cyclic repeat count on the time wheel pickers was too low, so rapid scrolling could visibly hit the boundary. The repeat count has been increased so the wheel scrolls continuously.
Partner message could trigger a React state update side effect
An event handler in SummarySection was updating state inside an effect body in a way that could cause a double-render in React Strict Mode. The side effect is now correctly separated.
Removed
Estimated next feed
The "next feed in X min" estimate has been removed from the home screen. It relied on a simple average that was unreliable in practice and added visual noise.
Infrastructure
- Rate limits are now configurable via environment variables (
RATE_LIMIT_EVENTS,RATE_LIMIT_READ,RATE_LIMIT_AUTH). Defaults remain 60/min, 30/min, and 10/min respectively. - Frontend ESLint now runs as a required CI step on every pull request.
- Leaderboard endpoint now returns HTTP 204 (instead of 200 with a flag) when there is not yet enough data to display, which is a cleaner contract for clients.
1.6.0
Release Notes — v1.6.0
Vitamin D daily tracking
A small status row now appears on the home screen, below the action cards, to help you and your partner stay on top of your baby's daily vitamin D dose.
- Tap Mark as given to log the dose instantly — no drawer, just one tap
- Once logged, the row shows Given HH:MM by Name so both partners can see who already gave it
- Resets at 05:00 (the start of the parenting day), the same boundary used everywhere else in the app
- The dose appears in the timeline list view with a pill icon
- Syncs between devices through the normal 30-second background sync — if your partner marks it on their phone, you'll see it on yours within half a minute