Entries now sit at places 1…max with gaps allowed (#28, nothing at #29,
#30). Moving onto an empty place just puts the entry there; onto a taken
place, the entries in between shift one step, stopping at the first
empty place, so lists without gaps reorder exactly as before. Inserts
push down only to the next gap; deleting can close up or leave the place
empty. New endpoint POST /api/lists/{id}/places inserts or removes empty
places or closes every gap; move and delete reply with every entry's
place. The podium shows an empty step for an empty #2 or #3, and a list
can't shrink below its last used place.
The editor loads every entry (no paging) and applies edits instantly
with the same rules (places.js mirrors places.go), queueing saves in the
background and reconciling with the server's reply. Type a place and
press Enter (↑/↓ move between boxes, Alt+↑/↓ moves the entry), drag, or
use the row menu. Empty runs show as rows with Add here and Remove, and
a toolbar shows the gap count, Close gaps and a Go to # box. Clicking an
entry opens it for editing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Module github.com/cdnutter/canon, binary/command cmd/canon, Docker
image and compose project "canon"
- Environment variables now use the CANON_ prefix
- Default site title is "<Your name>'s Canon" (or "Canon" with no name);
a Site title set in Settings still overrides it
- Existing topdeck.db (and WAL files) is renamed to canon.db on start
- README: upgrade notes, including moving the old compose volume
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Export
- GET /l/<list>/export?format=csv|txt downloads a list's titles in rank
order, one per line, with no header or other fields (CSV gets a UTF-8
BOM for Excel)
- Export menu in the list editor and, for the owner, on the public list
page; hidden lists stay owner-only
Custom lists
- New "Custom" category for anything not built in (sports teams,
drinks…): owner-named, slug from the title, entries added by hand or
from an unfiltered Wikipedia search
- Per-list artwork shape (square or tall), stored in a new lists.art
column (migration 2)
- Art can be uploaded while adding an entry, not only after
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A single Go binary with SQLite that serves a public page of the owner's
ranked lists (movies, TV, albums, songs, video games, theater) and a
login-gated editor.
- Lists of 1–65,535 entries (100 recommended), several per category
- Search-to-add via TMDB, TheTVDB, IGDB, Deezer/MusicBrainz, Wikipedia;
manual entry as a fallback
- Theater entries carry a production (Broadway, tour, …), venue and cast
- Artwork cached locally; URL override and uploads
- Drag, arrow and type-a-rank reordering; paginated for long lists
- 12 theme presets plus custom CSS
- First-run setup code or env-provided admin; bcrypt, rate-limited login,
CSRF-guarded JSON API
- Dockerfile and docker-compose.yml
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>