Commit Graph
84 Commits
Author SHA1 Message Date
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
valknarandClaude Sonnet 4.6 e57a15f733 polish: CSS-only hover transitions for nav and footer links
Adds translateY lift and smoother easing on hover for desktop nav,
footer nav, and social links. Active underline gets expo easing.
No markup changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 18:45:57 +02:00
valknar 00ee9e15ed Revert "polish: smooth hover transitions on nav and footer links"
This reverts commit d967dd261a.
2026-04-10 18:44:15 +02:00
valknarandClaude Sonnet 4.6 d967dd261a polish: smooth hover transitions on nav and footer links
- Desktop nav: underline uses scaleX transform (origin-left) instead of
  width, now shows on hover for inactive links too
- Mobile nav: link text slides translateX on hover for directional feel
- Footer nav: matching scaleX underline on hover
- Footer social: external arrow icon nudges diagonally on hover

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 18:38:14 +02:00
valknarandClaude Sonnet 4.6 245a8e614d feat: add full favicon & PWA meta tags to head
Adds apple-touch-icon, PNG favicons, webmanifest link, and
msapplication-TileColor; existing SVG/ICO fallbacks retained.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 17:46:36 +02:00
valknar cd1ff989d0 Initial commit 2026-04-08 19:49:15 +02:00