Release notes
Page 5 of 9
1.43.1
Fixed
- deps,testsPatch audit CVEs and realign stale schema/timer tests
- growth,timersReject non-finite measurements and guard edit-mode cancel
- growthAllow decimal measurements and guard out-of-range input
- timeline,timersResolve list overlap, top-bar crowding, and nursing-timer UX
1.43.0
New
- uiThe wordmark has a press effect now
- uiThe last-logged activity ink stays on the wordmark for 30 minutes
- uiThe app icons are refreshed with new artwork and a transparent favicon
- uiThe bottom navigation is slimmer, and the top bar has been refreshed
- uiThe wordmark is now Baloo 2 with write-on and celebration effects
Fixed
- iconsThe app icon is restored to the previous version
- reviewHSL wordmark ink tokens and stylelint casing per CodeRabbit
1.42.0
New
- legalThe app has a draft Privacy Policy and Terms of Service pages
- onboardingYou can sign up publicly and opt-in to sample data
- quotas+photosThe app has a daily cap for free-tier photo uploads
- seoOG/Twitter metadata, sitemap.ts, robots.ts (B3 code-only)
- settingsThe settings now allow data export and account deletion
Fixed
- rlsClose G7 user_settings + drop G10 chat_recommendations
- sharingMigrate F4 atomic revoke + F1 invite token to Server Actions
1.41.0
New
- growthGrowth charts now show WHO percentile overlays
1.40.0
New
- exportJSON export of activities, photos metadata, and profile
Fixed
- securityFail closed on Redis errors for cost-bearing endpoints
1.39.3
Fixed
- chatFail the stream request when user message persist fails
- chatLog silent supabase errors in onFinish persistence
1.39.2
Fixed
- securityEnforce write access in child-profile mutations
1.39.1
Fixed
- reviewCodeRabbit round 2 - total options map, assertNever exhaustiveness, lazy-modal doc exception
1.39.0
New
- modalsAdd useActivitySaveHandler save-dispatcher hook
Fixed
- dbMap last_edited_by_user_id and add mapper-column drift guard
1.38.0
New
- observabilityCapture React component stack for escaped render errors
- resilienceRetry currentUser() on transient Clerk API errors
Fixed
- activitiesEvict optimistic rows locally on delete
- validationThe bottle duration limit is now 1440 minutes to match sleep and nursing
Faster
- activitiesCollapse latest-per-type read from 10 REST calls to 1 RPC
1.37.3
Fixed
- Build production deploy on Vercel infra, not in CI
1.37.2
Fixed
- Make CI the sole owner of production deploys
1.37.1
Fixed
- Handle Sentry error recovery
1.37.0
New
- dashboardThe dashboard now includes an activity entry view mode
1.36.2
Fixed
- deployGate production Vercel builds
1.36.1
Fixed
- voiceStorkie prevents the app from hanging when trying to save an activity
1.36.0
New
- activitiesAdd undoCreatedActivity helper for detached undo
- authThe sign-in page now has drifting clouds and cyan ambient lighting
- dashboardThe dashboard allows you to scroll for more items when there are too many to show
- dashboardYou can tap a card to edit the displayed record on the dashboard
- modalsThe app accepts optional draft prefill in create mode
- settingsThe settings now include a card management grid with hidden cards
- voiceThe app will request microphone access when opened if permission is needed
- voiceAdd pure confidence classifier for auto-save
- voiceAdd summarizeEntryForToast headline formatter
- voiceAdd TimerCommand type + timer_command envelope status
- voiceAggregate time tags and emit unit:converted in normalizer
- voiceThe app saves data automatically every time parsing is complete
- voiceAuto-save toast shows value with Undo + Edit actions
- voiceAuto-start mic on open and auto-save with undo toast
- voiceThe Talk button shows a badge if the microphone permission is blocked
- voiceClassify start-timer intent in the parse orchestrator
- voiceDetect blocked mic with device hint; remove typed-authoring path
- voiceEmit structured assumptionTags from time inference
- voicePure dispatch helper for voice-started timers
- voiceRequest-access screen for prompt state; drop stale 'or type it' copy
- voiceRoute blocked-mic to the rich permission_denied screen; drop MicBlockedNotice + stale type copy
- voiceRoute timer_command parses to an onStartTimer callback
- voiceSkip transcript read-back and auto-save confident parses
- voiceThe Talk button starts sleep, nursing, or activity timers
- voiceThe Talk button shows three states: Talk, Allow microphone, and Microphone blocked
Fixed
- cameraContext-aware permission recovery + contained modal
- dashboardThe dashboard now shows overdue cues on warm-colored cards
- dashboardThe dashboard now has an in-place overdue alert instead of a needs-attention zone
- dashboardSeed user settings server-side to stop grid reflow swallowing taps #418
- dbRestore decimal duration storage
- drawerClear stranded vaul keyboard styles on mobile
- modalsStop false dirty prompt on sleep/diaper edit
- realtimeRefresh Clerk JWT on foreground + subscribe error
- Recover child profile cache failures
- reportsThe reports now format activity durations correctly
- settingsStable DndContext id to prevent card-grid hydration mismatch
- settingsStop logging expected unauthenticated case as error
- splashResponsive drifting clouds, warm palette, friendlier copy
- timelineThe timeline preserves your scroll position when loading more days
- timersPreserve sub-minute activity precision
- toastprimary/secondary action hierarchy + visible undo deadline
- voiceAuto-save unit conversions; only guesses block (not conversions)
- voiceBadge mic-blocked via persisted denial flag (Permissions API reports 'prompt' when blocked)
- voiceBias transcription with baby-domain prompt + examples
- voiceCanonicalize timer subtype enum + tighten parser prompt/docs/tests
- voiceEmit unit:converted for growth measurement conversions
- voiceFriction polish — race fix, save_failed bridge, error UX, mic-flash
- voiceGate general-activity subtype to canonical enum
- voiceThe app infers AM/PM for times without prompting you
- voiceThe app records microphone consent only after the recording starts
1.35.0
New
- activitiesStorkie enforces owner and editor permissions for writing activities
- activitiesEnforce viewer-block on delete/restore Server Actions
- aiParameterize ai_usage feature for voice_to_activity
- observabilityScrub voice transcript/draft keys from Sentry
- transcribeReturn 422 on NoTranscriptGeneratedError without billing
- voiceAdd /api/ai/parse-activity route
- voiceAdd /api/ai/transcribe route with audio validation
- voiceAdd deterministic time inference with visible assumptions
- voiceAdd OpenAI transcription provider adapter
- voiceAdd parse orchestrator over AI SDK generateObject
- voiceAdd plausibility range checks (refuse, not clamp)
- voiceAdd responsive VoiceActivitySheet container
- voiceAdd shared theme-aware chrome + motion keyframes
- voiceThe ActivityPicker includes a Talk action
- voiceThe app supports voice activity tracking
- voiceAdd voice activity presentational components
- voiceAdd voice draft schema and envelope types
- voiceThe app can convert volume units
- voiceWeight, length, and temperature conversions are included
- voiceA mic-permission recovery UI is available for the browser
- voiceThe vocabulary for voice commands has been expanded
- voiceExpose editTranscript + AnalyserNode hooks; load Nunito 800
- voiceNormalize draft to canonical input with completeness rules
- voiceRedesign UI — theme threading, motion, idle delight, dynamic placeholder
Fixed
- dbExtend ai_usage feature CHECK for voice_to_activity
- photosThe photo activity query filters out certain pending IDs
- securityStorkie allows the microphone in settings for compatible sites
- voiceThe Talk button labels the transcript as 'What I read' for typed input
- voiceMake draft schema OpenAI structured-outputs compatible
- voiceNormalize spoken number-words in time inference
- voiceSilently resolve 'just now' and non-time phrases to now
1.34.0
New
- child-profileThe child profile stores avatars in a safe location
Fixed
- child-profileThe child profile now honors profile units and remembers your selections
- child-profileThe child profile keeps fractional birth measurements intact
- storagePhoto buckets are now private
1.33.0
New
- aiAn activity search tool has been added
- aiAn activity stats tool has been added
- aiChat usage tracking has been added
- aiThe insights page includes a growth percentile tool
- aiAdd predictive tools registry
- aiAdd server tool foundations
- aiThe dashboard shows tool cards and consent prompts
- aiWire server tools into chat stream
- timelineThe timeline highlights new hugs and automatically scrolls to show them
Fixed
- aiAlign chat stream finish lifecycle
- aiAllocate sleep pattern overlap
- aiCatch pattern check lock prompts
- aiComplete chat touch target pass
- aiDrop transient usage insert policy
- aiGate chat suggestions and stale citations
- aiGive the locked-Pro "Got it" a real button style
- aiHarden chat request envelope + error path (Pass 10)
- aiHarden predictive tool behavior
- aiHarden tool date handling
- aiKeep usage inserts server-owned
- aiLand security audit Pass 9 hardening + log
- aiThe chat feature now meets size control targets
- aiMirror Step 5 objects into local/E2E setup + sanitize prompt fields
- aiPreserve consent and compact citations
- aiTool cards are now shown after replies
- aiChat touch targets have been restored
- aiRecent searches now show the activity type
- aiScrub child PII from Sentry log pipeline
- aiFood item searches are now conducted before applying limits
- aiSearch solids food items safely
- aiThe size tool row is now adjusted for items over 366 days
- aiThe chat tool card and bubbles are now tightened and colored by activity
- aiThe predictive date windows are now tighter
- chatPersonalized answers in chat are now more secure
- dbSearching for food items is no longer available to anonymous users
- realtimeChannel recreation on foreground recovery is now done instead of re-subscribing
Faster
- aiBound server-tool queries + harden ai_usage policy