Files
roux/hugo.toml
T
valknarandClaude 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

69 lines
1.6 KiB
TOML

baseURL = "https://roux.pivoine.art/"
locale = "en"
title = "Roux"
enableRobotsTXT = true
enableGitInfo = false
[pagination]
pagerSize = 8
[taxonomies]
category = "categories"
tag = "tags"
issue = "issues"
[outputs]
home = ["HTML", "RSS", "JSON"]
page = ["HTML"]
section = ["HTML"]
taxonomy = ["HTML"]
term = ["HTML"]
[params]
description = "Roux is a slow-publishing fashion journal — one hundred photographs at a time. Editorial, couture, beauty and backstage plates."
author = "Roux Editorial"
issueIds = ["02", "01"]
issueNumber = "02"
issueName = "Obsession"
issueSeason = "Autumn MMXXVI"
issueBlurb = "One hundred plates in thrall to a single body — a bared shoulder, a parted mouth, silk slipping loose."
siteURL = "https://roux.pivoine.art"
umamiSrc = "https://umami.pivoine.art/script.js"
umamiId = "df675ca7-f82a-463b-89aa-f67c1f56ed68"
[markup.goldmark.renderer]
unsafe = true
[build]
[build.buildStats]
enable = true
[[build.cachebusters]]
source = 'assets/notwatching/hugo_stats\.json'
target = 'css'
[[build.cachebusters]]
source = 'assets/css/main\.css'
target = 'css'
[module]
[[module.mounts]]
source = 'assets'
target = 'assets'
[[module.mounts]]
source = 'hugo_stats.json'
target = 'assets/notwatching/hugo_stats.json'
disableWatch = true
[security.exec]
allow = ['^(dart-)?sass$', '^go$', '^git$', '^node$', '^npx$', '^postcss$', '^tailwindcss$']
[imaging]
quality = 85
resampleFilter = "lanczos"
[imaging.exif]
disableDate = false
disableLatLong = true
[sitemap]
changefreq = "monthly"
priority = 0.5