Skip to content

🪐 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=scam deep-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 numbersPLATE № 01 through PLATE № 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 main triggers .github/workflows/deploy.yml running 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 #67E8F9 accent + cyan/purple/pink gradient palette
  • Inter (display + body) + JetBrains Mono (meta, kickers, topic numbers)
  • Light mode is opt-in only — no prefers-color-scheme auto-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: _headers no longer marks CSS/JS as immutable, 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 /paths route + 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

  1. "AI for grandma" — initial idea
  2. "One Thing" — pivoted to a single-topic-per-day site (rejected: too thin, would die in months)
  3. "Pocket Reference" — Direction D from a 4-direction comparison hub. Wide reference, 30-second gists, depth-on-demand
  4. 78 topics + 4 paths content build
  5. 2× SME fact-check + 1× voice QA
  6. "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)
  7. Build pipelinebuild.mjs + deploy.mjs + audit.mjs + GH Actions
  8. Live deploy at plainai.aguidetocloud.com
  9. Sush feedback: "feels uninspired vs Brain Bar / Shift" → 4 visual prototypes (proto-v3/)
  10. Direction C — Museum picked (Direction A was very close but felt too much like Shift's warm-paper editorial atmosphere — broke cosmos law)
  11. Museum re-skin — full styles.css rewrite, gradient covers, dark-default theme, deploy
  12. CDN cache incident — old Pocket-Reference CSS pinned by immutable headers, served alongside new museum HTML (mismatch). Fixed with content-hashed asset URLs + relaxed cache-control.
  13. 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 asideTopic 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 by deploy.mjs and stored as the CLOUDFLARE_API_TOKEN GH 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