diff --git a/.impeccable/critique/2026-06-24T11-10-02Z__app-src-pages-index-astro.md b/.impeccable/critique/2026-06-24T11-10-02Z__app-src-pages-index-astro.md new file mode 100644 index 0000000..066ba00 --- /dev/null +++ b/.impeccable/critique/2026-06-24T11-10-02Z__app-src-pages-index-astro.md @@ -0,0 +1,94 @@ +--- +target: app/src/pages/index.astro +total_score: 34 +p0_count: 0 +p1_count: 0 +timestamp: 2026-06-24T11-10-02Z +slug: app-src-pages-index-astro +--- +# Design Health Score + +| # | Heuristic | Score | Key Issue | +|---|-----------|-------|-----------| +| 1 | Visibility of System Status | 3 | Signing affordances are clear; animated reveal needed to keep content visible during load. | +| 2 | Match System / Real World | 4 | The citable-standard metaphor fits the manifesto well. | +| 3 | User Control and Freedom | 3 | Anchor links and GitHub exit are clear; long-scroll orientation depends on desktop index. | +| 4 | Consistency and Standards | 4 | Tokens, spacing, and document sections are coherent. | +| 5 | Error Prevention | 3 | Mobile overflow risk could cause accidental horizontal panning. | +| 6 | Recognition Rather Than Recall | 3 | Values and principles are strongly structured; signature wall needed more robust mobile wrapping. | +| 7 | Flexibility and Efficiency | 3 | Desktop sticky index works; mobile relies on linear reading. | +| 8 | Aesthetic and Minimalist Design | 4 | Distinct standard/document register without generic AI landing tropes. | +| 9 | Error Recovery | 3 | External signing path is explicit; no major in-page recovery issues found. | +| 10 | Help and Documentation | 4 | GitHub/signing links and manifesto structure are direct. | +| **Total** | | **34/40** | **Strong, with responsive robustness fixes applied.** | + +# Anti-Patterns Verdict + +The surface does not read as generic AI slop. The strongest qualities are the restrained black-and-blue document system, the citable structure, and the refusal of purple gradients, glass cards, and metric hero tropes. + +Deterministic scan: clean. `detect.mjs --json app/src/pages/index.astro app/src/components app/src/styles/sections app/src/styles/tokens.css` returned `[]`. + +Browser evidence: Playwright screenshots and DOM measurements found mobile horizontal overflow before fixes, mainly from full-width signature cards and focus panels with gutter bleed. Immediate screenshots also showed hero copy could be temporarily invisible while reveal animations completed. + +# Overall Impression + +The page already has a strong product-positioned brand register: a manifesto as a published standard. The biggest opportunity was not reinvention, but hardening: keep the visual conviction while removing fragile responsive behavior and animation-gated readability. + +# What's Working + +- The cover has a confident typographic identity and a single clear signing CTA. +- The document layout makes the manifesto feel citable rather than promotional. +- The palette is restrained but specific: ice paper, navy ink, electric blue accent. + +# Priority Issues + +## [P2] Animation-gated hero readability + +Why it matters: screenshots, slow tabs, or paused animations could show blank hero/CTA text during the first load moment. + +Fix: keep cover words visible by default and animate transform only. + +Status: fixed in `app/src/styles/sections/cover.css`. + +## [P2] Mobile horizontal overflow + +Why it matters: a manifesto should feel stable and readable on phones; horizontal panning undermines trust. + +Fix: remove horizontal focus-panel bleed, add `min-width: 0` / `max-width: 100%` to grid and panel children, and make signature cards fluid. + +Status: fixed in `values.css`, `principles.css`, `value-art.css`, `terminal.css`, and `signature.css`. + +## [P3] Display typography exceeded the skill ceiling + +Why it matters: the hero was visually strong but slightly over-scaled and tightly tracked, risking cramped letterforms and lower polish. + +Fix: lower the desktop and mobile clamp ceiling and relax letter-spacing to `-0.035em`. + +Status: fixed in `cover.css` and value folio spacing. + +## [P3] Values intro copy was awkward + +Why it matters: small grammar defects reduce authority on a standards page. + +Fix: rewrite the heading and lede to cleaner English. + +Status: fixed in `Values.astro`. + +# Persona Red Flags + +**First-time AI-assisted developer**: before the fix, the mobile page could feel horizontally unstable in the signature wall. That is now fixed; the main remaining risk is that the page is long and linear without the desktop index. + +**Engineering lead evaluating credibility**: grammar in the values intro and over-tight hero type weakened authority. Both were tightened. + +**Keyboard-only reader**: focus states and skip link are present. The critique did not find a blocking keyboard issue in the inspected surface. + +# Minor Observations + +- The decorative watermark still extends beyond the viewport visually on mobile, but it no longer creates page scroll width. +- Desktop sticky index remains hidden on mobile; acceptable for now, but a compact section jumper could improve long-scroll navigation. +- Terminal/code panels intentionally keep internal horizontal scrolling for preformatted code. + +# Questions to Consider + +- Should mobile get a compact section index, or is the manifesto intended to read strictly top-to-bottom there? +- Should the signature wall be shortened or progressively expanded on mobile to reduce the very long final section? diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..106d878 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,99 @@ +# AGENTS.md + +This file provides guidance to Codex (Codex.ai/code) when working with code in this repository. + +## Ce que c'est + +Manifesto for AI-Driven Development — Astro 4 SSR app, dockerisée, avec store +en mémoire (signatures, votes, feedback). Le worktree d'origine contenait un +seul HTML monolithique : il a été migré vers `app/` (Astro + TypeScript + +Vitest + Playwright). La migration est terminée — l'app Astro est désormais sa +propre source de vérité (plus de parité 1:1 avec l'ancien `index.html`). + +Cousin de `../website/` (Astro, ai-driven-dev.fr) mais **totalement +indépendant** : ne partage aucun asset ni config. Ne pas importer depuis +`../website`. + +## Lancer / prévisualiser + +```bash +# Dev (HMR) +cd app && npm install && npm run dev + +# Production locale +cd app && npm run build && PORT=4321 HOST=127.0.0.1 node ./dist/server/entry.mjs + +# Docker +cd app && docker compose up -d --build +# → http://localhost:4321 +``` + +## Tests + +```bash +cd app +npm test # Vitest unit (store) +npx playwright test # Playwright e2e (api, sign, vote, visual) +``` + +## Architecture + +``` +app/ +├── Dockerfile, compose.yaml, .dockerignore +├── astro.config.mjs SSR + @astrojs/node standalone +├── src/ +│ ├── content/ Données éditoriales : principles.ts, values.ts, terms.ts, seeds.ts +│ ├── styles/ +│ │ ├── tokens.css :root tokens oklch (uniquement) +│ │ └── sections/*.css Styles par section (cover, values, principles, …) +│ ├── lib/ +│ │ ├── store/ Interface + impl mémoire + provider singleton +│ │ ├── api/client.ts Fetch helpers typés (sign, vote, feedback, count) +│ │ └── observers.ts Reveal / terminal / value-art / parallax +│ ├── components/ +│ │ ├── layout/Page.astro +│ │ ├── sections/{Cover,Preamble,Values,Principles,Signature}.astro +│ │ ├── values/{ValueArt,Quadrant}.astro +│ │ ├── principles/{PrincipleGrid,PrincipleCard}.astro +│ │ ├── terminal/TerminalAnim.astro +│ │ ├── signature/{SignDialog,SignatureWall}.astro +│ │ ├── voting/{VoteWidget,DownvoteDialog}.astro +│ │ ├── tweaks/TweaksPanel.astro +│ │ └── ClientApp.astro Single client island (hydratation tweaks + sign + vote + observers) +│ └── pages/ +│ ├── index.astro Composition (≤ 60 LOC) +│ └── api/ +│ ├── signatures.ts GET count, POST sign +│ ├── votes.ts POST +1/-1 +│ └── feedback.ts POST reason + alternative +└── tests/ + ├── check-component-loc.sh AC-6 — LOC budget + └── e2e/{api,sign,vote,visual}.spec.ts +``` + +## Règles d'architecture (voir `aidd_docs/rules/architecture/`) + +- `astro-components.md` — `.astro` ≤ 200 LOC, `index.astro` ≤ 60 LOC, VoteWidget réutilisé. +- `api-routes.md` — JSON in/out, validation stricte, contrats versionnés. +- `store-provider.md` — interface-first, swappable, framework-agnostic. +- `styles-tokens.md` — `oklch()` uniquement, pas de hex/HSL hors `tokens.css`. +- `docker.md` — multi-stage Node 22 alpine, non-root, port 4321. +- `testing.md` — Vitest unit + Playwright e2e + régression visuelle du cover ≤ 1 % (snapshot Astro, plus de baseline). + +## Conventions + +- Couleurs : `oklch()` exclusivement, via variables CSS (`var(--accent)` etc.). +- Données éditoriales : tableaux TypeScript dans `src/content/`, pas de hard-code dans le HTML. +- Tweaks panel : écrit sur `documentElement` (indirection préservée). +- Edit mode parent iframe : sentinelle `/*EDITMODE-BEGIN*/…/*EDITMODE-END*/` + préservée dans `src/components/ClientApp.astro` (ne pas renommer). + +## Édition du contenu + +- Ajouter/modifier un principe : `app/src/content/principles.ts`. +- Ajouter/modifier une valeur : `app/src/content/values.ts` (le champ `quad` alimente le quadrant 2×2 de `Quadrant.astro`) + ASCII art dans `ValueArt.astro`. +- Ajouter/modifier un terminal : `app/src/content/terms.ts`. +- Modifier la palette par défaut : `app/src/styles/tokens.css`. + +Manifeste monolingue : anglais uniquement. Pas d'I18N. diff --git a/PRODUCT.md b/PRODUCT.md new file mode 100644 index 0000000..b572604 --- /dev/null +++ b/PRODUCT.md @@ -0,0 +1,33 @@ +# Product + +## Register + +brand + +## Users + +Software practitioners, engineering leads, product builders, and AI-assisted developers who want a shared standard for building software with AI while keeping human judgment, craft, and responsibility in the loop. They arrive to read, cite, share, or publicly sign the manifesto. + +## Product Purpose + +The site publishes the canonical Manifesto for AI-Driven Development, frames its four values and twelve principles, and turns agreement into a public Git-based signature. Success means visitors understand the standard quickly, trust the text enough to share or cite it, and can sign without ambiguity. + +## Brand Personality + +Precise, principled, and developer-native. The interface should feel like a citable standard with enough visual conviction to be memorable, not like a SaaS landing page or a generic AI tool. + +## Anti-references + +Avoid AI-product cliché: purple gradients, glass panels, hero metric blocks, generic dashboard chrome, decorative card grids, and empty "AI magic" language. Avoid editorial affectation that makes the manifesto feel like a magazine instead of a standard. Avoid hiding the text behind spectacle. + +## Design Principles + +- Treat the manifesto as the artifact: make the text readable, durable, and easy to cite. +- Signal conviction without hype: strong hierarchy, restrained interaction, no generic AI theatrics. +- Make signing feel public and intentional, not like a marketing conversion trick. +- Keep developer trust high: visible structure, direct copy, clear GitHub affordances. +- Preserve accessibility as part of the standard: keyboard paths, reduced motion, robust contrast, and responsive reading. + +## Accessibility & Inclusion + +Target WCAG AA for text contrast and interaction states. Motion must respect `prefers-reduced-motion`; the manifesto must remain readable with animations disabled, on narrow screens, and for keyboard-only users. diff --git a/app/src/components/definition/VersusSchemas.astro b/app/src/components/definition/VersusSchemas.astro index 21ec868..5ef728a 100644 --- a/app/src/components/definition/VersusSchemas.astro +++ b/app/src/components/definition/VersusSchemas.astro @@ -8,7 +8,7 @@
Method
- @@ -33,15 +33,15 @@ review prod - + - VIBE CODING - - - - prompt - prod + VIBE CODING + + + + prompt + prod

Do not care about code quality.

diff --git a/app/src/components/layout/SpecIndex.astro b/app/src/components/layout/SpecIndex.astro index f8405a0..b0c07cf 100644 --- a/app/src/components/layout/SpecIndex.astro +++ b/app/src/components/layout/SpecIndex.astro @@ -16,7 +16,7 @@ const count = (await getCollection('signatories')).length; AIDD - v1.0 + v1.1