🪐 Plain AI — Status & Pipeline¶
Updated 8 May 2026 (originally 5 May 2026). Plain AI v1.1 is LIVE. Positioning corrected from "museum of AI" → AI explained plainly, for everyone (Sush 8 May 2026 brand-positioning fix). Visual register (dark-default, gradient covers) stays. Historical references to "museum" below describe the design phase where that frame was picked — kept as record.
🟢 What's LIVE today¶
The planet itself¶
https://plainai.aguidetocloud.com/— homepage with hero + 6-chip search + 4 reading paths + 7 category sections- 78 topics — every JSON written, every page rendered, 0 placeholders
- 4 reading paths —
/path-worried-parents,/path-starting-out,/path-kids-homework,/path-non-tech-job - About page at
/about— story, voice rules, what it isn't, sources - Sitemap at
/sitemap.xml(84 URLs) and/robots.txt - Tag-filter routing —
?tag=scamdeep-links to home pre-filtered (search.js handles URL params on load) - 78 unique gradient mesh covers — deterministic from slug, 6 palettes × 6 shapes, inline SVG
- 78 stable plate numbers —
PLATE № 01throughPLATE № 78, never re-shuffle on rebuild
The deploy pipeline¶
- Direct CF Pages API upload via
deploy.mjs— works on win32-arm64 where wrangler doesn't (workerd binary unships for arm64) - BLAKE3 hashing via
@noble/hashes— exact match for wrangler's algorithm so the CDN's "already-have" check works correctly - GH Actions push-to-deploy — every push to
maintriggers.github/workflows/deploy.ymlrunning the same upload path. Token is sealed-box encrypted via libsodium. - Custom domain wired via Cloudflare Pages API + DNS CNAME record pointing to
aguidetocloud-plainai.pages.dev
The audit¶
- 84/84 pages clean — 0 axe-core violations (critical/serious/moderate/minor all 0), 0 tap targets <44px
- Audit is
audit.mjs(Playwright + axe). Runs against local dev (port 8771) by default, easy to swap to live URL. - Every page tested at 1280×900 desktop viewport. Mobile viewport tested via
ux-walk.mjs(iPhone 13 device emulation) before each major change.
Visual identity (Direction C — dark-default reading site)¶
- Dark-default charcoal canvas (
#0B0D14) - Cyan
#67E8F9accent + cyan/purple/pink gradient palette - Inter (display + body) + JetBrains Mono (meta, kickers, topic numbers)
- Light mode is opt-in only — no
prefers-color-schemeauto-flip. Site opens at night by default. - Wordmark: gradient bubble + "Plain" + gradient
AI+ brandTag strap "AI explained plainly" - Hero: gradient-clipped "AI" in
Understand AI, plainly. - Topic page right rail: aside with
Topic NN · 78, on-this-page numbered TOC, back-to-category button (sticky on desktop, collapses to single column on mobile with top divider)
Two SME fact-check passes complete¶
- Pass 1 (initial draft, 53 topics): caught fabricated NHS chatbot study (replaced with real Air Canada case), corrected BloombergGPT description ("fine-tuned" → "trained from scratch", then swapped to Khanmigo for clearer pedagogy)
- Pass 2 (additional 25 topics): corrected context window numbers, fixed C2PA acronym usage, removed unsubstantiated period-tracker claim, added Sophia robot exception caveat to AI-personhood
Two QA voice passes complete¶
- Rubber-duck pass on the first 53 to enforce Sush's voice rules — no scaremongering, no cheap reassurance, plain English with glosses for jargon
- Tap-target + accessibility pass after Museum re-skin (ran into 1 link-in-text-block issue in 3 pages, fixed with explicit underline rules)
The cosmos contract¶
- Brand back-link in the footer to
aguidetocloud.com - Cosmos law #6 enforced — zero links to
/guided/, zero practice-exam content, zero paid material referenced anywhere - No shared CSS with Earth or Shift — Plain AI ships its own ~26 KB stylesheet
- No analytics or tracking on the page itself — no Plausible, no GA, no pixel
- CSP via
_headers— strict default-src 'self', no third-party scripts, only Google Fonts allowed for typography
🟡 What's deferred (intentionally)¶
| Item | Why deferred |
|---|---|
| Search UX upgrade (instant suggestions, fuzzy match, keyboard nav like Brain Bar) | Current search is solid for v1 — it filters cards in-place. Upgrade only if usage data shows people landing and scrolling away unsearched. |
| MCP endpoint | The MCP Move (cmd-style search across cosmos) doesn't yet vend Plain AI topics. Add when MCP Move v2 ships, not before. Cosmos law #6 means we'd vend topics with explicit paid:false flags. |
| JSON index feed | Same as above — only build the contract once a planet asks for it. |
| Theme cookie sharing across cosmos | Local-storage only at launch. Add .aguidetocloud.com cookie scoping if Sush wants dark-mode persistence between worlds. |
| OG image generation | Currently uses a generic favicon. Per-topic OG cards (1200×630, gradient + plate №) are a v2 polish. |
| Reading time per topic | Currently shows generic "30s read" on every card. Per-topic word-count → minute estimate is a nice-to-have. |
| Recently viewed / continue reading | Local-storage breadcrumb of last 3-5 topics. Nice for return visitors but not essential to v1's reading-room calm. |
| Print stylesheet | The current print rules hide the masthead actions and search. A polished print layout (paper-mode regardless of theme, page breaks before headings, footnoted sources) is a v2 polish. |
| Audio version of each topic | Sush has voice-cloned himself for Bites — tempting to ship 30-sec audio gists. Not a v1 promise. |
🔴 Known gaps and risks¶
Content gaps (will be filled, not polished, in cadence)¶
- No topics yet on: agentic browsers (Comet/Dia), AI-generated music ethics, AI in elections, AI in court systems, AI for accessibility (TTS/captions/screen-reader integration), AI and the disabled, cost of inference, who pays for "free" AI products, AI water usage (separate from energy)
- No category yet for: regulation & law (currently scattered across "looking ahead" and "in the wild")
- No path yet for: "my partner won't stop talking about AI", "I'm a teacher trying to keep up", "my parents are excited about AI" (currently only worried-parents path exists)
Technical risks¶
- CDN cache trap — was hit on 5 May. Fixed. Two-layer fix:
_headersno longer marks CSS/JS asimmutable, max-age=31536000, and asset URLs are now content-hashed (/styles.css?v=8913da69). New hash → new cache key → instant rollout. Future redesigns must keep this in place. - Wrangler doesn't run on win32-arm64 — workerd binary unships for arm64 Windows. The fix is
deploy.mjs(direct CF API + BLAKE3), but if Sush ever switches machines or the deploy pipeline is handed off, this is the first thing that will break. Documented in deploy.mjs comments. - No automated content drift check — if a topic mentions a 2024 statistic that becomes wrong, nothing alerts us. Manual SME passes are the only guardrail. Not unique to Plain AI but worth noting.
UX risks¶
- Reading paths are buried — the home shows them between search and the category grid, but on mobile they push the categories below the fold. May test moving paths to a dedicated
/pathsroute + a more prominent home callout if the analytics show low path engagement. - No way to bookmark a topic except browser bookmarks — fine for v1; would only matter if user research surfaces it.
- Search behaviour is hidden until you type — there's no "no results" state shown to first-time users (they just see filtered cards). Not broken, but could be more confident.
🚧 The build journey — pivots in order¶
- "AI for grandma" — initial idea
- "One Thing" — pivoted to a single-topic-per-day site (rejected: too thin, would die in months)
- "Pocket Reference" — Direction D from a 4-direction comparison hub. Wide reference, 30-second gists, depth-on-demand
- 78 topics + 4 paths content build
- 2× SME fact-check + 1× voice QA
- "Plain AI" name picked (challenged the "One Thing" name; "Plain" emphasises simplification, "AI" makes the topic explicit — Sush asked for an alternative to plain-AI: I tested Lucid AI / Just AI / AI in English / The Plain Layer / Quiet AI / Two-minute AI, none felt as direct)
- Build pipeline —
build.mjs+deploy.mjs+audit.mjs+ GH Actions - Live deploy at
plainai.aguidetocloud.com - Sush feedback: "feels uninspired vs Brain Bar / Shift" → 4 visual prototypes (
proto-v3/) - Direction C — Museum picked (Direction A was very close but felt too much like Shift's warm-paper editorial atmosphere — broke cosmos law)
- Museum re-skin — full styles.css rewrite, gradient covers, dark-default theme, deploy
- CDN cache incident — old Pocket-Reference CSS pinned by
immutableheaders, served alongside new museum HTML (mismatch). Fixed with content-hashed asset URLs + relaxed cache-control. - Real-user UX walk — 4 contexts (dark+light × desktop+mobile) × 10 user steps = 40 screenshots. Found 8 issues. Shipped fixes:
- Tighter masthead spacing (3rem → 1.5rem margin)
- Path breadcrumb says actual trail name, not generic "Reading path"
- search-meta italic sans (was mono caps, read like a console error)
- "4 trails" → "4 reading paths" (consistency)
- Topic page now has a right-rail aside —
Topic NN · 78, on-this-page TOC, back-to-category button. Filled the previously empty 600px right rail on desktop. - Stable plate numbers across builds (sort order based)
- Two boilerplate card descriptions rewritten
Pending pipeline (not started, ranked by gut)¶
| Rank | Item | Effort | Why it matters |
|---|---|---|---|
| 1 | Per-topic OG cards (1200×630 with title + plate № on a gradient mesh) | medium | Every share of a topic is currently a generic image. With 78 topics, social/messenger shares are the dominant discovery surface for non-tech audiences. |
| 2 | Plausible-style privacy-safe analytics | small | We don't know what people actually read. Without aggregate "what topics get traffic" data, content additions will be educated guesses. The Cloudflare Web Analytics free tier is privacy-safe and would be the simplest add. |
| 3 | Email gist subscription ("one topic a day, plain English, no spam") | medium | Sush's overflow audience naturally maps to a "one new word a day" rhythm. ConvertKit / Buttondown / Listmonk options. |
| 4 | Audio version of every topic (Sush's cloned voice, ~30s) | medium | Highest-leverage accessibility add. Same content, different sense. |
| 5 | 'Connected' graph view (small SVG node-link of how 78 topics connect) | medium | Beautiful, museum-appropriate, helps the "I want to see the breadth" visitor. Could ship as a /atlas route. |
| 6 | Cosmos cross-link — when Brain Bar entry is "AI agents", link to Plain AI's /ai-agents topic for the explainer side |
small | Brain Bar tells you what a portal is. Plain AI tells you why it matters. Pairs naturally. |
| 7 | More categories + topics | ongoing | See "Content gaps" above. |
| 8 | Print stylesheet | small | A clean, paper-mode printable per topic. Some grandparents prefer paper. |
| 9 | Search reframing ("Browse" + "Search" as a tab pair, not search-first) | small | Test only if analytics show low engagement with the current search-first home. |
Operational notes¶
File map¶
C:\ssClawy\plainai\
├── build.mjs # JSON → HTML, ~400 lines, no deps
├── deploy.mjs # CF Pages API, BLAKE3, ~200 lines
├── audit.mjs # Playwright + axe, 84-page sweep
├── content/
│ ├── config.json # Brand, taglines, theme colors
│ ├── categories.json # 7 categories + icons + kickers
│ ├── paths.json # 4 reading paths
│ ├── topics/ # 78 topic JSON files
│ └── pages/about.json # About page content
├── templates/
│ ├── styles.css # ~26 KB, museum dark-default
│ ├── theme.js # Theme toggle (no auto-flip)
│ └── search.js # Tag filter + live filter
├── public/
│ ├── _headers # CSP, cache-control (relaxed)
│ ├── _redirects # (currently empty)
│ └── favicon.svg
├── scripts/
│ └── set-gh-secret.mjs # NaCl-encrypts CF token → GH secret
└── .github/workflows/deploy.yml # Push-to-deploy on main
Commands cheat-sheet¶
# Local build + serve
cd C:\ssClawy\plainai
node build.mjs
cd dist && python -m http.server 8771
# Audit (must be 0/0 before push)
cd C:\ssClawy\plainai
node audit.mjs
# Deploy directly (skip git)
node deploy.mjs
# Push (triggers GH Actions deploy)
git push # uses PAT auth
Token & secret references (paths only — never values)¶
~/.copilot/secrets/cloudflare-api-token— full Pages access (used bydeploy.mjsand stored as theCLOUDFLARE_API_TOKENGH Actions secret)~/.copilot/secrets/cloudflare-dns-token— DNS-only scope (used to add the CNAME record at first domain wire-up)~/.copilot/secrets/github-personal-pat— fine-grained PAT, push-only (used at the git layer)- CF account ID:
d42846fe2c29daf890ec57877fda5e04(not secret, but useful) - CF zone ID for
aguidetocloud.com:8bf12b5f305f7b482dafa8059a0fe384 - CF Pages project name:
aguidetocloud-plainai - GH user:
susanthgit - GH repo:
susanthgit/plainai(private)
See also: Plain AI overview · Plain AI Playbook