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
This commit is contained in:
+12
-17
@@ -1,23 +1,18 @@
|
||||
### Stage 1: Build CSS with Tailwind v4
|
||||
FROM node:20-alpine AS tailwind
|
||||
WORKDIR /build
|
||||
COPY package.json pnpm-lock.yaml* ./
|
||||
RUN npm install -g pnpm && pnpm install --frozen-lockfile
|
||||
COPY assets/css ./assets/css
|
||||
COPY layouts ./layouts
|
||||
RUN pnpm build:css
|
||||
|
||||
### Stage 2: Build site with Hugo Extended
|
||||
FROM hugomods/hugo:exts-0.154.3 AS hugo
|
||||
### Stage 1: Build the site with Hugo Extended + Node (Tailwind runs inside Hugo)
|
||||
FROM hugomods/hugo:debian-node-0.165.0 AS hugo
|
||||
WORKDIR /site
|
||||
|
||||
# Copy everything EXCEPT node_modules
|
||||
COPY . .
|
||||
COPY --from=tailwind /build/static/css/main.css static/css/main.css
|
||||
# Content images are baked in via the import script; make sure they exist
|
||||
RUN hugo --minify --environment production
|
||||
# Install JS deps first so this layer caches independently of content changes.
|
||||
# Hugo's css.TailwindCSS execs node_modules/.bin/tailwindcss during the build;
|
||||
# pnpm-workspace.yaml sets preferSymlinkedExecutables so that shim is a symlink
|
||||
# Hugo accepts.
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||
RUN npm install -g pnpm && pnpm install --frozen-lockfile
|
||||
|
||||
### Stage 3: Serve with nginx
|
||||
COPY . .
|
||||
RUN hugo --minify --gc --environment production
|
||||
|
||||
### Stage 2: Serve with nginx
|
||||
FROM nginx:1.27-alpine
|
||||
COPY --from=hugo /site/public /usr/share/nginx/html
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
Reference in New Issue
Block a user