- 15 Aug, 2026 1 commit
-
-
origin/main carried PR #7 — the entanglement-themed CosmicFest rebuild, merged 2026-06-29 and LIVE on me.nech.pl/cosmicfest ever since. Meanwhile this branch hoisted the whole app out of next/ and deleted the Pages Router. The two sides had zero overlapping paths, so a naive `git diff --name-only` check reported no conflict — and was wrong in the most expensive way available: one side had deleted the entire tree the other side was editing. Resolving "ours" would have silently deleted the invite from a page guests are reading right now, six days before the festival. Resolving "theirs" would have resurrected the Pages Router. Both merge without complaint. So: a port. Git's rename detection did most of it — Countdown, the stylesheet and EntanglementField all landed at their App Router homes automatically. Five content hunks in the page body needed hand-resolution, all "theirs, adapted": - next/pages/cosmicfest/index.js -> app/cosmicfest/CosmicFestClient.js - <Head> block -> page.js `metadata` + `viewport` exports (App Router has no <Head>; theme-color moves to `viewport` per Next 15) - kept 'use client' and the @/ path aliases over the ../../ relatives - dropped the v0 June-21st countdown; JOUR_J is now 2026-08-22T18:00:00+02:00 Also fixes a build break that predates this merge and had nothing to do with it: #161 regenerated the OPAL tracks.json from the parsers, renaming `ingredients` to `samples` AND changing its shape — rich {type,code,description} objects became bare name strings. LiveEvent.js still called track.ingredients.map(), so /parvagues/live/opal-festival-2026 threw at prerender and failed the whole build. Now renders whichever generation is present, guarded with Array.isArray so a third shape can't crash the build either. Verified: yarn build clean, 86/86 static pages. /cosmicfest 6.04 kB vs the 6.3 kB the original PR measured. Built HTML carries intrication, v2.67Hz, Labenne, the full lineup, <title>cosmicfest_v2.67Hz</title>, theme-color #1a1330, and zero occurrences of "juin". The 2026-08-22 target is present in the shipped chunk. next/ stays deleted — 0 files.PLN (Algolia) authored
-
- 14 Aug, 2026 1 commit
-
-
These timecodes were generated before #148 — back when track boundaries came from Pulsar tab-focus events rather than from the audio. Tab focus records when PLN LOOKED at a file, not when the music changed, so every cut was wrong by however long he sat on a tab before evaluating it. Regenerated from the measured boundaries (segments_v3.json) via Tidal/tools/gig-metadata.py, which now reads that shape directly and matches segments to the setlist by title rather than by position. # track was now drift 5 You My Sunshine 0:25:41 0:25:58 +18s 7 Piment Bresilien 0:36:51 0:37:07 +17s 9 Perfect 0:48:24 0:49:14 +50s 10 Gimme Acid 0:53:39 0:54:12 +33s 11 Ghosts in the Toilets 0:58:48 0:59:20 +32s 13 Vague de CRIME 1:04:33 1:04:49 +16s 14 Desire 1:09:12 1:09:40 +28s totalDuration_s 4809 -> 4769.1. Tracks 1, 12 and 15 were already correct. Only timing changed: names, order, bpmRange, styleDistribution and all 60 samplePacks diff byte-identical against the previous file, and venue/stage are carried through verbatim. This matters beyond the website — Slopmotion reads this file to cut visuals to the set, so shipping it stale would have put the cuts half a minute off the music on a third of the album.
PLN (Algolia) authored
-
- 12 Aug, 2026 1 commit
-
-
Third Opal in a row and the first on the main stage. Saturday 8 Aug 2026, sunset slot, 1h20, 15 tracks of live-coded TidalCycles. tracks.json is GENERATED, not typed — Sound/Tidal/tools/gig-metadata.py reads membership/order/name/bpm/section from backlog.md via the setlist parser, the sample packs from each .tidal via setlist_samples, and the timecodes from the Ardour take. Nothing here was copied by hand, which is the point: the last time gig strings were hand-carried between files they were wrong. The per-track timecodes are new for a lives entry and deliberate — they let Shipow cut Slopmotion visuals to the set without re-deriving boundaries by ear. They were measured by aligning the 1 Hz gig log to the audio via cross-correlation (r>=0.99 over 20 probes, 0.00 ms spread). Note for whoever touches lives content next: the live tree is content/lives/, NOT content/parvagues/lives/ (legacy, last moved by the June hoist) and not next/content/lives/ (the path Sound/Tidal/CLAUDE.md still documents — stale since the app moved out of next/).
PLN (Algolia) authored
-
- 29 Jun, 2026 1 commit
-
-
Full redesign of the standalone invite page for the 2026 edition (20-23 August, Labenne-Ocean, jour J samedi 22). Concept: intrication (entanglement) - two states, one system, communicating across distance. Dark OKLCH design system with a paired cyan/magenta accent language, an EntanglementField canvas (starfield + mirrored particle pairs + 67Hz interference waveform), Archivo (wdth) + Martian Mono, replacing the v0 light theme. - new EntanglementField signature canvas (DPR-capped, mobile-scaled, full prefers-reduced-motion static path) - sections: hero, concept, jour-J lineup, sejour, hebergement, transport, packing, v0 souvenirs (lifted audio embeds + accessible photo lightbox), RSVP - countdown retargeted to 2026-08-22, hydration-safe placeholder - lightbox renders full-size via plain img with managed focus - add PRODUCT.md / DESIGN.md design context at repo root Verified: clean SSG build (6.3 kB), WCAG AA contrast, zero console errors, correct SSR + reduced-motion paths.
Paul-Louis NECH authored
-
- 23 Jun, 2026 1 commit
-
-
The canonical tracklist carried the old track name "Aria Sans Serif" and, worse, a `file` pointing at live/collab/raph/aria_sans_serif.tidal — a path that no longer exists. The track was renamed to Mafia Sans Serif in the score long ago (real file: mafia_sans_serif.tidal); only the published metadata lagged. Since the track identity in the armada catalog pipeline IS its .tidal path, the dangling ref meant the catalog keyed this track on a non-existent score. Fixed both the display name and the file ref to the real score. This is the canonical root: the armada catalog regenerates from here (tide.py build).
PLN (Algolia) authored
-
- 07 Jun, 2026 9 commits
-
-
Reflect Step 5: single lib/content/index.ts (two collection shapes), wrappers re-export from @/lib/content, plain string[] ids + .map((id) => ({ id })), and the parvagues-presence.ts seam. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Phase 1 Step 5. Fold lib/utils.js (flat Markdown collections) and lib/livesData.js (year-foldered ParVagues gigs) into one module, lib/content/index.ts — two collection shapes in one entry, not one forced shape. Thin section wrappers (posts/hydras/poems/talks) now re-export from @/lib/content; the two ParVagues pages import the lives API from there too. Old lib/utils.js and lib/livesData.js deleted. - strip the per-file console.log noise that was in lib/utils.js; - getAllContentIds now returns plain string[]; the three dynamic pages drop the vestigial Pages-Router `.map(({params}) => params)` adapter for `.map((id) => ({ id }))`; - add lib/content/parvagues-presence.ts: a single thin seam holding the already-in-repo platform links, so a future tooling-emitted presence.json swaps in without touching components. No schema, no invented links, components not yet rewired (deliberate). Verified: prod build green (14 routes, all dynamic params intact); fresh-dev smoke 14/14. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Phase 1 Step 4. Move the palette out of globals.css :root into a new styles/tokens.css: a neutral/professional default on :root (landing + content) and the ParVagues neon/dark palette scoped to [data-theme="parvagues"], set on the app/parvagues/layout.tsx wrapper. The ~90 var(--…) consumers resolve against that ancestor scope, so theming is one attribute — no per-component edits. - globals.css: drop the :root palette + hardcoded dark html/body bg; body now reads var(--surface)/var(--text-primary). - parvagues.module.css: remove the dead duplicate .colorRoot/.colorContainer. - main.css: replace the body:not(:has(.parvagues-root)) element-style hack with a positive .site-shell scope on the content Layout container; links use the new --link token. - delete dead styles/dunbar.module.css. Verified: prod build green (14 routes, ParVagues ISR intact); fresh-dev smoke all 200; data-theme scoping confirmed (landing neutral, parvagues neon). Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Step 3 (group 3 of 3) — completes the App Router migration. The Pages Router is now fully gone (no more pages/ or _app.js). - /cosmicfest: server metadata wrapper + CosmicFestClient ('use client') for the modal/keyboard state. Swapped the deprecated next/image layout="intrinsic"/objectFit props for modern width/height + style. - Deleted the dead legacy shells components/ParVaguesHeader.js and components/ParVaguesFooter.js (only ever referenced by commented-out imports in CosmicFest). - tests/jest.setup.js: mock next/navigation (App Router hooks) instead of next/router. - CLAUDE.md: Pages Router -> App Router throughout (global CSS from app/layout.tsx, server-components-by-default + 'use client' leaves, generateStaticParams, the root-shell + ParVagues-sub-layout split, next/navigation in tests). Full App Router build green; route-smoke 14/14. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Step 3 (group 2 of 3). Moves /parvagues, /parvagues/fiche, /parvagues/live and /parvagues/live/[slug] to the App Router under a single segment layout, retiring the old per-page components/parvagues/Layout.js. - app/parvagues/layout.tsx: the ParVagues sub-shell (Syne via next/font, parvagues-root/noise-overlay wrapper, footer) inheriting the root shell. Header scroll-state and the `.reveal` IntersectionObserver are split into client leaves (ParvaguesHeader, RevealController); the latter re-arms on client-side navigation via usePathname so reveals keep working between pages. - Pages become thin server components: data fetch + metadata + segment config (revalidate=60 on /parvagues and /parvagues/live/[slug] preserved; getStaticPaths -> generateStaticParams; per-page <title> -> metadata). - /parvagues/live redirect: client useRouter.replace -> server redirect(). - /parvagues/live/[slug]: the interactive body (Prism, loupe, countdown, gallery) extracted to a client component (LiveEvent); the server page does the fs/data fetch. - /parvagues/fiche: window.print + <style jsx global> body extracted to a client component (FicheContent) behind a server metadata wrapper. - Marked the page-rendered feature components 'use client' (TourTimeline, MusicSection, VideoSection, BookingForm); Hero/BioSection/ AsSeenAt stay server. - Dropped og:type="music.musician" (not in Next's typed Metadata enum; it threw at prerender) — inherits the root "website" default; see note for Phase 2. Build green; route-smoke 14/14. Only /cosmicfest remains on the Pages Router. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Step 3 (group 1 of 3) of the foundation redesign. Stands up the root App-Router shell and moves the low-risk static/content routes onto it, leaving ParVagues + CosmicFest on the Pages Router for now (no route URL changes — the smoke net stays green across the split). - app/layout.tsx: the one root shell (<html>/<body> + global CSS), with the shared <head> (OG/twitter/icons/title template) consolidated from components/layout.js into the Metadata API. - Migrated: / , /talks, /starry-nights, /hydra, /hydra/[id], /post/[id], /poesie/[id], /poesie, /fleurs. getStaticProps -> inline server fetch; getStaticPaths -> generateStaticParams; <Head> -> metadata. - components/layout.js: now a client component using next/navigation (router.back) instead of next/router; <Head> removed. - Client boundaries split out where needed: HydraClient (ssr:false dynamic), PoemsBrowser (filter/sort state), FleursClient (p5 + styled-jsx). - Deprecation sweep: dropped next/link legacyBehavior (talks, starry-nights; they wrapped invalid nested anchors) and the render-blocking Google Fonts <link> on /fleurs (now next/font Cormorant Garamond). Removed dead ReactPlayer import on /talks. - tsconfig moduleResolution -> bundler; added .yarn/sdks (PnP TS SDK for editors). next.config: skip Next's build-time type-check — its generated route validators deep-import a Next-internal type that stock (non-PnP) tsc can't resolve in Yarn PnP zips; SWC compile + lint + smoke are the gates. Build green (App + Pages split); route-smoke 14/14. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Re-establish a baseline of coverage (Phase 0 removed all tests with Dunbar) and guard the upcoming App Router migration: the route URLs are stable across that migration, so this spec must stay green before and after. - tests/e2e/smoke.spec.ts: visits all 14 public routes, asserts the document responds < 400, renders non-empty content, and throws no genuine uncaught exception. Tolerates dev-only React hydration warnings and third-party embed noise (would otherwise be flaky); caps the settle wait so embed-heavy pages don't hang. - Fix a pre-existing Playwright version split: @playwright/test (1.57.0 via ^1.55.0) and playwright (1.58.2) resolved to two copies, breaking the runner ("test() not expected here"). Pin both to 1.60.0. All 14 routes green (~55s, Node 20). Surfaced for later: a real /cosmicfest dev-mode hydration mismatch (task #7), a legacyBehavior next/link deprecation, and a next/head stylesheet warning — all to address in the App Router pass. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Flatten the nested next/ app directory up to the repository root, removing the `cd next` friction that the old .cursor/rules existed largely to manage. - Move all app files (pages, components, lib, styles, content, public, tests, scripts, configs) and Yarn Zero-Install state (.pnp.cjs, .yarn/) from next/ to repo root via git mv (history preserved, 316 renames). - Merge next/.gitignore into the root .gitignore; note .pnp.cjs/.yarn are committed (Zero-Install) and must not be ignored. - Pin outputFileTracingRoot to the project in next.config.js: a stray ~/package-lock.json was making Next infer the wrong workspace root. Also makes standalone output tracing correct for self-hosting later. - Update CLAUDE.md: commands run from repo root; @/ alias, content/, public/, .next/ paths corrected; Vercel root dir must become '.'. Build green from root (yarn build, Node 20, all 14 route patterns, zero warnings). Content loaders (process.cwd()-based) resolve correctly since content/ and public/ now sit at the root. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored -
Demolition step ahead of the site rationalization (App Router + shared design system foundation to follow). - Remove Dunbar entirely (pages, components, lib, tests); it's folding into a separate project. UX learnings preserved at docs/dunbar-design-learnings.md. - Prune 6 now-unused deps: d3-force, d3-zoom, minisearch, react-force-graph(-2d), snowball-stemmers, stopword. - Fix 3 production bugs in layout.js: drop the http://localhost:8097 React DevTools script, replace the create-next-app template OG image with the site profile image, and compute the footer year dynamically. - Delete dead files: pages/parvagues.js.backup, the unused HeroVariants. - Add CLAUDE.md documenting the codebase and the redesign state. Build green (yarn build, 40 routes). Note: this removes all test coverage (it was all Dunbar's) — to be re-established in Phase 2. Co-Authored-By:
Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored
-
- 24 May, 2026 3 commits
-
-
Shrink the loupe popup to (viewport_width - 32px) when 480px would overflow, keeping the 16:9 aspect ratio. Centering math uses the computed width so the clamp keeps the popup fully on-screen.
PLN (Algolia) authored -
On touch devices the loupe overlay is now revealed by the first tap on a track thumbnail (the link's default action is prevented). A second tap on the same thumbnail navigates to the Instagram album. Tap-outside or 4s timeout auto-closes the loupe. Desktop hover behavior unchanged — gated on (hover: hover) media query.
PLN (Algolia) authored -
15-track collapsible list driven by metadata extracted from the .tidal sources via the Pulsar HUD parser. Each row: name, BPM, style, expandable ingredients (per-orbit sample/role/CC bindings) + git.nech.pl src link. Six tracks have IG story loops (5s, 16:9 cropped from 9:16 originals, ~150 KB each) with a fixed-position hover loupe (480×270) that escapes the row's clipping box; click opens the highlight album. Page-level SC embed + Instagram album link in MediaSection. Full-length story MP4s gitignored — only the loop previews + jpg thumbs ship.
PLN (Algolia) authored
-
- 01 May, 2026 1 commit
-
-
Sleek single-page fiche technique to share with festivals and venues: show info, artist apport, audio/video/electrical/stage requirements, SVG stage plot, timings, contact. Print-optimised CSS for dense A4 PDF export via the browser's print dialog. Co-Authored-By:Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PLN (Algolia) authored
-
- 16 Mar, 2026 5 commits
-
-
Opal Festival (Normandie): Aug 10 2024, Aug 10 2025. SoundCloud + Spotify recordings linked. Remove duplicate Bazurto 2024 (only played 2022). Update ontology with Opal venue + event data.
PLN (Algolia) authored -
Seed venues.yaml, samples.yaml, events.yaml from artist domain knowledge. Add country flag detection in TourTimeline (France/Germany/Online).
PLN (Algolia) authored -
Smoothed Catmull-Rom SVG chart with neon accent on dark bg. Global Y-axis (60-170 BPM) for cross-set comparison. Fix hallucinated sample description (Private Number = Judy Clay & William Bell).
PLN (Algolia) authored -
Wave logo takes center stage with neon glow, title below in spaced uppercase, radial gradient backdrop.
PLN (Algolia) authored -
- Tidal source analysis: ~60 tracks across 20 gigs mapped to .tidal files with 5 key ingredients each (pattern/sample/effect/technique/structure) - Fix streaming embeds: SoundCloud user ID, YouTube video ID, Bandcamp params - Live subpages: rewrite [slug].js with proper frontmatter access, server-side isPostEvent, MediaSection with SoundCloud/archive.org inline embeds - REC badge: clickable button opens best audio source directly - AsSeenAt: correct URLs (TOPLAP, Opal, Cookie Collective), tighter layout - Replace em dashes with hyphens across all content - Fix past events showing "details coming soon" - FairyTeuf location: PSC
PLN (Algolia) authored
-
- 15 Mar, 2026 6 commits
-
-
PLN (Algolia) authored
-
PLN (Algolia) authored
-
- Add BioSection (livecoding explainer + genre tags) after hero - Add AsSeenAt strip (TOPLAP, Algorave GZ, Opal, Cookie, 38C3, 39C3) - Featured Algorave GZ25 video with neon badge - New releases: CosmicFest album + Ton Numéro single with covers - Fix Bandcamp/Spotify/YouTube streaming embeds + privacy consent - Fix social links: remove Bluesky, GitLab at nech.pl/Tidal - New live events: 38C3 House of Tea, Chaos Music Club, 39C3 sets - Track metadata with Tidal code ingredients for 3 pilot gigs - Poster support on live subpages (Algorave GZ25 poster) - Expandable track breakdowns with code snippets on subpages
PLN (Algolia) authored -
PLN (Algolia) authored
-
- Add 2 YouTube performances: Algorave GZ25, Live Coding @ Algolia - Privacy-first: YouTube embeds require click consent (shows thumbnail + "Cliquer pour charger depuis YouTube" overlay). Archive.org loads directly (privacy-friendly host) - Use youtube-nocookie.com for embeds (no tracking cookies) - Fix hero title: clamp(3rem, 12vw, 9rem) to prevent overflow clipping - Videos sorted reverse-chronological, archive.org prioritized over YouTube when both exist for same performance
PLN (Algolia) authored -
- Remove max-w-4xl from hero content (title was clipped at "ParVag") - Scope main.css img rule to non-parvagues pages (was forcing max-width:100% + display:block on next/image fill elements in Firefox) - Use inline styles for video thumbnail positioning to avoid CSS specificity issues with legacy rules
PLN (Algolia) authored
-
- 14 Mar, 2026 3 commits
-
-
Root cause: Vercel wasn't processing Tailwind through @tailwindcss/postcss, serving raw CSS with zero utility classes (23KB theme-only vs 53KB with utilities). The source() directive was output literally as @media source(). Fixes per official Tailwind v4 + Next.js setup: - Switch postcss.config.js (CJS) → postcss.config.mjs (ESM) - Remove autoprefixer (built into Tailwind v4) - Use plain @import "tailwindcss" (auto source detection) - Move tailwindcss + @tailwindcss/postcss to dependencies
PLN (Algolia) authored -
PLN (Algolia) authored
-
Bootstrap's CSS was overriding all Tailwind utility classes in production, making parvagues render as raw unstyled HTML. Root cause: _app.js imported bootstrap.css globally before globals.css (Tailwind v4). - Remove bootstrap dependency and import from _app.js - Remove stale tailwind.config.js (v3 format, ignored by v4) - Remove @tailwindcss/aspect-ratio (v3 plugin, built-in in v4) - Replace 3 Bootstrap `container` usages with Tailwind equivalents - Scope main.css legacy element styles with :not(:has(.parvagues-root)) to prevent link colors, section margins, footer styles from bleeding into parvagues pages - Add .parvagues-root class to parvagues Layout for scoping
PLN (Algolia) authored
-
- 13 Mar, 2026 3 commits
-
-
PLN (Algolia) authored
-
1200x630 screenshot captured at bloom state. Open Graph and Twitter Card meta for rich link previews when shared.
PLN (Algolia) authored -
Grass blades rendered to offscreen buffer refreshed every 3-5 frames instead of every frame. Mobile tier: pixelDensity(1), 24fps, fewer grass blades, lower petal cap. ~75% fewer grass draw calls on average.
PLN (Algolia) authored
-
- 12 Mar, 2026 1 commit
-
-
p5.js canvas with impressionist top-down flower garden: organic bloom lifecycle (bud → bloom → wilt → respawn), rare mutations (queen, hypersaturated, variegated, concentric, firecracker), wind-driven grass, falling petals, ambient day/night light cycle, dawn reveal. DOM overlay with staggered text entrance, RSVP modal with decorative floral ornaments and entrance animation. Dark theme, mobile-first.
PLN (Algolia) authored
-
- 10 Mar, 2026 1 commit
-
-
- Use inline opacity (0.15) on poster image — Tailwind opacity-20 not applying in production build - Add color-scheme: dark meta tag for browser/reader mode compatibility - Set html/body background to #0a0a0a to prevent white bleed - Fix reveal animation: sections visible by default, animate only after JS hydration via .reveal-ready class on documentElement - Bump screenshots script to domcontentloaded + 3s render wait
PLN (Algolia) authored
-
- 09 Mar, 2026 3 commits
-
-
PLN (Algolia) authored
-
PLN (Algolia) authored
-
- Fix mobile hero title clipping (clamp min 5rem → 3rem) - Reduce dead space between streaming and video sections - Bump hero poster opacity to 20% for more atmosphere - Add archive.org thumbnails to video cards with gradient overlay - Add scroll-triggered reveal animations (IntersectionObserver) - Add subtle grain/noise overlay (SVG texture at 3% opacity) - Alternate section backgrounds (#0a0a0a / #0e0e0e) for depth - Upgrade album platform links to pill buttons with neon hover - Brand-colored hover on booking submit button - Add fadeIn animation for streaming embed transitions
PLN (Algolia) authored
-