S0: website, docs, repo skeleton and verify gate #2

Open
opened 2026-10-05 14:17:08 +00:00 by kayg · 13 comments
Owner

Build S0: the infraternal.com marketing site, the docs, the monorepo skeleton and the scripts/verify fast gate. Decisions 44–47, 32, 34, 36, 37.

  • Branch: s0-website. Worktree: .worktrees/s0-website. Base: ab67af2 (main).
  • Job: Codex GPT 6 Luna Max: s0-website (systemd user unit codex-s0-website).
  • Preview over NetBird: http://10.69.69.125:47311 (user unit infraternal-preview, serves dist/site).

Scope:

  • bun workspace skeleton (apps/website, apps/docs, packages/ui, placeholders for crates/, contracts/ and ee/)
  • @infraternal/ui vendored from calternal packages/ui, plus scripts/sync-ui.sh
  • Landing page (hook, mobile terminal mock, desktop shell mock), roadmap, pricing (free during beta, no numbers), changelog
  • Waitlist: a Pages Function and the D1 binding WAITLIST; works without JS
  • Starlight docs at /docs
  • Combined output dist/site
  • scripts/verify fast: types, lint, build, links, page-weight budget (≤ 60 KB JS gz, ≤ 30 KB CSS gz), no external origins
  • Screenshots at 390 and 1440, light and dark. The orchestrator reviews them.
Build S0: the infraternal.com marketing site, the docs, the monorepo skeleton and the `scripts/verify fast` gate. Decisions 44–47, 32, 34, 36, 37. - Branch: `s0-website`. Worktree: `.worktrees/s0-website`. Base: `ab67af2` (`main`). - Job: `Codex GPT 6 Luna Max: s0-website` (systemd user unit `codex-s0-website`). - Preview over NetBird: http://10.69.69.125:47311 (user unit `infraternal-preview`, serves `dist/site`). Scope: - [ ] bun workspace skeleton (`apps/website`, `apps/docs`, `packages/ui`, placeholders for `crates/`, `contracts/` and `ee/`) - [ ] `@infraternal/ui` vendored from calternal `packages/ui`, plus `scripts/sync-ui.sh` - [ ] Landing page (hook, mobile terminal mock, desktop shell mock), roadmap, pricing (free during beta, no numbers), changelog - [ ] Waitlist: a Pages Function and the D1 binding `WAITLIST`; works without JS - [ ] Starlight docs at `/docs` - [ ] Combined output `dist/site` - [ ] `scripts/verify fast`: types, lint, build, links, page-weight budget (≤ 60 KB JS gz, ≤ 30 KB CSS gz), no external origins - [ ] Screenshots at 390 and 1440, light and dark. The orchestrator reviews them.
Author
Owner

Started. Branch s0-website, base ab67af2 (main). Job Codex GPT 6 Luna Max: s0-website. Commits so far: 7253a00 Add the D1 waitlist endpoint; 79bb826 Record the S0 restart in the changelog; 76981b8 Publish beta tiers without prices; 9166842 Publish the planned product roadmap; d3ba58e Build the S0 marketing landing page; 0f7375e Vendor the shared calternal UI foundation; 7bd0868 Create the S0 workspace skeleton.

Started. Branch `s0-website`, base `ab67af2` (`main`). Job `Codex GPT 6 Luna Max: s0-website`. Commits so far: `7253a00` Add the D1 waitlist endpoint; `79bb826` Record the S0 restart in the changelog; `76981b8` Publish beta tiers without prices; `9166842` Publish the planned product roadmap; `d3ba58e` Build the S0 marketing landing page; `0f7375e` Vendor the shared calternal UI foundation; `7bd0868` Create the S0 workspace skeleton.
Author
Owner

Job finished. Head 8a27ee3 (13 commits). scripts/verify fast passed: JS 37.7/60 KiB gz, CSS 17.1/30 KiB gz, 150 internal links, no external origins. Mobile FCP (4× CPU throttle): landing 304 ms, pricing 164 ms, docs 116 ms.

Orchestrator visual review of the 16 screenshots. Pricing, roadmap and the landing body sections are good. Fix round 1:

  1. The hero caption is covered. The phone mock covers "Concept interface" at 1440 and at 390.
  2. The mobile hero is crowded. At 390, the phone covers most of the desktop mock, and the text in the desktop mock is too small to read. Below about 640 px, show only the phone mock: centered, larger, with the accessory key bar easy to read. Mobile is the main feature.
  3. The docs header has no brand. On the docs at 390, the menu button is an empty white circle (the icon is not visible). The docs header has no infraternal mark and no link back to the site. The docs font is different from the website font. Use the same tokens, font, mark and top navigation in both.
  4. In the desktop mock, the user label shows "Kay · owner". It must be "kayg · owner" (lowercase handle).
