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

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