- Invite flow: admin issue/revoke on join requests, public single-use claim links (hash-only tokens, 7-day expiry, no state reveal), claim creates the Member account and marks the request accepted - Gallery: admin status page plus resync endpoint; sync refreshes thumbnails whose content changed; tools/gallery contract and checker - Docs: public content page, admin-only operator runbook, api.md invite/gallery sections, all routes in the live API docs, docs reachability gate test - Screenshots cover the new pages; version 1.0.18
Gallery generator contract
This directory is the home for gallery generator scripts. Generators stay
runnable and reviewable here instead of in scratch. The checker
(check.py) validates sources against the contract below.
Output contract
- Filenames: lowercase
flyer-<slug>.jpgormeme-<slug>.jpg, hyphen slugs, no spaces, no dates, no version suffixes. - Sizes: flyers exactly 1080x1350, memes exactly 1080x1080. The 1280x720 memes on disk are legacy and grandfathered; new works never use it.
- Format: JPEG, sRGB, quality high enough that text stays crisp.
- Captions: one English line per work, plain words, no em or en dashes.
Captions live in
molodetz/gallery.pynext to the filename entry.
Handoff procedure
- Generate into a scratch directory, never straight into
static/media. - Run
make check-gallery GALLERY_DIR=<scratch>(or point the checker at the scratch dir directly). Fix every error; warnings are advisory. - Move the files into
molodetz/static/media, add theGALLERYentries with captions, runmake check-galleryagain with no arguments. - Commit code plus media together, deploy, then press Resync gallery under Admin, Gallery (staging) or rely on the boot sync (production rebuild).
Rules
- Never invent catalogue entries outside
GALLERY: the sync only reads what is catalogued, and the checker fails stray files. - Near-duplicates (perceptual hash distance 2 or less) are skipped by the sync and failed by the checker. Regenerate instead of renaming.
- Retired works stay listed in
RETIRED_GALLERYso every environment converges on the same visible set.