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!~ 
Mar 9 – Mar 15Week 25 of 27
Sun, Mar 15
- fix(app): resolve remaining inline color violations in edit-habit and deep-divelifelong-habit-app17:35
- fix(app): resolve remaining inline color violations in edit-habit and deep-divelifelong-habit-app17:35
- refactor(app): wrap StyleSheet.create in useMemo, migrate inline colors to NativeWind tokens, remove unused vars across app screenslifelong-habit-app17:32
- refactor(auth): extract AuthInput and AuthButton components, eliminate theme dependency on auth screenslifelong-habit-app17:17
- refactor(auth): migrate inline colors to NativeWind tokens across forgot-password, login, reset-password, signuplifelong-habit-app16:52
- refactor(tabs): remove unused vars in discover, migrate inline colors to NativeWind tokens, wrap StyleSheet.create in useMemo in profilelifelong-habit-app16:49
- fix: add missing hook dependencieslifelong-habit-app15:26
- docs: update eslint reportlifelong-habit-app14:18
- fix: stabilize onValidConfig references by extracting DraftItem componentlifelong-habit-app14:09
- refactor: seed pillar_config in handleArchetypePress, delete PillarFormlifelong-habit-app13:53
Sat, Mar 14
- refactor(GoogleOAuthButton): replace inline border color with className tokenlifelong-habit-app15:48
- refactor(GoogleOAuthButton): replace inline border color with className tokenlifelong-habit-app15:48
- feat(auth): add Google OAuth button to login and signup screenslifelong-habit-app15:16
- refacator(index): replace inline styling wih className tokenlifelong-habit-app14:56
- fix(HabitCard): reorder callbacks, fix useCallback deps, migrate static colors to NativeWindlifelong-habit-app14:39
- refactor(BentoCard): replace inline colors with className token and remove unused useThemelifelong-habit-app14:27
- chore(Header): remove unused useThemelifelong-habit-app14:24
- refactor(Header): replace inline colors with className tokenlifelong-habit-app14:23
- refactor(NewHabitSheet): replace inline colors with className tokens and remove unused useThemelifelong-habit-app14:23
- refactor(SnowballCard): replace inline colors with className tokens and remove unused useThemelifelong-habit-app14:20
- fix(InfoModal): use useTheme to apply theme-aware color to Feather iconlifelong-habit-app14:11
- refactor(StatsGrid): replace inline colors with className tokens and StyleSheet for list styleslifelong-habit-app14:11
- chore: move dirty-code from component dir to rootlifelong-habit-app12:43
- refactor(ArchetypeSelector): replace inline colors with textStyles and className tokenslifelong-habit-app12:42
- refactor: change textHeading hex code in Ember Dark mode to be a little bit more warmerlifelong-habit-app12:37
- refactor(BentoForm): call useTheme directly and replace inline colors with className tokenslifelong-habit-app12:37
- fix(onboarding/deep-dive): remove hardcoded colors in subFormColors so it can adjust based on the chosen themelifelong-habit-app10:55
- refactor(theme-registry): change border colors to make them more visiblelifelong-habit-app10:35
- refactor(BentoForm): replace inline colors with textStyles, className, and StyleSheet, and fix onValidConfig reflifelong-habit-app10:35
- refactor(LadderForm): replace inline colors with className tokens and fix onValidConfig reflifelong-habit-app09:24
- fix: infinite loop in habit creation flowlifelong-habit-app08:28
- refactor: migrate typography from className to textStyles tokenslifelong-habit-app07:46
- docs: audit and update stale documentationlifelong-habit-app07:31
- fix: stabilise onValidConfig references in ArchetypeSelector to prevent useEffect loopslifelong-habit-app06:58
- fix: correct useEffect dep suppression in SnowballFormlifelong-habit-app05:12
- refactor(lint): resolve no-color-in-style errors and useEffect warning in SnowballFormlifelong-habit-app04:42
- refactor(lint): resolve no-color-in-style errors in AuthWallModallifelong-habit-app04:38
- refactor(lint): resolve 13 no-color-in-style errors in challenge-details.tsxlifelong-habit-app04:30
- docs: added design notes about why text input doesn't get flagged in eslintlifelong-habit-app04:13
- docs: removed duplicates in design-notes-overlay-eslint.mdlifelong-habit-app04:10
- refactor: unflag text input color proplifelong-habit-app03:21
Fri, Mar 13
- refactor: replced inlinestyle backgroundColor and color to tailwind classNamelifelong-habit-app23:15
- chore: removed code calling lora font (it's alr deleted)lifelong-habit-app23:11
- docs: added text styles design noteslifelong-habit-app13:22
- docs: added overlay eslint design noteslifelong-habit-app13:21
- refactor: udpated eslint configlifelong-habit-app13:18
- chore: removed lora fontlifelong-habit-app13:17
- refactor: replaced hardcodes styling in InfoModallifelong-habit-app11:33
- chore: removed comment (overlay no longer gets flagged)lifelong-habit-app11:31
- refactor: replaced tooltip with InfoModal, then removed it from LadderCard (too crowded for now), and finally it's functioning in StatsGrid!lifelong-habit-app07:59
- refactor: removed StatsBar (dead code), then changed tooltip to work as a modal and linked it with surfaceStyles since it doesn't work in ReactNativelifelong-habit-app06:49
- refactor: cleaned discover tab (templateCard and challenge-details) to use useMemo StyleSheet and tailwind classNamelifelong-habit-app05:20
- chore: renamed textSecondary to textSubtlelifelong-habit-app05:17
- refactor: added text-secondary (between textBody and textMuted)lifelong-habit-app04:53
- refactor: changed scrimForeground rgba and deleted imageDim (it's similar to cardScrim)lifelong-habit-app04:50
Thu, Mar 12
- chore: rename explore to discoverlifelong-habit-app23:19
- chore: fix import typolifelong-habit-app23:19
- refactor: added overlayStyles for overlays, scrims, and image treatments, and synced challenge-details to itlifelong-habit-app23:18
- chore: added comment to tailwind, it's okay it just took 2 steps to add a new theme tokenlifelong-habit-app22:59
- refactor: changed eslint, check comment for detailslifelong-habit-app22:58
- refactor: made useTheme automatically converts every color key in theme-registry to a CSS property (so I just need to add a color token in two places, theme-registry and tailwind config)lifelong-habit-app22:56
- chore: renamed explore tab to discover (forgot to do it again hehe)lifelong-habit-app22:53
- refactor: applied themeVars to the root view so it cascades to all childrenlifelong-habit-app22:53
- chore: renamed explore tab to discover (forgot to do it earlier)lifelong-habit-app22:47
- chore: removed stale habit card component (the right one is in components/dashboard)lifelong-habit-app22:46
Wed, Mar 11
- revert: undo refactor of hardcoded blockslifelong-habit-app16:22
- refactor: cleaned 16 hardcoded blocks of codelifelong-habit-app10:16
- chore: rename explore to discover to avoid ambiguitylifelong-habit-app09:02
Tue, Mar 10
- refactor: added tooltip component backlifelong-habit-app10:04
Mon, Mar 9
- refactor: added eslint config ruleslifelong-habit-app13:33
- chore: removed dead libraries and boilerplatelifelong-habit-app10:38
- chore: uninstall gluestack libslifelong-habit-app10:23
- refactor: removed gluestack componentslifelong-habit-app10:21