Audited the ICON set for consistency: minus was defined but never referenced anywhere (circleMinus already covers Unsubscribe). Everything else checked out. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019Tk3nAVF6n4dtjQS17FRFr
50 lines
3.6 KiB
Markdown
50 lines
3.6 KiB
Markdown
# To do
|
|
|
|
## Errors in the log
|
|
|
|
- [ ] **Westenberg.** The only failing feed anyone subscribes to. The Hacker News stars list still
|
|
gives `joanwestenberg.com/rss`, which is a 404; the feed is now `joanwestenberg.com/feed`.
|
|
Nothing for ipx to fix; subscribe to the new URL directly.
|
|
|
|
## Icons
|
|
|
|
- [x] **Audit the icon set for consistency.** Checked every glyph in `ICON` (`web/index.html`)
|
|
against its source, weight, sizing, and every place it's used — both the `${ICON.x}` template
|
|
calls and the `data-icon="x"` lookups the startup loop wires up (`web/index.html:713`). Found one
|
|
real problem: `minus`, a bare uncircled minus glyph, was defined but never referenced anywhere;
|
|
`circleMinus` already covers the one place a minus-shaped icon is used (Unsubscribe). Removed it.
|
|
Everything else checked out: `flag`'s regular weight against `flagOn`'s solid is the standard
|
|
outline/filled toggle idiom, not a mismatch; icon sizing is one shared 16px base rule with three
|
|
narrowly-scoped overrides; `caret` is deliberately reused (not duplicated) for both the folder
|
|
triangle and the sort arrow, rotated correctly per context; play/pause swapping is symmetric.
|
|
(`web/index.html`)
|
|
|
|
## Directory Overhaul
|
|
|
|
- [ ] **Give feeds a real category, from the feed itself.** `ParsedFeed` only carries per-episode
|
|
`categories` (`src/feed.rs:24`); nothing at the channel level survives parsing today, so there is
|
|
nothing to browse the directory by. Parse `<itunes:category>` (and its `<itunes:subcategory>` if
|
|
present) off the channel the same way entry categories already are, keep the first one a feed
|
|
reports rather than building a multi-tag facet, and add it to `FeedSummary` and the feeds table
|
|
via a migration. Most feeds will not carry one; a feed with none counts only under "All".
|
|
(`src/feed.rs`, `src/db.rs`)
|
|
- [ ] **Expose category on `/api/popular` and `/api/directory`.** `PopularRow` (`src/web.rs`) is id,
|
|
title, image, subscribers, subscribed today; add `category: Option<String>` once a feed carries
|
|
one, so the client can group and filter without a second request.
|
|
- [ ] **Replace the flat alphabetical list with a category rail over an artwork grid.** Today
|
|
Directory is a single-column list of rows: a thumbnail, a title, a subscriber count, a subscribe
|
|
button (`renderListed`/`listFeeds`, `web/index.html:1649`). Put a horizontal row of category chips
|
|
above it — "All" plus whatever categories actually occur in the catalogue, never an empty one —
|
|
and turn the list itself into a grid of square cover-art tiles with the title underneath: podcast
|
|
art is designed to be recognized at a glance, the way the app's own iPod-screen styling already
|
|
leans on imagery over text. Keep the subscriber count as a small corner badge (the same treatment
|
|
`unread` counts already get in the feed list) and move the subscribe button to appear on
|
|
hover/focus instead of sitting on every row permanently. Selecting a chip filters the grid in
|
|
place; the active chip gets the EQ-amber underline (`--accent2`) the level meter already uses,
|
|
rather than a new color. No new palette and no new typeface — reuse `--bg`/`--fg`/`--accent`/
|
|
`--accent2` and the existing Lucida Grande stack so Directory still looks like the rest of ipx, not
|
|
a bolted-on card kit: no border, shadow or radius beyond what the app already uses elsewhere. On
|
|
phone width the chip row scrolls horizontally in place rather than wrapping, so it never pushes
|
|
the grid down. Popular can stay a plain top-ten list for now, or get the same tile treatment later
|
|
— worth deciding separately rather than folding into this. (`web/index.html`)
|