Craft

Main quests and fun experiments. Code, art, and community Happy

My main project now is Lifelong Habit, a habit app for people who want to focus on long-term habit formation and detailed insights. Most of the things I’ve made and played around with circle back to self-development, with some funsies and whimsies here and there. Open to work and collaborations!~ Starfish

Jun 29 – Jul 5Week 9 of 27
Sun, Jul 5

No commits.

Sat, Jul 4

No commits.

Fri, Jul 3
  • feat(habit-form): copy config for Ladder, completing the BENTO/LADDER/SNOWBALL rolloutlifelong-habit-app09:16
  • feat(habit-form): copy config for Snowball, generalize CopyConfigSheet, fix retroactive Bento gaplifelong-habit-app09:10
  • refactor(constants): split statusLineVariants.ts into a directory by input sourcelifelong-habit-app07:46
  • fix(habit-form): guard archetype in buildPayload, same invariant as habit_namelifelong-habit-app06:51
  • fix(theme): guard session user id inside useTheme queryFnlifelong-habit-app06:48
  • fix(types): close type drift in habit form, theme, sync, and log statuslifelong-habit-app06:47
  • fix(dashboard): remove remaining backhanded phrasing and vague quantifierlifelong-habit-app06:08
  • fix(status-line): resolve DASHBOARD voice guideline violationslifelong-habit-app05:56
  • fix(status-line): restore partial_done reachability, fix maxShowsPerDay driftlifelong-habit-app05:54
Thu, Jul 2
  • fix(status-line): move useDailySummary above useRecordDashboardOpen effectlifelong-habit-app14:35
  • docs(status-line): document every pooled message and dataLine branch in headerlifelong-habit-app14:34
  • fix(progress): stop AllViewsContainer remounting on background refetchlifelong-habit-app13:29
  • fix(device-sessions): track last_seen_at on every session event, not just SIGNED_INlifelong-habit-app12:34
  • fix(device-sessions): restore last_seen_at column defaultlifelong-habit-app12:32
  • feat(auth): add device_sessions registry for multi-device debugginglifelong-habit-app12:29
  • chore(dependencies): add expo-device packagelifelong-habit-app12:03
  • refactor(progress): merge Tracked/Missed Days into OverviewSummaryBarlifelong-habit-app10:46
  • feat(progress): add Tracked/Missed Days below OverviewSummaryBarlifelong-habit-app10:41
  • feat(progress): add hairline dividers between CategoryInsightsCard sectionslifelong-habit-app10:39
  • chore(usePullSync): remove dead hooklifelong-habit-app10:24
  • style(copy-config-sheet): confirm step reuses ConfirmSheet's centered-card tokenslifelong-habit-app10:15
  • fix(bento-form): replace unreliable watch()-driven draft effect with imperative emissionlifelong-habit-app10:12
  • docs(bento-copy): correct overclaimed collision risk, remove em dasheslifelong-habit-app09:03
  • fix(habit-form): eliminate nested-Modal race in copy-config confirm, carry stopwatch state across GROVE switcheslifelong-habit-app08:45
Wed, Jul 1
  • fix(habit-form): detect Bento overwrites correctly and enable stopwatch by defaultlifelong-habit-app14:16
  • feat(habit-form): copy Bento parts from an existing habitlifelong-habit-app13:57
  • feat(status-line): add per-variant daily show budgetslifelong-habit-app13:21