Job finished. Head `8a27ee3` (13 commits). `scripts/verify fast` passed: JS 37.7/60 KiB gz, CSS 17.1/30 KiB gz, 150 internal links, no external origins. Mobile FCP (4× CPU throttle): landing 304 ms, pricing 164 ms, docs 116 ms. Orchestrator visual review of the 16 screenshots. Pricing, roadmap and the landing body sections are good. Fix round 1: 1. **The hero caption is covered.** The phone mock covers "Concept interface" at 1440 and at 390. 2. **The mobile hero is crowded.** At 390, the phone covers most of the desktop mock, and the text in the desktop mock is too small to read. Below about 640 px, show only the phone mock: centered, larger, with the accessory key bar easy to read. Mobile is the main feature. 3. **The docs header has no brand.** On the docs at 390, the menu button is an empty white circle (the icon is not visible). The docs header has no infraternal mark and no link back to the site. The docs font is different from the website font. Use the same tokens, font, mark and top navigation in both. 4. In the desktop mock, the user label shows "Kay · owner". It must be "kayg · owner" (lowercase handle).
Author
Owner

Starting website fix round 1 on branch s0-website at base SHA 8a27ee305f.

Starting website fix round 1 on branch s0-website at base SHA 8a27ee305f4b5136241215881da8c05244b2e7a2.
Author
Owner

Finding 1: The caption overlapped because its right-aligned box extended under the phone at both target widths. Reserved vertical space and centered the caption below the mock. Website production build passed; commit c0827bbbeb8e0b507d487353b2cb506a25985a5d.

Finding 1: The caption overlapped because its right-aligned box extended under the phone at both target widths. Reserved vertical space and centered the caption below the mock. Website production build passed; commit c0827bbbeb8e0b507d487353b2cb506a25985a5d.
Author
Owner

Correction: Finding 1 is commit 3d06d2bca1. Finding 2: the 390 px layout previously rendered the overlapping desktop mock behind a narrow phone. The mobile breakpoint now hides that mock and enlarges the centered phone and key bars; the website production build passed. Commit 05696f0db1.

Correction: Finding 1 is commit 3d06d2bca1c51a3938aab6f3a7221c87ac6539d6. Finding 2: the 390 px layout previously rendered the overlapping desktop mock behind a narrow phone. The mobile breakpoint now hides that mock and enlarges the centered phone and key bars; the website production build passed. Commit 05696f0db122a6a8d21af6458d9e962e3b70453e.
Author
Owner

Finding 1 — caption: the old note used a right offset that placed its text behind the phone at both target widths. The fix reserves space and centers the caption. Production evidence: landing-390-light.png, landing-390-dark.png, landing-1440-light.png, and landing-1440-dark.png in /home/kayg/.local/state/codex-jobs/infraternal/s0-fix1/shots.

Finding 1 — caption: the old note used a right offset that placed its text behind the phone at both target widths. The fix reserves space and centers the caption. Production evidence: landing-390-light.png, landing-390-dark.png, landing-1440-light.png, and landing-1440-dark.png in /home/kayg/.local/state/codex-jobs/infraternal/s0-fix1/shots.
Author
Owner

Finding 2 — mobile hero: at widths up to 640 px the desktop mock is hidden and the centered phone and accessory keys are enlarged. The requested crop captures are 390 × 844. Production evidence: landing-hero-390-light.png and landing-hero-390-dark.png; measured landing FCP was 212.0 ms light and 196.0 ms dark at 4× CPU throttle.

Finding 2 — mobile hero: at widths up to 640 px the desktop mock is hidden and the centered phone and accessory keys are enlarged. The requested crop captures are 390 × 844. Production evidence: landing-hero-390-light.png and landing-hero-390-dark.png; measured landing FCP was 212.0 ms light and 196.0 ms dark at 4× CPU throttle.
Author
Owner

Finding 3 — docs header: Starlight Header and SiteTitle overrides add the shared infraternal mark, a home link, and Docs/Roadmap/Pricing navigation. Docs and website use the shared paper/midnight tokens and self-hosted Inter face. The screenshot runner measured the mobile menu icon at 16.4:1 contrast light and 13.1:1 dark. Evidence: docs-390-light.png, docs-390-dark.png, docs-1440-light.png, docs-1440-dark.png.

Finding 3 — docs header: Starlight Header and SiteTitle overrides add the shared infraternal mark, a home link, and Docs/Roadmap/Pricing navigation. Docs and website use the shared paper/midnight tokens and self-hosted Inter face. The screenshot runner measured the mobile menu icon at 16.4:1 contrast light and 13.1:1 dark. Evidence: docs-390-light.png, docs-390-dark.png, docs-1440-light.png, docs-1440-dark.png.
Author
Owner

