feat: unified Activity lane in Timeline with full-width layout#288
Merged
feat: unified Activity lane in Timeline with full-width layout#288
Conversation
Refactor the Timeline page to: - Fill full browser width using ResizeObserver instead of fixed 1000px - Unify sleep, exercise, meditation, nap, and duration tags into a single Activity lane (3 tracks: Activity, Places, Tags) - Merge same-activity items from different sources (e.g., Holosync audio tag + Oura meditation = single merged item) - Detect real overlaps with visual indicators (reduced opacity, dashed yellow border) and lane packing for sub-lanes - Show point tags as stacked emoji/image icons from tag mappings - Display overlap warnings in a collapsible banner Key implementation details: - TAG_ACTIVITY_MERGE_MAP defines which tags merge with which activity types when >50% temporal overlap is detected - Duration tags with both start_time and end_time are placed in the Activity lane (excluding computer:* and lastfm sources) - packLanes utility used for both activity items and point tags - Tag icons fetched via fetchTagMappings API (was not used before)
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #288 +/- ##
===========================================
+ Coverage 32.43% 32.81% +0.38%
===========================================
Files 185 185
Lines 22651 22386 -265
Branches 1889 1889
===========================================
Hits 7346 7346
+ Misses 15271 15006 -265
Partials 34 34
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Refactors the Timeline page to unify all activity types into a single lane with full-width responsive layout.
ResizeObserverinstead of fixed 1000px, fills the browser widthfetchTagMappingsto resolve emoji/image icons for tagsData analysis (Feb 2026)
Found 37 duration tag instances; 6 overlapped with activities:
Key implementation details
TAG_ACTIVITY_MERGE_MAPdefines tag→activity-type merge rulesbuildActivityLaneItems()orchestrates merging and overlap detectionisDurationTagActivityLike()filters duration tags for the activity lane (excludescomputer:*,lastfmsources)packLanes()utility handles non-overlapping lane assignment for both activities and point tagsresolveTagIcon()shared helper for tag icon lookupNot included
TagMappingsSettings.tsx(is_programmaticproperty) are unrelated