Craft
Main quests and fun experiments. Code, art, and community 
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!~ 
May 18 – May 24Week 15 of 27
Sun, May 24
- fix(dashboard): remove deprecated notes prop and wire isLockIn to HabitDetailSheetlifelong-habit-app23:10
- feat(progress): category % breakdown in daily and weekly views; remove dashboard filterlifelong-habit-app23:01
- fix(journal): adjust close button style and icon sizelifelong-habit-app14:33
- feat(journal): add selection mode with bulk copy and deletelifelong-habit-app14:23
- chore(dependencies): add expo-clipboard packagelifelong-habit-app14:21
- fix(journal): adjust paddingBottom for keyboard height and remove long-press hintlifelong-habit-app13:36
- fix(journal): implement useKeyboardHeight hook for dynamic keyboard handlinglifelong-habit-app13:26
- fix(journal): fix invisible typed text, keyboard layout, and send button positionlifelong-habit-app13:25
- fix(journal): replace broken icon import and use TouchableOpacity with AddCircle for submit buttonlifelong-habit-app13:06
- feat(ui): move habit journal to dedicated full-screen routelifelong-habit-app12:58
- fix(backdate): remove 90-day window enforcement for non-Lock In modelifelong-habit-app10:44
- fix(snowball): forward unitLogged through onLogIt prop and HabitCardRendererlifelong-habit-app10:40
- feat(db): add GROVE archetype variantlifelong-habit-app10:33
- feat(ui): add HabitSheetJournalThread and HabitSheetJournalInput to HabitDetailSheetlifelong-habit-app10:30
- feat(ui): add HabitSheetJournalThread and HabitSheetJournalInput to HabitDetailSheetlifelong-habit-app10:29
- feat(hooks): add useHabitJournalByDate, useAddJournalEntry, useDeleteJournalEntrylifelong-habit-app10:29
- feat(types): add HabitJournalEntry interface to models.tslifelong-habit-app10:24
- feat(db): add habit_journal table with RLS and indexeslifelong-habit-app10:24
- chore(pullSync): remove obsolete pullSync service filelifelong-habit-app03:56
- fix(SnowballCard): make unit label part of count tap target for inline editlifelong-habit-app02:56
Sat, May 23
- refactor(progress): include year in date labels for daily and weekly viewslifelong-habit-app12:55
- perf(dashboard): eliminate per-card Supabase queries on mountlifelong-habit-app12:44
- fix(progress): guard weekly cells against pre-creation dates and fix summary denominator to elapsed actionable days onlylifelong-habit-app12:39
- fix(habit-time-log): forward startTime from AddSessionSheet to addManualSession mutationlifelong-habit-app08:27
- perf(dashboard): defer category filter list restoration via useTransitionlifelong-habit-app06:54
- fix(seed-db): remove unused icon_name field from template processinglifelong-habit-app05:22
- refactor(duplicate-habit): seed habit_category from source habit for new duplicateslifelong-habit-app05:22
- feat(habits): add user-configurable habit_category fieldlifelong-habit-app05:16
- chore(habits): change migration file namelifelong-habit-app04:55
Fri, May 22
- feat(progress): add OverviewSummaryBar with completed/in-progress/not-completed counts to daily and weekly overview sectionslifelong-habit-app15:22
- fix(progress): add missed to DailyHabitStatus and handle in DailyHabitRowlifelong-habit-app14:24
- feat(progress): add day navigation to DailyOverviewSectionlifelong-habit-app14:24
- refactor(habit-form): update placeholder text for description inputlifelong-habit-app14:04
- fix(duplicate-habit): seed stopwatch_enabled from source habitlifelong-habit-app10:55
- fix(habit-form): reduce bottom padding in ScrollView contentlifelong-habit-app10:40
- refactor(habit-form): move description field before preferred time pickerlifelong-habit-app10:36
- Revert "fix(keyboard): add KeyboardAvoidingView to deep-dive and edit-habit screens"lifelong-habit-app10:35
- Revert "fix(form): increase scroll bottom padding and reduce description minHeight for tall keyboards"lifelong-habit-app10:35
- Revert "fix(keyboard): revert static padding hack, use automaticallyAdjustKeyboardInsets on ScrollView"lifelong-habit-app10:35
- fix(keyboard): revert static padding hack, use automaticallyAdjustKeyboardInsets on ScrollViewlifelong-habit-app10:25
- fix(form): increase scroll bottom padding and reduce description minHeight for tall keyboardslifelong-habit-app10:06
- fix(android): add softwareKeyboardLayoutMode resize to app.config.jslifelong-habit-app10:05
- fix(keyboard): add KeyboardAvoidingView to deep-dive and edit-habit screenslifelong-habit-app10:05
- fix(deep-dive): correct HabitFormCtaButton prop name accentColor → habitColorlifelong-habit-app08:59
- feat(habit): add user-authored description fieldlifelong-habit-app08:55
Thu, May 21
- refactor(iconRegistry): add new Washing Machine and Microphone icons to inventorylifelong-habit-app15:47
- refactor(iconRegistry): add new health and social icons to icon inventorylifelong-habit-app13:19
- chore(HabitCardGallery): adjust comment formatting for claritylifelong-habit-app13:18
- fix(BentoForm): emit correct post-move config in handleMovelifelong-habit-app09:16
- refactor(iconRegistry): update MoonStars icon entry and reorder nature-star entrylifelong-habit-app09:16
Wed, May 20
- fix(progress): wire DailyOverviewSection into progress screenlifelong-habit-app13:13
- feat(progress): add daily view with per-habit status and intensity barlifelong-habit-app12:40
- refactor(progress): use fluid flex layout for weekly grid columnslifelong-habit-app12:03
- feat(HabitTimePicker): switch minute steps to 5-min intervals with snap-to-nearest indexlifelong-habit-app10:56
Tue, May 19
- fix(AddSessionSheet): adjust TimeInput layout for better responsiveness on small screenslifelong-habit-app13:39
- fix(time-log): use typed start time for manual sessions, fix keyboard layoutlifelong-habit-app10:53
- fix(dashboard): bleed AllDayIconStrip scroll past parent paddinglifelong-habit-app10:31
- feat(tabs): hoist RunningStopwatchBar to tab layout for global visibilitylifelong-habit-app10:13
- fix(HabitCardGallery): remove orphaned gallery banner block causing double bannerlifelong-habit-app09:45
- refactor: update terminology from 'anytime' to 'allDay'lifelong-habit-app09:26
Mon, May 18
No commits.