Wanted, not built. Bugs live in ISSUES.md. Source: verse-inbox.md (2026-07-16).
Design north star: Apple's own apps (Music, Files) — take inspiration from their philosophy.
Move today's single screen into a Library tab.New Home tab: bigMusictitle, search bar beneath, playlists, most-played albums, most-played tracks.Sources/App/HomeView.swift.Bottom tab bar for Home + Library—Sources/App/RootView.swift, which also owns the mini player and the player sheet so they survive tab switches and navigation.Fold the options/burger menu intoOne+, change that icon to three dots.ellipsis.circlemenu on the Library tab.- Play-count tracking landed with it:
playCount/lastPlayedonLibraryItem, counted inCoordinator.start. This is the data Wrapped needs too.
"Album" is a folder that directly holds tracks — this library has no album tag, and the folder tree is the organization. Revisit if real album metadata ever appears.
Still open here: more tabs (Locations, per Jellyfin below).
Minimize chevron instead of the drag bar— top right in a dim circle (SoundCloud style).Album art top-center, square corners.Burger menu— bare dots beside the title (Apple Music style): Info / Like / Share.View Track / View Artist— deep-links from the sheet into the Library stack (Coordinator.DeepLink; RootView flips the tab, LibraryView drives itsNavigationPath). View Track = the track's folder (files only); View Artist = the ArtistPage.AirPlay at the bottom— Apple-Music bottom row: Lyrics · AirPlay · Queue.Glass play button(glassEffect).- Lyrics is a fullscreen page: close top right, wave scrubber (real decoded audio via
Sources/Core/Waveform.swiftfor AVFoundation-readable files, Files-style ticks for VLC-only codecs and streams), play bottom left, queue bottom right. 2026-07-19: the scrubber moved inside the track pill (user request), and decoded waveforms now cache to disk (Caches/waveform/) — first open draws ticks until the decode lands, every later open is instant. - Lyric-into-artwork rendering: disabled 2026-07-18, then deleted entirely 2026-07-19 (user request). Lock screen and CarPlay always show the real cover; per-line lyrics live in the Live Activity, plus the optional CarPlay Lyrics artist-field toggle in Settings.
- 2026-07-18 shape (supersedes the rest): Apple Music pill — art left, title middle, play + forward right, no swipe gestures. Always attached, with a dimmed "Not Playing" idle state so the dock looks identical on boot and mid-song.
- Sits in
.tabViewBottomAccessory(iOS 26) rather than a hand-rolledsafeAreaInset, so it rides above the tab bar's glass pill instead of sitting flush under it. That container draws its own capsule and material — don't add a background inside it or you nest two capsules. An EMPTY accessory still renders a blank capsule — that's why the idle state exists.
- Playlists / Artists / Albums / Songs rows on the Library root (Apple Music style, see
reference/music-library.png), each a big-title page with a sort menu (Title / Date Added / Last Played / Most Played).Sources/App/CollectionsView.swift. - Search is a dock pill (
Tab(role: .search)) with its own page; no search bars on Home or Library. Guarded byUITests/SearchTests.swift. - Favourites landed as its own collection row (2026-07-18), not a filter — liked tracks with the same sort menu.
- 2026-07-19: the collection rows are inlaid per the reference (user request) — no card behind them, big title, accent-tinted icon. The folder cards below keep the grouped look.
- Still open: grid/list toggle, Downloads filter, "imports" shelf on Home.
Pick made: (a) import summary sheet — before committing an import, show what was found,
where it goes, and a cover/metadata preview. Options (b) bulk metadata pass and (c)
Artist - Title filename parsing were declined. Related shipped piece: per-file
"Fetch Metadata" (embedded tags via AVAsset) in the hold menu; online lookup (MusicBrainz)
not built.
Replace with something new — a CD or vinyl.CD afterreference.jpg(the Yeezus cover): dark disc, vivid iridescence through the left and right sectors, near-black through top and bottom, soft radial streaks, and the solid red tape square across the right rim. Vinyl was drawn first and dropped.- The sheen and the red square are sanctioned exceptions to the no-gradient / monotone rules,
and they are icon-only. Those rules govern UI chrome (
.tint(.white), no colored chrome) and still hold everywhere else. Do not "fix" this icon by flattening or de-colouring it. reference.jpgin the repo root is the target. Compare against it before changing the drawing.- 2026-07-18: sheen reduced to two hues (green/violet), five tonal steps, dark floor 0.12; red tape narrowed to the reference's 1.22 tall ratio.
- 2026-07-19: sheen replaced with 14 colour stops sampled off the reference at the
reference's own angles (dark top/right, green→silver upper-left, pink→cream lower-left,
yellow bottom, magenta→violet lower-right); hard binary spokes,
HUES/LEVELSknobs gone. Reference moved toReference/icon.jpg(external rename). - 2026-07-19: alternate icons — Settings › Appearance › App Icon: Red (default), Classic
(the old green/violet disc), Purple (light MiniDisc after
Reference/icon2.jpg, drawn bymakeicon purple). Alternates live inAppIcon-Classic/AppIcon-Purpleiconsets, wired viaASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMESinproject.yml. - Regenerate with
Tools/makeicon.swift(not in any target; see the header for the command). Current knobs:SQH/SQL/SQR/SQC(tape height / left edge / right edge / corner radius),HUES/LEVELS(sheen),FLAT=1for a no-sheen disc,vinylas the style arg for the old one.
LibraryItem.liked toggles from the player's burger menu; browsing landed the same day as a
Favourites row on the Library collections (liked tracks, same sort menu).
User asked for "a feature heavy settings page to configure each personalization even add
themes". Sources/App/SettingsView.swift, gear on Home's toolbar. Keys in Pref, read by
core via the same constants:
- Appearance / themes: accent colour picker. White stays the default — the monotone rule still governs the stock look; non-white tints are a user-picked, Settings-sanctioned exception (same spirit as the icon carve-out).
- Mini player: optional wave scrubber in the dock pill (takes the artist line's slot, so the pill height never changes; drag to seek). Off by default — the Apple-Music pill stays stock.
- Lyrics: CarPlay Lyrics toggle (
lyricsInTextFieldFallback— current line in the artist field). The lyric-into-artwork renderer was deleted entirely (2026-07-19, user request); artwork is always the real cover. - Playback: SponsorBlock on/off (default on, registered in
Pref.registerDefaults()). - Storage: clear lyrics/artwork/waveform caches — also forgets the negative "nothing found" markers, so every track retries lookup on next play.
Not built: per-setting search, app-icon switcher, light mode (app is dark by design). Add if ever asked.
- Connect to Jellyfin servers.
- Files-app-style Locations tab: browse and connect to a server alongside local folders.
- Track plays over time (the data "most played" needs too).
- Spotify-Wrapped-like recap, shown at year end on the same date Spotify uses (~December 22), matching their tracking window.