1. 06 Oct, 2026 1 commit
  2. 27 Sep, 2026 4 commits
  3. 26 Sep, 2026 5 commits
  4. 25 Sep, 2026 1 commit
  5. 23 Sep, 2026 3 commits
  6. 22 Sep, 2026 2 commits
  7. 21 Sep, 2026 7 commits
  8. 06 Sep, 2026 9 commits
  9. 24 Aug, 2026 1 commit
    • feat(oblique): /oblique Eno/Schmidt strategies deck + design lab, on the App Router · 22f1adeb
      Aurora-glass cosmos, frosted-glass cards with iridescent foil edges,
      Fraunces + Space Mono. Hybrid DRAW/BROWSE: chilled 3D tarot flip (spring
      42/22/1.3), semantic swipes (left discard, right favorite, up stash),
      haptics, kept-spread; realtime typotolerant search with incremental
      16-card rendering. Date-seeded daily card. State in localStorage + URL
      hash only.
      
      Each card face carries a unique deterministic sacred-geometry figure:
      mulberry32 seeded on card id + hexagram codepoint drives ring count,
      packing, rotation, polygon overlays, and dash patterns — 187/187 distinct,
      with a radial-mask quiet zone keeping the central text zone clear.
      
      App Router native: server pages export metadata, interactive bodies are
      'use client' leaves (ObliqueClient / DesignClient), per cosmicfest
      conventions. Data: 187 deduped strategies (ceejbot cross-edition superset)
      tagged with I Ching hexagrams.
      
      Validated on the production build: routes 200, no console errors, no
      horizontal overflow, tap targets >=44px, browse incremental 16->48 on
      scroll, geometry uniqueness 48/48 sampled distinct, daily card deals,
      Fraunces 25px legible on mobile.
      PLN (Algolia) authored
  10. 15 Aug, 2026 2 commits
    • fix(cosmicfest): link the lineup out, and stop the RSVP line going stale · efc02813
      Two gaps between the live page and the canonical invite text.
      
      1. The lineup named the three acts but linked nowhere. PLN's invite carries a
         destination for each, so the page now sends people to the work:
           ParVagues  -> soundcloud.com/parvagues
           Nesta Flex -> soundcloud.com/antoine-renaudet
           shipow     -> instagram.com/shipow
         The anchor takes `color: inherit` so the existing odd/even cyan/magenta
         :hover rules on .lineupName stay in charge; the underline is a 30% mix that
         solidifies on hover/focus-visible rather than a permanent blue link.
      
      2. The RSVP paragraph read "une réponse avant le 1er août, ce serait top."
         True when written, silently wrong since 2 August, and actively confusing
         today — 15 August, with arrivals open and jour J six days out. A page whose
         copy expires is the same failure as a countdown to a date that has passed.
      
         So it reads the clock instead of a frozen sentence. Four phases off the
         existing JOUR_J plus three new date constants: before the deadline, after it
         but pre-arrivals, during the 15-23 August window, and after — which hands
         over to the v3.42Hz teaser from the invite.
      
         Rendered null on the server and filled in an effect, because the phase
         depends on the viewer's clock and a server/client disagreement is a
         hydration mismatch. The invariant "pas de billetterie / Riders, come to the
         storm" line stays outside the component, so the paragraph still reads
         correctly if JS never arrives.
      
      Every other fact on the page was checked against the canonical invite and
      already matched: 20-23 August, arrivals from the 15th, Labenne-Océan, jour J
      the 22nd, 10 indoor places, tents, van, 16 capacity, +1 welcome, both stations,
      the 15-minute Bayonne->Labenne train, the taxis, and the packing list.
      
      Verified: clean build, all three hrefs present in the prerendered HTML, and
      zero occurrences of "1er août" in the server output.
      PLN (Algolia) authored
    • merge(cosmicfest): port the v2.67Hz invite onto the App Router · 3e2d2cd3
      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
  11. 14 Aug, 2026 1 commit
    • fix(lives): OPAL tracks.json carried the old boundaries, off by up to 50 s · 62cc2b0f
      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. 12 Aug, 2026 1 commit
    • feat(lives): OPAL Festival 2026 — "Sunset Forest", Scène Cabane · 423d0e9f
      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
  13. 29 Jun, 2026 1 commit
    • feat(cosmicfest): rebuild /cosmicfest as v2.67Hz, entanglement-themed invite (#7) · 32a2a5bc
      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
  14. 23 Jun, 2026 1 commit
    • fix(parvagues): Montreuil tracklist — Aria→Mafia Sans Serif + repair dangling .tidal ref · aff33d43
      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
  15. 07 Jun, 2026 1 commit