Claudio Ortolina
e64f2b12c4
ML-200: switch to a vertical chart
2026-05-31 22:02:12 +03:00
Claudio Ortolina
e67b172d64
ML-200: daily scrobble count charts
2026-05-31 21:52:06 +03:00
Claudio Ortolina
611ca7e386
Rename vertical_bar_chart -> horizontal_bar_chart
2026-05-31 21:13:53 +03:00
Claudio Ortolina
dd24258f33
Make stats formats and types counters sync
2026-05-27 23:45:29 +03:00
Claudio Ortolina
118171ed8a
ML-169.8: restore formats/types stats position after counters
...
Formats and types stats should appear directly after the record counters,
before the TopArtists/TopAlbums/OnThisDay grid. The refactor had
accidentally moved them below.
2026-05-25 11:32:48 +03:00
Claudio Ortolina
2d8989a8d0
ML-169.8: keep latest record query synchronous
...
get_latest_record is a single fast ORDER BY LIMIT 1 query --
no reason to async-load it. Removes the <.async_result> wrapper
and the now-unnecessary render_async() from its test.
2026-05-25 09:42:14 +03:00
Claudio Ortolina
f347f56218
ML-169.8: reduce Stats mount sync queries to 3
...
Move 7 non-critical queries out of synchronous mount into assign_async
and start_async tasks with skeleton loading placeholders.
Only scalar badge counters (collection count, wishlist count, scrobble
count) remain synchronous. All async sections use <.async_result> with
loading and failed slots. Scrobble activity preserves LiveView streams
via handle_async. On-this-day date changes use AsyncResult.ok/2.
2026-05-25 09:31:43 +03:00
Claudio Ortolina
d03e288353
Make sure top_by_period components have a proper ID
2026-04-23 16:41:18 +01:00
Claudio Ortolina
0776700170
ML-142: Improve scrobble UI in the release component
...
- Sticky bar for easier track-based scrobbling
- Support setting custom finish time
2026-04-22 17:19:35 +01:00
Claudio Ortolina
016c4691be
Canonicalize tailwind classes
2026-04-21 14:22:41 +01:00
Claudio Ortolina
b37162fce3
Fix colors of mixed badges
2026-04-17 22:30:27 +01:00
Claudio Ortolina
851cb36858
Fix dl accessibility violations on stats dashboard
2026-04-15 14:16:24 +01:00
Claudio Ortolina
405235e2b3
Add picker to create scrobble rules on the fly
2026-04-15 10:53:58 +01:00
Claudio Ortolina
8db324d74a
Extract shared badge/dropdown to ScrobbleComponents
2026-04-14 16:50:40 +01:00
Claudio Ortolina
888b5a68e6
Update all callers to use matching_records
...
Migrate StatsLive.Index, ScrobbledTracksLive.Index, and TopAlbums to
consume matching_records list instead of scalar record IDs. Remove the
derive_legacy_record_ids bridge function. TopAlbums now uses a dropdown
for multi-record badges with play count display.
2026-04-14 16:14:59 +01:00
Claudio Ortolina
40ea3aaa2a
Add fallback error images for scrobble activity
2026-04-05 08:35:23 +01:00
Claudio Ortolina
4e8f1fd6f0
Fix cover image distortion in scrobble activity
2026-04-01 21:14:18 +01:00
Claudio Ortolina
bb1c53c44f
Don't display some stats when there's no record
2026-03-29 08:48:30 +01:00
Claudio Ortolina
0e6760ea73
Fix display of latest record when db is empty
2026-03-29 08:39:13 +01:00
Claudio Ortolina
87b1b4df4b
Replace top_by widgets loading indicator with a skeleton
2026-03-28 21:40:51 +00:00
Claudio Ortolina
d45aff21ec
Rename refresh_lastfm_feed to refresh_scrobbles
2026-03-28 08:59:22 +00:00
Claudio Ortolina
61dd3f45c7
Move refresh config and callers to ListeningStats
2026-03-27 23:14:09 +00:00
Claudio Ortolina
88542cc537
Fix Tailwind layout and spacing issues
2026-03-27 16:11:05 +00:00
Claudio Ortolina
8c7f2f5703
Make sure toasts are synced
2026-03-24 14:01:56 +00:00
Claudio Ortolina
1bd5b54bb5
Make hover effect stand out more
2026-03-24 11:05:17 +00:00
Claudio Ortolina
f3c50f05b8
Fix gaps and margins
2026-03-22 18:58:12 +00:00
Claudio Ortolina
9877751ff4
Reduce size of scrobble activity tabs list
2026-03-22 18:49:46 +00:00
Claudio Ortolina
87cbf55ee5
Uniform use of .section/1 across all stats components
2026-03-22 18:47:27 +00:00
Claudio Ortolina
a83efe9908
Extract an internal section/1 component
2026-03-22 18:37:24 +00:00
Claudio Ortolina
9aed3afd7a
Re-align buttons for scrobble activity
2026-03-22 17:38:38 +00:00
Claudio Ortolina
dcf89fbed3
Add missing attrs
2026-03-22 17:30:45 +00:00
Claudio Ortolina
710931dd4a
Refactor stats page with semantic components to experiment with alternative layouts
2026-03-22 17:15:48 +00:00
Claudio Ortolina
4c07eabd24
Move records on this day up on mobile
2026-03-22 11:03:46 +00:00
Claudio Ortolina
83c9d710ef
Change color of Top 20 release years chart
2026-03-21 20:57:40 +00:00
Claudio Ortolina
b85ce0831c
Move filters/selectors to the side of the title
2026-03-21 18:26:39 +00:00
Claudio Ortolina
19428b85f2
Move records on this day to the left, re-position filter
2026-03-21 18:12:00 +00:00
Claudio Ortolina
b12e70f471
Refactor charts to use plain HTML
...
More responsive, less edge cases, and simpler to maintain.
2026-03-21 18:00:06 +00:00
Claudio Ortolina
a479d60da3
Link top 20 years chart
2026-03-21 09:27:53 +00:00
Claudio Ortolina
5a27fc46ac
Add Top 20 Release Years widget
2026-03-21 09:02:25 +00:00
Claudio Ortolina
55aa7aa9d3
Move records on this day near top_* sections
2026-03-21 08:38:45 +00:00
Claudio Ortolina
47ca6fa1d2
Add canonical_tailwind to get correct formatting for tailwind classes
2026-03-20 13:02:32 +00:00
Claudio Ortolina
5a418248ad
Use same gaps in stats page
...
Closes #120
2026-03-16 19:30:52 +00:00
Claudio Ortolina
4d1ac9652c
Link the scrobbled count in stats
2026-03-14 09:59:09 +00:00
Claudio Ortolina
1a62360b21
Group records in records on this day widget
2026-03-12 09:09:25 +00:00
Claudio Ortolina
8d9bf78974
Extract shared TopByPeriod LiveComponent
...
Closes #103
2026-03-12 07:38:58 +00:00
Claudio Ortolina
08f7565d44
Replace inspect(reason) with friendly error messages
...
Closes #81
2026-03-05 20:25:13 +00:00
Claudio Ortolina
871f4b3554
Extract ListeningStats out of ScrobbleActivity
2026-02-27 12:16:38 +00:00
Claudio Ortolina
e9b9717b08
Inline templates inside LV modules
2026-02-24 17:20:21 +00:00
Claudio Ortolina
c19ca503e5
Remove TODOs around replacing components
2026-02-17 08:09:00 +00:00
Claudio Ortolina
48c7d16c89
Consolidate a few components
2026-02-10 19:32:28 +00:00