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

Jul 13 – Jul 19Week 7 of 27
Sun, Jul 19
  • fix(header): integrate the header with the page layoutlaiflonglearner.com15:26
  • fix(blog): center the article and TOC as a single layoutlaiflonglearner.com15:21
  • fix(posts): normalize CRLF line endings before frontmatter parsinglaiflonglearner.com15:14
  • feat(toc): add sliding active-heading indicator to On This Pagelaiflonglearner.com14:44
  • chore: remove dead StatusBar componentlaiflonglearner.com14:29
  • fix(status-bar): remove duplicated navigation and template boilerplatelaiflonglearner.com14:09
  • feat: add TOC, tag tabs, status bar, and tab-style nav, and clean up utility classeslaiflonglearner.com13:35
  • chore: update project name to 'laiflonglearner.com', also update gitignorelaiflonglearner.com13:31
  • Update project name in package-lock.json and add VSCode settings for CSS lintinglaiflonglearner.com13:04
  • Initial Commitlaiflonglearner.com12:37
Sat, Jul 18
  • fix(progress): position overlapping sessions by real timelifelong-habit-app02:29
  • fix(progress): maintain chronological session alignment across overlapping session columnslifelong-habit-app02:18
  • chore: remove dead useRunningSession hook and temporary debug logginglifelong-habit-app01:30
  • fix(dashboard): stop FlashList rows from fading after opening the dashboard for the second timelifelong-habit-app01:29
Fri, Jul 17
  • fix(dashboard): distinguish inactive days from missed dayslifelong-habit-app12:03
  • fix(progress): keep the session timeline in sync with session state changeslifelong-habit-app11:42
  • fix(dashboard): tapping stopwatch chips now also expands and scrolls to All-Day habits (it was only timed habits before)lifelong-habit-app11:08
  • fix(habit-form): preserve preferred_time across toggle off/onlifelong-habit-app10:06
  • fix(habits): remove redundant all_habit_day_states invalidationlifelong-habit-app09:54
  • fix(dashboard): stop inactive habits from appearing as "Not Completed" after reactivating them againlifelong-habit-app08:40
  • refactor(progress): extract AllViewsContainer and LazyQuarterlySection from progress tab (it was hard to scan with ~800 lines)lifelong-habit-app08:29
  • fix(progress): use the full habit list for historical metricslifelong-habit-app08:28
  • fix(stopwatch): source running session and today's totals from shared dashboard querieslifelong-habit-app07:41
  • fix(dashboard): preserve DayState instead of collapsing it to a booleanlifelong-habit-app05:15
  • chore: remove dead code and update comment to HabitCardCompact to indicate code is stale but can't be refactored nowlifelong-habit-app00:45
Thu, Jul 16
  • fix(AuthBanner): correct icon name typo (infoUI not info)lifelong-habit-app11:38
  • fix(HabitCardCompact): update pause action to match the current updateStatus systemlifelong-habit-app11:37
  • fix(dashboard): preserve trashed-habit history in week-strip day states (Scope B)lifelong-habit-app11:25
  • fix(habits): scope pause, archive, and trash to their actual active windowslifelong-habit-app11:24
  • fix(dashboard): defer stopwatch-chip scrolling until the sheet settleslifelong-habit-app09:45
  • fix(stopwatch): scope session queries to each caller's actual needslifelong-habit-app09:10
  • fix(habits): patch active-habit caches directly on status transitionslifelong-habit-app05:36
  • fix(dashboard): stabilize mutation callbacks to prevent full-list re-renderslifelong-habit-app02:48
  • perf(dashboard): scroll immediately for stopwatch chip taps when possiblelifelong-habit-app02:47
  • feat(dashboard): scroll to a habit when opened from the stopwatch chiplifelong-habit-app01:39
  • refactor(alerts): replace Alert.alert with themed ConfirmSheet and InfoSheetlifelong-habit-app01:21
  • fix: add a measurement-independent fallback to fix Bento's progress bar not renderinglifelong-habit-app00:55
Wed, Jul 15
  • fix: reset recycled FlashList state on habit identity changeslifelong-habit-app12:50
  • fix(stopwatch): make pauseSession update the UI optimisticallylifelong-habit-app12:44
  • refactor(progress): extract ProgressHeader, AllViewsContainer, and LazyQuarterlySectionlifelong-habit-app09:53
  • fix(progress): keep prefetched yearly logs consistent with useProgressLogslifelong-habit-app09:38
  • fix(habits): prevent expired pauses from reviving trashed habitslifelong-habit-app09:34
  • fix(status-logs): preserve expired pause history after automatic resumelifelong-habit-app09:31
  • fix(dashboard): keep past-date completion state in sync after manual session writeslifelong-habit-app08:50
Tue, Jul 14
  • refactor(progress): unify Consistency/Intensity colors, fix pill hierarchy and trend coloringlifelong-habit-app12:37
  • refactor(trend): remove unused phrase field and polish inline trend alignmentlifelong-habit-app11:30
  • fix(progress): remove duplicate Yearly loading indicatorlifelong-habit-app11:13
  • refactor(progress): standardize section nav labels, compact tracked/missed summarylifelong-habit-app10:00
  • fix(progress): thread loadedWindowStartDate through daily/weekly/monthly/quarterly hookslifelong-habit-app09:42
  • fix: Complete button closed sheet before mutation confirmed, showing stale datalifelong-habit-app09:13
  • fix: reconcile Grove completion drift, close backdating window gaps, stop Complete from wiping Grove datalifelong-habit-app08:35
  • fix(progress): drop middot and pts unit from trend delta displaylifelong-habit-app07:18
  • feat(progress): period-over-period trend on Consistency/Intensitylifelong-habit-app06:40
Mon, Jul 13
  • refactor(progress): move session timeline below category breakdownlifelong-habit-app12:14
  • fix(progress): scale session bars to 4h and anchor them to toplifelong-habit-app12:12
  • fix(progress): add spacing between daily overview and session timelinelifelong-habit-app11:31
  • refactor(progress): restyle session timeline as card with duration barslifelong-habit-app11:04
  • fix: restore resolveOffsetDate's todayISO field and DailySessionTimeline wiringlifelong-habit-app09:59
  • fix: correct Grove backdating and Snowball/Ladder stopwatch-owned logginglifelong-habit-app06:00
  • fix(posthog): disable session replay to prevent app crashes in production buildslifelong-habit-app04:40