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!~ 
Aug 17 – Aug 23Week 2 of 27
Sun, Aug 23
- feat(nav): move Week out of top nav and into Aboutlaiflonglearner.com13:50
- fix(garden): make watering hit-test and the water falling work naturally on mobilelaiflonglearner.com13:43
- refactor: rename travelers to trips in footer counterlaiflonglearner.com04:05
Sat, Aug 22
- feat: add footprints and traveler count to footerlaiflonglearner.com12:14
- refactor(blog): remove dummy postlaiflonglearner.com11:57
- fix(guestbook): allow emoji panel input in composer textarealaiflonglearner.com11:07
- fix: use ⌇ separator instead of parentheses in tab titleslaiflonglearner.com08:59
- feat(dashboard): show the first-habits prompt for all users with no habitslifelong-habit-app04:54
- style(images): match post image shadow to btn-cozylaiflonglearner.com04:35
- style(garden): make flower stems curved, make the buds larger, and widen grass leaves againlaiflonglearner.com04:24
- fix: add responsive mobile navigation dropdown to headerlaiflonglearner.com04:14
Fri, Aug 21
No commits.
Thu, Aug 20
- feat(onboarding): surface starter habits to existing users and fix duplicate detectionlifelong-habit-app14:13
- style(garden): widen grass blades and lengthen flower stemslaiflonglearner.com13:11
- fix(garden): make flower growth match exactly where the water landslaiflonglearner.com13:08
- fix(instrumentation): run Cloudflare dev setup only in development modelaiflonglearner.com13:07
- fix(deploy): use legacy middleware for Cloudflare compatibilitylaiflonglearner.com13:06
- fix(mdx): add a gap between row images so their shadows showlaiflonglearner.com10:32
- fix(mdx): wire remark-image-width into post pipeline and dedupe mdx optionslaiflonglearner.com10:11
- refactor(css): make the text alignment justifylaiflonglearner.com07:46
- refactor(week): remove duplicate hero image for week coverlaiflonglearner.com07:39
- fix(css): reset margin for inline emotes to prevent spacing issueslaiflonglearner.com07:34
- fix(css): restore prose spacing and list styling with typography pluginlaiflonglearner.com07:22
- feat(weeks): support multi-photo cover collages on week cardslaiflonglearner.com06:39
- fix(css): keep inline emotes from using photo stylinglaiflonglearner.com05:48
- feat(garden): give each flower its own heightlaiflonglearner.com05:47
- feat(week): add Week gallery and fix ToC ids for headings with emoteslaiflonglearner.com04:57
- feat: add guest onboarding flow with starter habit pickerlifelong-habit-app02:01
Wed, Aug 19
- chore(emotes): remove leftover PNGs after WebP conversionlaiflonglearner.com13:27
- feat(week): add 2026-W33 and optimize assetslaiflonglearner.com13:10
- feat(garden): replace ground panel with grasslaiflonglearner.com10:11
Tue, Aug 18
No commits.
Mon, Aug 17
No commits.