Roux
A slow-publishing fashion journal — one hundred photographs at a time.
Editorial, couture, beauty and backstage plates.
Live: roux.pivoine.art
Stack
| Layer | Tool |
|---|---|
| Static site generator | Hugo Extended |
| CSS | Tailwind CSS v4 |
| JavaScript | Vanilla (no framework) |
| Package manager | pnpm |
| Server | nginx (Docker) |
Development
pnpm install
pnpm dev # Tailwind watch + Hugo dev server (http://localhost:1313)
Build
pnpm build # compile CSS → hugo --minify → public/
The compiled CSS at static/css/main.css is a build artefact and gitignored. Always run pnpm build:css (or pnpm build) before committing changes that affect Tailwind output.
Content
Posts live in content/posts/<slug>/ as Hugo page bundles. Each bundle contains:
index.md— frontmatter withplate,title,description,categories,tags,issues, optionalfeatured: true<slug>.png— the plate image (used for thumbnails, lightbox, og:image)
Issues are defined in content/issues/<id>/_index.md.
Importing posts
Content is sourced from ~/projects/ginger/posts.csv and matching images in ~/projects/ginger/images/final/selected/:
python3 scripts/import-posts.py
This creates or updates page bundles, assigns plate numbers (sorted alphabetically by filename for stability), normalises descriptions, and copies images.
Design tokens
All colours, fonts, and spacing are defined in assets/css/main.css inside @theme {} and mirrored as CSS custom properties in :root. Edit there — not in a Tailwind config file (v4 has none).
Key tokens: --color-paper --color-ink --color-roux --font-display --font-serif --font-sans --pad --gap
Deployment
The repo includes nginx.conf and a Dockerfile for containerised deployment. Build the image and serve public/ via nginx. Analytics (Umami) are injected only when HUGO_ENVIRONMENT=production.
License
All editorial content, photographs, and design © Roux MMXXVI. All rights reserved.
Contents are explicitly excluded from AI/ML training use without written consent.