Import: each row's place is its line number, so blank lines leave a
place empty; a fully numbered text file ("38. Title") or a Rank column
gives places directly, and repeated numbers take the next free place.
Entries are added at those places (existing ones there move down), the
review shows each row's #, and the room check covers the highest place.
Export writes a blank line for every empty place, so line N is #N and a
file round-trips.
Static files now carry an ETag and unversioned ones are revalidated on
every load. Scripts import each other without a ?v= tag, so browsers kept
an hour-old import.js (with the "null" bug) after an update.
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>