Skip to content

Changelog

The authoritative changelog lives in the repo root at CHANGELOG.md. This page is a snapshot for convenience.

Unreleased

Added

  • GitHub Actions deploy of the docs site to Cloudflare Pages (.github/workflows/cloudflare-pages.yml) via Wrangler direct upload. The live site is now https://spooty.pages.dev. The GitHub Pages workflow (pages.yml) stays in place for the future option of publishing from a public repo.

Fixed

  • Release builds were shipped unsigned when no keystore was configured (the app-release-unsigned.apk asset), which Android refuses to install. The release build type now falls back to the debug signing key, so the APK is always installable for sideloading.

1.0.0

Added

  • WebView wrapper around Spotify Web Player with desktop-UA baseline and Spicetify-style CSS/JS injection (core-spooty.js, core-spooty.css, spicetify-polyfill.js).
  • Ad engine with mute-by-default ad handling; skip available behind an explicit user toggle. Layered detection (webpack ListPlayer scan + DOM fallback), safe volume restore, skip guards (ad content-type/URI, duration cap, cooldown, rate limit).
  • Bundled themes: win95, spotify-dark, retro-player (color + CSS per theme), theme selection via the Theming skill workflow.
  • Native settings screen (ad mode, theme, background playback, desktop UA, DNS preconnect, renderer prewarm) wired to the in-app settings button over the JS bridge.
  • Foreground SpotifyPlaybackService mirroring playback state (media-session lockscreen controls) while the WebView's own audio element owns the real stream.
  • Connectivity-aware NetworkMonitor cache-mode switching.
  • Startup prewarm: renderer warm-up + DNS preconnect to Spotify origins, feature-guarded.
  • Unit tests for ad-mode mapping, theme parsing, and ad-mode behavior.
  • Clean-vector placeholder launcher icon (adaptive with monochrome layer) pending a proper logo.
  • GitHub Pages landing page + project docs built with MkDocs Material (mkdocs.yml, docs/) and deployed by .github/workflows/pages.yml.
  • CI workflow_dispatch trigger with optional unsigned-release-APK build for on-demand sideloading.

Changed

  • AGENTS.md now mandates the branch → full local sweep → PR → CHANGELOG → green-merge workflow for all agents; the docs site mirrors it under docs/contributing.md.
  • Added a gitignored notes/ scratch space for deferred items (e.g. enabling Pages later).

Fixed

  • SpootyApplication used a nonexistent androidx.webkit API (Profile.preconnect / WebViewFeature.PRECONNECT); rewrote against real APIs; optimization skill updated to match.
  • SettingsActivity called a LinearLayout receiver extension without a receiver.
  • Playback service rewritten on media3-only APIs (no legacy media compat) with main-thread routing for JS bridge calls.

Security

  • WebView locked down: JS enabled only for loaded content, universal/file access disabled, MIXED_CONTENT_NEVER_ALLOW, usesCleartextTraffic = false, SSL errors always cancelled.
  • All JS→native bridge methods carry @JavascriptInterface.