Skip to content

feat: demo mode + README redesign#1

Merged
danfry1 merged 4 commits into
mainfrom
feat/demo-mode
Apr 1, 2026
Merged

feat: demo mode + README redesign#1
danfry1 merged 4 commits into
mainfrom
feat/demo-mode

Conversation

@danfry1
Copy link
Copy Markdown
Owner

@danfry1 danfry1 commented Apr 1, 2026

Summary

  • Demo mode (waxon demo) — runs the full TUI with curated fake data and simulated playback, no Spotify account needed. Build-tagged (-tags demo) so demo assets never ship in release binaries.
  • README redesign — new vinyl record logo, hero GIF at top, feature sections with inline GIF showcases for navigation, now playing, search, browsing, and command mode.
  • VHS tape scripts — 9 scripted recordings in demo/tapes/ for reproducible GIF generation via make record.
  • Bug fixes — sidebar race when playlists load before WindowSizeMsg, art cache concurrent access race, queue duplication on add-to-queue + next.

Demo data

8 artists with real album art and full tracklists: Tame Impala (Currents), Nirvana (Nevermind), Daft Punk (Random Access Memories), Prince (Purple Rain), Pink Floyd, Fleetwood Mac, Radiohead, Miles Davis. 4 playlists with generated cover art.

New Makefile targets

  • make demo — build and launch demo mode
  • make record — record all VHS tapes to GIFs
  • make record-one TAPE=<name> — record a single tape

Test plan

  • make check passes (fmt + lint + test)
  • make demo launches TUI with fake data, playback simulation works
  • go build . (without demo tag) produces clean binary, waxon demo prints stub message
  • make record-one TAPE=navigation produces a GIF in demo/recordings/
  • README renders correctly on GitHub with logo and GIF placeholders

danfry1 added 4 commits April 1, 2026 19:54
Adds an optional ArtworkProvider interface that source implementations
can satisfy to serve embedded artwork instead of making HTTP requests.
The Model detects it via type assertion at construction time and uses
it in all four image-fetch methods (fetchNPArt, fetchArtwork,
fetchPlaylistArt, fetchSidebarIcons), falling back to FetchImage when
no embedded art is available.
DemoSource provides a fully functional source.RichSource backed by fake
data and wall-clock playback simulation. Build-tagged with `demo` so it
is excluded from normal builds. Temporary stub data functions in
data_stub.go will be replaced by curated content in a later task.
Build-tagged demo mode (go build -tags demo) that runs the full TUI
with fake data and simulated playback — no Spotify account needed.

- DemoSource implementing RichSource with wall-clock playback simulation
- Curated playlists with famous tracks (Tame Impala, Nirvana, Daft Punk,
  Pink Floyd, Radiohead, Fleetwood Mac, Miles Davis, Prince)
- Embedded album art (Currents, Nevermind, RAM, Purple Rain, Dark Side,
  Rumours, OK Computer, Kind of Blue) + generated playlist covers
- ArtworkProvider interface for serving embedded art without HTTP
- 9 VHS tape scripts for reproducible GIF recordings
- Makefile targets: make demo, make record, make record-one
- Fix sidebar race when playlists load before WindowSizeMsg
- Fix art cache race with sync.Once
- Fix queue behavior to match real Spotify (userQueue consumed on next)
- Add vinyl record logo in Lume color palette
- Hero GIF (full-tour) at top for immediate visual impact
- Feature sections with inline GIFs: navigation, now playing,
  search, browsing, command mode
- Streamlined layout: logo → tagline → GIF → install → features
@danfry1 danfry1 merged commit 079b417 into main Apr 1, 2026
2 checks passed
@danfry1 danfry1 deleted the feat/demo-mode branch April 1, 2026 22:51
danfry1 added a commit that referenced this pull request Apr 6, 2026
* feat: add ArtworkProvider interface for embedded art support

Adds an optional ArtworkProvider interface that source implementations
can satisfy to serve embedded artwork instead of making HTTP requests.
The Model detects it via type assertion at construction time and uses
it in all four image-fetch methods (fetchNPArt, fetchArtwork,
fetchPlaylistArt, fetchSidebarIcons), falling back to FetchImage when
no embedded art is available.

* feat: add DemoSource implementing RichSource with playback simulation

DemoSource provides a fully functional source.RichSource backed by fake
data and wall-clock playback simulation. Build-tagged with `demo` so it
is excluded from normal builds. Temporary stub data functions in
data_stub.go will be replaced by curated content in a later task.

* feat: add demo mode with curated data, album art, and VHS recordings

Build-tagged demo mode (go build -tags demo) that runs the full TUI
with fake data and simulated playback — no Spotify account needed.

- DemoSource implementing RichSource with wall-clock playback simulation
- Curated playlists with famous tracks (Tame Impala, Nirvana, Daft Punk,
  Pink Floyd, Radiohead, Fleetwood Mac, Miles Davis, Prince)
- Embedded album art (Currents, Nevermind, RAM, Purple Rain, Dark Side,
  Rumours, OK Computer, Kind of Blue) + generated playlist covers
- ArtworkProvider interface for serving embedded art without HTTP
- 9 VHS tape scripts for reproducible GIF recordings
- Makefile targets: make demo, make record, make record-one
- Fix sidebar race when playlists load before WindowSizeMsg
- Fix art cache race with sync.Once
- Fix queue behavior to match real Spotify (userQueue consumed on next)

* docs: redesign README with logo, hero GIF, and feature showcases

- Add vinyl record logo in Lume color palette
- Hero GIF (full-tour) at top for immediate visual impact
- Feature sections with inline GIFs: navigation, now playing,
  search, browsing, command mode
- Streamlined layout: logo → tagline → GIF → install → features
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant