Skip to content

Weekly Feature Review — 2026-10-02 #218

Description

@rowkav09

Forgotten Favorites & Rediscovery Radar

What
A dedicated local intelligence module and dashboard component that analyzes local play counts, last-played timestamps, and rating history to highlight highly-rated or previously frequently played tracks and albums that have not been played in over 90–180 days.

Why
Music collectors with large Plex libraries frequently lose track of high-quality music in their collection. Musearr already mirrors play history and track metadata locally into PostgreSQL; surfacing forgotten favorites leverages existing data to deliver immediate, personalized discovery value without requiring external AI or third-party cloud connections.

Implementation

  • DB/Core: Add SQL analytical queries in packages/db (getForgottenFavoritesQuery) joining local tracks, albums, and play history/last-played timestamps.
  • API: Expose a new endpoint GET /api/v1/intelligence/rediscovery in apps/api/src/routes/intelligence.ts.
  • UI: Render a "Rediscovery Radar" card and dedicated view in apps/web/app/ allowing the user to browse forgotten tracks and optionally create a seed playlist from any rediscovery track.

Difficulty
Medium

Priority
Build now


Interactive Seed-Based Playlist Proposal & Preview Mode

What
An interactive visual workspace in the web dashboard where users can generate playlist proposals from seed tracks, preview the deterministic track list (including missing vs available status), re-order or exclude tracks, and manually trigger optional Plex sync or Lidarr acquisition.

Why
Musearr currently has a seed-based playlist planner backend in packages/intelligence, but playlist generation results are less accessible to end-users without an intuitive web dashboard interface to inspect and adjust recommendations before publishing. An interactive preview aligns directly with Musearr's "review-first, owner-consented" core philosophy.

Implementation

  • UI: Build a new route apps/web/app/playlists/new with a seed-track selector, real-time deterministic planner trigger, track list preview table, and action controls (Publish to Plex, Search Lidarr).
  • API: Expand apps/api/src/routes/playlists.ts to accept track exclusion parameters and handle explicit draft playlist saves/updates in PostgreSQL.
  • Contracts: Add payload schema contracts in packages/contracts for playlist draft previews and editing operations.

Difficulty
Medium

Priority
Build now


Sync Run Health Analytics & History Filtering

What
An upgraded sync observability view on the dashboard providing granular filtering (by status, library type, and date range), failure trend visualization, and one-click manual retry triggers for individual failed libraries.

Why
While Musearr added robust classified failure handling (sanitiseSyncFailure), power users managing large libraries need historical context to diagnose whether sync errors are recurring (e.g. transient network timeouts vs persistent schema/token issues) without parsing raw server logs.

Implementation

  • API: Update apps/api/src/routes/sync.ts with pagination and status query parameters (status=failed|completed, libraryId).
  • UI: Enhance apps/web/app/_components/sync-recovery-state.tsx and sync settings page with filter dropdowns, duration metrics, and historical run comparison.

Difficulty
Small

Priority
Build soon


Lidarr Missing Track Acquisition Dry-Run & Approval Queue

What
A review-first interface and queue for missing track acquisition. When playlist generation identifies missing tracks, instead of immediate automatic download requests, Musearr stages proposed imports in an approval queue showing confidence scores, track metadata, and Lidarr status.

Why
Automated media acquisition can pollute Lidarr libraries with unwanted releases or low-quality matches. A dry-run approval queue gives self-hosters full control over what gets requested, supporting Musearr's safety principles while seamlessly bridging local library generation with automated downloading.

Implementation

  • Integrations: Add dry-run simulation mode to packages/lidarr.
  • DB: Store proposed acquisitions in a lidarr_acquisition_queue table with status (pending, approved, rejected).
  • API/UI: Create /api/v1/lidarr/queue endpoints and a "Missing Tracks Queue" dashboard tab with batch approval actions.

Difficulty
Medium

Priority
Build soon


Scheduled & On-Demand Local Database Backup & Restore Utility

What
An automated background task and single-click admin utility in the dashboard to generate compressed PostgreSQL database snapshots (pg_dump), retain backup history, and allow quick local restores.