Tue, Jun 30
  • feat(database): add get recent completion rates migration and regenerate supabase database typeslifelong-habit-app22:48
  • feat(status-line): wire recovery pacing and add 30-day streak tierlifelong-habit-app22:44
  • refactor(statusLineVariants): update daily welcome messageslifelong-habit-app16:43
  • refactor(progress): merge radar and breakdowns into CategoryInsightsCardlifelong-habit-app16:39
  • perf(progress): virtualize DailyOverviewSection habit rowslifelong-habit-app16:36
  • fix(progress): stack StatPill fraction and percentage valueslifelong-habit-app16:36
  • refactor(welcome-card): move top clouds 10pt from the prior positionlifelong-habit-app13:01
  • refactor(background): dedupe color mapping and clean up primitiveslifelong-habit-app12:20
  • fix(typewriter): live clock updates in place, no full retypelifelong-habit-app12:19
  • fix(welcome-card): enlarge and reposition bottom clouds for timer-bar visibilitylifelong-habit-app09:25
  • feat(welcome-card): add sparkles and rebalance cloud placementlifelong-habit-app08:20
  • fix(welcome-card): balance cloud spacing across the full viewBoxlifelong-habit-app08:14
  • fix(welcome-card): pull bottom clouds and stars into the middle bandlifelong-habit-app08:13
  • refactor(statusLineVariants): update welcome messageslifelong-habit-app08:04
  • fix(dashboard): keep welcome clock live and separate status data from messaginglifelong-habit-app06:58
  • fix(dashboard): replace stretched AuthBackground with WelcomeCardBackgroundlifelong-habit-app06:23
  • refactor(shared): move AuthBackground to shared components and reuse in welcome overlaylifelong-habit-app05:58
  • fix(types): align User and schedule types with DB nullability and Json constraintslifelong-habit-app05:09
  • chore: add mapUserRow file that's supposed to be pushed in the prev commitlifelong-habit-app04:16
  • fix(types): resolve Json compatibility issues and centralize user row mappinglifelong-habit-app04:12
  • fix(supabase): wire generated Database types into the clientlifelong-habit-app03:46
  • refactor(dashboard): update comments for daysSinceLastActivity and streakLength to clarify Postgres RPC usagelifelong-habit-app03:43
  • feat(dashboard): move cross-habit activity history to a Postgres RPClifelong-habit-app03:42
  • feat(dashboard): wire account-age, streak, and open-count fields into welcome overlaylifelong-habit-app03:31
  • feat(dashboard): implement large_habit_list_compassionlifelong-habit-app02:41
  • feat(dashboard): regenerate statusLineVariants with C and E rewriteslifelong-habit-app01:37
Mon, Jun 29
  • refactor(dashboard): extract status line variants into registrylifelong-habit-app15:07
  • refactor(dashboard): extract status line variants into registrylifelong-habit-app14:05
  • chore(hooks): implement backdating functionality in useBackdateHabit (copied the wrong file)lifelong-habit-app10:03
  • perf(mutations): scope all_habit_logs_by_date invalidation to the affected datelifelong-habit-app09:45
  • fix(dashboard): remove unused useUser() subscription in useStopwatchlifelong-habit-app09:43
  • perf(dashboard): memoize habit color resolutionlifelong-habit-app09:41
  • perf(queries): add staleTime to useUserlifelong-habit-app09:41
  • perf(dashboard): fix broken HabitCardRenderer memoizationlifelong-habit-app09:37
  • perf(dashboard): remove unused useDashboard() call in useHabitCreationFlowlifelong-habit-app09:37
  • perf(dashboard): memoize scheduleVersion in useDashboardlifelong-habit-app09:05
  • feat(hooks): add useMidnightRefresh for cross-midnight cache invalidationlifelong-habit-app09:04
  • fix(mutations): invalidate consistency and habits on empty trashlifelong-habit-app09:04
  • fix(mutations): invalidate consistency on manual session add and deletelifelong-habit-app09:04
  • fix(mutations): invalidate consistency on stopwatch session close and restartlifelong-habit-app09:03
  • refactor(dashboard): simplify DailyWelcomeOverlay by removing BlinkingCursor componentlifelong-habit-app07:54
  • feat(dashboard): add current time to welcome message and hide cursor on completionlifelong-habit-app07:48
  • feat(dashboard): add typed-in daily welcome overlaylifelong-habit-app07:12
  • fix(dashboard): correct habit selection and messaging in DailySummarylifelong-habit-app05:03
  • perf(progress): remove redundant recomputations and stabilize navigation handlerslifelong-habit-app03:48
  • perf(progress): memoize DailyOverviewSection callbacks and HabitIconBadgelifelong-habit-app03:47