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 11 – May 17Week 16 of 27
Sun, May 17
No commits.
Sat, May 16
No commits.
Fri, May 15
- refactor(icons): streamline icon_key handling on dashboard and weekly overviewlifelong-habit-app08:26
- refactor(TimeOfDayScreen): update description for custom schedule templatelifelong-habit-app08:22
- fix(config): add specified runtimeVersionlifelong-habit-app01:10
- chore: remove android directory from gitlifelong-habit-app01:10
- chore: update .gitignorelifelong-habit-app01:06
- chore(gitignore): update .gitignore to include ios and android directorieslifelong-habit-app00:58
- fix(icon): solve icon loading error and add a backup icon in HabitSheetHeaderlifelong-habit-app00:54
- refactor(icons): update icon inventory and categories for house and naturelifelong-habit-app00:44
- refactor(config): remove navigation config from app config to solve eas build errorlifelong-habit-app00:31
- chore(package): change script name to fix dependency conflictlifelong-habit-app00:27
- chore(build): fix AndroidManifest gradle flaglifelong-habit-app00:26
- chore: remove generated native folders (ios and android) from .gitignorelifelong-habit-app00:10
Thu, May 14
- chore: remove outdated commentslifelong-habit-app16:58
- refactor(habit): replace icon_name with icon_key and remove coverImageUri fieldlifelong-habit-app16:39
- refactor(habit): replace icon_name with icon_key, add color_id, and remove unused cover_image_uri fieldlifelong-habit-app16:16
- fix(stopwatch): update habitIconKey to use icon_key (icon_name is a stale field)lifelong-habit-app15:40
- refactor(icons): reorganize icon imports for optimal treeshakinglifelong-habit-app15:18
- refactor(icons): replace direct icon imports with UI_ICONSlifelong-habit-app14:42
- fix(usePullSync): update useAuth import pathlifelong-habit-app14:18
- feat(sync): implement pull sync functionality to transfer data from Supabase to local SQLitelifelong-habit-app12:57
- chore: update dependencies in package.jsonlifelong-habit-app12:51
- refactor(icons): integrate PlanetBold icon into UI_ICONS and remove direct PlanetBold icon imports for optimal treeshakinglifelong-habit-app12:11
- refactor(progress): add PROGRESS_LOGS_QUERY_KEY for consistent cache invalidation across habit mutationslifelong-habit-app09:46
- feat(dashboard): add isInProgress prop to habit card components and useSelectedDateLoglifelong-habit-app09:09
- fix(useDashboard): update completion_status logiclifelong-habit-app08:36
- chore(dashboard): remove unused component (already replaced with AllDayIconStrip)lifelong-habit-app01:15
- fix(dashboard): remount AllDay expanded card on habit switch and remove paddingToplifelong-habit-app01:13
Wed, May 13
- fix(useWeeklyOverview): update icon resolution to use icon_key with fallback to Planetlifelong-habit-app16:14
- refactor(useProgressMetrics): sort habits based on preferred_time on progress tablifelong-habit-app16:13
- refactor(HabitCardGallery): improve banner text color handling (it returned false) and clean up dead codelifelong-habit-app15:39
- refactor(AllDayIconStrip): adjust padding, icon dimensions and colorlifelong-habit-app15:35
- refactor(habitCardBanner): update banner text color contrast from white to light beigelifelong-habit-app15:34
- feat(dashboard): add All-DayIconStrip component, remove InProgress section, and update useDashboard hooklifelong-habit-app14:24
- refactor(dashboard): update buildSectionOrder to prioritize rendering 'anytime' (which will be all-day) habitslifelong-habit-app14:17
- refactor(progress): update weekly overview styling, each habit has its own cardlifelong-habit-app05:33
- refactor(progress): implement weekly overview with view mode switcher and default habit color fallbacklifelong-habit-app03:52
- feat(progress): weekly overview with view switcherlifelong-habit-app03:52
- feat(dashboard): extract HabitSectionList into HabitSectionStates, InProgressIconStrip, and TimeSectionHeader componentslifelong-habit-app02:51
- refactor(icons): update icon references in PickerSearchBar, StartOfWeekScreen, and TimeOfDayScreenlifelong-habit-app01:39
Tue, May 12
- feat(dashboard): replace In Progress section with icon striplifelong-habit-app15:39
- refactor(icons): update icon references and stylinglifelong-habit-app15:26
- refactor(icons): update icon references and stylinglifelong-habit-app15:17
- fix(services): add missing completionStatus to recomputeSessionLoglifelong-habit-app12:34
- fix(mutations): add missing completionStatus to useBackdateHabitlifelong-habit-app10:10
- fix(bento): component deletion not saved, new components appearing on past-date cardslifelong-habit-app05:15
- fix(HabitDetailSheet): anchor sheet with position absolute to remove slide gaplifelong-habit-app01:29
- fix(color-icon-picker): anchor sheet with position absolute to remove slide gaplifelong-habit-app00:54
Mon, May 11
- refactor(ui): update IconPanel styles to use flexbox for responsive layoutlifelong-habit-app16:26
- feat(icon-panel): derive column count automatically from screen widthlifelong-habit-app16:21
- chore(ui): change icon typolifelong-habit-app16:21
- refactor(ui): replace Planet3 icon with Planet in HabitCardGallery, RunningStopwatchBar, and HabitIconPreview componentslifelong-habit-app16:02
- refactor(ui): remove duotone option from iconRegistrylifelong-habit-app16:01
- fix(android): clear gesture nav bar inset on bottom UI elementslifelong-habit-app15:47
- refactor(HabitSheetStats): conditionally fetch sessions and display tracked time based on stopwatch_enabledlifelong-habit-app15:28
- chore(useCurrentUser): add comment to clarify that this isn't a copy of useUser filelifelong-habit-app13:29
- refactor: update import paths, export paths, and file nameslifelong-habit-app13:16
- refactor: rename useArchivedHabits to useInactiveHabitslifelong-habit-app13:07
- fix: update habit color changes instantly on the dashboardlifelong-habit-app11:05
- refactor(TimeOfDayScreen): add template picker modal for time-of-day schedule selectionlifelong-habit-app10:51
- refactor(SnowballCard): remove not completed message as HabitCardGallery already has it as defaultlifelong-habit-app10:46
- refactor(settings): add warning for duplicate time slot labelslifelong-habit-app10:22
- fix(settings): use counter instead of Date.now() to create custom slot IDslifelong-habit-app10:11
- fix(settings): fix schedule cache invalidation and reassignment sheetlifelong-habit-app10:00
- feat(settings): add dynamic time-of-day schedule systemlifelong-habit-app09:08
- fix(mutations): correct completionStatus in log and unlog habit pathslifelong-habit-app07:02
- feat(hooks): add IN_PROGRESS completion status for stopwatch sessionslifelong-habit-app06:36
- chore(migrations): change migration file nameslifelong-habit-app06:26
- fix(hooks): ensure fresh log data is fetched and used for time elapsed updateslifelong-habit-app06:20
- fix(dashboard): bucket any habit with time_elapsed_seconds > 1 as In Progresslifelong-habit-app01:29