Why
As Musearr accumulates historical sync data, local intelligence metrics, daily briefing archives, and custom playlist drafts, losing PostgreSQL state in Docker container recreations can be frustrating for self-hosters.

Implementation

  • Worker: Add a scheduled backup job in apps/worker invoking native pg_dump to a mounted /backups volume.
  • API: Endpoint /api/v1/system/backups to list and download snapshots.
  • UI: Add a "Data & Backups" tab in dashboard settings.

Difficulty
Small

Priority
Later


Customizable Daily Briefing Schedule & Multi-Channel Delivery

What
Allow users to customize the exact daily time and delivery schedule for briefing generation, with support for additional webhook notification channels (e.g., Matrix, Ntfy, or Gotify) alongside Discord.

Why
Currently, daily briefings run on a fixed background worker cron schedule and only support Discord webhooks. Expanding webhook options and customizable schedule times ensures self-hosters using non-Discord notification services receive daily briefings on their preferred platforms at their preferred times.

Implementation

  • Config/DB: Add notification provider and schedule cron configuration to system settings.
  • Worker: Abstract webhook delivery in apps/worker to support generic JSON HTTP payloads (Ntfy/Gotify/Matrix).
  • UI: Add briefing schedule and webhook channel selector in Settings.

Difficulty
Medium

Priority
Later


Top 3

1. Interactive Seed-Based Playlist Proposal & Preview Mode

Why this should be built next:
The core seed-based playlist generation engine and deterministic planners (packages/intelligence, packages/musicbrainz) are already implemented, but users lack an intuitive dashboard workflow to generate, inspect, modify, and confirm playlist proposals before publishing to Plex. Delivering this feature immediately unlocks the full user-facing value of the underlying playlist engine.

Implementation Plan:

  1. API & Contracts Expansion: Extend packages/contracts and apps/api/src/routes/playlists.ts with endpoints to generate draft playlist proposals, fetch seed recommendations, and update proposed track lists with user exclusions.
  2. Dashboard UI Workspace: Create apps/web/app/playlists/new/page.tsx featuring a search/select input for seed tracks, algorithm parameter sliders (e.g. diversity, track count), and a real-time proposal preview table.
  3. Track Status & Action Indicators: Display clear badges on each proposed track showing availability status (In Library, Missing, Lidarr Queueable).
  4. Publishing & Integration Hooks: Add direct buttons to "Publish to Plex" (invoking packages/plex) or "Queue Missing in Lidarr" (invoking packages/lidarr), respecting user consent settings.
  5. Testing & Verification: Add Vitest unit tests in apps/api for playlist draft state management and Playwright frontend verification.

2. Forgotten Favorites & Rediscovery Radar

Reasoning:
Surfacing high-value music already owned in the user's Plex library provides instant gratification and reinforces Musearr's core identity as a local-first intelligence layer.

Implementation Outline:

  1. Write optimized SQL analytical queries in packages/db filtering tracks with high ratings/historical play counts but no recent plays (last_played_at < NOW() - INTERVAL '180 days').
  2. Add Fastify route /api/v1/intelligence/rediscovery returning grouped rediscovery items (Forgotten Albums, Hidden Gem Artists).
  3. Add a "Rediscovery Radar" widget on the Next.js home dashboard (apps/web/app/page.tsx) with quick actions to play in Plex or seed a new playlist.

3. Sync Run Health Analytics & History Filtering

Reasoning:
Self-hosters need clarity into background synchronization reliability over time to ensure their local library mirror remains accurate and up to date.

Implementation Outline:

  1. Extend packages/db sync run repository methods to support pagination, status filters, and time-range aggregations.
  2. Add query parameters (status, library_id, limit) to GET /api/v1/sync/history.
  3. Build a filtering header and sync duration bar chart in apps/web/app/_components/sync-recovery-state.tsx.

Best thing to build next: Interactive Seed-Based Playlist Proposal & Preview Mode

The core playlist planning backend is already functional in packages/intelligence, but lacks a user-facing preview and review interface. Building the interactive proposal UI gives users immediate hands-on control over deterministic playlist generation, turning an internal backend system into Musearr's standout feature.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions