Commit Graph
100 Commits
Author SHA1 Message Date
valknarandClaude Sonnet 4.6 847a7bc6d1 feat: limit homepage gallery to 4 posts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:24:21 +02:00
valknarandClaude Sonnet 4.6 52c2b11fa9 content: add The Drowned Queen post with image and video prompts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:36:16 +02:00
valknarandClaude Sonnet 4.6 55ad9c2dde feat: banner plays video, opens lightbox with image+video; remove gallery and works counter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 18:40:49 +02:00
valknar 1edb3fc140 fix: image and video optimizations 2026-05-10 18:35:58 +02:00
valknar dade82664e fix: author card bio text size 2026-05-09 18:51:33 +02:00
valknar d4dcd61e88 fix: single page header width 2026-05-09 11:25:27 +02:00
valknarandClaude Sonnet 4.6 67bbeba586 content: rewrite Valknar author bio to match current body of work
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:28:29 +02:00
valknarandClaude Sonnet 4.6 e66da58826 feat: show all category badges on hero and post cards
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:09:30 +02:00
valknar 1bbdd33c0c feat: new post 2026-05-08 18:06:09 +02:00
valknar ea2610d4a8 feat: new post 2026-05-08 17:43:25 +02:00
valknarandClaude Sonnet 4.6 436223913e feat: add Prettier with go-template and toml plugins, format all files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 13:18:05 +02:00
valknar b78bc26322 feat: new post 2026-05-08 13:11:28 +02:00
valknar f2ce416ed8 feat: new post 2026-05-08 11:50:16 +02:00
valknar 6677085e3f fix(post): the pale pour 2026-05-07 21:15:55 +02:00
valknar 45926540e6 fix(post): the pale pour 2026-05-07 20:36:24 +02:00
valknarandClaude Sonnet 4.6 d6dd40fe5d feat: add prompt front matter structure, comment out generation notes block
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 20:32:23 +02:00
valknar fbccd4e2a2 New beginning 2026-05-07 20:22:02 +02:00
valknar 1376cbd266 fix: new post banner 2026-05-07 18:29:49 +02:00
valknar 62c8b20af7 feat: new post 2026-05-07 18:03:29 +02:00
valknar c69184efc9 fix: hex color uppercase 2026-05-03 12:10:42 +02:00
valknar fa1e84643d fix: featured drop label 2026-05-03 12:09:28 +02:00
valknarandClaude Sonnet 4.6 633ac2bd3a feat: add stem orange color token and badge-stem class
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 12:08:48 +02:00
valknar 4dd7e833a3 feat: new post 2026-05-02 18:06:48 +02:00
valknarandClaude Sonnet 4.6 0fd07614f0 feat: add float animation and pink drop shadow to header logo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 17:05:29 +02:00
valknarandClaude Sonnet 4.6 1ad6737a59 feat: new logo, regenerate all favicons and OG image, switch partial to img
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 12:58:05 +02:00
valknar 4d41c8fad4 chore: rember featured posts 2026-05-01 17:21:52 +02:00
valknarandClaude Sonnet 4.6 4ba22c4e34 refactor: prefix post folders with date, lock permalinks via slug
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 16:30:34 +02:00
valknar c151bf3349 fix: new featured post 2026-05-01 11:41:51 +02:00
valknarandClaude Sonnet 4.6 879cc18fd3 feat: simplify homepage to single hero, show all other posts in latest grid
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 11:41:04 +02:00
valknar 88441dc9c3 feat: new post 2026-05-01 11:36:21 +02:00
valknarandClaude Sonnet 4.6 57e4163133 fix: regenerate android-chrome-512x512.png from logo.svg, update manifest name
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 11:46:25 +02:00
valknar 7651bdd7b5 fix: featured drop label 2026-04-30 11:39:02 +02:00
valknar a7379670c9 fix: bulle time 2026-04-30 11:36:31 +02:00
valknar 99161d5237 feat: new post 2026-04-29 19:08:24 +02:00
valknar c5cfb13594 fix: featured drop label 2026-04-29 18:27:21 +02:00
valknarandClaude Sonnet 4.6 99a41ad127 feat: refine logo animation — bloom shrink + outer ring slow spin
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 18:08:39 +02:00
valknarandClaude Sonnet 4.6 70aa6f96d8 feat: add bloom pulse animation to header logo, glitch text-only
- Counter-rotating rings now also pulse outward from center (inner→outer ripple)
- Use standalone `rotate`/`scale` CSS properties so animations don't conflict
- Glitch animation scoped to logo text span only, not the SVG
- Footer logo remains static (logo-static)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 10:47:34 +02:00
valknarandClaude Sonnet 4.6 356098496d feat: animate header logo with counter-rotating rings, static in footer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 10:37:38 +02:00
valknarandClaude Sonnet 4.6 18e0e36f41 fix: simplify gradient lines to heat→pulse (drop frost stop)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 20:54:05 +02:00
valknarandClaude Sonnet 4.6 345f91e045 feat: use img.html partial for hero banner (WebP + srcset) and update CSS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 20:51:17 +02:00
valknar 60e3faa1ec fix: gradients 2026-04-28 20:06:30 +02:00
valknar e92bf122e2 fix: favicon.svg 2026-04-28 20:04:44 +02:00
valknar 6da4119cb4 fix: gradients 2026-04-28 20:01:17 +02:00
valknarandClaude Sonnet 4.6 b779a7541b feat: new polygon peony logo + updated OG image
- Replace logo partial with faceted low-poly peony bloom (v7: blush→heat)
- Update static/logo.svg (app icon, no background)
- Regenerate OG default image with new logo and correct tagline
- Update favicons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 18:51:32 +02:00
valknar 75235380cf feat: new post 2026-04-28 11:40:17 +02:00
valknar 65214a7720 feat: new post 2026-04-26 18:15:13 +02:00
valknar 0303b34be8 feat: new post 2026-04-25 17:38:17 +02:00
valknarandClaude Sonnet 4.6 d4a5dc0b5d fix: trigger card media zoom on group hover instead of card-media self-hover
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 16:10:47 +02:00
valknarandClaude Sonnet 4.6 ccb7d70542 fix: simplify badge hover to a.badge:hover, remove badge-static class
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 16:04:21 +02:00
valknarandClaude Sonnet 4.6 37a9418136 fix: scope badge hover to link badges, remove inline hover classes, expand logo viewBox
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 16:00:00 +02:00
valknar ae8410c3ff fix: favicon 2026-04-25 11:14:43 +02:00
valknar 908b5c5bbe fix: new post date 2026-04-24 18:07:59 +02:00
valknar db533de8a0 feat: new post 2026-04-24 18:00:17 +02:00
valknar 00e4a14860 feat: new post 2026-04-23 11:52:21 +02:00
valknar 133a373f40 fix: twitter handle 2026-04-23 11:33:39 +02:00
valknar 164b80f8b1 fix: hero lg text size 2026-04-22 11:17:08 +02:00
valknarandClaude Sonnet 4.6 8470b9d329 fix: adjust author card avatar size and name styling
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 20:30:00 +02:00
valknar 1c52f9ef6b fix: new featured post 2026-04-20 17:44:48 +02:00
valknarandClaude Sonnet 4.6 3a4b877d3d fix: clamp hero description to 3 lines on homepage
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:44:16 +02:00
valknar 3ef872b4ca feat: new post 2026-04-20 17:25:07 +02:00
valknar dbad113880 fix: new featured post 2026-04-20 16:20:40 +02:00
valknarandClaude Sonnet 4.6 714779ce27 fix: move lightbox to baseof as persistent component, fix HTMX history conflicts
- Lightbox lives outside #main-content so HTMX never destroys it
- Gallery dispatches window events to open/close lightbox
- Add hx-history-elt to #main-content so only that element is snapshotted
- Remove view-transition-name to avoid duplicate conflict on history restore
- Close lightbox on navigation via lightbox:close event

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 20:43:38 +02:00
valknarandClaude Sonnet 4.6 a7f334dc14 feat: show latest 4 posts on author page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 16:25:50 +02:00
valknar a24d2611c2 fix: new post 2026-04-19 16:04:43 +02:00
valknar 1c35b43655 feat: new post 2026-04-19 16:02:51 +02:00
valknarandClaude Sonnet 4.6 4419d72a1d content: rewrite valknar author bio to reflect actual body of work
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 15:57:49 +02:00
valknar ef9627b539 feat: new post 2026-04-18 15:54:23 +02:00
valknar 811bb49517 fix: homepage posts size = 8 2026-04-18 11:44:48 +02:00
valknar 08273d44ba feat: new post 2026-04-17 16:57:12 +02:00
valknar b90f9fae3c fix: remove hugo git info 2026-04-16 13:46:12 +02:00
valknar f0641c0425 fix: docker no .git 2026-04-16 13:42:56 +02:00
valknar e8190f197f fix: docker copy .git 2026-04-16 13:30:01 +02:00
valknar 5f4e03164d fix: git for docker build 2026-04-16 13:15:00 +02:00
valknar be3c012e96 fix: hugo.toml 2026-04-16 13:10:37 +02:00
valknar eb81d29bd9 feat: new post 2026-04-16 11:13:16 +02:00
valknar e9362644cf feat: new post 2026-04-16 10:33:22 +02:00
valknar 189a19f875 feat: new post 2026-04-14 17:30:34 +02:00
valknar 5b04da2a11 feat: new post 2026-04-14 16:26:30 +02:00
valknarandClaude Sonnet 4.6 16352b9152 feat: limit homepage latest posts to 4, fix total post count in CTA
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:26:10 +02:00
valknarandClaude Sonnet 4.6 10239ffe83 feat: center banner image with fixed-height cover strip
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 15:17:20 +02:00
valknar cfdd49c2a2 feat: new post 2026-04-14 11:45:13 +02:00
valknar edae473c16 feat: new post 2026-04-13 16:41:16 +02:00
valknar 08320ff840 feat: new post 2026-04-13 10:53:48 +02:00
valknar a5e4a889b9 chore: cleanup 2026-04-12 11:44:51 +02:00
valknar df0fd30618 feat: new post 2026-04-12 09:10:13 +02:00
valknar 177aec5718 fix: nav current text-gradient-alt class 2026-04-11 19:46:05 +02:00
valknarandClaude Sonnet 4.6 2b3cf8bada fix: redirect ffmpeg stdin from /dev/null in compress-videos.sh
FFmpeg inside a find|while pipe was consuming the remaining filenames
from stdin as interactive commands, causing parse errors. Adding
< /dev/null isolates ffmpeg from the pipe so find can feed all paths
to the while loop uninterrupted.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 18:45:10 +02:00
valknarandClaude Sonnet 4.6 1f24ee8276 feat: compress MP4 videos at Docker build time via FFmpeg
Hugo has no video processing, so FFmpeg runs in the builder stage
before hugo builds, compressing every content/**/*.mp4 in-place.

