Files
ad/molodetz/templates/docs/prose/content.md
T
retoor 9fb4d65787 Member invites, gallery resync, content and operator docs
- 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
2026-10-06 02:56:08 +02:00

1.8 KiB

Galleries and content

The flyers and the memes are curated galleries. Every work is a source file plus a catalogue entry with its caption. Nothing is uploaded through the site: new works arrive with a deploy, and the database reconciles at boot.

Flyers

Flyers live at /flyers. New flyers are 1080 by 1350 (portrait). The first flyer in the catalogue is the featured one on the home page.

Memes

Memes live at /memes. New memes are 1080 by 1080 (square). Some older memes are 1280 by 720 (landscape) from the previous generation; they stay as they are.

How publishing works

  1. The source file lands in the media directory and the catalogue entry (filename, kind, caption) lands in the code, both through deploy.
  2. At boot the sync reads every catalogued source file and upserts the database row: position, dimensions, perceptual hash and a generated webp thumbnail.
  3. Near-duplicates are skipped: a work whose image hash is within a small distance of an already synced work is logged and left out, so an accidental double never shows twice.
  4. Removed works are retired, never hard-deleted: their rows are soft-deleted and disappear from the galleries.

An administrator can also press Resync under Admin, Gallery after a deploy. Resync re-reads the sources, refreshes thumbnails whose content changed, reports missing source files and retires removed entries. It never invents catalogue entries.

Freshness

Public pages are cached for seconds to minutes (landing, settings, sitemap each have their own short TTL), so a fresh deploy can take a moment to show everywhere. The exact TTLs are operator detail; see the operator runbook under Admin.

Old Dutch paths (/rol, /mensen, and friends) redirect with 301 to their English replacements; see API and authentication.