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 24 – Aug 30Week 1 of 27
Sun, Aug 30
No commits.
Sat, Aug 29
- style(footer): remove underlines from linkslaiflonglearner.com16:51
- feat(metadata): add social link preview cardslaiflonglearner.com16:43
- refactor(404): update wording and stylinglaiflonglearner.com16:39
- fix(garden): prevent watering cursor from being accidentally highlightedlaiflonglearner.com16:10
- feat(404): add customized 404 pagelaiflonglearner.com15:58
- style(header): reveal glass tint progressively on scrolllaiflonglearner.com15:53
- fix(engagement): replace zero counts when there's no notes/comments with shared empty-state labelslaiflonglearner.com15:32
- refactor(engagement): make message composer and entry components reusablelaiflonglearner.com15:26
- style(cards): replace hard shadows with shared blog card componentlaiflonglearner.com15:14
- feat(travelers-notes): render emotes inline with icon picker and custom scrollbarlaiflonglearner.com14:15
- fix(travelers-notes): render the same timestamps for client and server, then convert to localized relative time only after hydrationlaiflonglearner.com14:08
- feat(comments): render custom emotes inline in the comment panellaiflonglearner.com14:05
- fix(auth): allow Clerk prod domain in content security policylaiflonglearner.com13:47
- feat(travelers-notes): move visit counters into welcome messagelaiflonglearner.com13:28
- docs(legal): clarify general-audience children privacy wordinglaiflonglearner.com13:14
- feat(activity): require Clerk sign-in to like a post, no more anonymous likeslaiflonglearner.com13:09
- refactor(travelers-notes): remove unnecessary traces & likes activity on Travelers tablaiflonglearner.com13:03
- feat(legal): add OAuth privacy and terms pages with footer linkslaiflonglearner.com12:43
- feat(travelers-notes): add emote pickerlaiflonglearner.com12:25
- config(wrangler): update clerk publishable key to productionlaiflonglearner.com11:45
- fix(admin): render post previews without react-dom serverlaiflonglearner.com01:24
- feat(admin): add preview mode and redesign post editor UIlaiflonglearner.com01:23
Fri, Aug 28
- feat(admin): add weekly summary posting in post editorlaiflonglearner.com17:47
- feat(admin): add secure post editor, image layouts, and emoteslaiflonglearner.com17:28
- fix(toc): update active indicator on click and add offset to prevent clicked heading being covered by menu barlaiflonglearner.com17:26
- feat(engagement): add activity icons and require active estimated reading time for read countlaiflonglearner.com14:07
- feat(travelers-notes): add page likes and trace counterlaiflonglearner.com14:04
- feat(emotes): add new flower emotes (sunflower, orange lily, and tulips)laiflonglearner.com12:27
- feat(post): add trace and completed read count, merge empty comment state with sign-in promptlaiflonglearner.com12:26
- feat(posts): add anonymous likes and authenticated commentslaiflonglearner.com12:02
- style(theme): use accent colors for linked textlaiflonglearner.com11:58
- feat(craft): add craft ASCII artworklaiflonglearner.com11:24
- feat(about): render portrait from generated ASCII datalaiflonglearner.com09:16
- feat(layout): make reusable TabbedSectionLayout component for Maker and Craft layoutslaiflonglearner.com04:53
- style(theme): make dark mode color palette more mutedlaiflonglearner.com03:56
- docs: change post titlelaiflonglearner.com03:01
- style(ui): give margin top for water garden buttonlaiflonglearner.com03:01
- fix(theme-toggle): keep icon colored until theme switcheslaiflonglearner.com03:00
- style(mobile-nav): add wave divider on mobile navbar and lower button spacinglaiflonglearner.com02:51
- style(garden): make the garden responsive on mobilelaiflonglearner.com02:35
- style(dividers): replace dash mask to hand-drawn x marks and adjust the positionlaiflonglearner.com02:08
- style(ui): soften heading colors and improve flower and firefly detailslaiflonglearner.com01:29
Thu, Aug 27
- style(theme-toggle): deepen the cloud sun and moon detailslaiflonglearner.com23:54
- style(header): add scroll-aware wavy dividerlaiflonglearner.com23:35
- refactor(blog): group tag colors by meaninglaiflonglearner.com23:16
- style(garden): add one more midground butterflylaiflonglearner.com23:14
- style: update theme icon, tag colors, and link underlineslaiflonglearner.com17:46
- style: make header text bigger on both desktop and mobilelaiflonglearner.com17:43
- style(navbar): redesign theme toggle button with colorful weather iconslaiflonglearner.com17:32
- fix(garden): make the flower SVG hydration angle stable (using stableSvgNumber)laiflonglearner.com16:44
- style(garden): add one more state for progressive flower growthlaiflonglearner.com16:37
- style(garden): make garden control button more compact and align with the Traveler page headinglaiflonglearner.com16:30
- feat(ui): add notification to invite homepage visitors into the gardenlaiflonglearner.com16:28
- fix(garden): fix uneven left and right garden dividerslaiflonglearner.com16:17
- style(garden): move interactive garden to Traveler’s Noteslaiflonglearner.com16:13
- style(garden): add natural swirl animationlaiflonglearner.com16:01
- style(garden): add exploratory movements for garden insectslaiflonglearner.com15:48
- style(garden): add even more depth to bee and butterfly colorslaiflonglearner.com15:38
- style(garden): add depth to butterfly wing colorslaiflonglearner.com15:32
- style(garden): make garden butterflies more colorfullaiflonglearner.com15:29
- fix(garden): make the garden flying insects disappear more naturally by gradually reducing the opacitylaiflonglearner.com15:01
- fix(garden): fix gap between ground and wavy dividerlaiflonglearner.com14:49
- style(garden): move the garden behind the dividerslaiflonglearner.com13:51
- refactor(ui): move section divider above tabslaiflonglearner.com13:30
- refactor(ui): make divider reusable inside page content toolaiflonglearner.com13:17
- style(ui): put small dashes inside ividers and make flower deco biggerlaiflonglearner.com13:04
- style(ui): fill the flower DecorIcon with solid color and layer it on top of the dividerslaiflonglearner.com12:36
- feat(ui): make custom flower for DecorIcon and put one in each intersection of dividerslaiflonglearner.com12:29
- style(divider): make the divider color warmer and softerlaiflonglearner.com12:19
- chore: clean up global styles and shared dividerslaiflonglearner.com12:07
- refactor(ui): improve page dividers into bigger wavy lines and remove unnecessary footer spacelaiflonglearner.com10:47
- feat(ui): add wavy dividers, DecorIcon and FullWidthDivider components for header, footer and content sectionslaiflonglearner.com10:38
- feat(craft): update Craft tab, add new emotes, and reorder navbarlaiflonglearner.com08:38
- fix(header): align theme toggle button with nav tab tex verticallylaiflonglearner.com02:16
- config(navbar): add redirects for blog and log, remove old page componentslaiflonglearner.com02:15
Wed, Aug 26
- refactor(navbar): move Blog and Log to Craft tablaiflonglearner.com23:00
- fix(garden): keep wildlife insects flying until it leaves the gardenlaiflonglearner.com17:04
- fix(theme): give top part of the sky in dark mode a blue hue as in light modelaiflonglearner.com13:56
- fix(header): freeze navbar so it actually sticky on scrolllaiflonglearner.com13:52
- style(garden): make the light mode sky more bluelaiflonglearner.com13:41
- fix: keep grass and flower stems above the ground linelaiflonglearner.com13:30
- fix(garden): show the sky only on the homepage and keep the dark blue sky above the garden groundlaiflonglearner.com13:27
- config(redirects): add redirects for habit-tracking contentlaiflonglearner.com13:14
- fix(theme-toggle): recenter moon icon in toggle buttonlaiflonglearner.com12:59
- refacator(header): remove vertical divider between nav linkslaiflonglearner.com12:59
- style(garden): make dark garden colors brighter and more consistentlaiflonglearner.com12:58
- feat: give each flower different stamen numbers and shapeslaiflonglearner.com11:01
- feat(garden): add more top, bottom, right, and left variations for flower leaveslaiflonglearner.com10:46
- feat(garden): improve butterfly SVG with more detailed wing designs and animationslaiflonglearner.com10:44
- feat(garden): rotate the flowers and add more variations for daisy and tuliplaiflonglearner.com10:11
- refactor(garden): update colors and shadows for daisy and tuliplaiflonglearner.com10:04
- feat(garden): add pollen color var redesign tulip and zinnia pollen detailslaiflonglearner.com09:10
- style(garden): redesign flora and wildlife animationlaiflonglearner.com08:06
- fix(garden): make sure every blooming flower gets visited by wildlife creatures at least oncelaiflonglearner.com07:03
- fix(garden): make sure the wildlife creatures explore the flowers on both right and left sideslaiflonglearner.com06:44
- feat(garden): make wildlife creatures come more as the flowers growlaiflonglearner.com06:43
- refactor(garden): blend dark atmosphere and horizon depthlaiflonglearner.com03:44
- style(garden): deepen dark theme atmospherelaiflonglearner.com03:18
- style(garden): soften light theme meadow depthlaiflonglearner.com03:11
- refactor(theme): redesign the garden and page into two blended themeslaiflonglearner.com02:47
- refactor(garden): redesign poppy leaf silhouetteslaiflonglearner.com02:00
- feat(garden): redesign bee with coordinated wing animationlaiflonglearner.com01:36
- fix: improve the flying creatures movement and remove fireflies glow in light modelaiflonglearner.com00:01
Tue, Aug 25
- feat(theme): add circular reveal transition for light and dark modeslaiflonglearner.com18:25
- feat(garden): add animated wildlife with theme transitionlaiflonglearner.com18:22
- feat(garden): add more flowers and meadow detailslaiflonglearner.com18:04
- refactor(garden): improve flower, leaves, and grass compositionlaiflonglearner.com17:41
- fix: prevent old pause history from auto-resuming habitslifelong-habit-app17:20
- fix: stop welcome overlay from reappearing after creating a habitlifelong-habit-app17:17
- refactor(garden): make the blooms larger, replace rose with poppy to balance flower variants, replace the circle with hand-drawn onelaiflonglearner.com16:53
- feat(emotes): add sad cat emotelaiflonglearner.com16:43
- refactor(garden): simplify flowers and redesign tuliplaiflonglearner.com16:43
- fix(dashboard): move completed fixed-weekday habits to Donelifelong-habit-app16:20
- feat(week): update W33 recap title and description, add W34 recaplaiflonglearner.com15:54
- feat(blog): add new posts about Habit Trackers and RN app, remove dummy Lorem Ipsum postlaiflonglearner.com15:53
- fix(history): handle old config snapshots without frequency fieldslifelong-habit-app13:26
- fix(progress): use the selected week start across all analytics (before Monday was default)lifelong-habit-app13:03
- feat(garden): add rose, sunflower, and poppy flowerslaiflonglearner.com12:04
- fix(nav): keep active tab colors consistent in dark modelaiflonglearner.com11:54
- fix(habits): preserve frequency settings when duplicating habitslifelong-habit-app10:23
- fix(nav): highlight About bar when Week pages is being openedlaiflonglearner.com10:12
- feat(habits): add frequency commitment modes and fixed weekdayslifelong-habit-app08:18
Mon, Aug 24
- style(nav): make the wavy underline looks more seamless with customized mask imagelaiflonglearner.com13:08
- style(nav): remove pressed-button look from about-page tab toolaiflonglearner.com11:47
- style(nav): replace active-tab pressed-button look with wavy underlinelaiflonglearner.com11:07
- style: use curly quotes and apostropheslaiflonglearner.com10:47
- feat(about): split About page into Week In Life and Typology tabslaiflonglearner.com10:04