laiflonglearner

Build Log

A running log of GitHub commits across my projects.

Sat, Aug 1
  • fix(progress): show actual consistency % for each habitlifelong-habit-app18:56
Thu, Jul 30
  • fix(backdating): fail on missing habit instead of skipping created-date validationlifelong-habit-app15:29
  • fix(progress): repair regressions, restore shared validation, remove debug logslifelong-habit-app15:22
  • fix(progress): include uncategorized habits everywhere, fix heatmap for days before a habit existedlifelong-habit-app14:25
Wed, Jul 29
  • fix(progress): make Yearly metrics match the other Progress viewslifelong-habit-app19:39
Tue, Jul 28
  • fix(habits): paginate two more daily_logs queries past Supabase's row limitlifelong-habit-app17:48
  • fix(backdating): compute "today" in local time instead of UTC to solve locked window bug when journalinglifelong-habit-app16:34
  • fix(data): paginate daily_logs and habit_status_logs past Supabase's 1000-row limitlifelong-habit-app16:33
Mon, Jul 27
  • fix: run auto-resume once per app launchlifelong-habit-app07:00
Sun, Jul 26
  • fix(dashboard): show guidance on empty Grove cardslifelong-habit-app19:25
  • fix(HabitSectionList): memoize topContent to improve performance and prevent unnecessary re-renderslifelong-habit-app17:36
  • fix: fire completion toast notif from write mutations instead of Done bucket changeslifelong-habit-app15:18
  • fix(dashboard): memoize raw function using callbacks for dashboard screenlifelong-habit-app15:12
  • refactor(habits): use transition_habit_status RPClifelong-habit-app13:18
  • fix(db): make habit status transitions atomic with RPClifelong-habit-app13:18
  • fix: memoize FlashList props to avoid unnecessary cell re-evaluationlifelong-habit-app12:58
  • fix(progress): fix wasted space below long entries in the session timelinelifelong-habit-app11:43
Sat, Jul 25
  • fix(log): stop bot commits from appearing in the build loglaiflonglearner.com20:12
  • fix(ascii-portrait): restore sampled ink, improve ascii density ramplaiflonglearner.com20:04
  • chore: move validate emote script from lib to script directorylaiflonglearner.com19:54
Thu, Jul 23
  • feat(emotes): support :shortcode: emotes outside MDXlaiflonglearner.com07:47
  • feat(ascii): add theme-aware ascii portrait on homepagelaiflonglearner.com07:18
  • feat(emotes): add build-time :shortcode: emote system for MDX postslaiflonglearner.com06:59
Tue, Jul 21
  • fix(theme): separate brightness icons from palette colors, soften the ocean themelaiflonglearner.com20:35
  • feat(theme): add warm/ocean color palettes with separate theme controlslaiflonglearner.com19:15
  • refactor(header): remove the red dot from header logo and replace emoji theme iconslaiflonglearner.com18:16
  • feat: make shell wider, add TOC thumb color, and fix dark-mode button shadowslaiflonglearner.com17:49
  • fix(metadata): update blog and log titleslaiflonglearner.com17:44
  • refactor(layout): keep page width consistent across all pageslaiflonglearner.com15:04
  • style: make page shell wider, mute selection color, adjust header transparencylaiflonglearner.com15:02
  • style(theme): add sticky header and themed text selectionlaiflonglearner.com14:27
  • style(header,footer): match footer divider with header, warm up logo colorlaiflonglearner.com13:59
  • fix(css): fix active tab text and make button shadows consistentlaiflonglearner.com13:32
  • feat(ui): group build log by day, add cozy keycap button stylelaiflonglearner.com11:53
  • fix(dashboard): remove duplicate spacing in HabitMapListViewlifelong-habit-app11:24
  • feat(log): add opt-in log history refetch (instead of incremental sync)laiflonglearner.com11:10
  • chore(ci): run update-log hourly instead of dailylaiflonglearner.com11:08
  • fix(scripts): update dev scriptlaiflonglearner.com11:07
  • feat: add update-log script to pull commits from repositorieslaiflonglearner.com10:49
  • feat(log): add cross-repo dev loglaiflonglearner.com10:44
  • fix(layout): replace fixed TOC layout with responsive grid shelllaiflonglearner.com10:00
  • feat: add wrangler config and assets for OpenNext integrationlaiflonglearner.com07:21
  • chore(gitignore): add .open-next/laiflonglearner.com07:07
Mon, Jul 20
  • fix(cloudflare): use static-assets incremental cache for SSGlaiflonglearner.com22:20
  • fix(config): update build script to use webpack and add OpenNext.js config filelaiflonglearner.com22:20
  • config: add preview and deploy scripts for OpenNext.js Cloudflare integrationlaiflonglearner.com21:59
  • fix: allow LAN dev origin for Turbopack HMRlaiflonglearner.com20:27
Sun, Jul 19
  • fix(header): integrate the header with the page layoutlaiflonglearner.com22:26
  • fix(blog): center the article and TOC as a single layoutlaiflonglearner.com22:21
  • fix(posts): normalize CRLF line endings before frontmatter parsinglaiflonglearner.com22:14
  • feat(toc): add sliding active-heading indicator to On This Pagelaiflonglearner.com21:44
  • chore: remove dead StatusBar componentlaiflonglearner.com21:29
  • fix(status-bar): remove duplicated navigation and template boilerplatelaiflonglearner.com21:09
  • feat: add TOC, tag tabs, status bar, and tab-style nav, and clean up utility classeslaiflonglearner.com20:35
  • chore: update project name to 'laiflonglearner.com', also update gitignorelaiflonglearner.com20:31
  • Update project name in package-lock.json and add VSCode settings for CSS lintinglaiflonglearner.com20:04
  • Initial Commitlaiflonglearner.com19:37
Sat, Jul 18
  • fix(progress): position overlapping sessions by real timelifelong-habit-app09:29
  • fix(progress): maintain chronological session alignment across overlapping session columnslifelong-habit-app09:18
  • chore: remove dead useRunningSession hook and temporary debug logginglifelong-habit-app08:30
  • fix(dashboard): stop FlashList rows from fading after opening the dashboard for the second timelifelong-habit-app08:29
Fri, Jul 17
  • fix(dashboard): distinguish inactive days from missed dayslifelong-habit-app19:03
  • fix(progress): keep the session timeline in sync with session state changeslifelong-habit-app18:42
  • fix(dashboard): tapping stopwatch chips now also expands and scrolls to All-Day habits (it was only timed habits before)lifelong-habit-app18:08
  • fix(habit-form): preserve preferred_time across toggle off/onlifelong-habit-app17:06
  • fix(habits): remove redundant all_habit_day_states invalidationlifelong-habit-app16:54
  • fix(dashboard): stop inactive habits from appearing as "Not Completed" after reactivating them againlifelong-habit-app15:40
  • refactor(progress): extract AllViewsContainer and LazyQuarterlySection from progress tab (it was hard to scan with ~800 lines)lifelong-habit-app15:29
  • fix(progress): use the full habit list for historical metricslifelong-habit-app15:28
  • fix(stopwatch): source running session and today's totals from shared dashboard querieslifelong-habit-app14:41
  • fix(dashboard): preserve DayState instead of collapsing it to a booleanlifelong-habit-app12:15
  • chore: remove dead code and update comment to HabitCardCompact to indicate code is stale but can't be refactored nowlifelong-habit-app07:45
Thu, Jul 16
  • fix(AuthBanner): correct icon name typo (infoUI not info)lifelong-habit-app18:38
  • fix(HabitCardCompact): update pause action to match the current updateStatus systemlifelong-habit-app18:37
  • fix(dashboard): preserve trashed-habit history in week-strip day states (Scope B)lifelong-habit-app18:25
  • fix(habits): scope pause, archive, and trash to their actual active windowslifelong-habit-app18:24
  • fix(dashboard): defer stopwatch-chip scrolling until the sheet settleslifelong-habit-app16:45
  • fix(stopwatch): scope session queries to each caller's actual needslifelong-habit-app16:10
  • fix(habits): patch active-habit caches directly on status transitionslifelong-habit-app12:36
  • fix(dashboard): stabilize mutation callbacks to prevent full-list re-renderslifelong-habit-app09:48
  • perf(dashboard): scroll immediately for stopwatch chip taps when possiblelifelong-habit-app09:47
  • feat(dashboard): scroll to a habit when opened from the stopwatch chiplifelong-habit-app08:39
  • refactor(alerts): replace Alert.alert with themed ConfirmSheet and InfoSheetlifelong-habit-app08:21
  • fix: add a measurement-independent fallback to fix Bento's progress bar not renderinglifelong-habit-app07:55
Wed, Jul 15
  • fix: reset recycled FlashList state on habit identity changeslifelong-habit-app19:50
  • fix(stopwatch): make pauseSession update the UI optimisticallylifelong-habit-app19:44
  • refactor(progress): extract ProgressHeader, AllViewsContainer, and LazyQuarterlySectionlifelong-habit-app16:53
  • fix(progress): keep prefetched yearly logs consistent with useProgressLogslifelong-habit-app16:38
  • fix(habits): prevent expired pauses from reviving trashed habitslifelong-habit-app16:34
  • fix(status-logs): preserve expired pause history after automatic resumelifelong-habit-app16:31
  • fix(dashboard): keep past-date completion state in sync after manual session writeslifelong-habit-app15:50
Tue, Jul 14
  • refactor(progress): unify Consistency/Intensity colors, fix pill hierarchy and trend coloringlifelong-habit-app19:37
  • refactor(trend): remove unused phrase field and polish inline trend alignmentlifelong-habit-app18:30
  • fix(progress): remove duplicate Yearly loading indicatorlifelong-habit-app18:13
  • refactor(progress): standardize section nav labels, compact tracked/missed summarylifelong-habit-app17:00
  • fix(progress): thread loadedWindowStartDate through daily/weekly/monthly/quarterly hookslifelong-habit-app16:42
  • fix: Complete button closed sheet before mutation confirmed, showing stale datalifelong-habit-app16:13
  • fix: reconcile Grove completion drift, close backdating window gaps, stop Complete from wiping Grove datalifelong-habit-app15:35
  • fix(progress): drop middot and pts unit from trend delta displaylifelong-habit-app14:18
  • feat(progress): period-over-period trend on Consistency/Intensitylifelong-habit-app13:40
Mon, Jul 13
  • refactor(progress): move session timeline below category breakdownlifelong-habit-app19:14
  • fix(progress): scale session bars to 4h and anchor them to toplifelong-habit-app19:12
  • fix(progress): add spacing between daily overview and session timelinelifelong-habit-app18:31
  • refactor(progress): restyle session timeline as card with duration barslifelong-habit-app18:04
  • fix: restore resolveOffsetDate's todayISO field and DailySessionTimeline wiringlifelong-habit-app16:59
  • fix: correct Grove backdating and Snowball/Ladder stopwatch-owned logginglifelong-habit-app13:00
  • fix(posthog): disable session replay to prevent app crashes in production buildslifelong-habit-app11:40
Sun, Jul 12
  • chore: bump dependencies to sync with Expo 56.0.15lifelong-habit-app21:06
  • fix: scope Metro package-exports resolution to solar-icons onlylifelong-habit-app21:04
  • fix(progress): reorder OverviewSummaryBar rows instead of reserving icon gutterlifelong-habit-app03:47
Thu, Jul 9
  • feat(progress): extend Consistency/Intensity row to Weekly and Quarterlylifelong-habit-app15:38
  • refactor(shared): extract InfoToggle, add explanation to OverviewSummaryBarlifelong-habit-app15:10
  • fix(progress): change dayMetrics to periodMetrics, dayMetrics is stalelifelong-habit-app15:04
  • refactor(shared): extract InfoToggle, add explanations to OverviewSummaryBarlifelong-habit-app14:58
  • fix(progress): include unlogged habits in average intensity denominatorlifelong-habit-app14:46
  • fix(habit-card-gallery): eliminate progress bar fill racelifelong-habit-app14:41
  • feat(progress): add whole-day consistency and intensity to Daily viewlifelong-habit-app12:49
  • fix(toast): make habit-colored toast background fully opaquelifelong-habit-app11:40
  • feat(toast): tint completion celebration toast with habit's colorlifelong-habit-app11:38
  • refactor(toast): improve sparkle animation and adjust SVG sizelifelong-habit-app11:24
  • feat(dashboard): replace per-habit sparkle with a celebration toastlifelong-habit-app10:38
  • chore: bump expo dependency to v56.0.15lifelong-habit-app10:26
  • feat(posthog): implement conditional loading (disabled for dev build)lifelong-habit-app10:08
Wed, Jul 8
  • feat: add read-only daily session timeline to Progress tablifelong-habit-app21:42
  • chore(config): add posthog-react-native/expo to dependencies configlifelong-habit-app21:22
  • feat(progress): add average logged value for Snowball and Grove habitslifelong-habit-app21:21
  • doc(auth): add comments about preventing overwriting user display name on repeat Google sign-inslifelong-habit-app21:13
  • fix(auth): stop Google sign-in name from being silently discardedlifelong-habit-app21:11
  • refactor(dashboard): split HabitSectionList into orchestrator plus 4 fileslifelong-habit-app18:18
  • fix(dashboard): hold completed habit in place until its sparkle finisheslifelong-habit-app17:56
  • feat(dashboard): add per-habit completion sparklelifelong-habit-app15:04
  • fix(time-picker): stop losing typed drafts to sibling interactionslifelong-habit-app14:32
  • fix(progress tab): add loading feedback for Yearly view entry and year-offset changeslifelong-habit-app14:28
  • feat(analytics): add PostHog to the applifelong-habit-app14:25
Tue, Jul 7
  • fix(time-picker): stop unmounting TextInput mid-keystroke on direct editlifelong-habit-app19:33
  • feat(dashboard): animate habit cards moving between sectionslifelong-habit-app19:19
  • chore: added expo-application, expo-file-system, expo-localization, and posthog-react-nativelifelong-habit-app19:12
  • feat(dashboard): animate habit cards moving between sectionslifelong-habit-app17:31
  • fix(dashboard): stop status line from freezing on one line on heavy-use dayslifelong-habit-app17:28
  • fix(ladder-card): allow tapping active rung to undo the loglifelong-habit-app17:02
  • feat: add animated PulsingDots loader, replace static progress placeholderlifelong-habit-app16:24
  • fix: resolve offline cold-open hang and add long-wait feedback to progress tablifelong-habit-app15:16
  • chore(dependencies): add @react-native-community/netinfo version 12.0.1lifelong-habit-app13:53
  • feat(device-sessions): fix os_name source, add build fingerprint and sign-in loglifelong-habit-app12:44
Fri, Jul 3
  • feat(habit-form): copy config for Ladder, completing the BENTO/LADDER/SNOWBALL rolloutlifelong-habit-app16:16
  • feat(habit-form): copy config for Snowball, generalize CopyConfigSheet, fix retroactive Bento gaplifelong-habit-app16:10
  • refactor(constants): split statusLineVariants.ts into a directory by input sourcelifelong-habit-app14:46
  • fix(habit-form): guard archetype in buildPayload, same invariant as habit_namelifelong-habit-app13:51
  • fix(theme): guard session user id inside useTheme queryFnlifelong-habit-app13:48
  • fix(types): close type drift in habit form, theme, sync, and log statuslifelong-habit-app13:47
  • fix(dashboard): remove remaining backhanded phrasing and vague quantifierlifelong-habit-app13:08
  • fix(status-line): resolve DASHBOARD voice guideline violationslifelong-habit-app12:56
  • fix(status-line): restore partial_done reachability, fix maxShowsPerDay driftlifelong-habit-app12:54
