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

Apr 20 – Apr 26Week 19 of 27
Sun, Apr 26
  • fix: restore habit reflects immediately without reloadlifelong-habit-app08:32
  • fix(useBackdateHabit): use optimistic updates and cache invalidation for backdated logslifelong-habit-app07:38
  • fix(SnowballCard): hide progress bar when past-date count is decremented to zerolifelong-habit-app04:44
  • fix(SnowballCard): eliminate stepper lag and restore "Not completed" on decrement to zerolifelong-habit-app04:42
  • fix(SnowballCard): show "Not completed" on past dates with no loglifelong-habit-app04:35
  • feat(dashboard): require confirmation before editing past-date logs on Bento, Ladder, and Snowball cardslifelong-habit-app04:31
  • fix(HabitCardGallery): hide Done button on past dates, show only missed state (Not Completed)lifelong-habit-app04:16
Sat, Apr 25
  • style(HabitActionButton): update text from "Done?" to "Done"lifelong-habit-app14:46
  • style(HabitCardGallery): shorten progress display textlifelong-habit-app14:44
  • style(HabitActionButton): change button background color to be filled with habit colorlifelong-habit-app14:43
  • refactor(HabitCardGallery): remove long press action handling for habit managementlifelong-habit-app14:32
  • style(HabitActionButton): fill card width responsively in gallery modelifelong-habit-app14:32
  • style(SnowballCard): adjust stepper icon size and spacinglifelong-habit-app14:05
  • style(HabitCardGallery): move progress display text after the checkmark iconlifelong-habit-app14:05
  • fix(HabitCardGallery): cap displayed progress to 999%+ to prevent layout breakinglifelong-habit-app13:59
  • fix(SnowballCard): adjust unit label text sizelifelong-habit-app13:25
  • feat(HabitCard): thread isToday to all archetypes for missed state + % in completed rowlifelong-habit-app13:18
  • fix(snowball): stepper always visible on today, hidden on past dateslifelong-habit-app12:57
Fri, Apr 24
  • refactor(progress): optimize habit ID handling in useProgressMetrics and useProgressLogs to improve caching and performancelifelong-habit-app16:08
  • refactor(snowball): remove complete button and automatically log progress based on stepper valuelifelong-habit-app16:07
  • refactor(SnowballCard): change stepper buttons with icons and improve stylinglifelong-habit-app15:30
  • refactor(LadderCard): simplify rung selection logic, now logging only takes rung selection and complete button is removedlifelong-habit-app13:56
  • refactor(progress): streamline data fetching by consolidating habit and log queries into useProgressMetricslifelong-habit-app12:15
  • feat(progress): implement GitHub-style heatmap for habit tracking and replace time range selector with year selectorlifelong-habit-app11:43
  • style(habitFormStyles): remove top margin from habit form cardlifelong-habit-app10:20
  • style(SnowballForm): update layout and labels for input fieldslifelong-habit-app10:19
  • style(ArchetypeSelector): update info text for archetypes and adjust icon colorlifelong-habit-app09:37
  • style(habitFormStyles): adjust margins for card and draft card headerlifelong-habit-app08:47
  • refactor(habit): remove unused strict mode featurelifelong-habit-app08:47
  • style(ArchetypeSelector): update info icon and text layoutlifelong-habit-app08:46
  • refactor(habit): simplify create habit screen for one habit onlylifelong-habit-app08:40
  • style(BentoRow): adjust input width and spacer at min component countlifelong-habit-app07:21
  • refactor(BentoRow): conditionally render reorder buttons and adjust weight input layoutlifelong-habit-app07:16
  • refactor(archetypeSelector): update descriptions for habit archetypeslifelong-habit-app07:03
  • style(habitFormStyles): reduce card margins and paddinglifelong-habit-app06:55
  • refactor(habit): extract HabitForm component and update DeepDiveScreenlifelong-habit-app06:00
Thu, Apr 23
  • refactor(iconRegistry): add medicine icons and update categorielifelong-habit-app16:13
  • fix(streak): use local date and don't break streak if today is unloggedlifelong-habit-app13:47
  • chore(stats-grid): remove unused filelifelong-habit-app13:45
  • fix(habit-stats): improve streak value formatting (1 day instead of 1 days)lifelong-habit-app13:45
  • chore(overview-cards): remove redundant comments for claritylifelong-habit-app13:44
  • feat(habit): create HabitIconPreview and HabitFormSectionLabel components for consistent UI in habit formslifelong-habit-app13:15
Wed, Apr 22

No commits.

Tue, Apr 21
  • feat(iconRegistry): expand icon inventory with new health-related icons and update category labelslifelong-habit-app16:12
  • fix(icon-panel): adjust cell dimensions for iconlifelong-habit-app16:11
  • style(confirm-sheet): update unsaved changes message and adjust vertical marginlifelong-habit-app12:34
  • refactor(quicknote): add discard confirmation for unsaved changes in QuickNoteSheetlifelong-habit-app12:20
  • feat(habit): add duplicate habit screen with post-create sheet auto-openlifelong-habit-app11:29
  • refactor(habit): extract DeleteHabitSheet, replace 4x hardcoded trash Alertlifelong-habit-app11:14
  • fix(bento): prevent checkbox flash on rapid tapslifelong-habit-app08:51
  • style(modals): update confirmation text to use curly quotes for consistencylifelong-habit-app08:36
  • refactor(settings): replace Alert.alert sign-out with ConfirmSheetlifelong-habit-app08:35
  • style(auth): update email placeholder to 'awesomeotter@gmail.com' in ForgotPassword, Login, and Signup screenslifelong-habit-app08:00
  • fix(LoginScreen): update text color for 'Forgot password?' link to improve visibilitylifelong-habit-app00:57
  • refactor(auth): migrate reset-password to shared auth components and layout hooklifelong-habit-app00:56
  • fix(auth): replace SafeAreaView with View in auth layout to fix edge croppinglifelong-habit-app00:56
Mon, Apr 20
  • chore: replace straight apostrophes with curly apostropheslifelong-habit-app16:22
  • refactor(ForgotPasswordScreen): integrate AuthBackground and AuthBanner components for enhanced UI and messaginglifelong-habit-app16:21
  • refactor(SignupScreen): integrate AuthBanner and AuthDivider components for improved error and success messaginglifelong-habit-app16:20
  • refactor(LoginScreen): use AuthBackground, AuthBanner, and GuestButton componentslifelong-habit-app16:20
  • style(GoogleOAuthButton): update text color to accent to match guest color button textlifelong-habit-app16:19
  • style(useAuthLayout): reduce heading margin bottom values for tablet and mobile layoutslifelong-habit-app16:19
  • feat(AuthBanner, AuthDivider): extract AuthBanner and AuthDivider components from auth screenlifelong-habit-app16:18
  • style(GoogleOAuthButton): add muted background color for improved visibilitylifelong-habit-app16:05
  • refactor(SignupScreen): replace hardcoded guest button with GuestButton componentlifelong-habit-app16:04
  • refactor(GuestButton): extract guest sign-in button with loading state and dynamic styleslifelong-habit-app16:04
  • feat(AuthBackground): enhance cloud and star rendering with dynamic scaling and improved layoutlifelong-habit-app16:01
  • style(useAuthLayout): adjust heading margin for improved layout consistencylifelong-habit-app13:21
  • style(SignupScreen): update heading text for better user engagementlifelong-habit-app13:21
  • feat(SignupScreen): integrate useAuthLayout for responsive design and improved layout consistencylifelong-habit-app12:54
  • refactor(auth): make authentication screens to use theme-aware components and improve UI consistencylifelong-habit-app11:45