valknar and Claude Sonnet 5
2dc7a0063f
Add issue No. 02 "Obsession" + reusable image pipeline
...
Content
- 100 new plates under content/posts/02/ — one recurring red-haired model
across 10 editorial registers (Haute Couture, Film Noir, Boudoir,
Avant-Garde, Minimalism, Baroque, Street Style, Surrealism, Monochrome,
Nocturne), generated with flux-1.1-pro, face-swapped to a consistent
identity (FaceFusion), and upscaled (Upscayl + Remacri, 3328x4992).
- content/issues/02/_index.md; issue 01 -> status archived; hugo.toml params
(issueIds newest-first, issueNumber/Name/Season/Blurb).
Structure
- Plate bundles grouped by issue: content/posts/<issue>/<slug>/, with
build.render:never stubs so /posts/<issue>/ isn't emitted. nginx 301s the
legacy flat /posts/<slug>/ URLs to /posts/01/<slug>/. The /posts/ archive
uses .RegularPagesRecursive.
Image pipeline (scripts/, data/ gitignored)
- generate-images.py — Replicate flux-1.1-pro, 960x1440, idempotent.
- faceswap-images.py — FaceFusion batch-run, one consistent face.
- upscale-images.py — Upscayl + remacri-4x, long edge clamped to 4992.
- build-issue.py — prompts JSON -> content/posts/<issue>/*/index.md.
Build
- CSS now compiled by Hugo's css.TailwindCSS (partials/css.html +
templates.Defer); dropped the standalone Tailwind CLI step, concurrently,
and the gitignored static/css/main.css. Requires Hugo >= 0.161; Dockerfile
collapsed to a single hugomods/hugo:debian-node build stage.
pnpm-workspace.yaml: preferSymlinkedExecutables + allowBuilds.
Front end
- Pagination 8 per page.
- Lightbox: brand mark and category link out; robust SPA back/forward
(fetch before startViewTransition, single-flight guard, swallow the
transition abort rejection, popstate re-renders / reopens the viewer).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DZPmxGywFnAhmYJB1eh9fm
2026-08-29 21:11:24 +02:00
valknar and Claude Sonnet 4.6
869e3e00d2
Replace data/issues.json with content/_index.md files per issue
...
Issue metadata (title, description, season, status) now lives in
content/issues/XX/_index.md. terms.html reads from those pages via
$.Site.GetPage, driven by issueIds param in hugo.toml. Removes the
JSON data file and its generation from import-posts.py.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-18 18:48:27 +02:00