Skip to main content
← Back to Building Storkie

Release notes

Page 6 of 9

  • 1.32.0

    New

    • syncAdd Supabase bottle sync spike
    • syncGeneralize activity reads
    • syncGeneralize activity writes
    • syncHarden realtime invalidation
    • syncPromote Supabase activity mutations
    • syncReplace PowerSync activity reads

    Fixed

    • queryClose Pass 12 invalidation ripples + setup-file drift (audit pass 13)
    • securityRe-establish activity write guards after PowerSync removal
    • syncRefresh realtime auth token to prevent channel expiry

    Faster

    • queryHarden realtime invalidation + clear PowerSync residue (audit pass 12)
  • 1.31.4

    Faster

    • lighthouseTighten browserslist to Next 16 baseline (-55 KB/route)
    • powersync-tokenMove to Edge runtime to eliminate cold-start latency
    • supabaseStub @supabase/realtime-js to drop ~50 KB/route
  • 1.31.3

    Fixed

    • timelineDefault day-view photos to [] to stop N+1 fetch
  • 1.31.2

    Faster

    • Defer Sentry SDK off first-load JS with queue-and-replay (~286 KB/route)
    • Drop zod locale bundles from client (~136 KB/route)
    • Lazy-load browser-image-compression off photo routes (~50 KB)
  • 1.31.1

    Fixed

    • a11yReserve dashboard attention zone during hydration (CLS)
    • a11yResolve Lighthouse accessibility and CLS audit failures
  • 1.31.0

    New

    • drizzleMigrate pilot read paths to Drizzle (Phase 1)
    • drizzleMigrate remaining read paths to Drizzle (Phase 2)
  • 1.30.0

    New

    • Add /lighthouse audit + auto-fix slash command
  • 1.29.2

    Fixed

    • hydrationPatch React #418 at UserSettingsProvider root cause
  • 1.29.1

    Fixed

    • powersyncSplit UNION ALL bucket params into separate definitions
  • 1.29.0

    New

    • activitiesAdd explicit-tables watched query hook
    • activitiesAdd useActivitiesQuery generic helper
    • activitiesMigrate useLatestActivities to PowerSync watch
    • dashboardDrop SSR prefetch, render from local SQLite
    • dbRestrictive RLS policies for direct PowerSync writes
    • diagnosticStorkie takes users with stuck accounts to a diagnostic page
    • notificationsThe app no longer includes an unused push notification feature
    • offlinePost-login route warmup so all routes work offline
    • offlineThe app now preloads modal segments and handles errors for failed loads
    • powersyncAdd SQLite row mapper for activity + child profile
    • powersyncAuto-recover stuck local SQLite + banner fallback
    • powersyncImplement upload handler with SQLSTATE classification and soft-delete RPC routing
    • powersyncWire connector.uploadData to new handler
    • readsMigrate diaper, medicine, and detail hooks to PowerSync watches
    • readsMigrate insights charts and settings export to PowerSync watches
    • sharingPersist invitation custom_message end-to-end
    • swMigrate from hand-rolled SW to Serwist
    • timelineMigrate reads to PowerSync watches + restore caregiver attribution
    • transportFlip activity write transport to PowerSync
    • transportIntroduce ActivityTransport interface with server-action impl

    Fixed

    • accessStop showing viewers as Owner and prevent ghost writes
    • attributionAccept Clerk user IDs in displayNameUserIdsSchema
    • authIf you are offline, Storkie redirects you to sign-in
    • authSign-in redirects are blocked when you are offline
    • buildDrop dead options param + sweep notification leftovers
    • buildPin engines.node to single major to silence Vercel warning
    • buildSilence 155 Vercel preview warnings and local dev warnings
    • chatDefer generateSessionTitleIfNeeded via after() so it survives response
    • dashboardThe dashboard hides the first-use welcome if the child profile is resolved
    • dashboardThe Activities page redirects to sign-in when needed
    • dashboardThe dashboard shows loading profiles during data loading
    • dashboardThe greeting on the dashboard is always reachable
    • dashboardThe dashboard displays skeletons during the initial loading of data
    • dashboardThe dashboard shows skeletons during data re-sync instead of empty cards
    • dashboardThe dashboard safely shows the status of data loading
    • dashboardThe dashboard no longer keeps grid cards loading when data arrives
    • dashboardThe dashboard's loading skeletons are tinted with the activity card color
    • dashboardThe dashboard's grid card skeletons are no longer stuck when data arrives
    • dbAlign invitations user FKs with schema source (migration 099)
    • emailThe sender display name in invitation emails is now set to 'Storkie'
    • envGate VAPID strictness on VERCEL=1, not just NODE_ENV
    • hydrationKill three React #418 sources on dashboard
    • insights,swInsights shows correctly when the app is offline
    • inviteThe app allows new invitees to complete the onboarding flow without issues
    • inviteUse service-role client to read invitations by token
    • layoutGuard CSS height vars against zero ResizeObserver entries
    • migrationBackfill default_timeline_view 'summary'→'day'
    • modalsViewers no longer see a prompt when trying to close without saving changes
    • observabilityTag silent failure paths in child-profile fetch
    • offlineCache Clerk's CDN bundle in SW (stale-while-revalidate)
    • offlinePersist TanStack Query cache to localStorage
    • offlinePreload nested photo modal chunks
    • offlineUse direct import() to preload modal chunks
    • persistUse stable buster instead of per-commit SHA
    • powersyncClassify P0001 and PGRST* as non-retryable
    • powersyncPowerSync no longer initializes until you sign in
    • powersyncPowerSync does not start on the login page when you are signed out
    • powersyncDrop cancelled flag so in-flight init completes
    • powersyncThe app now prevents double initializations during PowerSync
    • powersyncPowerSync now depends on the session cookie for initialization
    • powersyncHoist provider above key={userId} subtree to stop double-init
    • powersyncLatch init flag synchronously to close async race window
    • powersyncMake recovery offline-aware + cache /@powersync/ in SW
    • powersyncStop double-init by stabilizing provider's reconciliation slot
    • powersyncSurface connect() failures via console
    • powersyncTimeout waitForReady to surface stuck schema init
    • powersyncUse correct RPC parameter names in upload handler
    • powersyncUse static worker URLs for Turbopack compatibility
    • pwaCache /_next/static/ chunks for offline dynamic imports
    • readsRoute useActivitiesQuery through explicit-tables watch
    • rlsCaregivers can see each other's names in the child profile
    • securityClose anon EXECUTE on SECURITY DEFINER fns via REVOKE FROM PUBLIC
    • securityClose Pass 6 audit gaps
    • securityHarden PowerSync write path against IDOR and mass-assignment
    • securityPass 4 defense-in-depth — chat ownership, rate limits, validation, hardening
    • sentryCorrect project slug from 'javascript-nextjs' to 'storkie'
    • sharingThe dropdown menu for sharing now indicates clickable options with a cursor pointer
    • sharingMake accept_invitation_atomic actually executable (3 follow-up migrations)
    • sharingMake acceptInvitation atomic via SECURITY DEFINER RPC
    • sharingRefetch shared access on mount/focus for cross-device invitee acceptances
    • sharingSanitize invitation custom_message against control + bidi spoofing
    • splashAdd 5s safety-net dismiss for offline cold-start
    • sw,proxyAllow Serwist SW to register on protected routes
    • swCache /_next/static/ chunks for offline modal loads
    • swCache same-path redirects so post-signin /dashboard works offline
    • swDrop illegal RequestInit when constructing cache key
    • swDynamic-import @serwist/next so it actually runs in build
    • swFallback to cached /dashboard for unvisited routes offline
    • swHoist isDevHost declaration above all cache branches
    • swignoreSearch on /_next/static/ cache keys
    • swignoreSearch on navigation cache lookup
    • swMatch navigation HTML cache by pathname only, ignore query
    • swPrecache splash + branding assets for offline cold-start
    • swScrape chunk URLs from HTML and precache full graph
    • swStrip ?dpl=... when matching precached static assets
    • swSwitch to @serwist/cli for SW generation
    • themeAdd --destructive-text token for AA-contrast destructive copy
    • timelineHandle Map-or-Record from photos enrichment
    • timestampsNormalize via datetime() in all SQLite range filters
    • uiCursor-pointer on dropdown menu items system-wide
    • user-settingsTag localStorage cache with userId, clear on mismatch

    Faster

    • powersyncPre-warm token + boot instrumentation
  • 1.28.5

    Fixed

    • powersyncMake PowerSyncProvider SSR-safe to fix React #310
  • 1.28.4

    Fixed

    • pwaThe install banner is hidden during the welcome onboarding tour
  • 1.28.3

    Fixed

    • powersyncPrevent React hook count mismatch in PowerSyncProvider
  • 1.28.2

    Reverted

    • Roll back Clerk from v7 to v6.39.2
  • 1.28.1

    Fixed

    • envSkip server-only POWERSYNC_JWT_SECRET check in browser
  • 1.28.0

    New

    • clerkUpgrade to @clerk/nextjs v7 (Core 3)
    • powersyncAdd PowerSync packages, token route, and env config
    • powersyncAdd production schema, connector, provider, and sync rules
    • powersyncAdd Railway deployment config
    • powersyncAdd Railway PowerSync URL to CSP connect-src
    • powersyncWire PowerSyncProvider into app component tree

    Fixed

    • powersyncAdd sync_rules path to service config
    • powersyncHarden env validation and pin service image
    • powersyncPrefix env vars with PS_ for PowerSync config parser
    • powersyncRevert to direct connection with verify-full SSL (IPv4 add-on enabled)
    • powersyncUse session pooler for IPv4 and relax sslmode
    • powersyncUse sslmode disable for pooler compatibility test
    • securityUpdate @clerk/nextjs to 6.39.2
  • 1.27.0

    New

    • uxThe camera and notification permission prompts have been improved
  • 1.26.0

    New

    • brandingThe Storkie brand is now present across the app
    • brandingStorkie is added to not-found pages and invitation emails
    • chatThe chat includes a split-beak talking animation for the Storkie avatar
    • chatScroll behavior and Storkie avatar consistency have been improved in chat
    • chatThe chat features Storkie mascot, idle animations, and sizing for empty states
    • growthA Growth & Milestones page stub has been added
    • navThe bottom navigation has been restructured with a center button and seven items
    • onboardingThe onboarding process includes a color and confetti celebration, enhancing the visual experience
    • settingsYou can edit your display name in the settings
    • splashThe splash screen shows Storkie flying across the screen during loading
    • timelineThe timeline shows which caregiver recorded each activity entry
    • welcomeThe welcome section includes a carousel that walks through the pre-auth feature

    Fixed

    • Align tests with source changes and upgrade Next.js to 16.2.3
    • authThe app can now use Google accounts for sign-in
    • chatThe chat animation plays for the Storkie avatar only during streaming
    • dbDeploy create_child_profile_with_owner RPC as migration
    • navThe navigation button moves below the border and has no ring overlay
    • navThe navigation button's ring now covers the top border line
    • nursingRound fractional durations to integers before DB insert
    • perfThe app no longer shows flickers or loading delays
    • settingsThe settings page has an easier way to edit display names
    • settingsThe app reads your display name from the database
    • settingsSettings show only the first name for display
    • timelineThe timeline now has increased spacing between activity cards
    • uxThe dashboard and timeline have an improved first-use experience
  • 1.25.2

    Fixed

    • Time labels are now capitalized, and attention or overdue cards have a red badge
    • Effect audit pass 3 — adjust-state-during-render and stable dep cleanup
    • All activity fields are now available in the chat feature
    • The grid card is easier to tap with a new shadow and chevron
    • The latest activities for pumping now include mL columns for each side
    • The Customize Cards button is now below the grid for easier access
    • The attention sheet only shows when you first load the app, not after navigating
    • The app now limits attention cards to 2 and renames the label, excluding activity type
    • The chat input now automatically resizes for multi-line editing
    • Resolve lint error and align stale test assertions
    • The settings now has the Smart Insights toggle back, and chat copy has no em dashes
    • Card management has a new style with drag-to-reorder and compact rows
    • The activity strip shows a centered grid, readable labels, and timer indicators
    • All activity columns are shown from the latest activities
    • Unify chat markdown rendering through MemoizedMarkdown
    • Upgrade drizzle-orm to 0.45.2 to patch SQL injection vulnerability
    • Use vitest run in verify:ci to prevent watch mode blocking
  • 1.25.1

    Fixed

    • Align test assertions with activity_type in update mutations
    • Pass activity_type in update mutation for proper server-side handling