Thu, Jul 2
  • fix(status-line): move useDailySummary above useRecordDashboardOpen effectlifelong-habit-app21:35
  • docs(status-line): document every pooled message and dataLine branch in headerlifelong-habit-app21:34
  • fix(progress): stop AllViewsContainer remounting on background refetchlifelong-habit-app20:29
  • fix(device-sessions): track last_seen_at on every session event, not just SIGNED_INlifelong-habit-app19:34
  • fix(device-sessions): restore last_seen_at column defaultlifelong-habit-app19:32
  • feat(auth): add device_sessions registry for multi-device debugginglifelong-habit-app19:29
  • chore(dependencies): add expo-device packagelifelong-habit-app19:03
  • refactor(progress): merge Tracked/Missed Days into OverviewSummaryBarlifelong-habit-app17:46
  • feat(progress): add Tracked/Missed Days below OverviewSummaryBarlifelong-habit-app17:41
  • feat(progress): add hairline dividers between CategoryInsightsCard sectionslifelong-habit-app17:39
  • chore(usePullSync): remove dead hooklifelong-habit-app17:24
  • style(copy-config-sheet): confirm step reuses ConfirmSheet's centered-card tokenslifelong-habit-app17:15
  • fix(bento-form): replace unreliable watch()-driven draft effect with imperative emissionlifelong-habit-app17:12
  • docs(bento-copy): correct overclaimed collision risk, remove em dasheslifelong-habit-app16:03
  • fix(habit-form): eliminate nested-Modal race in copy-config confirm, carry stopwatch state across GROVE switcheslifelong-habit-app15:45
Wed, Jul 1
  • fix(habit-form): detect Bento overwrites correctly and enable stopwatch by defaultlifelong-habit-app21:16
  • feat(habit-form): copy Bento parts from an existing habitlifelong-habit-app20:57
  • feat(status-line): add per-variant daily show budgetslifelong-habit-app20:21
  • feat(database): add get recent completion rates migration and regenerate supabase database typeslifelong-habit-app05:48
  • feat(status-line): wire recovery pacing and add 30-day streak tierlifelong-habit-app05:44
Tue, Jun 30
  • refactor(statusLineVariants): update daily welcome messageslifelong-habit-app23:43
  • refactor(progress): merge radar and breakdowns into CategoryInsightsCardlifelong-habit-app23:39
  • perf(progress): virtualize DailyOverviewSection habit rowslifelong-habit-app23:36
  • fix(progress): stack StatPill fraction and percentage valueslifelong-habit-app23:36
  • refactor(welcome-card): move top clouds 10pt from the prior positionlifelong-habit-app20:01
  • refactor(background): dedupe color mapping and clean up primitiveslifelong-habit-app19:20
  • fix(typewriter): live clock updates in place, no full retypelifelong-habit-app19:19
  • fix(welcome-card): enlarge and reposition bottom clouds for timer-bar visibilitylifelong-habit-app16:25
  • feat(welcome-card): add sparkles and rebalance cloud placementlifelong-habit-app15:20
  • fix(welcome-card): balance cloud spacing across the full viewBoxlifelong-habit-app15:14
  • fix(welcome-card): pull bottom clouds and stars into the middle bandlifelong-habit-app15:13
  • refactor(statusLineVariants): update welcome messageslifelong-habit-app15:04
  • fix(dashboard): keep welcome clock live and separate status data from messaginglifelong-habit-app13:58
  • fix(dashboard): replace stretched AuthBackground with WelcomeCardBackgroundlifelong-habit-app13:23
  • refactor(shared): move AuthBackground to shared components and reuse in welcome overlaylifelong-habit-app12:58
  • fix(types): align User and schedule types with DB nullability and Json constraintslifelong-habit-app12:09
  • chore: add mapUserRow file that's supposed to be pushed in the prev commitlifelong-habit-app11:16
  • fix(types): resolve Json compatibility issues and centralize user row mappinglifelong-habit-app11:12
  • fix(supabase): wire generated Database types into the clientlifelong-habit-app10:46
  • refactor(dashboard): update comments for daysSinceLastActivity and streakLength to clarify Postgres RPC usagelifelong-habit-app10:43
  • feat(dashboard): move cross-habit activity history to a Postgres RPClifelong-habit-app10:42
  • feat(dashboard): wire account-age, streak, and open-count fields into welcome overlaylifelong-habit-app10:31
  • feat(dashboard): implement large_habit_list_compassionlifelong-habit-app09:41
  • feat(dashboard): regenerate statusLineVariants with C and E rewriteslifelong-habit-app08:37
Mon, Jun 29
  • refactor(dashboard): extract status line variants into registrylifelong-habit-app22:07
  • refactor(dashboard): extract status line variants into registrylifelong-habit-app21:05
  • chore(hooks): implement backdating functionality in useBackdateHabit (copied the wrong file)lifelong-habit-app17:03
  • perf(mutations): scope all_habit_logs_by_date invalidation to the affected datelifelong-habit-app16:45
  • fix(dashboard): remove unused useUser() subscription in useStopwatchlifelong-habit-app16:43
  • perf(dashboard): memoize habit color resolutionlifelong-habit-app16:41
  • perf(queries): add staleTime to useUserlifelong-habit-app16:41
  • perf(dashboard): fix broken HabitCardRenderer memoizationlifelong-habit-app16:37
  • perf(dashboard): remove unused useDashboard() call in useHabitCreationFlowlifelong-habit-app16:37
  • perf(dashboard): memoize scheduleVersion in useDashboardlifelong-habit-app16:05
  • feat(hooks): add useMidnightRefresh for cross-midnight cache invalidationlifelong-habit-app16:04
  • fix(mutations): invalidate consistency and habits on empty trashlifelong-habit-app16:04
  • fix(mutations): invalidate consistency on manual session add and deletelifelong-habit-app16:04
  • fix(mutations): invalidate consistency on stopwatch session close and restartlifelong-habit-app16:03
  • refactor(dashboard): simplify DailyWelcomeOverlay by removing BlinkingCursor componentlifelong-habit-app14:54
  • feat(dashboard): add current time to welcome message and hide cursor on completionlifelong-habit-app14:48
  • feat(dashboard): add typed-in daily welcome overlaylifelong-habit-app14:12
  • fix(dashboard): correct habit selection and messaging in DailySummarylifelong-habit-app12:03
  • perf(progress): remove redundant recomputations and stabilize navigation handlerslifelong-habit-app10:48
  • perf(progress): memoize DailyOverviewSection callbacks and HabitIconBadgelifelong-habit-app10:47
  • perf(dashboard): lift runningHabitIds default to module-level constantlifelong-habit-app05:51
  • perf(queries): set staleTime: Infinity on useHabitStatusLogslifelong-habit-app05:51
  • fix(mutations): invalidate consistency cache on habit creationlifelong-habit-app05:50
  • perf(queries): set staleTime: 30_000 on useTodayLogslifelong-habit-app05:49
  • perf(queries): set staleTime: Infinity on useConsistencylifelong-habit-app05:49
  • fix(bento): optimistically update all_habit_logs_by_date on checkbox taplifelong-habit-app05:44
Sun, Jun 28
  • fix(theme): remove whitespace text nodes from AppThemeProvider JSXlifelong-habit-app23:04
  • perf(progress): keep overview sections mounted across tab switcheslifelong-habit-app22:42
  • feat(progress): implement usePrefetchAdjacentYears hook for snappier year navigationlifelong-habit-app22:41
  • feat(progress): add year chevron navigation to yearly viewlifelong-habit-app22:27
  • feat(progress): replace yearly picker with chevron navigationlifelong-habit-app22:17
  • chore(progress): implement YearlyOverviewSection with summary bar, radar chart, and category breakdown (copied the wrong file, my bad)lifelong-habit-app22:04
  • fix(progress): dedupe logs by date in useYearlyOverview summary countlifelong-habit-app21:50
  • feat(progress): add YearlyOverviewSection with summary, radar, and category breakdownlifelong-habit-app21:47
  • refactor(settings): make GroupedRow.onPress optional and add disabled statelifelong-habit-app21:32
  • refactor(settings): replace all Alert.alert with in-app modalslifelong-habit-app21:27
  • feat(settings): add discard guard to TimeOfDayScreenlifelong-habit-app21:22
  • perf(theme): convert useTheme from hook to Contextlifelong-habit-app20:48
  • fix(progress): virtualize weekly and monthly habit rowslifelong-habit-app20:28
  • perf(quarterly): virtualize habit rows with scrollEnabled=false FlatListlifelong-habit-app20:04
  • perf(progress): gate useQuarterlyOverview behind viewMode via LazyQuarterlySectionlifelong-habit-app20:04
  • fix(progress): exclude paused and archived habits from all progress viewslifelong-habit-app19:50
  • feat(progress): add quarterly overview viewlifelong-habit-app15:44
  • feat(AddSessionScreen): block end time in the future when logging for todaylifelong-habit-app14:53
  • feat(progress): add monthly calendar viewlifelong-habit-app14:44
  • feat(progress): navigate to habit details from progress rowslifelong-habit-app14:05
  • refactor(progress): consolidate shared date helpers and category constantslifelong-habit-app13:43
  • fix(habitFormStyles): center timePickerSpinner content horizontallylifelong-habit-app13:27
  • refactor(TrailingTimestampText): replace shadow-height technique with onTextLayoutlifelong-habit-app11:48
  • fix(TrailingTimestampText): always anchor timestamp to bottom-rightlifelong-habit-app10:52
  • fix(journal): reduce timestamp text size to rowMeta (bodyXs is too small)lifelong-habit-app09:24
  • fix(journal): adjust timestamp positioning againlifelong-habit-app09:24
  • fix(journal): measure timestamp width correctlylifelong-habit-app08:47
  • fix(journal): restore bubble shrink-wrap for inline timestampslifelong-habit-app06:04
Sat, Jun 27
  • fix(journal): restore inline timestamps for short entrieslifelong-habit-app22:24
  • refactor(journal): extract screen logic into focused componentslifelong-habit-app21:07
  • fix: progress bar left-to-right fill via onLayout and prevent rapid-tap revert with mutationInFlightReflifelong-habit-app19:41
  • feat(optimistic-ui): instant feedback for Snowball stepper and Ladder rung interactionslifelong-habit-app19:39
  • fix(TrailingTimestampText): make single-line detection robust on Androidlifelong-habit-app18:39
  • fix(journal): restore bubble shrink-wrap behaviorlifelong-habit-app17:57
  • fix(journal): prevent timestamp overlap and expand bubble widthlifelong-habit-app17:33
  • fix(TrailingTimestampText): correct timestamp placement logic for inline renderinglifelong-habit-app17:22
  • fix(screenLayout): add insets.bottom to subScreenContainerPaddinglifelong-habit-app16:42
  • refactor: update text componentslifelong-habit-app16:04
Fri, Jun 26
  • feat(TrailingTimestampText): add dynamic trailing timestamp for habit journallifelong-habit-app21:23
  • refactor(RecentlyDeletedScreen): improve alert copy textlifelong-habit-app21:22
  • chore: remove AddSessionSheet component (dead code)lifelong-habit-app21:21
  • refactor(themeRegistry): add subtle card field on ThemePalette interfacelifelong-habit-app21:21
  • refactor(auth components): adjust margin and placeholder text for input fieldslifelong-habit-app21:21
  • refactor(dashboard): adjust component styleslifelong-habit-app21:20
  • refactor(alerts): update alert text to include Discord community supportlifelong-habit-app21:13
  • refactor(validateHabit): update bento wording from component to partlifelong-habit-app06:33
  • fix(ladder): align tooltip/error copy with existing "level" terminologylifelong-habit-app06:18
  • refactor: improve alert and text messages for clarity across various componentslifelong-habit-app05:56
Thu, Jun 25
  • refactor: update description for ArchetypeSelector and pause messages for hookslifelong-habit-app21:53
  • feat(journal): WhatsApp-style trailing timestamp on journal bubbleslifelong-habit-app17:42
  • feat(journal): multi-day journal thread with cursor paginationlifelong-habit-app17:05
  • fix(AddSessionScreen): suppress validation warning while any picker field is openlifelong-habit-app15:25
  • feat(TimeSpinnerPicker): add onEditingChange callback to signal active text editlifelong-habit-app15:24
  • fix(TimeSpinnerPicker): clamp out-of-range typed values instead of silently revertinglifelong-habit-app15:19
  • feat(TimeSpinnerPicker): add tap-to-edit inline input for hour and minute fieldslifelong-habit-app15:18
  • feat(toast): show habit name in pause confirmation toastlifelong-habit-app14:42
  • feat(toast): show habit name in pause confirmation toastlifelong-habit-app14:22
  • fix(toast): preserve toast payload across navigation, user-dismiss onlylifelong-habit-app13:55
  • fix(toast): remove duplicate ToastProvider from (tabs)/_layoutlifelong-habit-app13:52
  • fix(toast): move NavigationToastGate outside Stack to sibling positionlifelong-habit-app13:51
  • fix(toast): scope ToastProvider to (tabs) subtreelifelong-habit-app13:14
  • feat(toast): scope overlay visibility to (tabs) group onlylifelong-habit-app13:05
  • refactor: extract TimeSpinnerPicker shared component from HabitTimePicker and AddSessionlifelong-habit-app11:08
  • fix: move AM/PM toggle inline next to MM field in AddSessionlifelong-habit-app10:18
  • fix: center HabitTimePicker spinner and stack AddSession time inputs verticallylifelong-habit-app10:14
  • fix: use time_display_24h in session display and manual session input so the time format follows user optionlifelong-habit-app09:40
  • fix(grove): pass isPastDate not strictMode as isLockIn to journal routelifelong-habit-app06:10
  • fix(grove): auto-complete past-date Grove logs on journal/session/stepper writelifelong-habit-app05:52
  • chore(HabitTimeLogScreen): remove dead codelifelong-habit-app05:50
