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!~ 
Jul 20 – Jul 26Week 6 of 27
Sun, Jul 26
- fix(dashboard): show guidance on empty Grove cardslifelong-habit-app12:25
- fix(HabitSectionList): memoize topContent to improve performance and prevent unnecessary re-renderslifelong-habit-app10:36
- fix: fire completion toast notif from write mutations instead of Done bucket changeslifelong-habit-app08:18
- fix(dashboard): memoize raw function using callbacks for dashboard screenlifelong-habit-app08:12
- refactor(habits): use transition_habit_status RPClifelong-habit-app06:18
- fix(db): make habit status transitions atomic with RPClifelong-habit-app06:18
- fix: memoize FlashList props to avoid unnecessary cell re-evaluationlifelong-habit-app05:58
- fix(progress): fix wasted space below long entries in the session timelinelifelong-habit-app04:43
Sat, Jul 25
- fix(log): stop bot commits from appearing in the build loglaiflonglearner.com13:12
- fix(ascii-portrait): restore sampled ink, improve ascii density ramplaiflonglearner.com13:04
- chore: move validate emote script from lib to script directorylaiflonglearner.com12:54
Fri, Jul 24
No commits.
Thu, Jul 23
- feat(emotes): support :shortcode: emotes outside MDXlaiflonglearner.com00:47
- feat(ascii): add theme-aware ascii portrait on homepagelaiflonglearner.com00:18
Wed, Jul 22
- feat(emotes): add build-time :shortcode: emote system for MDX postslaiflonglearner.com23:59
Tue, Jul 21
- fix(theme): separate brightness icons from palette colors, soften the ocean themelaiflonglearner.com13:35
- feat(theme): add warm/ocean color palettes with separate theme controlslaiflonglearner.com12:15
- refactor(header): remove the red dot from header logo and replace emoji theme iconslaiflonglearner.com11:16
- feat: make shell wider, add TOC thumb color, and fix dark-mode button shadowslaiflonglearner.com10:49
- fix(metadata): update blog and log titleslaiflonglearner.com10:44
- refactor(layout): keep page width consistent across all pageslaiflonglearner.com08:04
- style: make page shell wider, mute selection color, adjust header transparencylaiflonglearner.com08:02
- style(theme): add sticky header and themed text selectionlaiflonglearner.com07:27
- style(header,footer): match footer divider with header, warm up logo colorlaiflonglearner.com06:59
- fix(css): fix active tab text and make button shadows consistentlaiflonglearner.com06:32
- feat(ui): group build log by day, add cozy keycap button stylelaiflonglearner.com04:53
- fix(dashboard): remove duplicate spacing in HabitMapListViewlifelong-habit-app04:24
- feat(log): add opt-in log history refetch (instead of incremental sync)laiflonglearner.com04:10
- chore(ci): run update-log hourly instead of dailylaiflonglearner.com04:08
- fix(scripts): update dev scriptlaiflonglearner.com04:07
- feat: add update-log script to pull commits from repositorieslaiflonglearner.com03:49
- feat(log): add cross-repo dev loglaiflonglearner.com03:44
- fix(layout): replace fixed TOC layout with responsive grid shelllaiflonglearner.com03:00
- feat: add wrangler config and assets for OpenNext integrationlaiflonglearner.com00:21
- chore(gitignore): add .open-next/laiflonglearner.com00:07
Mon, Jul 20
- fix(cloudflare): use static-assets incremental cache for SSGlaiflonglearner.com15:20
- fix(config): update build script to use webpack and add OpenNext.js config filelaiflonglearner.com15:20
- config: add preview and deploy scripts for OpenNext.js Cloudflare integrationlaiflonglearner.com14:59
- fix: allow LAN dev origin for Turbopack HMRlaiflonglearner.com13:27