{"adoption": {"forks": 48, "observed_at": "2026-08-28T04:05:45.182327+00:00", "stars": 1859}, "canonical_url": "https://ross.abutalabs.com/products/explo", "card": {"archived": false, "artifact_type": "application", "description": "Spotify's \"Discover Weekly\" for self-hosted music systems", "domain": ["audio", "self-hosted", "media"], "enriched": true, "function": ["http-server", "scheduling", "workflow-automation", "audio-processing", "search-engine"], "health_score": 98, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["LumePart/Explo"], "name": "LumePart/Explo", "platform": ["self-hosted", "go"], "pushed_at": "2026-08-11T16:56:00+00:00", "repo": "LumePart/Explo", "stars": 1859, "tags": ["music-discovery", "listenbrainz", "subsonic", "navidrome", "jellyfin", "plex", "discover-weekly", "playlist-import", "soulseek", "youtube-downloader", "automation", "docker", "linux", "web-server", "kubernetes"], "topics": ["airsonic", "navidrome", "subsonic", "mpd", "music-player-daemon", "jellyfin", "self-hosted", "emby", "plex-media-server", "listenbrainz"], "urls": [], "use_cases": ["get discover weekly recommendations for my self-hosted music server", "automatically import listenbrainz weekly exploration playlist into navidrome", "download recommended tracks from youtube and add them to jellyfin", "schedule automatic playlist creation based on my listening history", "import spotify playlists into my subsonic-compatible server", "find new music without using spotify"], "what_it_is": "Explo is a self-hosted web application that brings Spotify's Discover Weekly-style music discovery to self-hosted music servers like Navidrome, Jellyfin, Plex, and MPD. It fetches personalized playlists from ListenBrainz, downloads tracks via YouTube or Soulseek, adds metadata, and imports them as playlists into your music library.", "when_to_avoid": ["you use Spotify or another streaming service as your primary player", "you need real-time streaming recommendations rather than periodic playlist imports", "you cannot run Docker or a small Go service alongside your music server"], "when_to_choose": ["you run a self-hosted music server (Navidrome, Airsonic, Jellyfin, Plex, Emby, MPD) and want automated music discovery", "you scrobble to ListenBrainz and want its recommendations delivered into your own library", "you want scheduled, hands-off playlist curation with metadata tagging"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/explo", "repo": "LumePart/Explo", "role": "main", "score": 91}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:45.182327+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:15:57.857631+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7183572482427c5bc548e903637143de035ab28a0e5f4b3d251c29811ca0530e", "fetched_at": "2026-08-28T04:05:45.182327+00:00", "kind": "readme", "missing": false, "url": "https://github.com/LumePart/Explo"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 73, "rhythm": 94}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1027, "days_push": 22, "days_rel": 41, "gap_med": 10, "n_releases_24m": 30}, "score": 91, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}