Wed, Jun 24
  • refactor(ArchetypeSelector UX): replace em dash to parentheses #41lifelong-habit-app20:53
  • fix(GroveForm UI): fix toggle color (no longer transparent), adjust text size and text #73lifelong-habit-app20:50
  • refactor(TimeOfDayScreen): move the toggle for 12-hour and 24-hour options abovelifelong-habit-app20:45
  • fix(grove): use lower-level hooks that accept null to fix conditional hook errorlifelong-habit-app19:13
  • fix (grove): fix grove completion from detail sheet for all track types [#80, part of #73]lifelong-habit-app17:41
  • Add timeElapsedSeconds to SelectedDateLogResult [#80, part of #73]lifelong-habit-app17:40
  • fix (grove): Allow Grove completion from detail sheet when data exists [#80, part of #73]lifelong-habit-app17:33
  • feat(progress): include uncategorized habits in category breakdownlifelong-habit-app15:58
  • refactor(dashboard): expose schedule via DashboardData, fix O(N²) todayLogs lookup [#70, part of #35]lifelong-habit-app15:26
  • feat(dashboard): schedule-aware two-line daily summary banner (Scopes B + C) [#70, part of #35]lifelong-habit-app15:23
  • chore: change migration name to follow the standard (with -010 suffix)lifelong-habit-app14:41
  • fix(settings): eliminate maskEmail duplication, useEffect race, select() overhead [#78, part of #75]lifelong-habit-app14:05
  • feat(settings): add Edit Name screen and wire display_name to ProfileHeader [#75, part of #70]lifelong-habit-app07:01
Tue, Jun 23
  • refactor(HabitTimePicker): update time caption [#41 copy audit]lifelong-habit-app23:49
  • feat: capture display_name at signup and Google OAuth, fix guest name fallback [#75, part of #70]lifelong-habit-app20:09
  • refactor(OverviewSummaryBar): update label from "Not completed" to "Not Started" and adjust styleslifelong-habit-app20:05
  • refactor: correct spelling of "Customize Fields" and adjust padding in HabitSheetFieldsScreen [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app19:52
  • style: correct spelling of "Customize Fields" in comments [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app19:52
  • refactor(habitSheetFieldConfig): correct spelling and update field hints [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app19:51
  • fix(HabitSheetFieldsScreen): add caption-to-button gap and tighten field row padding [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app19:50
  • feat(HabitSheetFieldsScreen): add reset to default button and tighten field row spacing [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app19:23
  • feat(HabitSheetFieldsScreen): add reset to default button [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app19:02
  • refactor(habitSheetFieldConfig): reorder DEFAULT_SHEET_FIELDS to match UX grouping [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app18:25
  • refactor(habit-sheet-fields): delegate route to feature component, remove duplicate implementation [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app18:05
  • fix(HabitSheetFieldsScreen): use colors.accent for switch to match GroveForm pattern [#66, part of DASHBOARD #35 and settings #51]lifelong-habit-app18:04
Sun, Jun 21
  • refactor(settings): move Customise Fields from habit sheet to Appearance settings [#66, part of DASHBOARD #35 and SETTINGS #51]lifelong-habit-app20:58
  • feat(habit-detail-sheet): user-configurable stat fields + full-sheet scroll fix [#66, part of #35]lifelong-habit-app20:22
  • fix(dashboard): close two config-history gaps missed in the first passlifelong-habit-app20:18
  • fix(dashboard): resolve historical config for unlogged past dates. Closes #60lifelong-habit-app18:28
Wed, Jun 17
  • fix(dashboard): resolve LadderCard and SnowballCard config from snapshot for past dates [#60, part of #35]lifelong-habit-app15:36
  • fix(progress): truly center date label, anchor refresh button to its edgelifelong-habit-app15:01
Tue, Jun 16
  • refactor(progress): wrap OverviewSummaryBar in a cardlifelong-habit-app21:39
  • refactor(progress): wrap CategoryRadarChart in a cardlifelong-habit-app21:19
  • refactor(progress): wrap CategoryBreakdown consistency/intensity sections in card surfaceslifelong-habit-app20:43
  • refactor(progress): reduce horizontal padding in habit rows and progress tab [Closes #47]lifelong-habit-app20:31
  • feat(progress): add HabitIconBadge with gradient, use in Daily/WeeklyHabitRow [Closes #46]lifelong-habit-app20:03
  • refactor(progress): change habit icon container from square to full circle [#46 part of #42]lifelong-habit-app19:53
  • feat(dashboard): add daily summary banner with warm today-scoped copy [#58, part of #35]lifelong-habit-app17:02
  • refactor(HabitSheetActions): update pause duration messagelifelong-habit-app16:53
  • refactor(CategoryBreakdown): replace checkCircle icon with checkCircleBoldlifelong-habit-app16:53
  • fix(habit-detail-sheet): raise maxHeight 88% -> 95% to fit action grid without scroll-to-reveallifelong-habit-app16:41
  • fix(habit-detail-sheet): show content on first open, not secondlifelong-habit-app16:33
  • fix(tabs): widen HapticTab onPressIn to accept null, cast tabBarIcon color to stringlifelong-habit-app16:31
  • fix(habit-pause): self-healing stale log cleanup, guard all UPDATEs, fix transparent toast [#65]lifelong-habit-app15:55
  • fix(habit-pause): guard all status UPDATEs with .select(), fix ghost-resume, fix transparent toast [#65]lifelong-habit-app15:50
Mon, Jun 15
  • fix(habit-pause): only evaluate latest pause log per habit, fix transparent info toast [#65, part of #64]lifelong-habit-app16:49
  • fix(toast): remove fade-in animation, show toast at full opacity immediately [#65, part of #64]lifelong-habit-app14:14
  • fix(habit-pause): fix ghost resume toasts, bottom-position toast, show days remaining [#65, part of #64]lifelong-habit-app13:29
  • fix(useToast): remove auto-dismiss, require explicit user dismissal via X button [#65, part of #64]lifelong-habit-app12:18
  • fix(habit-pause): surface auto-resume feedback and fix silent re-resume loop [#65, part of #64]lifelong-habit-app12:12
  • fix(db): fix operator mismatch in backfill_habit_snapshots by casting changed_at to DATE [#60, part of #35]lifelong-habit-app11:20
  • refactor(appearance): split theme and card style into separate section cards [#53, part of #51]lifelong-habit-app09:39
  • feat(appearance): add habit card style preference (Raised / Flat / Gallery) [#53, part of #51]lifelong-habit-app09:33
  • fix(progress/CategoryBreakdown): cap width on tablets (#44, part of #42)lifelong-habit-app08:59
Sun, Jun 14
  • fix(progress): correct HabitStyles and Habit field names in CategoryBreakdown (#44, part of #42)lifelong-habit-app22:34
  • fix(progress): correct HabitStyles and Habit field names in CategoryBreakdown (#44, part of #42)lifelong-habit-app22:34
  • feat(progress): expandable category breakdown sub-list (#44, part of #42)lifelong-habit-app22:33
  • feat(progress): expandable category breakdown sub-list (#44, part of #42)lifelong-habit-app22:33
  • fix(mutations): call backfill_habit_snapshots RPC after habit config edit (#60, part of #35)lifelong-habit-app22:01
  • fix(db): add backfill_habit_snapshots RPC to restore NULL habit_config_snapshot rows (#60, part of #35)lifelong-habit-app21:59
Sat, Jun 13
  • perf(HabitDetailSheet): lazy-mount content and defer stat queries behind InteractionManager (#57, part of #35)lifelong-habit-app20:00
  • perf(HabitDetailSheet): lazy-mount sheet content to prevent query contention during open animation (#57, part of #35)lifelong-habit-app19:54
  • fix(HabitSheetActions): use component_id field on BentoComponent, import type (#57, part of #35)lifelong-habit-app19:32
  • fix(HabitDetailSheet): derive archetype-aware 100% payload in Complete button (#57, part of #35)lifelong-habit-app19:31
  • fix(progress): invalidate logs on tab focus and add manual refresh button (#43, part of #42)lifelong-habit-app17:17
  • refactor(habit-form): seed bento from snowball/ladder on archetype switch (#54, #35)lifelong-habit-app16:48
  • refactor(habit-form): seed bento from snowball/ladder on archetype switch (#54, #35)lifelong-habit-app16:48
  • feat(habit-form): stash and restore archetype configs on switch (#54, #35)lifelong-habit-app16:27
  • feat(habit-form): stash and restore archetype configs on switch (#54, #35)lifelong-habit-app16:27
Fri, Jun 12
  • refactor(habit-time-log): use ScreenHeader rightAction for add session button (#39)lifelong-habit-app22:06
  • refactor(screen-header): add optional rightAction slot for aligned header actionslifelong-habit-app22:06
  • refactor(iconRegistry): replace AddCircle icon with bold variant in UI_ICONSlifelong-habit-app21:44
  • refactor(habit-form): active category chip uses its own accentColor, not habit color (#37)lifelong-habit-app20:28
  • fix(habit-form): use HABIT_CATEGORY_META with isDark-resolved accentColor for category chips (#37)lifelong-habit-app20:27
  • feat(habit-time-log): replace AddSessionSheet modal with dedicated add-session screen (#39)lifelong-habit-app14:46
  • refactor(deep-dive): inherit draft color_hex on Create button instead of static theme accent (#37)lifelong-habit-app12:59
  • refactor(color-icon-picker): use draftColor for confirm button instead of static theme accent (#37)lifelong-habit-app12:56
  • refactor(habit-form): extend color_hex inheritance to ArchetypeSelector chips and info box (#37)lifelong-habit-app12:10
  • refactor(habit-form): inherit habit color_hex across all form accent elements (#37)lifelong-habit-app08:55
Thu, Jun 11
  • refactor(AllDayIconStrip): reduce icon and container sizes so it fits 5 icons in most screenslifelong-habit-app21:02
  • refactor(AllDayIconStrip): increase icon and container sizeslifelong-habit-app20:53
  • fix(AllDayIconStrip): prevent outer ring from compressing icon size on expand (#35)lifelong-habit-app20:46
  • refactor(AllDayIconStrip): adjust margin for the strip and expanded cardlifelong-habit-app20:03
  • fix(HabitSectionList): adjust margin for BackdatingModeBanner componentlifelong-habit-app20:00
  • fix(upsertDailyLog): use maybeSingle to avoid intermittent PGRST116 on upsert (#33)lifelong-habit-app19:25
  • fix(mutations): invalidate all_habit_logs_by_date in useBackdateHabit and useUnlogHabit (#33)lifelong-habit-app19:24
Wed, Jun 10
  • refactor(progress): adjust CHART_SIZE and legend dimensionslifelong-habit-app22:20
  • refactor(progress): increase stroke width and opacity for CategoryRadarChart grid lineslifelong-habit-app21:46
  • fix(progress): recalculate CategoryRadarChart canvas size for ICON_SIZE=25lifelong-habit-app21:23
  • refactor(icons): update category iconslifelong-habit-app21:22
  • fix(progress): weekly category consistency now counts habit-day slots, not per-habit booleanslifelong-habit-app19:52
  • feat(progress): add intensity breakdown section below consistency in category rowslifelong-habit-app17:55
Sun, Jun 7
  • fix(category): correct semantically wrong icons and visually indistinct accent colors (#31)lifelong-habit-app16:49
Fri, Jun 5
  • feat(category): make accentColor theme-aware with light/dark variants (#31)lifelong-habit-app22:19
  • fix: round polygon stroke joins on CategoryRadarChart data polygons (#31)lifelong-habit-app22:05
  • fix: resolve icon component in HabitHeatmapCard header instead of rendering raw icon_key string (#31)lifelong-habit-app21:50
  • fix(intensity): remove 100% capping as snowball habit intensity_percent can be > 100%lifelong-habit-app16:26
  • fix(unlog): add logged_at to IN_PROGRESS downgrade paths in useUnlogHabit (#27)lifelong-habit-app16:09
  • feat(schema): add habit_config_history audit table (#27)lifelong-habit-app16:02
  • fix(logged_at): advance logged_at on every log mutation (#27)lifelong-habit-app15:53
  • fix(intensity): clamp intensity_percent to 100 at display layer only (#27)lifelong-habit-app15:33
  • fix(intensity): remove write-time cap from SNOWBALL intensity_percent (#27)lifelong-habit-app13:23
  • fix(sessions): delete ghost daily_log rows when all sessions are removed (#27)lifelong-habit-app09:05
Wed, Jun 3
  • chore: ignore the entire android directory for EAS build so it takes app.config.js into account and change app name for preview variant (#28)lifelong-habit-app21:23
  • revert(android): remove product flavors, restore single variant buildlifelong-habit-app21:08
  • chore(android): add product flavors for dev/preview/production with distinct package IDs and app names (#28)lifelong-habit-app20:36
  • chore(android): set app_name to "Lifelong Habit (Dev)" for local dev buildlifelong-habit-app13:54
  • fix(dependencies): update react-native-reanimated to ^4.4.0 and react-native-worklets to ^0.9.1 to solve dependency conflictslifelong-habit-app13:26
  • chore: add .easignore to reduce file size (it was > 300mb and EAS doesn't accept such big files #28)lifelong-habit-app13:26
  • fix(dashboard): replace absoluteFillObject with absoluteFill that's compatible with new deps (Expo SDK 56 #25)lifelong-habit-app10:45
  • fix(AuthBackground): replace removed absoluteFillObject with absoluteFill (RN 0.85 breaking change #25)lifelong-habit-app08:37
  • fix(android): update compileSdkVersion to 36 and ndkVersion to 27.1.12297006 (#25)lifelong-habit-app08:36
  • feat: include Android project structure and config to repo (#25)lifelong-habit-app06:50
  • chore(.gitignore): remove generated native folders from ignore list (#25)lifelong-habit-app06:49
  • fix(android): pin Gradle to 8.13, Kotlin to 2.1.20, restore missing ext SDK versions (#25)lifelong-habit-app06:47
Tue, Jun 2
  • feat: integrate Sentry for error trackinglifelong-habit-app12:16
  • fix: replace BottomTabBarButtonProps with inline prop type in HapticTablifelong-habit-app09:36
  • fix: migrate @react-navigation imports to expo-router/react-navigationlifelong-habit-app09:35
  • fix(PickerSearchBar): remove borderTopWidth since tab bar already provides the separator (#22)lifelong-habit-app07:48
  • chore: bump devDependencieslifelong-habit-app07:45
  • refactor: remove unused local database and schema fileslifelong-habit-app07:41
  • fix: replace StyleSheet.absoluteFillObject with explicit position propslifelong-habit-app07:40
  • fix(app.config.js): add @sentry/react-native plugin and format splash screen configlifelong-habit-app07:39
  • chore: bump expo dependencieslifelong-habit-app07:38
  • fix(dependencies): update expo-router to version 56.2.8lifelong-habit-app07:17
  • fix(SwatchRow): remove resolved contrast TODO — HabitColor.contrast is non-nullable (#22)lifelong-habit-app06:47
  • refactor(color-habit-picker): normalize all imports to @/ aliaslifelong-habit-app06:43
  • feat(slider-shim): restore LinearGradient track using expo-linear-gradient (#22)lifelong-habit-app06:38
  • fix(color-habit-picker): replace placeholder icons and remove dead header buttonlifelong-habit-app06:25
Mon, Jun 1
  • refactor(colorHabitPicker): move PickerSearchBar above panelWrap and below tabs (#22)lifelong-habit-app19:17
  • perf(progress): add getItemLayout to eliminate fast-scroll blank space (#20)lifelong-habit-app18:12
  • perf(progress): pass shared cardGrid to HabitHeatmapCard and tune FlatList window (#20)lifelong-habit-app17:42
  • perf(progress): fix query waterfall, O(N²) metrics loop, streak scan, and per-card buildGrid (#20)lifelong-habit-app17:29
  • fix(progress): count IN_PROGRESS toward category consistency score in daily and weekly views #19lifelong-habit-app17:13
  • fix(dashboard): remove estimatedItemSize from FlashList as it's not in installed flash-list version (#16)lifelong-habit-app16:56
  • perf(dashboard): virtualize habit list with FlashList above 15 habits, memo HabitCardRenderer with Set-aware comparator (#16)lifelong-habit-app16:56
  • chore(deps): bump postcss in the npm_and_yarn group across 1 directorylifelong-habit-app12:47
  • chore(dependencies): update expo version to ~54.0.35lifelong-habit-app12:44
  • chore: remove unused dependencies from package.json and ran npm audit fixlifelong-habit-app12:38
  • chore: add Dependabot config filelifelong-habit-app12:31
  • fix(grove): extract writeTimeElapsedOnly service, fix manual session add/delete for Grove, fix + button guard on time-log screen, add missing query invalidations (#17)lifelong-habit-app12:25
  • fix(snowball): debounce stepper flush to prevent dropped rapid taps (#15)lifelong-habit-app07:11
  • fix(grove): seed grove_config on edit, fix Tracked Time guard, remove non-functional journal shortcut. Closes #14lifelong-habit-app06:56
  • fix(habit-form): update import path for ArchetypeSelector componentlifelong-habit-app06:33
  • refactor: move onboarding components to root folderlifelong-habit-app06:32
Sun, May 31
  • fix(grove): hide Done CTA instead of showing it pale when not yet actionablelifelong-habit-app21:10
  • fix(dashboard): show Done CTA for Grove when IN_PROGRESSlifelong-habit-app21:05
  • fix(grove): delegate Done button to HabitActionButton instead of bespoke Pressablelifelong-habit-app21:05
  • refactor(grove): replace custom Done button with HabitActionButton via hideCTAlifelong-habit-app20:30
  • feat(dashboard): suppress progress bar and percent for Grove completed statelifelong-habit-app19:57
  • feat: add grove archetypelifelong-habit-app16:14
Wed, May 27
  • refactor(ui): add new icons to replace StarBullet iconslifelong-habit-app21:17
  • feat(SheetTileButton): add compact variant for inline icon+label flex-1 tileslifelong-habit-app20:04
  • refactor(ui): add new icons to replace StarBullet iconslifelong-habit-app20:03
  • fix(CategoryBreakdown, CategoryRadarChart): adjust margins and sizinglifelong-habit-app17:10
  • fix(CategoryRadarChart): reduce wrapperWidth for text positionlifelong-habit-app16:55
  • feat(progress): create habit_status_logs table and scope all queries to user_idlifelong-habit-app16:50
  • fix(progress): scope habit_status_logs queries to current userlifelong-habit-app16:21
  • feat: add configurable habit pause feature with auto-resume on expirationlifelong-habit-app15:38
  • fix(hooks): update habit queries to include legacy archived filtering and improve error handlinglifelong-habit-app15:19
  • refactor(HabitSheetActions): add archive functionality with confirmation alertlifelong-habit-app15:19
  • feat(progress): integrate inactive periods into habit trackinglifelong-habit-app15:13
  • fix(CategoryBreakdown): change pctLabel width to minWidth for better responsivenesslifelong-habit-app10:50
Tue, May 26
  • fix(CategoryRadarChart): replace VERTICAL_OVERFLOW with geometry-derived bleed constantslifelong-habit-app13:19
Mon, May 25
  • fix(CategoryRadarChart): clamp zero scores to MIN_SCORE to prevent spike polygonlifelong-habit-app15:12
  • fix(HabitSheetStats): show life area category from habitCategory, not archetype aliaslifelong-habit-app15:08
  • fix(progress): widen radar label wrappers to stop truncating "Relationships"lifelong-habit-app12:30
  • fix(progress): lower radar show threshold to >= 1 categorized categorylifelong-habit-app12:17
  • feat(progress): octagon radar chart for category consistency + intensitylifelong-habit-app11:55
  • fix(dashboard): remove deprecated notes prop and wire isLockIn to HabitDetailSheetlifelong-habit-app06:10
  • feat(progress): category % breakdown in daily and weekly views; remove dashboard filterlifelong-habit-app06:01
Sun, May 24
  • fix(journal): adjust close button style and icon sizelifelong-habit-app21:33
  • feat(journal): add selection mode with bulk copy and deletelifelong-habit-app21:23
  • chore(dependencies): add expo-clipboard packagelifelong-habit-app21:21
  • fix(journal): adjust paddingBottom for keyboard height and remove long-press hintlifelong-habit-app20:36
  • fix(journal): implement useKeyboardHeight hook for dynamic keyboard handlinglifelong-habit-app20:26
  • fix(journal): fix invisible typed text, keyboard layout, and send button positionlifelong-habit-app20:25
  • fix(journal): replace broken icon import and use TouchableOpacity with AddCircle for submit buttonlifelong-habit-app20:06
  • feat(ui): move habit journal to dedicated full-screen routelifelong-habit-app19:58
  • fix(backdate): remove 90-day window enforcement for non-Lock In modelifelong-habit-app17:44
  • fix(snowball): forward unitLogged through onLogIt prop and HabitCardRendererlifelong-habit-app17:40
  • feat(db): add GROVE archetype variantlifelong-habit-app17:33
  • feat(ui): add HabitSheetJournalThread and HabitSheetJournalInput to HabitDetailSheetlifelong-habit-app17:30
  • feat(ui): add HabitSheetJournalThread and HabitSheetJournalInput to HabitDetailSheetlifelong-habit-app17:29
  • feat(hooks): add useHabitJournalByDate, useAddJournalEntry, useDeleteJournalEntrylifelong-habit-app17:29
  • feat(types): add HabitJournalEntry interface to models.tslifelong-habit-app17:24
  • feat(db): add habit_journal table with RLS and indexeslifelong-habit-app17:24
  • chore(pullSync): remove obsolete pullSync service filelifelong-habit-app10:56
  • fix(SnowballCard): make unit label part of count tap target for inline editlifelong-habit-app09:56
Sat, May 23
  • refactor(progress): include year in date labels for daily and weekly viewslifelong-habit-app19:55
  • perf(dashboard): eliminate per-card Supabase queries on mountlifelong-habit-app19:44
  • fix(progress): guard weekly cells against pre-creation dates and fix summary denominator to elapsed actionable days onlylifelong-habit-app19:39
  • fix(habit-time-log): forward startTime from AddSessionSheet to addManualSession mutationlifelong-habit-app15:27
  • perf(dashboard): defer category filter list restoration via useTransitionlifelong-habit-app13:54
  • fix(seed-db): remove unused icon_name field from template processinglifelong-habit-app12:22
  • refactor(duplicate-habit): seed habit_category from source habit for new duplicateslifelong-habit-app12:22
  • feat(habits): add user-configurable habit_category fieldlifelong-habit-app12:16
  • chore(habits): change migration file namelifelong-habit-app11:55
Fri, May 22
  • feat(progress): add OverviewSummaryBar with completed/in-progress/not-completed counts to daily and weekly overview sectionslifelong-habit-app22:22
  • fix(progress): add missed to DailyHabitStatus and handle in DailyHabitRowlifelong-habit-app21:24
  • feat(progress): add day navigation to DailyOverviewSectionlifelong-habit-app21:24
  • refactor(habit-form): update placeholder text for description inputlifelong-habit-app21:04
  • fix(duplicate-habit): seed stopwatch_enabled from source habitlifelong-habit-app17:55
  • fix(habit-form): reduce bottom padding in ScrollView contentlifelong-habit-app17:40
  • refactor(habit-form): move description field before preferred time pickerlifelong-habit-app17:36
  • Revert "fix(keyboard): add KeyboardAvoidingView to deep-dive and edit-habit screens"lifelong-habit-app17:35
  • Revert "fix(form): increase scroll bottom padding and reduce description minHeight for tall keyboards"lifelong-habit-app17:35
  • Revert "fix(keyboard): revert static padding hack, use automaticallyAdjustKeyboardInsets on ScrollView"lifelong-habit-app17:35
  • fix(keyboard): revert static padding hack, use automaticallyAdjustKeyboardInsets on ScrollViewlifelong-habit-app17:25
  • fix(form): increase scroll bottom padding and reduce description minHeight for tall keyboardslifelong-habit-app17:06
  • fix(android): add softwareKeyboardLayoutMode resize to app.config.jslifelong-habit-app17:05
  • fix(keyboard): add KeyboardAvoidingView to deep-dive and edit-habit screenslifelong-habit-app17:05
  • fix(deep-dive): correct HabitFormCtaButton prop name accentColor → habitColorlifelong-habit-app15:59
  • feat(habit): add user-authored description fieldlifelong-habit-app15:55
Thu, May 21
  • refactor(iconRegistry): add new Washing Machine and Microphone icons to inventorylifelong-habit-app22:47
  • refactor(iconRegistry): add new health and social icons to icon inventorylifelong-habit-app20:19
  • chore(HabitCardGallery): adjust comment formatting for claritylifelong-habit-app20:18
  • fix(BentoForm): emit correct post-move config in handleMovelifelong-habit-app16:16
  • refactor(iconRegistry): update MoonStars icon entry and reorder nature-star entrylifelong-habit-app16:16
Wed, May 20
  • fix(progress): wire DailyOverviewSection into progress screenlifelong-habit-app20:13
  • feat(progress): add daily view with per-habit status and intensity barlifelong-habit-app19:40
  • refactor(progress): use fluid flex layout for weekly grid columnslifelong-habit-app19:03
  • feat(HabitTimePicker): switch minute steps to 5-min intervals with snap-to-nearest indexlifelong-habit-app17:56
Tue, May 19
  • fix(AddSessionSheet): adjust TimeInput layout for better responsiveness on small screenslifelong-habit-app20:39
  • fix(time-log): use typed start time for manual sessions, fix keyboard layoutlifelong-habit-app17:53
  • fix(dashboard): bleed AllDayIconStrip scroll past parent paddinglifelong-habit-app17:31
  • feat(tabs): hoist RunningStopwatchBar to tab layout for global visibilitylifelong-habit-app17:13
  • fix(HabitCardGallery): remove orphaned gallery banner block causing double bannerlifelong-habit-app16:45
  • refactor: update terminology from 'anytime' to 'allDay'lifelong-habit-app16:26
Fri, May 15
  • refactor(icons): streamline icon_key handling on dashboard and weekly overviewlifelong-habit-app15:26
  • refactor(TimeOfDayScreen): update description for custom schedule templatelifelong-habit-app15:22
  • fix(config): add specified runtimeVersionlifelong-habit-app08:10
  • chore: remove android directory from gitlifelong-habit-app08:10
  • chore: update .gitignorelifelong-habit-app08:06
  • chore(gitignore): update .gitignore to include ios and android directorieslifelong-habit-app07:58
  • fix(icon): solve icon loading error and add a backup icon in HabitSheetHeaderlifelong-habit-app07:54
  • refactor(icons): update icon inventory and categories for house and naturelifelong-habit-app07:44
  • refactor(config): remove navigation config from app config to solve eas build errorlifelong-habit-app07:31
  • chore(package): change script name to fix dependency conflictlifelong-habit-app07:27
  • chore(build): fix AndroidManifest gradle flaglifelong-habit-app07:26
  • chore: remove generated native folders (ios and android) from .gitignorelifelong-habit-app07:10
Thu, May 14
  • chore: remove outdated commentslifelong-habit-app23:58
  • refactor(habit): replace icon_name with icon_key and remove coverImageUri fieldlifelong-habit-app23:39
  • refactor(habit): replace icon_name with icon_key, add color_id, and remove unused cover_image_uri fieldlifelong-habit-app23:16
  • fix(stopwatch): update habitIconKey to use icon_key (icon_name is a stale field)lifelong-habit-app22:40
  • refactor(icons): reorganize icon imports for optimal treeshakinglifelong-habit-app22:18
  • refactor(icons): replace direct icon imports with UI_ICONSlifelong-habit-app21:42
  • fix(usePullSync): update useAuth import pathlifelong-habit-app21:18
  • feat(sync): implement pull sync functionality to transfer data from Supabase to local SQLitelifelong-habit-app19:57
  • chore: update dependencies in package.jsonlifelong-habit-app19:51
  • refactor(icons): integrate PlanetBold icon into UI_ICONS and remove direct PlanetBold icon imports for optimal treeshakinglifelong-habit-app19:11
  • refactor(progress): add PROGRESS_LOGS_QUERY_KEY for consistent cache invalidation across habit mutationslifelong-habit-app16:46
  • feat(dashboard): add isInProgress prop to habit card components and useSelectedDateLoglifelong-habit-app16:09
  • fix(useDashboard): update completion_status logiclifelong-habit-app15:36
  • chore(dashboard): remove unused component (already replaced with AllDayIconStrip)lifelong-habit-app08:15
  • fix(dashboard): remount AllDay expanded card on habit switch and remove paddingToplifelong-habit-app08:13
Wed, May 13
  • fix(useWeeklyOverview): update icon resolution to use icon_key with fallback to Planetlifelong-habit-app23:14
  • refactor(useProgressMetrics): sort habits based on preferred_time on progress tablifelong-habit-app23:13
  • refactor(HabitCardGallery): improve banner text color handling (it returned false) and clean up dead codelifelong-habit-app22:39
  • refactor(AllDayIconStrip): adjust padding, icon dimensions and colorlifelong-habit-app22:35
  • refactor(habitCardBanner): update banner text color contrast from white to light beigelifelong-habit-app22:34
  • feat(dashboard): add All-DayIconStrip component, remove InProgress section, and update useDashboard hooklifelong-habit-app21:24
  • refactor(dashboard): update buildSectionOrder to prioritize rendering 'anytime' (which will be all-day) habitslifelong-habit-app21:17
  • refactor(progress): update weekly overview styling, each habit has its own cardlifelong-habit-app12:33
  • refactor(progress): implement weekly overview with view mode switcher and default habit color fallbacklifelong-habit-app10:52
  • feat(progress): weekly overview with view switcherlifelong-habit-app10:52
  • feat(dashboard): extract HabitSectionList into HabitSectionStates, InProgressIconStrip, and TimeSectionHeader componentslifelong-habit-app09:51
  • refactor(icons): update icon references in PickerSearchBar, StartOfWeekScreen, and TimeOfDayScreenlifelong-habit-app08:39
Tue, May 12
  • feat(dashboard): replace In Progress section with icon striplifelong-habit-app22:39
  • refactor(icons): update icon references and stylinglifelong-habit-app22:26
  • refactor(icons): update icon references and stylinglifelong-habit-app22:17
  • fix(services): add missing completionStatus to recomputeSessionLoglifelong-habit-app19:34
  • fix(mutations): add missing completionStatus to useBackdateHabitlifelong-habit-app17:10
  • fix(bento): component deletion not saved, new components appearing on past-date cardslifelong-habit-app12:15
  • fix(HabitDetailSheet): anchor sheet with position absolute to remove slide gaplifelong-habit-app08:29
  • fix(color-icon-picker): anchor sheet with position absolute to remove slide gaplifelong-habit-app07:54
Mon, May 11
  • refactor(ui): update IconPanel styles to use flexbox for responsive layoutlifelong-habit-app23:26
  • feat(icon-panel): derive column count automatically from screen widthlifelong-habit-app23:21
  • chore(ui): change icon typolifelong-habit-app23:21
  • refactor(ui): replace Planet3 icon with Planet in HabitCardGallery, RunningStopwatchBar, and HabitIconPreview componentslifelong-habit-app23:02
  • refactor(ui): remove duotone option from iconRegistrylifelong-habit-app23:01
  • fix(android): clear gesture nav bar inset on bottom UI elementslifelong-habit-app22:47
  • refactor(HabitSheetStats): conditionally fetch sessions and display tracked time based on stopwatch_enabledlifelong-habit-app22:28
  • chore(useCurrentUser): add comment to clarify that this isn't a copy of useUser filelifelong-habit-app20:29
  • refactor: update import paths, export paths, and file nameslifelong-habit-app20:16
  • refactor: rename useArchivedHabits to useInactiveHabitslifelong-habit-app20:07
  • fix: update habit color changes instantly on the dashboardlifelong-habit-app18:05
  • refactor(TimeOfDayScreen): add template picker modal for time-of-day schedule selectionlifelong-habit-app17:51
  • refactor(SnowballCard): remove not completed message as HabitCardGallery already has it as defaultlifelong-habit-app17:46
  • refactor(settings): add warning for duplicate time slot labelslifelong-habit-app17:22
  • fix(settings): use counter instead of Date.now() to create custom slot IDslifelong-habit-app17:11
  • fix(settings): fix schedule cache invalidation and reassignment sheetlifelong-habit-app17:00
  • feat(settings): add dynamic time-of-day schedule systemlifelong-habit-app16:08
  • fix(mutations): correct completionStatus in log and unlog habit pathslifelong-habit-app14:02
  • feat(hooks): add IN_PROGRESS completion status for stopwatch sessionslifelong-habit-app13:36
  • chore(migrations): change migration file nameslifelong-habit-app13:26
  • fix(hooks): ensure fresh log data is fetched and used for time elapsed updateslifelong-habit-app13:20
  • fix(dashboard): bucket any habit with time_elapsed_seconds > 1 as In Progresslifelong-habit-app08:29
Sun, May 10
  • fix(header): move search toggle button to the leftmostlifelong-habit-app15:59
  • fix(dashboard): include paused stopwatch sessions in In Progress bucketlifelong-habit-app15:52
  • feat(time-of-day): add 'night' bucket and adjust related logiclifelong-habit-app14:38
  • feat(dashboard): add In Progress section; bucket by intensity_percentlifelong-habit-app08:47
Sat, May 9
  • feat(dashboard): add toggleable habit search with local filteringlifelong-habit-app23:16
  • perf(icon-picker): lazy-load icons, FlashList virtualization, O(1) lookuplifelong-habit-app23:11
  • chore(HabitCardGallery): remove unused componentslifelong-habit-app19:56
  • refactor(RunningStopwatchBar): add habit icon component and adjust layout propertieslifelong-habit-app19:29
  • refactor(RunningStopwatchBar): add pause functionality in stopwatch chiplifelong-habit-app17:06
  • refactor(RunningStopwatchBar): update chip background from solid color to gradient and adjust text color logiclifelong-habit-app12:30
  • refactor(RunningStopwatchBar): change stopwatch chip color from white to colorHabit and adjust text stylinglifelong-habit-app12:09
  • refactor: rename habitCustomColor to habitColor across componentslifelong-habit-app11:51
  • refacator(RunningStopwatchBar): simplify stopwatch chip rendering by removing animation and exit logiclifelong-habit-app07:40
  • refactor(RunningStopwatchBar): remove bottomOffset prop so the first stopwatch chip doesn't slide uplifelong-habit-app07:21
Fri, May 8
  • refactor(RunningStopwatchBar): optimize Pressable layout so the habit name and stopwatch inside the chip doesn't stack verticallylifelong-habit-app12:32
  • refactor(index): restructure dashboard layout for RunningStopwatchBarlifelong-habit-app12:31
  • refactor(RunningStopwatchBar): remove pulse dot in chip layoutlifelong-habit-app11:20
  • refactor(RunningStopwatchBar): change bar UI to use chips instead of one big modal to display running sessionslifelong-habit-app10:37
  • fix(stopwatch): prevent flicker and stopwatch bar being disappeared during background refetchlifelong-habit-app08:47
  • feat(stopwatch): implement running stopwatch bar and overflow modal functionalitylifelong-habit-app07:21
Thu, May 7
  • fix(layout): adjust bottom padding when the navigation buttons are activelifelong-habit-app21:56
  • refactor(layout): add safe area insets for tab bar padding when the button mode is used as navigation on Androidlifelong-habit-app21:55
  • refactor(HabitSheetHeader): remove unused RepeatIcon componentlifelong-habit-app21:36
  • refactor: replace accent color with habitCustomColor in BentoCard and LadderCard componentslifelong-habit-app20:31
  • refactor: rename accentColor to habitCustomColor across componentslifelong-habit-app20:17
  • chore(habit-time-log): remove dead bedTime variablelifelong-habit-app20:17
  • refactor(settings): simplify completedSectionValue function by removing sort parameterlifelong-habit-app19:58
  • fix(dashboard): guard undefined preferred_time and null logged_at in sort comparatorslifelong-habit-app19:43
  • fix(stopwatch): return the elapsed seconds so the timer doesn't reset to 0 every time user opens the applifelong-habit-app19:39
  • refactor(hooks): add missing timeElapsedSeconds field to useBackdateHabit and useLogHabit payloadslifelong-habit-app14:04
  • refactor(database): remove wake_time, bed_time, and use_relative_time columns from users tablelifelong-habit-app14:03
  • refactor(day-boundary): remove bedTime dependency across componentslifelong-habit-app13:42
  • refactor(day-boundary): remove DayBoundaryScreen and related hooks from onboarding and settingslifelong-habit-app13:40
  • refactor(day-boundary): remove bedTime prop from various components and use useUser to fetch user datalifelong-habit-app13:29
  • refactor(ui): add closeCircle icon to ColorIconPickerSheet and remove starBullets iconlifelong-habit-app13:15
Wed, May 6
  • refactor(ui): remove colors prop from GroupedCard componentslifelong-habit-app22:08
  • refactor(ui): remove colors prop from GroupedCard and GroupedRow components, use useTheme insteadlifelong-habit-app22:08
  • feat(ui): add semi-bold subheading style to textStyleslifelong-habit-app22:07
  • perfdeps): add @shopify/flash-list package and change metro config to improve icon loading performancelifelong-habit-app21:12
  • refactor(ui): switch stopwatch icon type from outline to boldlifelong-habit-app20:20
Tue, May 5
  • refactor(ui): center align time input fields and simplify button styles in AddSessionSheetlifelong-habit-app23:45
  • refactor(ui): update header and description for manual time loglifelong-habit-app23:28
  • feat(ui): add new icons for sleep-related featureslifelong-habit-app23:12
  • chore(InitialLayout): remove debug console log for cleaner outputlifelong-habit-app23:10
  • refactor(AddSessionSheet): pre-fill start and end time fields based on last closed sessionlifelong-habit-app23:09
  • feat(AddSessionSheet): implement start and end time inputs with duration calculationlifelong-habit-app23:08
  • style(SessionRow): update delete hint to clarify long press action for hidinglifelong-habit-app22:18
  • feat(habitTimeLog): add live elapsed time tracking and session range display (started at X until Y)lifelong-habit-app22:17
  • chore(habitForm): update import path for ColorIconPickerSheet componentlifelong-habit-app18:16
  • feat(habitTimeLog): implement AddSessionSheet and SessionRow components with live elapsed time trackinglifelong-habit-app18:16
  • refactor(confirmSheet): swap confirm and cancel button actions and center title textlifelong-habit-app18:15
  • refactor(colorPicker): change directory name from color-habit-picker to colorHabitPickerlifelong-habit-app17:50
  • refactor(habitTimePicker): remove accentColor prop and use colors.accent insteadlifelong-habit-app17:34
  • fix(habitForm): disable stopwatch by default in habit draftlifelong-habit-app17:33
  • style(habitTimeLog): update no session recorded messagelifelong-habit-app17:33
  • fix(habitCardGallery): display stopwatch content only for today's habitslifelong-habit-app17:16
  • feat(habitTimeLog): implement manual session addition and deletion functionalitylifelong-habit-app17:16
  • refactor(stopwatch): add invisible placeholder during initialization to prevent layout shiftslifelong-habit-app17:04
  • fix(stopwatch): integrate seek offset functionality into session mutations so the stopwatch doesn't snap back when the backward or forward button is pressedlifelong-habit-app15:00
  • feat(stopwatch): implement seek offset functionality for 15-second backward and forward functionslifelong-habit-app14:39
  • feat(iconRegistry): add new food and medicine icons to the icon inventorylifelong-habit-app14:23
  • feat(dashboard): synchronize personal day handling across session logging and querieslifelong-habit-app10:02
  • feat(dashboard): enhance habit tracking with personal day handling and stopwatch improvementslifelong-habit-app08:43
Mon, May 4
  • feat(completed-habits): add CompletedHabitsScreen and update settings for completed habits sectionlifelong-habit-app17:06
  • refactor(icons): update AccountInfoScreen to use UI_ICONS for edit and reset actionslifelong-habit-app16:21
  • refactor(settings): update route entry points to delegate to feature componentslifelong-habit-app16:20
  • chore(dependencies): remove @expo/vector-icons from package.json and package-lock.jsonlifelong-habit-app15:38
  • refactor(icons): replace Feather icons with UI_ICONS in various componentslifelong-habit-app15:34
  • refactor(icons): replace Ionicons with UI_ICONS in HabitValidationModal componentlifelong-habit-app15:24
  • refactor(icons): replace Ionicons with UI_ICONS in HabitStatusBadge, AuthWallModal, and HabitTimePicker componentslifelong-habit-app15:21
  • fix(settings): capitalize icon prop before JSX usage in GroupedRow and SegmentedRow (JSX requires component names to start with a capital letter)lifelong-habit-app15:02
  • feat(DashboardScreen): add selectedDateLogsById to track daily logs for todaylifelong-habit-app14:44
  • refactor(icons): replace Ionicons with UI_ICONS across multiple componentslifelong-habit-app14:43
  • refactor(icons): replace Ionicons with UI_ICONS in HabitActionButton, HabitStatusBadge, BentoForm, and LadderForm componentslifelong-habit-app14:16
  • feat(completedHabitsSort): implement user preference for sorting completed habits in the Done sectionlifelong-habit-app14:16
Sun, May 3
  • chore(useStopwatch): remove console loglifelong-habit-app22:15
  • fix(HabitCardRenderer): replace dynamic require() with static import for useDateLoglifelong-habit-app22:14
  • fix(stopwatch): replace dynamic require() with static import in HabitCardRenderer and fetch live daily_log value before accumulating in closeSession to prevent stale cache baselinelifelong-habit-app22:14
  • refactor(icons): replace Ionicons with UI_ICONS in HabitCardGallery, RollingCalendarStrip, SnowballCard, and TimeSetupBanner componentslifelong-habit-app21:46
  • refactor(icons): replace Ionicons with UI_ICONS in ForgotPasswordScreen, LoginScreen, ResetPasswordScreen, and SignupScreenlifelong-habit-app15:02
  • refactor(icons): replace Ionicons with UI_ICONS in ChallengeDetailsScreen, DayBoundaryScreen, LibraryScreen, StartOfWeekScreen, and update icons in categoryRegistrylifelong-habit-app14:59
  • refactor(icons): replace Ionicons with UI_ICONS in ChallengeDetailsScreen and TemplateCard componentslifelong-habit-app07:11
  • refactor(icons): replace Ionicons with UI_ICONS across multiple componentslifelong-habit-app05:49
Sat, May 2
  • style(icons): add new Pen, Clock, and Weather icons to icon registrylifelong-habit-app22:30
  • fix(icons): update HabitSectionList to use UI_ICONS and fix import errorslifelong-habit-app21:46
  • refactor: replace Ionicons with UI_ICONS in HabitSectionList and AuthBanner componentslifelong-habit-app20:54
  • feat: add new weather and time icons to UI_ICONSlifelong-habit-app20:53
  • chore: remove html email templates from codebaselifelong-habit-app20:52
  • chore: remove comment using Ioniconslifelong-habit-app20:40
  • chore: remove lucide-react-native dependencylifelong-habit-app20:39
  • fix(IconPanel): use resolved weight for icon rendering instead of defaulting to 'regular'lifelong-habit-app20:39
  • refactor(HabitSheetHeader): remove unused BookmarkSimpleIcon import and make Planet icon as defaultlifelong-habit-app19:40
  • fix(IconPanel): resolve icons through registry instead of reading entry.component directlylifelong-habit-app19:30
  • refactor(icons): migrate iconRegistry to multi-style Solar/Phosphor architecturelifelong-habit-app19:29
  • chore: remove unused components and hooks from the projectlifelong-habit-app15:50
  • chore: remove unused dependencieslifelong-habit-app15:48
  • chore: remove unused email templates and scriptslifelong-habit-app15:05
  • chore: add knip and @types/node dependencieslifelong-habit-app15:05
  • chore: remove unused dependencies from package.jsonlifelong-habit-app14:57
  • chore: add @sentry/react-native dependency to package.jsonlifelong-habit-app14:54
  • chore(eas.json): add channel field to preview configurationlifelong-habit-app14:41
  • debug(useStopwatch): add console.loglifelong-habit-app14:39
  • chore(app config): add updates URL and runtime version policy to push update on the app without rebuildinglifelong-habit-app14:18
  • chore(dependencies): add expo-updates packagelifelong-habit-app14:15
  • perf(RootLayout): integrate AppState with TanStack Query's focus manager for consistent query handling (even if the app is closed)lifelong-habit-app14:08
  • fix(useStopwatch): resolve elapsed time desynchronization on app resume and refetchlifelong-habit-app13:57
Fri, May 1
  • feat(HabitDetailSheet): scope HabitTimeLog to selected date add and improve HabitTimeLog screen layoutlifelong-habit-app21:43
  • style(HabitSheetHeader): increase icon size and container dimensionslifelong-habit-app19:53
  • fix(iconRegistry): make resolveIcon case-insensitivelifelong-habit-app19:50
  • style(SnowballCard): update icon components and add marginTop for progress barlifelong-habit-app16:17
  • style(LadderCard): remove top margin from vertical ladder UI containerlifelong-habit-app15:41
  • style(HabitCardGallery): adjust top padding for habit card bodylifelong-habit-app15:40
  • style(HabitStopwatchCompact): reorganize stopwatch controlslifelong-habit-app15:40
  • style(HabitStopwatchCompact): increase icon sizes and update text color for better visibilitylifelong-habit-app15:33
  • style(HabitCardGallery): add bodyMdBold text style and update HabitCardGallery to use itlifelong-habit-app15:31
  • fix(HabitCardGallery): display stopwatch content only if it's todaylifelong-habit-app15:16
  • style(HabitCard): add bodySmBold style and apply it to habit cardlifelong-habit-app14:57
  • style(habit-stopwatch): update muted accent color opacity to 65%lifelong-habit-app14:52
  • fix(cards): separate stopwatch into dedicated layout slotlifelong-habit-app14:08
  • style(habit-time-log): update empty state message from 'No session yet' to 'Not recorded yet'lifelong-habit-app13:05
  • fix(stopwatch): route bento/pillar auto-log through upsertDailyLog to preserve is_strict_mode_enabled and all existing log fieldslifelong-habit-app12:55
  • style(habit-stopwatch): update icon colors to use muted accent when disabled or not runninglifelong-habit-app12:53
  • style(habit-stopwatch): add colorHex prop to customize icon colors based on habit colorlifelong-habit-app12:37
  • style(habit-icon-preview): update default display name to 'Morning Run' and change text style to heading3lifelong-habit-app12:37
  • style(stopwatch): change rewind and restart icons for HabitStopwatchCompactlifelong-habit-app12:16
  • refactor(deep-dive): initialize draft with DEFAULT_HABIT_DRAFT, remove unused makeBlankDraft, and make preferred_time 8AM and stopwatch_enabled true by defaultlifelong-habit-app11:51
  • fix(habit-form): update stopwatch disabled messagelifelong-habit-app10:31
Thu, Apr 30
  • feat(stopwatch): add stopwatch_enabled toggle to habit form and wire time_elapsed_seconds through upsertlifelong-habit-app22:17
  • feat: implement phase 3 stopwatch functionalitylifelong-habit-app18:53
  • feat: add compact stopwatch functionality to habit cardslifelong-habit-app15:04
Wed, Apr 29
  • feat(profile): add username and profile visibility fields to User and Habit interfaceslifelong-habit-app21:20
  • style(settings): change Habit Schedule to Schedulelifelong-habit-app16:26
  • refactor(progress): adjust ItemSeparator height and contentContainerStyle gaplifelong-habit-app16:25
  • perf(progress): fix VirtualizedList slow update warninglifelong-habit-app15:35
  • refactor(heatmap): render the grid reversed and use contentOffset to set the initial position declaratively, so the ScrollView starts at the rightmost position without any imperative scroll calllifelong-habit-app15:29
  • fix(progress): correct color_hex field naming and heatmap color inheritancelifelong-habit-app14:50
  • refactor(year_selector): update text styles and spacing for readabilitylifelong-habit-app14:08
  • feat(progress): replace YearSelector arrows with modal sheet pickerlifelong-habit-app13:45
Tue, Apr 28
  • feat(year_selector): implement modal year picker to improve performancelifelong-habit-app22:22
  • fix(heatmap): drop overlapping month labels in buildGridlifelong-habit-app21:56
  • perf(progress): memo-wrap heatmap cards and stabilise FlatList propslifelong-habit-app21:53
  • refactor(progress): enhance HabitHeatmap with horizontal scrolling and auto-scroll to latest datalifelong-habit-app21:28
  • perf(progress): virtualise heatmap list and centralise computationlifelong-habit-app17:14
Mon, Apr 27
  • feat(habit_sessions): add habit_sessions table migration and HabitSession interface for stopwatch trackinglifelong-habit-app21:15
  • chore(useLogHabit): fix misleading console.log labellifelong-habit-app18:14
  • fix(useUnlogHabit): remove unnecessary .select().single() on deletelifelong-habit-app18:13
  • perf(queries): add 90-day floor to useLastLoggedValueslifelong-habit-app18:13
  • refactor(queries): stabilise useConsistency query keylifelong-habit-app18:11
  • fix(bento): resolve checkbox oscillation on rapid tapslifelong-habit-app15:55
Sun, Apr 26
  • fix: restore habit reflects immediately without reloadlifelong-habit-app15:32
  • fix(useBackdateHabit): use optimistic updates and cache invalidation for backdated logslifelong-habit-app14:38
  • fix(SnowballCard): hide progress bar when past-date count is decremented to zerolifelong-habit-app11:44
  • fix(SnowballCard): eliminate stepper lag and restore "Not completed" on decrement to zerolifelong-habit-app11:42
  • fix(SnowballCard): show "Not completed" on past dates with no loglifelong-habit-app11:35
  • feat(dashboard): require confirmation before editing past-date logs on Bento, Ladder, and Snowball cardslifelong-habit-app11:31
  • fix(HabitCardGallery): hide Done button on past dates, show only missed state (Not Completed)lifelong-habit-app11:16
Sat, Apr 25
  • style(HabitActionButton): update text from "Done?" to "Done"lifelong-habit-app21:46
  • style(HabitCardGallery): shorten progress display textlifelong-habit-app21:44
  • style(HabitActionButton): change button background color to be filled with habit colorlifelong-habit-app21:43
  • refactor(HabitCardGallery): remove long press action handling for habit managementlifelong-habit-app21:32
  • style(HabitActionButton): fill card width responsively in gallery modelifelong-habit-app21:32
  • style(SnowballCard): adjust stepper icon size and spacinglifelong-habit-app21:05
  • style(HabitCardGallery): move progress display text after the checkmark iconlifelong-habit-app21:05
  • fix(HabitCardGallery): cap displayed progress to 999%+ to prevent layout breakinglifelong-habit-app20:59
  • fix(SnowballCard): adjust unit label text sizelifelong-habit-app20:25
  • feat(HabitCard): thread isToday to all archetypes for missed state + % in completed rowlifelong-habit-app20:18
  • fix(snowball): stepper always visible on today, hidden on past dateslifelong-habit-app19:57
Fri, Apr 24
  • refactor(progress): optimize habit ID handling in useProgressMetrics and useProgressLogs to improve caching and performancelifelong-habit-app23:08
  • refactor(snowball): remove complete button and automatically log progress based on stepper valuelifelong-habit-app23:07
  • refactor(SnowballCard): change stepper buttons with icons and improve stylinglifelong-habit-app22:30
  • refactor(LadderCard): simplify rung selection logic, now logging only takes rung selection and complete button is removedlifelong-habit-app20:56
  • refactor(progress): streamline data fetching by consolidating habit and log queries into useProgressMetricslifelong-habit-app19:15
  • feat(progress): implement GitHub-style heatmap for habit tracking and replace time range selector with year selectorlifelong-habit-app18:43
  • style(habitFormStyles): remove top margin from habit form cardlifelong-habit-app17:20
  • style(SnowballForm): update layout and labels for input fieldslifelong-habit-app17:19
  • style(ArchetypeSelector): update info text for archetypes and adjust icon colorlifelong-habit-app16:37
  • style(habitFormStyles): adjust margins for card and draft card headerlifelong-habit-app15:47
  • refactor(habit): remove unused strict mode featurelifelong-habit-app15:47
  • style(ArchetypeSelector): update info icon and text layoutlifelong-habit-app15:46
  • refactor(habit): simplify create habit screen for one habit onlylifelong-habit-app15:40
  • style(BentoRow): adjust input width and spacer at min component countlifelong-habit-app14:21
  • refactor(BentoRow): conditionally render reorder buttons and adjust weight input layoutlifelong-habit-app14:16
  • refactor(archetypeSelector): update descriptions for habit archetypeslifelong-habit-app14:03
  • style(habitFormStyles): reduce card margins and paddinglifelong-habit-app13:55
  • refactor(habit): extract HabitForm component and update DeepDiveScreenlifelong-habit-app13:00
Thu, Apr 23
  • refactor(iconRegistry): add medicine icons and update categorielifelong-habit-app23:13
  • fix(streak): use local date and don't break streak if today is unloggedlifelong-habit-app20:47
  • chore(stats-grid): remove unused filelifelong-habit-app20:45
  • fix(habit-stats): improve streak value formatting (1 day instead of 1 days)lifelong-habit-app20:45
  • chore(overview-cards): remove redundant comments for claritylifelong-habit-app20:44
  • feat(habit): create HabitIconPreview and HabitFormSectionLabel components for consistent UI in habit formslifelong-habit-app20:15
Tue, Apr 21
  • feat(iconRegistry): expand icon inventory with new health-related icons and update category labelslifelong-habit-app23:12
  • fix(icon-panel): adjust cell dimensions for iconlifelong-habit-app23:11
  • style(confirm-sheet): update unsaved changes message and adjust vertical marginlifelong-habit-app19:34
  • refactor(quicknote): add discard confirmation for unsaved changes in QuickNoteSheetlifelong-habit-app19:20
  • feat(habit): add duplicate habit screen with post-create sheet auto-openlifelong-habit-app18:29
  • refactor(habit): extract DeleteHabitSheet, replace 4x hardcoded trash Alertlifelong-habit-app18:14
  • fix(bento): prevent checkbox flash on rapid tapslifelong-habit-app15:51
  • style(modals): update confirmation text to use curly quotes for consistencylifelong-habit-app15:36
  • refactor(settings): replace Alert.alert sign-out with ConfirmSheetlifelong-habit-app15:35
  • style(auth): update email placeholder to 'awesomeotter@gmail.com' in ForgotPassword, Login, and Signup screenslifelong-habit-app15:00
  • fix(LoginScreen): update text color for 'Forgot password?' link to improve visibilitylifelong-habit-app07:57
  • refactor(auth): migrate reset-password to shared auth components and layout hooklifelong-habit-app07:56
  • fix(auth): replace SafeAreaView with View in auth layout to fix edge croppinglifelong-habit-app07:56
Mon, Apr 20
  • chore: replace straight apostrophes with curly apostropheslifelong-habit-app23:22
  • refactor(ForgotPasswordScreen): integrate AuthBackground and AuthBanner components for enhanced UI and messaginglifelong-habit-app23:21
  • refactor(SignupScreen): integrate AuthBanner and AuthDivider components for improved error and success messaginglifelong-habit-app23:20
  • refactor(LoginScreen): use AuthBackground, AuthBanner, and GuestButton componentslifelong-habit-app23:20
  • style(GoogleOAuthButton): update text color to accent to match guest color button textlifelong-habit-app23:19
  • style(useAuthLayout): reduce heading margin bottom values for tablet and mobile layoutslifelong-habit-app23:19
  • feat(AuthBanner, AuthDivider): extract AuthBanner and AuthDivider components from auth screenlifelong-habit-app23:18
  • style(GoogleOAuthButton): add muted background color for improved visibilitylifelong-habit-app23:05
  • refactor(SignupScreen): replace hardcoded guest button with GuestButton componentlifelong-habit-app23:04
  • refactor(GuestButton): extract guest sign-in button with loading state and dynamic styleslifelong-habit-app23:04
  • feat(AuthBackground): enhance cloud and star rendering with dynamic scaling and improved layoutlifelong-habit-app23:01
  • style(useAuthLayout): adjust heading margin for improved layout consistencylifelong-habit-app20:21
  • style(SignupScreen): update heading text for better user engagementlifelong-habit-app20:21
  • feat(SignupScreen): integrate useAuthLayout for responsive design and improved layout consistencylifelong-habit-app19:54
  • refactor(auth): make authentication screens to use theme-aware components and improve UI consistencylifelong-habit-app18:45
Sun, Apr 19
  • fix(LadderForm): simplify tooltip text for base inputlifelong-habit-app23:16
  • feat(LadderForm): add tooltip for peak input sectionlifelong-habit-app23:12
  • feat(LadderForm): add tooltip for base input and improve layout for better usabilitylifelong-habit-app23:07
  • chore(package): add react-native-popover-view dependency to enhance UI componentslifelong-habit-app22:57
  • fix(ArchetypeSelector): set activeOpacity to 1 for TouchableOpacity to prevent color washout on presslifelong-habit-app22:22
  • fix(HabitTimePicker): add activeOpacity to TouchableOpacity so the color doesn't get washed out once clickedlifelong-habit-app22:17
  • refactor(bento): adjust padding and text styles for improved layout and readabilitylifelong-habit-app22:17
  • refactor(edit-habit): remove border and reduce padding to make the form more readablelifelong-habit-app21:55
  • fix(dashboard): make quick note sheet height fixed to 80% of screen heightlifelong-habit-app21:41
  • feat(dashboard): make quick note auto-saved so content persists after closinglifelong-habit-app21:24
  • fix(bento): replace ReorderableList with up/down arrow reorderinglifelong-habit-app19:45
  • chore(config): add newArchEnabled in app configlifelong-habit-app19:09
  • chore(package): remove react-native-draggable-flatlist into reordable-listlifelong-habit-app19:09
  • fix(layout): add GestureHandlerRootView to root layout for drag-and-drop supportlifelong-habit-app03:50
  • fix(BentoForm): exclude drag from useCallback deps array so it doesn't cause ReferrenceError before any drag interactionlifelong-habit-app03:46
  • feat(BentoForm): add drag and drop feature for Bento componentslifelong-habit-app03:43
  • fix(deep-dive): remove undefined callback in handleTimeChange and pass preferred_time to buildHabitPayloadlifelong-habit-app03:41
  • chore(package): add react native draggable flatlist dependencylifelong-habit-app03:39
Sat, Apr 18
  • style(dashboard): increase component font size in bento card, increase glassmorphic icon pill in habit card and increase icon size inside itlifelong-habit-app20:23
  • refactor(iconRegistry): add more iconslifelong-habit-app20:21
Wed, Apr 15
  • refactor(HabitCardGallery): change glassmorphic icon pill to circle, change icon color, remove unused codelifelong-habit-app23:02
  • refactor(icon): change default_icon_key from bookmark to planet iconlifelong-habit-app23:01
  • refactor(validateHabit): add config requirement exception for pillar archetype (it's just yes/no habit, config isn't needed)lifelong-habit-app21:55
  • refactor(dashboard): move add new habit icon to headerlifelong-habit-app21:54
  • feat(progress): add summary across habits in progress tab (still has bugs)lifelong-habit-app18:18
  • feat: add analytics util to turn daily_logs table into metricslifelong-habit-app18:18
  • docs: add refactor guide after adding habit config snapshotlifelong-habit-app18:16
  • refactor(HabitDetailSheet): change icons inside action buttons and font sizelifelong-habit-app18:02
  • refactor(HabitDetailSheet): change icons and combine category + archetypelifelong-habit-app16:26
  • feat(stats): freeze habit config at log time to protect historical datalifelong-habit-app16:24
  • fix(habit): add streak computation per habitlifelong-habit-app08:53
  • refactor(dashboard): add calendar button for future calendar picker featurelifelong-habit-app00:40
Tue, Apr 14
  • refactor(HabitCardGallery): add margin bottom below the progress barlifelong-habit-app23:46
  • refactor(HabitActionButton): add "Complete" label text backlifelong-habit-app20:32
  • feat(app): add day boundary concept, users can personalize time sections based on their wake and bed timelifelong-habit-app19:20
  • refactor(HabitCardGallery): move progress % right next to logged labels, increase habit font sizelifelong-habit-app19:07
  • refactor(HabitDetailSheet): change icon color when habit is completedlifelong-habit-app19:06
  • refactor(HabitActionButton): replace Alert with ConfirmSheetlifelong-habit-app18:50
  • feat: add ConfirmSheet component and wire undo-log confirmation in HabitCardGallerylifelong-habit-app18:47
  • refactor(dashboard): remove top paddinglifelong-habit-app18:29
  • refactor(HabitCard): change complete/incomplete layout, reduce header height, and improve overall UIlifelong-habit-app17:30
  • refactor(dashboard): increase dynamic month year font size, reduce icon sizelifelong-habit-app17:27
  • fix(progress-bar): use habit colorHex instead of hardcoded sage greenlifelong-habit-app15:43
  • fix(unlog): clear date_log cache optimistically on habit undolifelong-habit-app15:27
  • refactor(dashboard): change icons for toggle viewlifelong-habit-app14:32
  • refactor(dashboard): move view mode toggle to header, remove section labellifelong-habit-app12:00
  • refactor(index tab): clip scroll content to rounded divider corners by setting overflow to hiddenlifelong-habit-app11:40
  • refactor(dashboard): change tray icon to note iconlifelong-habit-app10:23
  • refactor(themeRegistry): change Morning Light theme tokens to be less warmlifelong-habit-app10:23
  • fix(dashboard): restructure layout to fix card height, add Android elevation wrapper and iOS shadow on rounded dividerlifelong-habit-app10:22
Mon, Apr 13
  • refactor(tabs): change icons from Ionicon to SolarIconlifelong-habit-app23:13
  • refactor(dashboard): redesign header and calendar UIlifelong-habit-app22:29
  • refactor(dashboard): make habit cards fetch data from selected day, not today by adding useSelectedDateLoglifelong-habit-app22:28
  • docs: remove old docs and combine them into onelifelong-habit-app22:22
  • docs: update outdate documentationlifelong-habit-app19:38
  • refactor(HabitSheetActions): change duplicate to copy and add archive button UIlifelong-habit-app19:38
  • refactor (useDashboard): make default color as color accent instead of hardcoded hex codelifelong-habit-app18:48
  • refactor(constants): change color scheme from gold to cocoalifelong-habit-app18:47
  • refactor(HabitSheetStats): add category field, change font stylinglifelong-habit-app18:47
  • refactor (HabitCardGallery): remove label pill, edit and calendar buttonslifelong-habit-app18:45
Sun, Apr 12
  • refactor(HabitDetailSheet): add HabitSheetStats component and make the label and the content in one row and use colorHexlifelong-habit-app23:38
  • fix(HabitDetailSheet): make useHabitCardColors nullablelifelong-habit-app23:17
  • refactor: change MetricCell to StatRow so the fields displayed in rowslifelong-habit-app23:15
  • refaactor: adjust action buttons to use colorHex and adjust the button heightlifelong-habit-app22:15
  • refactor: change category mapping nameslifelong-habit-app21:53
  • feat(HabitDetailSheet): reusable SheetTileButton atom, drop StyleSheet for NativeWindlifelong-habit-app21:52
  • refactor(HabitDetailSheet): make the sheet layout more organizedlifelong-habit-app19:41
  • fix(HabitDetailSheet): replace custom Animated slide with native animationType="slide"lifelong-habit-app19:12
  • fix(HabitDetailSheet): add hardcoded bottom padding to debug, fix AnimatedView hardcoded to 600 (it assumed the height never grows more than 600px)lifelong-habit-app19:03
  • fix(HabitDetailSheet): make a componet triggered when pressing a habit card (for now it's still empty somehow)lifelong-habit-app18:48
  • feat: add HabitDetailSheet componentlifelong-habit-app18:30
  • refactor: move useColorPresets to dashboard directorylifelong-habit-app18:29
  • refactor: move color-habit-picker component to features/dashboardlifelong-habit-app17:51
  • refactor: make font size for habit name and time biggerlifelong-habit-app17:51
  • refactor(habitCardBanner): change gradient computationlifelong-habit-app17:51
  • refactor: remove color_id fieldlifelong-habit-app17:49
  • feat: add coverImageUri fieldlifelong-habit-app15:12
  • refactor: add habitCardBanner and tighten habit card gallerylifelong-habit-app14:45
  • refactor: move edit button to be in the left side of complete button in compact modelifelong-habit-app14:41
  • feat: add a shared component for color & icon pickerlifelong-habit-app14:40
  • refactor: make the screen height 88%lifelong-habit-app14:39
  • refactor: remove PickerPreviewlifelong-habit-app14:14
Sat, Apr 11
  • refactor: add categoryRegistry, remove category and archetype default colorslifelong-habit-app19:16
  • chore: fix importslifelong-habit-app19:14
  • refactor: change theme-registry to themeRegistry for naming consistencylifelong-habit-app17:52
  • chore: remove scrollView from SwatchRow to reduce the big gap between swatch row and color/icon tabslifelong-habit-app16:48
  • chore: remove hue-related commentlifelong-habit-app16:45
  • refactor: remove hue handler, it's overkill for this color picker featurelifelong-habit-app16:44
  • fix: remove color_id from being saved in database, it should stay only in DraftHabit and the field doesn't exist and is unnecessary to be in dblifelong-habit-app16:43
Thu, Apr 9
  • refactor: integrate color icon picker feature in habit dashboardlifelong-habit-app20:39
  • feat: add color icon picker featurelifelong-habit-app20:38
  • refactor(color picker): added colorPalette constants and update theme-registrylifelong-habit-app15:57
  • chore: added expo linear gradient dependencylifelong-habit-app15:57
  • chore: update new importslifelong-habit-app14:22
  • refactor: move /shared directory from root to featureslifelong-habit-app14:17
  • chore: add solar-icon and phosphor icon dependencieslifelong-habit-app12:13
  • chore: change wordinglifelong-habit-app12:06
  • refactor(dashboard): reduce margin in ArchetypeSelector for create habit screenlifelong-habit-app11:57
  • refactor: add time picker to create habit screenlifelong-habit-app11:50
  • refactor: change account name font color, remove unused var, change masked email comment to my namelifelong-habit-app11:30
  • refactor: remove estimated time from habit dashboardlifelong-habit-app11:29
  • chore: change default masked email comment to my namelifelong-habit-app11:29
  • refactor: remove estimated time from habit dashboardlifelong-habit-app11:28
  • style(constant): change scrimForegound hex codelifelong-habit-app06:40
  • style: change hardcoded colors and adjust otherslifelong-habit-app06:40
  • refactor: change some colorslifelong-habit-app06:38
Wed, Apr 8
  • chore(build): import supabaseURL and supabaseAnonKey directly from expo constant for app buildlifelong-habit-app21:29
  • refactor: remove ignoreDuplicates in seed-db to allow template replacementlifelong-habit-app21:28
  • style(discover): improve habit template copywritinglifelong-habit-app21:27
  • style: added padding and inset for create and edit habit screenlifelong-habit-app21:26
  • refactor: remove archetype selector from edit habit screen to keep the habit log cleanlifelong-habit-app20:55
  • chore: remove stale fields and revise template wordinglifelong-habit-app16:12
  • chore: move confirmModalStyles to constants/components dirlifelong-habit-app16:11
  • fix(app build): update supabaseUrl and supabaseAnonKey to prevent app crashinglifelong-habit-app16:11
  • refactor: extract styles from edit and create habit screen, added buildHabitPayload service and shared componentslifelong-habit-app16:09
  • chore: app copywritinglifelong-habit-app13:06
  • refactor: extract form styles from edit and create screens into habitFormStyleslifelong-habit-app13:05
  • chore: update app and eas configlifelong-habit-app11:41
Tue, Apr 7
  • chore: update supabase dependencylifelong-habit-app23:34
  • chore: update dependencylifelong-habit-app18:08
  • chore: rename habit validation modal for habit creationlifelong-habit-app18:02
  • chore: rename Reset App Data to Reset Datalifelong-habit-app18:02
  • chore: rename a migration prefix as its orderlifelong-habit-app18:01
  • refactor: ran new reset data migration and fix bug in reset datalifelong-habit-app18:00
  • refactor(UI): move sign out from account info screen to the setting tablifelong-habit-app15:56
  • fix(LadderCard): hide rungs when completed, restore selection on undolifelong-habit-app15:56
  • fix: made valueLogged, floor, ceiling, and unitLogged values get stored to in DailyLog tablelifelong-habit-app14:55
  • chore: added console log to debug ladder habitlifelong-habit-app14:04
  • fix: changed ladder habit archetype formula (now visually works but still have debug in backend)lifelong-habit-app13:58
  • refactor: remove extra_credit_enabled field in snowball_configlifelong-habit-app12:24
  • refactor: fix snowball intensity_percent log value in db (it was capped to 100%) and remove extra credit toggle (users can have >100% intensity_percent by default)lifelong-habit-app12:24
Mon, Apr 6
  • refactor: change ladder habit card UI from pills to rungslifelong-habit-app22:06
  • chore: console log handleLadderConfig and handleSnowballConfiglifelong-habit-app15:34
  • chore: added Jest dependency for testinglifelong-habit-app15:20
  • fix(bento): call onValidConfig imperatively with raw input valuelifelong-habit-app13:04
Sun, Apr 5
  • fix: TRYING to fix bento validation, added console logslifelong-habit-app23:21
  • refactor: fix bento card validation bug and changed it from inline description to a modallifelong-habit-app21:10
  • refactor: rename profile to settingslifelong-habit-app16:10
  • refactor: remove hardcoded styling in profile tablifelong-habit-app15:38
  • refactor: made GroupedCard inherit styles from profile Styleslifelong-habit-app10:57
  • refactor(profile): unify sub-screen layout, card tier, and styleslifelong-habit-app10:46
  • refactor: added account-info page for /profile tablifelong-habit-app00:09
Sat, Apr 4
  • chore: clean empty fileslifelong-habit-app22:45
  • chore: update supabase migrationlifelong-habit-app22:44
  • refactor: fix layer placement across types, utils, and serviceslifelong-habit-app21:52
  • refactor: clean hooks, lib, and utils directorieslifelong-habit-app20:45
  • chore: put .zsh in git ignore, deleted unused fileslifelong-habit-app20:39
Fri, Apr 3
  • refactor: audit hook directory (renaming, splitting, and moving to utils for pure logic)lifelong-habit-app21:11
  • refactor: remove stale fields and consolidate seed runnerlifelong-habit-app18:17
  • chore: update supabase dependencylifelong-habit-app17:35
  • chore: remove archive fileslifelong-habit-app17:33
  • feat: persist checked_component_ids for Bento habitslifelong-habit-app16:14
  • refactor: added intensity_percent and fixed bugs in bento habit cardlifelong-habit-app07:00
  • refactor: added map cache for static habit field in useDashboard, added updated_at field (Supabase done)lifelong-habit-app00:08
Thu, Apr 2
  • refactor: updated Ladder configuration to allow tracking levels (it was only floor and ceiling without levels in between before)lifelong-habit-app15:44
Wed, Apr 1
  • chore: remove old console.log for cleaner logslifelong-habit-app21:42
  • fix: fixed snowball habit percentage buglifelong-habit-app21:39
  • refactor: added KeyboardAvoidingView function on top of ScrollViewlifelong-habit-app21:36
  • refactor: make HabitCard modularlifelong-habit-app19:03
  • feat" `useLastLoggedValues` query hook. New file: `hooks/queries/useLastLoggedValues.ts` Single Supabase query, returns `Record<habitId, { valueLogged: number | null, runLevel: number | null }>`. Cached under `['last_logged_values', userId]`. Invalidated by `useLogHabit`, `useUnlogHabit`, `useBackdateHabit` on success.lifelong-habit-app18:07
  • fix: invalidate 'all_habit_day_states" query to fix mark incomplete not functioning in habits from previous logslifelong-habit-app17:41
Tue, Mar 31
  • fix: debugged "mark complete" button (it didn't function before, somehow it does, so let's keep the console log for now)lifelong-habit-app20:09
  • chore: updated tailwind config to point to the new directory structurelifelong-habit-app19:38
  • chore: updated comment pathslifelong-habit-app19:12
  • refactor: migrate to feature-domain architecturelifelong-habit-app18:25
  • fix: fixed rolling calendar buglifelong-habit-app15:25
  • refactor: refactor code flagged by eslintlifelong-habit-app14:30
  • refactor: replaced code to align with eslint and constant stylinglifelong-habit-app12:39
  • refactor: added screenTitle, emptyStateTitle, badgeLabel, and rowMeta in textStyles and refactored app\(app) files to align with itlifelong-habit-app12:29
  • chore: moved old documents to archive directorylifelong-habit-app10:19
  • fix: added missing onCreateHabit in interface (it was already destructured in function body but missing from the interface)lifelong-habit-app08:41
  • refactor: removed delete yesterday featurelifelong-habit-app00:13
  • chore: changed library to inactive-habits to avoid confusionlifelong-habit-app00:02
Mon, Mar 30
  • fix: changed StartOfWeek to be grouped row and added more days as optionslifelong-habit-app23:56
  • fix: fixed timestamp bug which returned previous habits empty (sliced the time first and made apple to apple comparison ((YYYY-MM-DD to YYYY-MM-DD))lifelong-habit-app23:12
  • refactor: made profile tab modularlifelong-habit-app23:08
  • refactor: change lineHeight for displayXL font (the 'g' letter was cropped)lifelong-habit-app22:35
  • refactor: made index tab modularlifelong-habit-app20:23
  • refactor: changed from rolling calendar to fixed-week paginationlifelong-habit-app20:23
  • feat: added toggle to set the start day of the weeklifelong-habit-app20:20
  • style: fixed progress tab layoutlifelong-habit-app20:18
  • feat: added progress tab and screenLayout to standardize the formatting among tabslifelong-habit-app19:34
  • style: changed padding gapslifelong-habit-app15:38
  • refacator: moved Viewing label and added margin bottomlifelong-habit-app15:37
  • refactor: moved rolling calendar to the toplifelong-habit-app14:35
  • refactor: modified email templateslifelong-habit-app11:50
Sun, Mar 29
  • feat: added change email, confirm sign up, magic link, and reset password email templateslifelong-habit-app12:02
  • fix: fixed bug in Google OAuth button (account deletion query should be separated from auth state)lifelong-habit-app12:01
  • feat: added react-email for customized automated emailslifelong-habit-app06:15
  • fix: fixed bug in account deletion and added 2 week period before permanent deletionlifelong-habit-app06:14
Sat, Mar 28
  • feat: added rolling calendar in habit dashboardlifelong-habit-app12:04
Fri, Mar 27
  • feat: added /history tablifelong-habit-app20:45
Thu, Mar 26
  • feat: added calendar featurelifelong-habit-app20:48
Wed, Mar 25
  • style: replaced emotes to ioniconslifelong-habit-app22:26
  • fix: removed label (code smell) and replaced it with body from textStyleslifelong-habit-app22:13
  • fix: stabilise updateDraft ref to break subform useEffect looplifelong-habit-app20:58
  • feat: added onboarding screen for wake_time and bed_time, ordered habit by preferred_time, added time picker, added time-of-day section headers to dashbaordlifelong-habit-app17:51
  • feat: added schema for time context (preferred_time, wake_time, bed_time, logged_at, added timeOfDay for sorting and relative timelifelong-habit-app17:50
Tue, Mar 24
  • chore: added time context and future feature documentslifelong-habit-app20:48
Mon, Mar 23
  • fix: added onBentoDraftChange to validate input on the component real timelifelong-habit-app21:05
  • feat: add validation warning when bento component is invalidlifelong-habit-app20:10
  • fix: resolved merge conflictslifelong-habit-app18:11
  • chore: added prettier format on savinglifelong-habit-app15:49
Fri, Mar 20
  • fix: manually parse access_token and refresh_token from redirect URL fragment and call supabase.auth.setSession() - required on native since Supabase does not automatically parse URL fragments returned by openAuthSessionAsynlifelong-habit-app23:08
  • fix: manually parse access_token and refresh_token from redirect URL fragment and call supabase.auth.setSession() - required on native since Supabase does not automatically parse URL fragments returned by openAuthSessionAsynlifelong-habit-app23:08
  • refactor: change google oauth button to work in dev build applifelong-habit-app23:04
Tue, Mar 17
  • chore: remove eslint testing codelifelong-habit-app17:41
  • chore: remove eslint testing codelifelong-habit-app17:41
Mon, Mar 16
  • fix(app): resolve remaining inline color violations in edit-habit and deep-divelifelong-habit-app00:35
  • fix(app): resolve remaining inline color violations in edit-habit and deep-divelifelong-habit-app00:35
  • refactor(app): wrap StyleSheet.create in useMemo, migrate inline colors to NativeWind tokens, remove unused vars across app screenslifelong-habit-app00:32
  • refactor(auth): extract AuthInput and AuthButton components, eliminate theme dependency on auth screenslifelong-habit-app00:17
Sun, Mar 15
  • refactor(auth): migrate inline colors to NativeWind tokens across forgot-password, login, reset-password, signuplifelong-habit-app23:52
  • refactor(tabs): remove unused vars in discover, migrate inline colors to NativeWind tokens, wrap StyleSheet.create in useMemo in profilelifelong-habit-app23:49
  • fix: add missing hook dependencieslifelong-habit-app22:26
  • docs: update eslint reportlifelong-habit-app21:18
  • fix: stabilize onValidConfig references by extracting DraftItem componentlifelong-habit-app21:09
  • refactor: seed pillar_config in handleArchetypePress, delete PillarFormlifelong-habit-app20:53
Sat, Mar 14
  • refactor(GoogleOAuthButton): replace inline border color with className tokenlifelong-habit-app22:48
  • refactor(GoogleOAuthButton): replace inline border color with className tokenlifelong-habit-app22:48
  • feat(auth): add Google OAuth button to login and signup screenslifelong-habit-app22:16
  • refacator(index): replace inline styling wih className tokenlifelong-habit-app21:56
  • fix(HabitCard): reorder callbacks, fix useCallback deps, migrate static colors to NativeWindlifelong-habit-app21:39
  • refactor(BentoCard): replace inline colors with className token and remove unused useThemelifelong-habit-app21:27
  • chore(Header): remove unused useThemelifelong-habit-app21:24
  • refactor(Header): replace inline colors with className tokenlifelong-habit-app21:23
  • refactor(NewHabitSheet): replace inline colors with className tokens and remove unused useThemelifelong-habit-app21:23
  • refactor(SnowballCard): replace inline colors with className tokens and remove unused useThemelifelong-habit-app21:20
  • fix(InfoModal): use useTheme to apply theme-aware color to Feather iconlifelong-habit-app21:11
  • refactor(StatsGrid): replace inline colors with className tokens and StyleSheet for list styleslifelong-habit-app21:11
  • chore: move dirty-code from component dir to rootlifelong-habit-app19:43
  • refactor(ArchetypeSelector): replace inline colors with textStyles and className tokenslifelong-habit-app19:42
  • refactor: change textHeading hex code in Ember Dark mode to be a little bit more warmerlifelong-habit-app19:37
  • refactor(BentoForm): call useTheme directly and replace inline colors with className tokenslifelong-habit-app19:37
  • fix(onboarding/deep-dive): remove hardcoded colors in subFormColors so it can adjust based on the chosen themelifelong-habit-app17:55
  • refactor(theme-registry): change border colors to make them more visiblelifelong-habit-app17:35
  • refactor(BentoForm): replace inline colors with textStyles, className, and StyleSheet, and fix onValidConfig reflifelong-habit-app17:35
  • refactor(LadderForm): replace inline colors with className tokens and fix onValidConfig reflifelong-habit-app16:24
  • fix: infinite loop in habit creation flowlifelong-habit-app15:28
  • refactor: migrate typography from className to textStyles tokenslifelong-habit-app14:46
  • docs: audit and update stale documentationlifelong-habit-app14:31
  • fix: stabilise onValidConfig references in ArchetypeSelector to prevent useEffect loopslifelong-habit-app13:58
  • fix: correct useEffect dep suppression in SnowballFormlifelong-habit-app12:12
  • refactor(lint): resolve no-color-in-style errors and useEffect warning in SnowballFormlifelong-habit-app11:42
  • refactor(lint): resolve no-color-in-style errors in AuthWallModallifelong-habit-app11:38
  • refactor(lint): resolve 13 no-color-in-style errors in challenge-details.tsxlifelong-habit-app11:30
  • docs: added design notes about why text input doesn't get flagged in eslintlifelong-habit-app11:13
  • docs: removed duplicates in design-notes-overlay-eslint.mdlifelong-habit-app11:10
  • refactor: unflag text input color proplifelong-habit-app10:21
  • refactor: replced inlinestyle backgroundColor and color to tailwind classNamelifelong-habit-app06:15
  • chore: removed code calling lora font (it's alr deleted)lifelong-habit-app06:11
Fri, Mar 13
  • docs: added text styles design noteslifelong-habit-app20:22
  • docs: added overlay eslint design noteslifelong-habit-app20:21
  • refactor: udpated eslint configlifelong-habit-app20:18
  • chore: removed lora fontlifelong-habit-app20:17
  • refactor: replaced hardcodes styling in InfoModallifelong-habit-app18:33
  • chore: removed comment (overlay no longer gets flagged)lifelong-habit-app18:31
  • refactor: replaced tooltip with InfoModal, then removed it from LadderCard (too crowded for now), and finally it's functioning in StatsGrid!lifelong-habit-app14: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-app13:49
  • refactor: cleaned discover tab (templateCard and challenge-details) to use useMemo StyleSheet and tailwind classNamelifelong-habit-app12:20
  • chore: renamed textSecondary to textSubtlelifelong-habit-app12:17
  • refactor: added text-secondary (between textBody and textMuted)lifelong-habit-app11:53
  • refactor: changed scrimForeground rgba and deleted imageDim (it's similar to cardScrim)lifelong-habit-app11:50
  • chore: rename explore to discoverlifelong-habit-app06:19
  • chore: fix import typolifelong-habit-app06:19
  • refactor: added overlayStyles for overlays, scrims, and image treatments, and synced challenge-details to itlifelong-habit-app06:18
  • chore: added comment to tailwind, it's okay it just took 2 steps to add a new theme tokenlifelong-habit-app05:59
  • refactor: changed eslint, check comment for detailslifelong-habit-app05: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-app05:56
  • chore: renamed explore tab to discover (forgot to do it again hehe)lifelong-habit-app05:53
  • refactor: applied themeVars to the root view so it cascades to all childrenlifelong-habit-app05:53
  • chore: renamed explore tab to discover (forgot to do it earlier)lifelong-habit-app05:47
  • chore: removed stale habit card component (the right one is in components/dashboard)lifelong-habit-app05:46
Wed, Mar 11
  • revert: undo refactor of hardcoded blockslifelong-habit-app23:22
  • refactor: cleaned 16 hardcoded blocks of codelifelong-habit-app17:16
  • chore: rename explore to discover to avoid ambiguitylifelong-habit-app16:02
Tue, Mar 10
  • refactor: added tooltip component backlifelong-habit-app17:04
Mon, Mar 9
  • refactor: added eslint config ruleslifelong-habit-app20:33
  • chore: removed dead libraries and boilerplatelifelong-habit-app17:38
  • chore: uninstall gluestack libslifelong-habit-app17:23
  • refactor: removed gluestack componentslifelong-habit-app17:21
Sun, Mar 8
  • refactor: replaced raw Tailwind typography and shadow styles with textStyles and/or surfaceStyleslifelong-habit-app21:40
  • refactor: made HabitNameInput, ScreenHeader, and ArchetypeSelector reusable componentslifelong-habit-app21:31
  • chore: removed outdated fileslifelong-habit-app21:20
  • refactor: removed StyleSheet again in app/(tabs)/indexlifelong-habit-app21:00
  • refactor: removed StyleSheet and use NativeWindlifelong-habit-app20:59
  • refactor: replaced inline style with textStyles constant in component/dashboardlifelong-habit-app20:56
  • refactor: added reusable google oauth component now, and removed the button for nowlifelong-habit-app17:18
  • feat: added interactiveStyles (single source of truth for reusable buttons, inputs, and other elements a user directly taps or types into)lifelong-habit-app15:20
  • refactor: extracted styles for cards, modals, sheets, banners, and badgeslifelong-habit-app15:19
  • feat: added surfaceStyles (single source of truth for surfaces UI - card, modals, sheets, banners, and elements that "contain" other UIs)lifelong-habit-app15:14
  • chore: added expo auth session lib (for google oauth)lifelong-habit-app15:09
  • fix: fixed missing columns error in template installationslifelong-habit-app14:51
  • refactor: removed footer for nowlifelong-habit-app14:49
  • docs: added blind spot audit and archived old changeloglifelong-habit-app14:49
  • refactor: simplified profile tab, no more exposed details now they're hidden and live on dedicated sub-screenslifelong-habit-app10:37
Sat, Mar 7
  • refactor: made typography.json as single source of truth for fonts (themed-text and _layout still exist, just React Native and Tailwind that can't use single file so we need literally 3 files to manage typography for the app but I only need to go to typography.json to change any fonts), cleaned template card to sync with defined constants, swapped DM Sans with Manrope for body typography, changed textHeading colorlifelong-habit-app23:31
  • chore: add lora family fontlifelong-habit-app23:27
  • refactor: cleaned some pages to sync with new textStyleslifelong-habit-app22:17
  • fix: removed duplicated <text> and other tags, just parsing errorslifelong-habit-app19:39
  • feat: added textStyles as a single source of truth for typography (typography.ts and typography.json failed to tackled this before)lifelong-habit-app14:04
  • fix: resolved typescript property access errorslifelong-habit-app14:02
  • chore: removed landing page directory (out of this app scope)lifelong-habit-app11:34
  • refactor: removed hardcoded fonts entirely from the codebaselifelong-habit-app11:32
  • refactor: standardize typography rules (heading, body, like theme-registry in constant dir)lifelong-habit-app06:49
  • refactor: hid forgot password link until auth failurelifelong-habit-app06:10
Fri, Mar 6
  • feat: added mathematical contrast testing (so I don't have to define onAccent manually once accent is set) and fixed active filter chip transparency bugslifelong-habit-app23:55
  • refactor: replaced harsh solid colors to defined colors in theme registrylifelong-habit-app21:38
  • refactor: renamed token theme for clarity (ink/inkMid/inkFaint -> textHeading/textBody/textMutedlifelong-habit-app20:23
  • fix: auth and guest state fixes, it's so buggy since introducing this new feature I need to figure it outlifelong-habit-app20:03
  • feat: added local theme toggle for guest accountslifelong-habit-app18:19
  • refactor: guest or authenticated users now can explore the pp with read-only modelifelong-habit-app18:10
  • refactor: chanaged theme color from ivory to bonelifelong-habit-app18:09
  • refactor: extracted geometrical SVGs and changed theme colorslifelong-habit-app17:50
  • refactor: simplified theme registry (forest calm is removed) and switched to more versatile colors (ivory, sand, and warm stone colors)lifelong-habit-app17:04
  • refactor: added first glass icon (home, testing it out)lifelong-habit-app16:22
  • refactor: hide OS bar againlifelong-habit-app16:20
Thu, Mar 5
  • refactor: archived wip onboarding & added option to create habits without having to sign uplifelong-habit-app20:23
  • refactor: made edit habit UI layout matches create habit screenlifelong-habit-app19:56
  • refactor: replaced emotes with Ioniconslifelong-habit-app19:43
  • fix: replaced hardcoded tailwind styles for snowball cardlifelong-habit-app17:55
  • refactor: locked template image colorslifelong-habit-app17:54
  • fix: removed hardcoded tailwind config so earthen warm theme can be applied properlylifelong-habit-app17:46
  • chore: added JSDoc for design tokens in theme-registrylifelong-habit-app17:32
  • refactor: replaced hardcoded hex codes with global tokens from theme-registrylifelong-habit-app16:36
  • refactor: redesigned create-a-habit screenlifelong-habit-app14:45
  • docs: added create-a-habit screen html mock uplifelong-habit-app14:17
  • fix: the challenge details screen was cropped: solution: removed SafeAreaView from layout since app group already manages its own top/bottom spacinglifelong-habit-app12:38
  • feat: added challenge details screenlifelong-habit-app12:36
Wed, Mar 4
  • docs: archived old changelog and added a new onelifelong-habit-app23:28
  • refactor: added and cleaned theme configuration (now morning light for light mode and earthen warmth for dark mode)lifelong-habit-app23:22
  • feat: made app fullscreen by hiding OS status barlifelong-habit-app21:36
  • refactor: cleaned dashboard headerlifelong-habit-app20:55
  • refactor: changed the location of create habit buttonlifelong-habit-app20:35
  • refactor: changed text, icons, layout & component positionlifelong-habit-app20:03
  • refactor: all icons now using Ionicons onlylifelong-habit-app17:48
  • chore: added lucide-react-native dependencylifelong-habit-app14:11
  • fix: habit creation triggered no action (Claude messed this up when adding new features, duh), changed the menu routing it's solved nowlifelong-habit-app13:03
  • feat: identity edit in profile, also decluttered dashboardlifelong-habit-app12:24
  • refactor: made _layout.tsx ad one single source of truth for navigator (it was mixed with index.tsx before)lifelong-habit-app11:58
Tue, Mar 3
  • fix: new object/array reference is only saved when data actually changes (before it was an infinite loop since the reference is generated every render)lifelong-habit-app23:14
  • feat: added habit status UI (thru edit screen + long press)lifelong-habit-app22:50
  • feat: added habit state management (active/paused/archived/trashed)lifelong-habit-app21:39
  • docs: added local setup & installationlifelong-habit-app18:30
  • refactor: reorganized header & navigation barlifelong-habit-app18:02
  • docs: added app current state documentlifelong-habit-app17:42
  • refactor: removed total days metric and fixed layout inconsistencylifelong-habit-app17:41
  • fix: dashboard metrics no longer disappear when undoing a habitlifelong-habit-app15:45
  • refactor: calculated today progress for habit, added program_start_date (total days metric was hardcoded)lifelong-habit-app14:22
  • chore: bump react-native-safe-area-context and react-native-svg dependencylifelong-habit-app13:46
  • refactor: stripped away some completed inicators (now only CTA, consistency bar, and strikethrough)lifelong-habit-app13:10
Mon, Mar 2
  • feat: added view density toggle (gallery vs list)lifelong-habit-app18:45
  • refactor: changed data flow pipeline (styling code was hardcoded)lifelong-habit-app17:39
  • feat: edit habit functionalitylifelong-habit-app16:25
  • refactor: updated components to sync with global color system (some got hardcoded when refactoring)lifelong-habit-app15:30
  • refactor: updated typography, category pill, and cta button for habit cardslifelong-habit-app15:10
  • feat: added habit card template stylinglifelong-habit-app14:59
  • docs: added new current state docs and rename mock up filelifelong-habit-app14:52
  • refactor: template color datalifelong-habit-app14:52
  • refactor: responsive FlastList for Template Cardslifelong-habit-app14:26
  • refactor: redesign template library & SVG patternslifelong-habit-app11:55
  • refactor: made template library neaterlifelong-habit-app05:58
  • refactor: removed restriction that snowball habit must <2 in useHabitCreationFlowlifelong-habit-app04:46
  • refactor: replaced hardcoded hex codes to sync with constant directorylifelong-habit-app04:46
  • docs: added archetypes and flow docs, added library mock uplifelong-habit-app04:45
Sun, Mar 1
  • feat: create options for new habit (template library or custom builder)lifelong-habit-app13:46
  • feat: created undo button with confirmationlifelong-habit-app12:32
  • feat: implemented habit undo featurelifelong-habit-app06:01
Sat, Feb 28
  • fix: added skip button and sign in button during onboarding if user already had an accountlifelong-habit-app23:42
  • fix: added handling and skip options during onboardinglifelong-habit-app23:41
  • refactor: removed SecureStore chunking (it caused delays) with added AsyncStorage, implemented onMutate, onError, and onSettled in useLogHabit to improve performancelifelong-habit-app23:02
  • fix: added async chunking adapter for 2048bytes supabase storage warninglifelong-habit-app22:54
  • fix: complete button and missing react-dom dependencylifelong-habit-app22:40
  • refactor: resolved IDE config & expo setting warningslifelong-habit-app21:08
  • feat: moved to mobile first web later, changed direction to "onboarding first, auth later"lifelong-habit-app20:37
  • refactor: modified habitCard, header, and other components to improve dashboard UIlifelong-habit-app20:18
  • hotfix: created TemplateCard that was removed when extracting landing pagelifelong-habit-app19:11
  • refactor: extract landing page to standalone next.js pagelifelong-habit-app18:03
  • chore: rename mockup for clarity, fix docs typolifelong-habit-app17:29
Fri, Feb 27
  • feat: added isInstalled prop to check whether user has installed a habit to prevent them having duplicate habitslifelong-habit-app22:47
  • fixed: FINALLY fixed this stubborn duplicate habit bug YAY :Dlifelong-habit-app22:42
  • feat: added library tab so it's accessibile from the main app after login, not just during onboardinglifelong-habit-app22:32
  • refactor: updated useCreateHabits so it prevents fture re-installs from wiping daily_log historylifelong-habit-app22:27
  • fix: fixed duplicate habit insertion bug (legit 4x duplicates crazy)lifelong-habit-app22:22
  • feat: made dashboard and integrated it with real datalifelong-habit-app22:09
  • fix: added version controlled seed sql for templateslifelong-habit-app14:15
  • fixed broken "clear session" button and template install buglifelong-habit-app14:13
  • fix: solved "invalid input syntax for type uuid" errorlifelong-habit-app12:23
  • feat: added AsyncStorage func, isAutoProcessing state, and removed theme selection for streamlined onboardinglifelong-habit-app11:32
  • style: updated text inputs for auth page to have default brown border (for visibility)lifelong-habit-app10:03
  • refactor: changed fixed autofill background color on the weblifelong-habit-app09:43
Thu, Feb 26
  • style: made authentication page prettierlifelong-habit-app21:52
  • fix: replaced mock up template data with actual data models and patched onboarding auth vulnerability issue (check history for details)lifelong-habit-app21:37
  • feat: splitted app deployment model for landing page and working applifelong-habit-app21:03
Wed, Feb 25
  • refactor: changed text box shadow to be more interactivelifelong-habit-app18:11
  • refactor: redesigned landing pagelifelong-habit-app17:59
  • feat: built unauthenticated landing page to replace default Expo templatelifelong-habit-app17:10
  • feat: added registered user handling via Supabase Auth (before registered users data didn't get recorded in tables)lifelong-habit-app16:20
  • refactor: improved UX to send dialogues if there's any auth errors, invalid credentials, and other validationslifelong-habit-app13:03
  • refactor: added auhentication messages for email confirmationlifelong-habit-app12:59
  • fix: added polyfill dependency to solve Metro Bundler crash and fixed undefined local SSR Storage errorlifelong-habit-app12:31
  • feat(ui): implement independent bento sliders and gluestack v3 habit cardlifelong-habit-app12:06
  • feat(onboarding): Implement Habit Creation Engine UI and validationlifelong-habit-app10:59
Tue, Feb 24
  • feat: implement habit creation engine (Library and Deep Dive)lifelong-habit-app23:01
  • feat: added db definition, scaffoled TanStaack Query layer, and fixed Safe Area UI blindspotslifelong-habit-app15:48
  • feat(route): implemented Expo Router guards and Auh UIlifelong-habit-app11:25
  • feat(auth): implemented a polymorphic storage adapter for Supabaselifelong-habit-app11:17
  • Initial Scaffold (Phase 1)lifelong-habit-app00:01
Mon, Feb 23
  • docs: add PRD and tech stack docs for scaffoldinglifelong-habit-app23:08
  • Initial commitlifelong-habit-app22:59