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 25 – May 31Week 14 of 27
Sun, May 31
- fix(grove): seed grove_config on edit, fix Tracked Time guard, remove non-functional journal shortcut. Closes #14lifelong-habit-app23:56
- fix(habit-form): update import path for ArchetypeSelector componentlifelong-habit-app23:33
- refactor: move onboarding components to root folderlifelong-habit-app23:32
- fix(grove): hide Done CTA instead of showing it pale when not yet actionablelifelong-habit-app14:10
- fix(dashboard): show Done CTA for Grove when IN_PROGRESSlifelong-habit-app14:05
- fix(grove): delegate Done button to HabitActionButton instead of bespoke Pressablelifelong-habit-app14:05
- refactor(grove): replace custom Done button with HabitActionButton via hideCTAlifelong-habit-app13:30
- feat(dashboard): suppress progress bar and percent for Grove completed statelifelong-habit-app12:57
- feat: add grove archetypelifelong-habit-app09:14
Sat, May 30
No commits.
Fri, May 29
No commits.
Thu, May 28
No commits.
Wed, May 27
- refactor(ui): add new icons to replace StarBullet iconslifelong-habit-app14:17
- feat(SheetTileButton): add compact variant for inline icon+label flex-1 tileslifelong-habit-app13:04
- refactor(ui): add new icons to replace StarBullet iconslifelong-habit-app13:03
- fix(CategoryBreakdown, CategoryRadarChart): adjust margins and sizinglifelong-habit-app10:10
- fix(CategoryRadarChart): reduce wrapperWidth for text positionlifelong-habit-app09:55
- feat(progress): create habit_status_logs table and scope all queries to user_idlifelong-habit-app09:50
- fix(progress): scope habit_status_logs queries to current userlifelong-habit-app09:21
- feat: add configurable habit pause feature with auto-resume on expirationlifelong-habit-app08:38
- fix(hooks): update habit queries to include legacy archived filtering and improve error handlinglifelong-habit-app08:19
- refactor(HabitSheetActions): add archive functionality with confirmation alertlifelong-habit-app08:19
- feat(progress): integrate inactive periods into habit trackinglifelong-habit-app08:13
- fix(CategoryBreakdown): change pctLabel width to minWidth for better responsivenesslifelong-habit-app03:50
Tue, May 26
- fix(CategoryRadarChart): replace VERTICAL_OVERFLOW with geometry-derived bleed constantslifelong-habit-app06:19
Mon, May 25
- fix(CategoryRadarChart): clamp zero scores to MIN_SCORE to prevent spike polygonlifelong-habit-app08:12
- fix(HabitSheetStats): show life area category from habitCategory, not archetype aliaslifelong-habit-app08:08
- fix(progress): widen radar label wrappers to stop truncating "Relationships"lifelong-habit-app05:30
- fix(progress): lower radar show threshold to >= 1 categorized categorylifelong-habit-app05:17
- feat(progress): octagon radar chart for category consistency + intensitylifelong-habit-app04:55