scripts/compress-videos.sh:
  - H.264 CRF 28 + preset slow (good web compression)
  - faststart for progressive streaming
  - AAC 64k audio
  - Only replaces source if output is actually smaller, so
    already-lean videos are skipped

Dockerfile:
  - apk adds ffmpeg alongside hugo in the builder stage
  - RUN compress-videos.sh runs after COPY . . before pnpm build
    (compressed files land in public/ via Hugo's copy of page bundles)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 18:42:57 +02:00
valknarandClaude Sonnet 4.6 3ac7e9c549 fix: lightbox chrome z-index and layout alignment
Root cause: media container was position:absolute inset-0 but without
z-index, while buttons had no z-index either — in fill mode the image
painted over the buttons making close/fill-toggle unclickable.

Fixes:
- Media div is now absolute inset-0 (explicit), chrome bars are z-10
- Top bar is a single flex row (h-14): left spacer | counter | FILL+✕
  so counter, fill toggle and close are vertically aligned at the same
  height instead of scattered absolute elements
- Bottom bar is a flex row (h-14) centred over dots
- Both bars have a linear-gradient scrim so chrome stays legible over
  fill-mode images without a solid background
- Prev/Next arrows get z-10 so they always sit above the media
- Media padding uses pt-14 pb-14 in fit mode to clear the chrome bars

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 18:37:33 +02:00
valknarandClaude Sonnet 4.6 08ddfd54d7 feat: lightbox fill/fit toggle mode
Add fill state (default false) to the Alpine lightbox data:
- FILL button (top-right, left of ✕): switches media to object-cover,
  filling the entire overlay edge-to-edge; button turns heat pink
- FIT restores object-contain with padding; button returns to fog
- Keyboard shortcut F toggles fill while lightbox is open
- close() resets fill to false for the next open
- transition-all duration-300 on container padding and media for
  a smooth morph between modes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 18:33:45 +02:00
valknarandClaude Sonnet 4.6 1998820dec feat: gallery lightbox with Alpine.js
Hugo pre-computes a JSON array of {img, video} entries per gallery item
(WebP 1200w src + optional mp4 src). Alpine reads the array and manages
lightbox state (open/idx/prev/next/close).

Features:
- Click any card → opens fullscreen dark overlay (bg-void/95 + backdrop-blur)
- Videos: controls, autoplay, x-effect reloads src on navigate
- Images: full-res WebP centred with object-contain
- Keyboard: Escape closes, ←/→ navigate
- Dot indicators: active dot expands (heat colour)
- Prev/next arrow buttons (hidden when only 1 item)
- Grid cards: cursor-zoom-in, pointer-events-none on media so click
  always hits the <figure>
- Teleported to <body> via x-teleport to avoid stacking context issues
- Gradient-line accent top and bottom of overlay

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 18:24:33 +02:00
valknar 72d24f5f4d fix: related posts bg 2026-04-11 18:20:01 +02:00
valknar d851ca572d feat: new post 2026-04-11 18:15:42 +02:00
valknar 26a306f3a6 fix: logo text color 2026-04-11 17:51:21 +02:00
valknar 7d29f8373f fix: author-card max-w-2xl 2026-04-11 17:36:20 +02:00
valknarandClaude Sonnet 4.6 d1ce2e7eb3 docs: add comprehensive README
Covers stack, getting started, project structure, content model
(posts + authors), image processing pipeline, design system
(tokens, typography, components), templates, HTMX/Alpine
interactivity, SEO, Docker/nginx/Traefik deployment, and
content authoring workflow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 11:06:55 +02:00
valknarandClaude Sonnet 4.6 84624fec33 fix: add X-Robots-Tag: index, follow to nginx to allow crawling
Lighthouse reported is-crawlable FAIL because the server was sending
X-Robots-Tag: none,noarchive,... (likely injected by Traefik/Coolify
security-headers middleware). Explicitly declare the correct value here;
override via Traefik label also documented below.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:14:00 +02:00
valknarandClaude Sonnet 4.6 36767c3d4d perf: Hugo image processing — auto-convert all images to WebP with srcset
Add layouts/partials/img.html helper that resizes and converts any Hugo
page-resource image to WebP, emitting a responsive srcset at multiple
widths. Wire it up to every image rendering site:

- post-card.html: thumbnail (600w/1000w) + avatar (64px WebP)
- post-card-large.html: featured card background (800w/1200w)
- posts/single.html: banner (1200w/1800w, eager) + gallery (800w/1200w)
- author-card.html: avatar (96px WebP, 2× retina)

Result: banner.png 7.9 MB → 496 KB WebP at 1800w (−94 %).
Hugo caches processed images in resources/_gen/ across builds.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:12:06 +02:00
valknarandClaude Sonnet 4.6 9af45979f1 fix: address Lighthouse SEO and performance audit failures
- nav: fix label-content-name-mismatch — aria-label now uses logoText
  ("PIVOINE") to match the visible link text (WCAG 2.5.3)
- index: improve link-text — "Learn more" → "About the magazine"
  so the /about/ CTA has a descriptive accessible name
- head: load Google Fonts async via media=print/onload pattern to
  eliminate render-blocking resource penalty (~480ms est. savings)

Remaining items needing server-side action:
- is-crawlable: x-robots-tag: none,... header must be removed in the
  web server / CDN config (not controllable from this repo)
- image-delivery: large banner PNGs on live site need manual WebP
  conversion or migration to Hugo page bundles for auto-processing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:07:10 +02:00
valknarandClaude Sonnet 4.6 3b8e1f7a1f feat: add PWA and favicon assets
apple-touch-icon, android-chrome icons (192/512), PNG favicons
(16/32), ICO fallback, and site.webmanifest with heat theme color.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 18:48:41 +02:00