ROADMAP.md
Rama main · réplica de lectura del repositorio original.
# Roadmap
Ideas and planned work for **Louis**. Order is not a commitment; priorities may shift.
Louis edits **playlists**. Linking a playlist to a physical Make Your Own card stays in the Yoto app.
## Planned
### [Yoto Icons](https://yotoicons.com/) integration
~~Browse and apply community 16×16 pixel icons from [yotoicons.com](https://yotoicons.com/) when editing playlists / tracks (Yoto `display.icon16x16`).~~ — **done** (Track Art Editor → Icons tab: Yoto public + yotoicons.com search).
### Pixel art editor
~~In-app 16×16 editor for custom Yoto display icons — draw or tweak pixel art, then save as the track/chapter icon alongside the playlist.~~ — **done** (Track Art Editor → Draw tab).
### Auto long-track split
~~When a YouTube source exceeds Yoto’s per-track duration cap (~1 hour), automatically split it into sequential playlist tracks (e.g. Part 1 / Part 2) on extract/save so long podcasts and albums still fit.~~ — **done**: sources over 55 minutes expand into connected playlist slats on add; save downloads once and ffmpeg-splits into MYO chapters.
### Home Assistant add-on
~~Package Louis as a [Home Assistant](https://www.home-assistant.io/) add-on so users can install and run it from their HA instance (config via add-on options, data volume for the audio work dir).~~ — **done**: see [homeassistant/louis/DOCS.md](homeassistant/louis/DOCS.md). Requires multi-arch GHCR (`amd64` + `arm64`) on `v*` releases.
### Docker Hub (and image registries)
~~Publish official images beyond GHCR — e.g. Docker Hub — so `docker pull` / compose examples work from the registries people already use. Confirm whether GHCR alone is enough or multi-registry release is worth the maintenance.~~ — **done**: each `v*` release pushes the same multi-arch image to **Docker Hub** (`stuartromanek/louis`) and **GHCR** (`ghcr.io/stuartromanek/louis`). Home Assistant add-on still pins GHCR.
### Other hosting / “one-click” images
~~Explore pre-canned deploy targets that consume container images (Railway templates, Coolify, CasaOS / Umbrel-style app stores, etc.) so self-hosters can spin Louis up without hand-rolling compose.~~ — **done**: homelab one-click via [docs/HOSTING.md](docs/HOSTING.md) — Portainer template ([`deploy/portainer/`](../deploy/portainer/)) as the supported path; Coolify docs; best-effort CasaOS bundle in [`deploy/casaos/`](../deploy/casaos/) (unmaintained). Cloud PaaS documented as poor fit; not templated.
### Horizontal Playlists scrolling
~~Investigate and fix horizontal scrolling in the Playlists carousel~~ — **done**: continuous wheel/drag pan (no snap), thin scrollbar, keyboard arrows; fan metaphor kept.
### Smartphone-centric UI
~~Phone layout for the three-panel editor~~ — **done**: below 600px, Search / Library tabs with nested playlist detail, Add to playlist drawer, phone header (Update + menu); denser YouTube rows; desktop/tablet two-column grid unchanged at `sm+`.
### “Add to Desktop” in mobile menu
~~Install / “Add to Home Screen” affordance in the phone overflow menu (uses the browser install prompt / platform instructions). Manifest + apple web-app meta already target standalone; this is the in-app entry point.~~ — **done**: phone Menu + tablet/desktop status bar; native `beforeinstallprompt` when available, otherwise a persistent toast with Share / Install steps (top on iOS so Safari’s Share control stays clear). Swan favicons + manifest icons.
### Resume pending playlist edits
~~Persist dirty playlist drafts across refresh~~ — **done**: pending (and live dirty) drafts are stored in `localStorage` and restored when the playlist is opened again.
### YouTube chapters → tracks
Optional per-result toggle to expand YouTube chapters into separate playlist tracks. Must compose cleanly with auto 55-minute long-track splitting (same `split` time-range fields).
### Desktop app wrapper (Electron)
~~Package Louis as a cross-OS executable~~ — **done**: Electron host, bundled yt-dlp/ffmpeg, Settings credentials, DMG/NSIS on the same `v*` Release as GHCR. See [docs/DESKTOP.md](docs/DESKTOP.md) and [docs/DESKTOP_SHIP.md](docs/DESKTOP_SHIP.md). Stretch: Linux AppImage, auto-update, signed builds.
### Experiment with yt-dlp search backend
~~Spike replacing YouTube Data API v3 search/metadata with bundled/`PATH` yt-dlp (`ytsearch` + `--flat-playlist`) so desktop users need no Google Cloud API key. Keep the existing `/api/youtube/search` response shape; optional Data API fallback for self-host.~~ — **done**: `/api/youtube/*` uses bundled yt-dlp when `LOUIS_YOUTUBE_API_KEY` is unset; Data API remains an optional fallback. Desktop first-run no longer requires a YouTube key.
### Audio trim
~~Cut intros/outros (and similar) before save. Non-trivial UX; trim points per track in the playlist editor.~~ — **done**: scissors on a YouTube track or split group; waveform flyout/tray; keep-region re-splits when still over 55 minutes.
### YouTube URL paste
~~Paste a video, Shorts, public playlist, or channel URL in Search to load it (playlist `list=` wins over a watch URL’s `v=`). Check rows to add them as a group.~~ — **done**.
### Playlist create, rename, and delete
~~Name a new playlist before tracks can be added; confirming the name creates it on Yoto immediately (empty, or with tracks already picked in Search). Rename / Delete from the playlist header menu.~~ — **done**.
### Playlist artwork
~~Generate DiceBear covers for playlists: auto-applied on create, and Artwork in the playlist menu (generate / history / save).~~ — **done**.
## Done / shipped
Tracked in git history, [CHANGELOG.md](CHANGELOG.md), and the README feature list rather than here. Recent highlights: Track Art, trim, auto-split, normalize at Update, batch Update from Menu, playlist artwork, faster open/library/Update overlay, homelab hosting (Portainer / HA / Docker Hub), Add to Home.