From fc8616b5b34f4c98740735368cb9acda431dc51a Mon Sep 17 00:00:00 2001 From: Ewan Croft Date: Thu, 13 Aug 2026 15:08:35 +0100 Subject: [PATCH] feat(tourmaline): surface topArtistAvgDeltas as "Most Regular Listening" topArtistAvgDeltas (average days between consecutive plays, per artist) was already computed in load-profile.ts but had zero UI consumers. Added a ranked list showing artists you return to at the most consistent intervals, next to the other alternate-ranking lists (weeks active, long-time favourites). --- .../src/routes/profile/[did]/+page.svelte | 2 ++ .../routes/profile/[did]/CatalogueTab.svelte | 2 ++ .../profile/[did]/ListeningCadence.svelte | 34 +++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 packages/tourmaline/src/routes/profile/[did]/ListeningCadence.svelte diff --git a/packages/tourmaline/src/routes/profile/[did]/+page.svelte b/packages/tourmaline/src/routes/profile/[did]/+page.svelte index 92e3fe6..125d02f 100644 --- a/packages/tourmaline/src/routes/profile/[did]/+page.svelte +++ b/packages/tourmaline/src/routes/profile/[did]/+page.svelte @@ -33,6 +33,7 @@ import OnThisDay from './OnThisDay.svelte'; import Anniversaries from './Anniversaries.svelte'; import WeeksActive from './WeeksActive.svelte'; + import ListeningCadence from './ListeningCadence.svelte'; import DateRangePicker from './DateRangePicker.svelte'; import ListeningPhases from './ListeningPhases.svelte'; import StoryRecap from './StoryRecap.svelte'; @@ -531,6 +532,7 @@ +
diff --git a/packages/tourmaline/src/routes/profile/[did]/CatalogueTab.svelte b/packages/tourmaline/src/routes/profile/[did]/CatalogueTab.svelte index 471740c..6740a63 100644 --- a/packages/tourmaline/src/routes/profile/[did]/CatalogueTab.svelte +++ b/packages/tourmaline/src/routes/profile/[did]/CatalogueTab.svelte @@ -4,6 +4,7 @@ import OnThisDay from './OnThisDay.svelte'; import Anniversaries from './Anniversaries.svelte'; import WeeksActive from './WeeksActive.svelte'; + import ListeningCadence from './ListeningCadence.svelte'; import type { ListenerProfile } from '$lib/types'; import type { OnThisDayEntry } from '$lib/analysis/on-this-day'; @@ -80,6 +81,7 @@
+ {#if profile.discoveredArtists.length > 0 || profile.discoveredTracks.length > 0 || profile.discoveredAlbums.length > 0}
diff --git a/packages/tourmaline/src/routes/profile/[did]/ListeningCadence.svelte b/packages/tourmaline/src/routes/profile/[did]/ListeningCadence.svelte new file mode 100644 index 0000000..849c11c --- /dev/null +++ b/packages/tourmaline/src/routes/profile/[did]/ListeningCadence.svelte @@ -0,0 +1,34 @@ + + +{#if artists.length > 0} +
+
+
+

Most Regular Listening

+

Artists you come back to at the most consistent intervals

+
+
+ +
+
+
    + {#each artists.slice(0, 10) as artist, i (artist.name)} +
  1. + {i + 1} + {artist.name} + {formatCadence(artist.avgDaysBetween)} +
  2. + {/each} +
+
+{/if} -- 2.51.2