feat(blog): flow.compound article + editorial layout + PHP 8.3 + craft-mcp #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/blog-flow-compound"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Vollwertige Blog-Section auf philflow.io + Erst-Artikel „Warum mein Code-Agent jeden Montag wieder bei Null anfängt" (Compound Engineering, 3076 Wörter, 9 Skizzen, 12 Footnotes), polished nach 3 Iterationen Critique + QA.
Was reinkommt (11 Commits)
Initiale Blog-Infrastruktur (3 ältere Commits)
3963d54— editorial Layout: 3-spaltiges Grid, Spectral/Source-Serif für Body, Aeion Mono für Strukturelemente, JS Marginalia-Lifting, Akt-Marker, Footnote-Hover-Cards940b537 feat(blog): add Craft blog section with flow.compound article— Channelblog, SingleblogIndex, Categories + Tags, Entry-TypeblogArtikelmit 10 Feldern, CKEditor-Config „Article", Listing+Article+Category+RSS-Templates, Erst-Artikel via Craft-MCP importierta00407b feat(blog): lightbox, glossary hover, collapsed-TOC, flow.raven linkundc05b47b refactor(blog): TOC als Floating-Drawer— UX-IterationenDiese Runde (8 neue Commits)
e613d3f chore: ignore local QA artifacts—.qa-screenshots/,_mock/, throwaway test-screenshots aus dem gitignore-Pfad raus5733b2c docs(claude): project guidelines— Phil's CLAUDE.md für das Projekt (Stack, MCP-Routing,docker compose up-Goldregel)ca154fa chore(docker): PHP 8.2 → 8.3, add stimmt/craft-mcp 1.2.2— alle 3 Dockerfiles, composer.lock geupdated. Prod braucht Full-Image-Rebuild beim nächsten Deploy.f5dc59e feat(content): iFrame URL field + Chat tab— neuesiframeUrl-Feld, als Chat-Tab in Startseite + Unterseitea677e92 refactor(blog): drop ToC and Glossary modules—ArticleToc.js,ArticleGlossary.js,toc.twigraus (durch Floating-Drawer ersetzt)4a9190c feat(blog): article hero asset—web/assets/images/v2-hero-demenz.png(Craft Asset 35711)df41bc0 feat(blog): compare-block grid, money-slide table, marginalia scroll-gate— die Core-Visuals dieser Iteration:blockquote.compare: CSS Grid 1fr 1fr, deterministisch via zwei<p>-Children (column-count war unreliable bei kurzem Content). Mobile collapses zu single-column.table.compare-table: Winner-Spalte (flow.compound) mit Amber-Top-Border + Surface-Tint. Erste Spaltemin-width: 14ch; hyphens: auto.ArticleMarginalia: deterministische Scroll-Gate bei 35% Viewport-Height ersetzt IntersectionRatio-Max-Compare. Counter zählt scharf, kein Flicker mehr an Section-Grenzen.fd388bc build(assets): compile blog SCSS + JS for production— finaler dist-Build, 114.81 kB CSS / 18.86 kB gzipQA + UX-Critique vor Push
critique/audit/ux-writing/polishSkills durchlaufen, „Übersicht" → „Was sich messbar ändert", Currency-Mismatch normalisiert ($10,26→10,26 USD)<p>mit<br>zu zwei<p>s (deterministisches CSS Grid)lighten()-deprecationsTest plan
npm run buildcleangit diff main...feat/blog-flow-compoundzeigt nur erwartete Filesdocker compose down -v && up -d) — pending bis nach diesem Merge auf Prodhttps://philflow.io/blog/warum-mein-code-agent-jeden-montag-wieder-bei-null-anfaengtlädt 200, alle 4 Compare-Blocks visuell 2-spaltig, Tabelle gerendert, kein JS-ErrorDeploy-Schritte nach Merge (per Plan)
root@167.235.131.159,./backup.sh→ fresh prod backupgit fetch && git checkout main && git pulldocker compose -f docker-compose.prod.yml build --pull php(Full-Rebuild für PHP 8.3)docker compose -f docker-compose.prod.yml up -ddocker exec philflow_php php craft up(Migrations + Plugin-Aktivierung + project-config)web/assets/images/blog/compound/ins prod assets_data Volumessh docker execTunnel)docker exec philflow_php php craft clear-caches/all🤖 Generated with Claude Code
Layout-Rebuild der Article-Page nach Brand-Abgleich. Phil's Site ist confident-quiet, kein Theater — bewusst weg von der ersten Iteration ("wie jeder andere Blog"), hin zu Tufte-DNA + Magazin-Akt-Struktur ohne Parallax oder Smooth-Scroll-Hijacking. Layout: - Grid 3-spaltig (TOC links 240px, Reading mitte 64ch, Marginalia rechts 300px) - Mobile <1200px: Single-Column, Marginalia zurück inline Typografie-Doppel: - Source Serif 4 Variable (self-hosted woff2) für Body — Lesbarkeit über 3000 Wörter, fluid clamp(17-19px), line-height 1.65 - Aeion Mono bleibt für H1/H2/H3, Captions, Margin-Notes, Code, Meta — Mono ist Voice, Serif ist Reading Marginalien-Lane: - ArticleMarginalia.js lifted figures aus Body-Flow in die rechte Lane, pixel-genau zum Paragraph-Anker positioniert, ResizeObserver für Reposition - Skizzen werden Beweis-Marginalien statt Wide-Figure-Breakouts - Auf Mobile: figures zurück inline (matchMedia 1200px) Akt-Struktur (aus Glasarchiv, ohne Theater): - ArticleActs.js setzt 5 Roman-Numeral-Marker (I-V) vor logischen H2-Sections - Mono in $blueLightColor mit Strich-Ornament, dezent - Kein 100vh-Opener-Spread Footnotes als Hover-Cards: - ArticleFootnotes.js rendert Footnote-Content als Floating-Card neben dem Ref bei Hover/Focus, kein Sprung ans Seitenende - Touch-Devices: tap-toggle - Original-Block bleibt für a11y/print Reading-Progress: - Sticky-Rail innerhalb der Marginal-Lane (statt fixed außerhalb) - Mobile: dünner horizontaler Bar oben A11y: - prefers-reduced-motion respected - Footnotes funktionieren ohne JS via Anchor - semantic <aside>, role="progressbar" mit aria-valuenow 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>UX-Verfeinerungen nach Phil's Feedback ("Bilder zu klein aber nicht klickbar, TOC ablenkend, Fachwörter brauchen Hover-Definitionen, flow.raven verlinken"). Lightbox auf Marginalien: - ArticleMarginalia.js wrappt jede Figure in <a class="glightbox" data-gallery="article-marginalia">, Hero-Figure exkludiert - GLightbox-Init in main.js mit loop + swipe zwischen allen Skizzen - CSS Plus-Badge on hover + cursor: zoom-in als Klickbarkeits-Affordance - Bilder bleiben in Marginalien-Lane subtil, Lightbox holt sie groß raus Lese-Modus für TOC (Desktop ≥1200px): - Standard: 16px Sticky-Rail mit Dots (1 pro H2), Mono nur für AKT-Marker - Hover/focus-within auf .article__sidebar: expandiert auf volle Liste via transform-only (280ms cubic-bezier, kein layout-shift) - Active-Dot: vergrößert + $blueColor, restliche $blueLightColor 40% opacity - Mobile: <details>-Accordion unverändert Glossar-Hover (neues Modul ArticleGlossary.js): - 16 Fachwörter mit knappen deutschen Definitionen (Phil's Voice) - TreeWalker scant article-body Text-Nodes, exkludiert <code>/<a>/figcaption - Erste Erwähnung pro Term wird gewrapped (kein Inflation) - Hover/Focus/Touch: floating Card mit blueColor-Border-Top, Term in Mono Bold + Definition in Serif - ESC schließt, aria-describedby, role="tooltip" - prefers-reduced-motion respected flow.raven-Referenz: - 3× <code>flow.raven</code> im articleBody wrapped als <a class="external-link" href="https://raven.philflow.io/" target="_blank" rel="noopener"> - Subtile $blueColor-Underline 20% opacity + ↗-Pfeil ::after - flow.raven-deployment bewusst unangetastet 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>feat(blog): Craft blog + flow.compound article + Werkstatt-Glasarchiv-Hybridto feat(blog): flow.compound article — Werkstatt-Hybrid + PHP 8.3 + craft-mcpfeat(blog): flow.compound article — Werkstatt-Hybrid + PHP 8.3 + craft-mcpto feat(blog): flow.compound article + editorial layout + PHP 8.3 + craft-mcp