A site the Grok path actually built, from an empty folder¶
These are not mock-ups. They are http://localhost:4300 — a Jekyll site that did not exist twenty minutes before the screenshots, created end to end through the xAI provider path on a machine with no XAI_API_KEY:
- The dev proxy started with no credential at all.
- The Connect step took an xAI key for the session, probed it upstream, and reported it masked.
- One brief in an open session produced 22 wizard fields, a site plan (landing template, hero, three sections, grouped navigation, midnight palette on the aqua skin, five pages), and 24 files written into a fresh folder.
docker compose up -d --buildon an empty gem cache installed the bundle and served the site in 33 seconds.- A second turn rendered a hero image into
assets/, wired it into_data/landing.ymlandindex.md, added a post, restarted the container and ranjekyll buildinside it — all behind confirmation cards.
Every model turn came from a local Grok-compatible stand-in (scratchpad/grok-standin.mjs) speaking the exact wire protocol the proxy's xAI path expects — streaming chat.completion.chunk tool calls, /v1/models, /v1/images/generations. The proxy's translation, the sandbox, the tool loop, Docker and Jekyll are all real; only the model's judgement is scripted, and the prose in the site was written by hand in that file. Nothing here is Grok's writing.
| File | What it shows |
|---|---|
01-home.png |
The landing page: planned hero copy, and the generated 1200×630 PNG the image tool wrote into assets/images/hero.png |
02-posts.png |
The posts index, including the post added after the site was already running |
03-doc.png |
A planned docs page with the docs sidebar |
04-home-mobile.png |
The same landing page at 390px |
report.json |
All 29 assertions, the route status map, and the timings |
What this run found¶
01-home.png is the before state of a defect it surfaced: the second call to action ("Build a station") is nearly invisible. components/cta-button.html mapped variant: outline to btn-outline-light — white on white — and the wizard's own default CTAs use outline on a light hero, so every generated site shipped an unreadable button. outline is now an outlined primary button, outline-light is the explicit dark-surface variant, and the generated landing engine picks between them based on hero.variant. The theme change reaches an existing generated site only after release, because those sites pull remote_theme from main.
Four other defects came out of the same run and are fixed in this PR: a planned landing.hero.image was never rendered, a partial hero patch wiped the rest of the hero, the 15-second status poll handed the composer back mid-turn, and a newly added post was invisible because the generated dev config enabled incremental regeneration. Each has a regression test; see the changelog.