Finding 4 — account label: the production landing HTML now contains “kayg · owner” at dist/site/index.html:23. Desktop screenshots: landing-1440-light.png and landing-1440-dark.png.

Finding 4 — account label: the production landing HTML now contains “kayg · owner” at dist/site/index.html:23. Desktop screenshots: landing-1440-light.png and landing-1440-dark.png.
Author
Owner

Finished on branch s0-website at head SHA f0131d0344.

Fast gate output:
Fast gate summary
Gate | Status | Evidence
-----------------------+--------+---------------------------------------------------
Install check | PASS | Frozen Bun lockfile
Typecheck | PASS | Svelte, Astro, shared UI, and scripts
Lint | PASS | Licenses, strictness, no any, module comments
Build: site | PASS | dist/site plus dist/functions
Internal links | PASS | Built page and asset references resolve
Page weight | PASS | Landing JavaScript ≤60 KiB and CSS ≤30 KiB gzip
External origins | PASS | Only the repository and security mailbox are external

Fast gate passed.

Finished on branch s0-website at head SHA f0131d0344ce1ffbc9bb4e5967ed955e269b5865. Fast gate output: Fast gate summary Gate | Status | Evidence -----------------------+--------+--------------------------------------------------- Install check | PASS | Frozen Bun lockfile Typecheck | PASS | Svelte, Astro, shared UI, and scripts Lint | PASS | Licenses, strictness, no any, module comments Build: site | PASS | dist/site plus dist/functions Internal links | PASS | Built page and asset references resolve Page weight | PASS | Landing JavaScript ≤60 KiB and CSS ≤30 KiB gzip External origins | PASS | Only the repository and security mailbox are external Fast gate passed.
Author
Owner

Orchestrator review of fix round 1 (head f0131d0): findings 1, 2 and 4 are fixed. The mobile hero now shows only the phone, which is large and easy to read. Finding 3 is mostly fixed: the docs now use the site mark, the top navigation and the font. One small defect remains: the mobile docs menu button shows both icons at the same time ("≡×"). This does not block the owner preview. It goes in the next round together with the owner's feedback. Branch s0-website is pushed to Forgejo for review. Preview: http://10.69.69.125:47311

Orchestrator review of fix round 1 (head `f0131d0`): findings 1, 2 and 4 are fixed. The mobile hero now shows only the phone, which is large and easy to read. Finding 3 is mostly fixed: the docs now use the site mark, the top navigation and the font. One small defect remains: the mobile docs menu button shows both icons at the same time ("≡×"). This does not block the owner preview. It goes in the next round together with the owner's feedback. Branch `s0-website` is pushed to Forgejo for review. Preview: http://10.69.69.125:47311
Author
Owner

The owner rejected the S0 site: "pure slop" compared with the calternal website. Root causes:

  1. There was no design grill for the website. Its visual direction was never decided.
  2. A Luna job made the taste decisions. Luna is weak at visual design. In the calternal work, Claude designs and reviews visuals.
  3. The orchestrator review checked bugs (overlap, contrast) but not taste.
  4. The site uses a generic SaaS template: eyebrow + large headline + card grid + numbered strip, and copy that says "planned" in every section.

Next: a design grill with the owner, then a redesign that Claude leads. The current branch is kept only for its plumbing (verify gate, waitlist, docs, build).

The owner rejected the S0 site: "pure slop" compared with the calternal website. Root causes: 1. There was no design grill for the website. Its visual direction was never decided. 2. A Luna job made the taste decisions. Luna is weak at visual design. In the calternal work, Claude designs and reviews visuals. 3. The orchestrator review checked bugs (overlap, contrast) but not taste. 4. The site uses a generic SaaS template: eyebrow + large headline + card grid + numbered strip, and copy that says "planned" in every section. Next: a design grill with the owner, then a redesign that Claude leads. The current branch is kept only for its plumbing (verify gate, waitlist, docs, build).
Author
Owner

The owner parked the website on 2026-10-05: "let's do it in parallel later, after this grill". When it restarts: Claude designs it, with the calternal recipe (shared tokens, real screenshots after S1, one signature effect). The design grill questions (identity, hero, voice, structure, analytics) are still open. Branch s0-website keeps its plumbing (verify gate, waitlist, docs, build), but it is not merged.

The owner parked the website on 2026-10-05: "let's do it in parallel later, after this grill". When it restarts: Claude designs it, with the calternal recipe (shared tokens, real screenshots after S1, one signature effect). The design grill questions (identity, hero, voice, structure, analytics) are still open. Branch `s0-website` keeps its plumbing (verify gate, waitlist, docs, build), but it is not merged.
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#2
No description provided.