🌱 Plain AI — UX & Curriculum Roadmap¶
Purpose: persistent record of UX improvements and curriculum-era plans for Plain AI, so future sessions know what to focus on next. Established: 6 May 2026 · 08:36 NZST Site: https://plainai.aguidetocloud.com Repo:
C:\ssClawy\plainai\→github.com/susanthgit/plainaiVoice Guardrail:~/.copilot/plain-ai-voice-guardrail.md— must be respected on all content + UX copy. 🌱 Founding Philosophy (curriculum era):~/.copilot/plain-ai-curriculum-philosophy.md— MANDATORY pre-read for any session touching Plain AI Curriculum (/learn/, lessons, courses, public philosophy/why page). No profit, no glory, no monetisation, ever. Permanent NO list (streaks · email capture · paid tier · sponsorships · etc.) lives in the philosophy file. Established 6 May 2026. Curriculum v1 plan:~/.copilot/plain-ai-curriculum-plan.md— full architectural reference (schema, persona-first sequencing, momentum cadence). v2 + v3 starter prompt:~/.copilot/plain-ai-v2-v3-starter-prompt.md— copy-paste ready for the next session. Repo CONTRIBUTING:C:\ssClawy\plainai\CONTRIBUTING.md— schema docs, how to add a lesson, QA scripts, deploy guide.
🚀 Curriculum status — v1.0 LIVE (6 May 2026 plan, 10 May 2026 actually built)¶
Reconciliation note (10 May 2026)
The 6 May entry below described a curriculum v1.0 plan. The infrastructure (build-learn.mjs, audience hub, course landing, lesson rendering) plus Lesson 1 of Family Foundations actually shipped on 10 May 2026. Lesson 1 is live at status review awaiting Sush's final voice pass. Lessons 2–5 still to come. The 6 May entry stays as the original plan record — see "Shipped 10 May 2026" further down for what's actually live now.
Plain AI Curriculum v1.0 shipped to production at 16:37 NZST on 6 May 2026.
- Audience: Families
- Course: Family Foundations · 5 voice-checked lessons · CC BY-SA 4.0
- Live at: https://plainai.aguidetocloud.com/learn/families/family-foundations/
- Quality: WCAG 2.2 AA fully compliant (0 axe violations across all surfaces)
- Build pipeline: production-ready · validates draft/voice_checked/lesson-chain · refuses to ship broken content
- Deploy:
node deploy.mjsruns build first + ships to Cloudflare
Persona-first sequencing (locked):
1. 🟡 v1.0 Families — infrastructure + Lesson 1 LIVE (10 May 2026, status review); Lessons 2–5 still to draft
2. ⏳ v2 At work (Mid-career non-tech) — after v1.0 fully published
3. ⏳ v3 Te Reo Māori bridge — after v2 (Sush's colleagues will vet AI-drafted translations)
4. ⏳ v4+ more personas (Kids · Retirees · ESL · etc.)
5. ⏳ Teacher pack / MoE NZ pilot — only AFTER ≥4 personas + Te Reo are live and proven
Cadence: momentum-driven, not arbitrary. Push hard while energy is high; drop to background pace when ebbs.
✅ Shipped 10 May 2026 (Plain AI UX refresh + Curriculum moon foundation + Lesson 1)¶
Four commits across one ~4-hour session: 62bec2b → 1366cf7 → 59d8529 → 7b1fd74. All 14 live QA checks green. Deep playbook → Curriculum Build & Lesson Authoring.
Phase A — UX refresh (62bec2b)¶
The two long ribbons under the hero (.start-here + .family-course-signpost) were replaced with a hero-grid + two compact beside-hero cards (60/40 desktop, stack on mobile). Cards: START HERE / Starting out / 7 stops and COURSE / For families / 5 lessons · being written — honest copy that no longer claims "5 lessons · ~50 minutes" before lessons exist.
Mobile-minimal trim shipped (under 720px):
.cat-blurb,.count,.feed-card .topic-tagsalldisplay: none- Cards-per-category dropped 3 → 2
- Latest-changes timeline capped at 3 visible rows
- Tighter section margins
Curriculum stub built at /learn/:
content/learn/_audiences.json(1 audience: families)content/learn/families/family-foundations/_course.json(status: in-progress, 5-lesson outline, 0 lessons rendered)build-learn.mjs(new file) renders/learn/,/learn/families/,/learn/families/family-foundations/- Cosmos-bar
active="curriculum"on every/learn/*page → moon icon dims, Plain AI bubble at full opacity - "Curriculum" tab in masthead (label was
Learn, renamed for clarity) visible site-wide viawithLearnNav: true
Voice + curriculum-philosophy gates run on every paragraph. 3 jargon slips caught + rewritten mid-build (subscribe for new lessons CTA → buttons; vendor sponsorships / affiliate links → sponsorships / paid links; reference site → Plain AI).
Phase B — Mobile category collapse + growing-QA suite (1366cf7)¶
6 of 7 categories now hide behind a "Show 64 more topics across 6 categories" toggle on mobile. "How AI works" stays inline as the cold-start anchor. Cards-per-category dropped from 3 to 2 on mobile via :nth-child(n+3) { display: none } on the top-level .feed-grid.
New growing-QA suite at plainai/scripts/qa.mjs:
- Sister of
guided/test-guided-qa.cjsandcosmos-atlas/scripts/qa-audit.mjs npm run qa(local, auto-spins http.server) +npm run qa:live(production smoke)- 7 page types × 2 viewports = 14 checks
- Same growing-guardrail rule applies — every new bug becomes an automated check before the fix ships
Phase B fix — CSP-safe CSS-only collapse (59d8529)¶
The first mobile-collapse used <details open> + an inline <script> to remove the [open] attribute on mobile during HTML parse. Local QA green. Live QA after deploy: 2 failures — Plain AI's CSP (script-src 'self' with no 'unsafe-inline') silently blocked the inline script in production, so the collapse stayed open on mobile. Refactored to a CSS-only checkbox+label trick — hidden <input type=checkbox> + <label for> toggle + sibling content wrapper. Mobile uses :checked ~ content { display: block }. Desktop hides the toggle UI and uses display: contents on the wrapper so the 6 sections render flat under <main> exactly as before. Verified live: 14/14 ALL CHECKS PASS. Permanent rule documented in Curriculum Build playbook (CSP section) and Production Incident Log (10 May).
Phase C — Lesson 1 of Family Foundations (7b1fd74)¶
"What AI actually is, in one paragraph" — /learn/families/family-foundations/what-ai-actually-is/ · status: review · ~10 min read.
Block schema: intro / key (the one paragraph) / follow (3 honest follow-ups) / example (school-closure home anchor) / try-this (population-of-your-town, 1 minute) / qa (3 self-checks) / wrap. Voice gates passed, Permanent NO list verified clean, forbidden-words sweep clean.
Build infrastructure extended:
lessonsByPathcache inbuild-learn.mjslets the course renderer show actual per-row status (Ready / In review / Soon)renderLesson()emits the full lesson page with breadcrumb, status badge, duration, objective callout, 7 block types, anchor + related topic chips, prev/next nav, credit footer, JSON-LDArticleschema_course.jsonoutline gotslugfield locked-in for Lessons 2–5 — URLs stable for future drafts:spotting-ai-mistakes,ai-already-in-your-day,kids-and-ai-safety,talking-about-ai-with-family- Honest course in-progress note now reads from actual lesson count: "1 of 5 lessons is drafted. The rest are next, written by hand, slowly."
Topic-page back-link rail auto-populates on /hallucination, /large-language-model, /training-data — Lesson 1's anchor_topics feed the existing topicToLessons inverted index in build.mjs (already wired since 6 May). Verified live.
Pick-up here¶
- Sush: do the final voice pass on Lesson 1. Read https://plainai.aguidetocloud.com/learn/families/family-foundations/what-ai-actually-is/. When satisfied, edit
content/learn/families/family-foundations/what-ai-actually-is.json, change"status": "review"→"status": "published", bumplast_updated, runnpm run qa, push. - Lesson 2 (
spotting-ai-mistakes) is the natural next. Slug + URL already locked. See Curriculum Build playbook → How to author a new lesson. - Cosmos atlas freshness bump for Plain AI + curriculum still deferred (blocked by pre-existing cosmos-atlas qa-audit failures — V5 drift toggle off + ambient player + 4 known iPhone overlap waivers).
✅ Shipped 6 May 2026 (UX rework v2)¶
These are now live. Don't redo them.
- Nav split — cosmos rail moved to a meta-bar (thin strip above masthead). Primary nav (Topics · What changed · About) sits inside the masthead, visually distinct.
- Search overhauled — hero search section killed; replaced by a Cmd+K masthead launcher + modal. Index loaded from inline JSON
<script id="plainai-search-index">. Works on every page (homepage, topics, /changes/). - Voice softened —
museum of AIstrap →AI explained plainly.PLATE № NN→Topic NN · 78.exhibitremoved from intro copy. (Voice Guardrail now applies to UX copy too.) - Type-driven topic covers — 78 abstract gradient SVGs replaced with typographic cards. Each card has a category-color left edge strip + caps-mono category kicker + h2 title. Saved ~30KB per homepage load.
- Theme toggle: dual-icon pill — sun + moon both visible at all times; the active mode is highlighted with the accent-deep colour. Active icon also keyboard-tabs cleanly.
- Cloudflare cache fix —
_headersnow sendsCDN-Cache-Controlfor HTML (1h edge cache via s-maxage/CDN-Cache-Control trick) + immutable for hashed assets. Should turnCF-Cache-Status: DYNAMICintoHIT.
Files touched in v2:
- public/_headers
- content/config.json (brandTag, intro, footerLeft)
- content/categories.json (added color field per category)
- templates/search.js (rewritten — modal-based)
- templates/styles.css (~280 lines appended — meta-bar, primary-nav, search-launcher, search-modal, dual-icon toggle, type-driven covers)
- templates/theme.js (kept backward-compat with single-icon button + new dual-icon support)
- build.mjs (new metaBar(), searchModalHtml(), searchIndexJson(); updated masthead(), footer(), pageHead, card HTML in renderIndex, aside-plate text in renderTopic)
- build-changes.mjs (same chrome updates + own search index)
✅ Shipped 6 May 2026 (Homepage v3 + v3.1 — break the card wall)¶
Sush flagged "card fatigue" — homepage felt like a wall of 78 identical cards under the v2 layout. The content inside the cards is brilliant; the quantity at first glance was the problem.
Two-pass redesign:
v3 (commit 77a294c)
- What's changing strip (3 cards) → timeline list (top 6 entries: date · vendor · title · →). Tight, scannable, formatTimelineDate() helper renders 06 May 2026 style.
- Topic categories converted to list rows (title + 2-line description per row).
- Sush response: "love the timeline ✓ — list rows below it are causing reading fatigue."
v3.1 (commit c36e973) — final
- Timeline kept (Sush loved it).
- Topic cards restored but capped at 3 per category on homepage. Native <details> expand with a Show N more in {category} ↓ pill button reveals the rest.
- Resilient cleanOut() in build.mjs — empties dist/ contents instead of removing the folder itself, so dev servers / Explorer holding dist open don't break the build (Windows EBUSY-safe).
Net rhythm:
hero (text)
↓
reading paths (4 rich cards) — curated entry
↓
What's changing (timeline list) — keep on top of the world
↓
Topics by category (3 cards visible · expand for the rest)
Four distinct rhythms, each earning its place. Homepage shows ~21 cards by default, not 78. Every topic still one click away. Page is calm, browse-able, click-worthy.
Files touched in v3/v3.1:
- build.mjs — timeline rendering + cap+expand cards + formatTimelineDate() + resilient cleanOut()
- templates/styles.css — appended .changes-timeline, .timeline-row, .cat-more (details/summary), .cat-blurb, .cat-header-text styles. Mobile responsive.
Pattern learned (carry forward):
Visual variety beats visual consistency. A homepage of 78 cards reads as a wall. The same 78 items as
text → cards → timeline → capped-cards-with-expandreads as a magazine — different rhythms for different moments. Cards are right when they earn it (curated entry, deep content). Lists/timelines are right when scanning matters more than dwell time.
Sush quote (carry forward voice cue):
"Cards are gold, the content inside is brilliant — just don't show me 78 of them at once."
✅ Shipped 6 May 2026 (v3.2 — pre-curriculum next-up A through D)¶
All four small/medium polish items shipped. Plain AI is now ready for the curriculum moonshot.
A. Topic-page back-link fallback (commit 3c593c7)
- topicToChanges inverted index now filters out recused entries up front (recused-only matches no longer count as "matches").
- Every topic page now ends with a "what's changing" rail, not just topics with matches:
- With topic-specific matches: heading "Recent updates affecting this topic" + 3 entries
- Without matches (44 of 78 topics): heading "Across Plain AI · what's changing in AI" + italic explainer line + 3 sitewide-latest non-recused entries + "See all 59 updates →" link
- Visual differentiation: sitewide variant uses a --sitewide modifier class, muted heading, italic explainer, and the elevated background (so users can tell sitewide news apart from topic-specific updates).
B. First-time visitor onboarding — "Start here" band (same commit)
- New <section class="start-here"> block sits between hero and Reading paths grid on the homepage.
- Hardcoded to the starting-out path slug (rubber-duck caught: it's NOT first in paths.json, so we can't elevate "first card").
- Subtle gradient background + 4px accent edge + two-column layout on desktop (text left, CTA right) / stacked on mobile.
- Reading paths grid still shows all 4 paths — band is a signpost, not a duplicate.
- Foundation for the curriculum-era IA flip: when audience triage lands, this block evolves into the 4-quadrant "what brings you here?" grid (item E in this doc).
C. Search modal polish (same commit)
- searchIndexJson() now includes categoryNum + categoryName per topic. Uses category.name (not kicker which contains HTML entities like Trust & truth).
- Updated both build.mjs and build-changes.mjs index generators (mirror needed because each generates its own modal HTML + index).
- Group-by-category display: score globally → take top 8 → group by category for display (so per-category caps don't distort ranking).
- Group headers are non-interactive <div class="search-group-header"> with pointer-events: none. Arrow-key nav already filters by .search-result selector → keyboard nav unaffected.
- Recent searches: localStorage key plainai-recent-searches, capped at 5, deduped (case-insensitive). All storage ops wrapped in try/catch for private-mode / quota / corrupted-JSON safety.
- Save trigger: result click OR bare Enter (saves the typed query before navigating). Recents are NOT saved when navigating from the empty-state browse list.
- Modal opens with cleared input — empty state with recents shows reliably each time.
- Empty state now shows: recent searches (if any) + "Browse topics" alphabetical 6 (deterministic fallback so the empty state is never blank).
- Keyboard hints in modal footer: ↑↓ navigate · ↵ open · esc close
D. Mobile masthead audit (same commit, CSS-only)
- Reconciled with existing @media (max-width: 600px) breakpoint (rubber-duck caught: separate 560px/440px would have collided).
- At <600px: .primary-nav gets order: 99 + full width + border-top: 1px solid hairline → renders as a clean second row below wordmark+actions.
- Horizontal scroll allowed on the second row (overflow-x: auto) for very narrow phones.
- At <380px: tighter padding on launcher + nav links so the masthead stays cohesive on the tightest screens.
Files touched in v3.2:
- build.mjs — non-recused filter + SITEWIDE_LATEST_CHANGES + new sitewide-fallback rendering + start-here band + categoryNum/Name in search index + search modal hints HTML
- build-changes.mjs — same search index update + same modal hints HTML (mirror)
- templates/search.js — REWRITTEN: groups, recents (localStorage hardened), Enter-fallback, cleared input on open
- templates/styles.css — appended ~280 lines for .topic-recent-changes--sitewide, .start-here, .search-group, .search-recent-btn, .search-modal-foot, mobile masthead stacking
Production state (end of session):
- ✅ All 4 items live + verified via https://plainai.aguidetocloud.com/
- ✅ agi topic page (no matches) shows sitewide fallback
- ✅ context-window topic page (with matches) shows topic-specific
- ✅ Homepage: hero → "Start here" band → reading paths → timeline → 7 capped categories with expand
- ✅ Search modal: groups, recents, hints, mobile-friendly
- ✅ Asset cache busted: search.js?v=f645f411 · styles.css?v=058fcea7
🌱 Founding philosophy on the public site (added 6 May 2026)¶
Sush's directive (6 May 2026 · 12:09 NZST):
"Make the philosophy visible to others so they understand the reason and philosophy behind Plain AI's existence."
The constitution at ~/.copilot/plain-ai-curriculum-philosophy.md exists for Copilot sessions. The PUBLIC version exists for site visitors who wonder "is there a catch?" and deserve a clean answer.
Where the philosophy lives on the site¶
| Surface | What it carries |
|---|---|
NEW /why/ page |
The full public-facing philosophy. Why this exists, what it won't ever become, why CC BY-SA 4.0 (not CC BY-NC), how it's funded (it isn't). Calm, plain, ~400-500 words. Voice-checked. |
Existing /about/ page |
Stays warm and personal (who's behind it, voice rules, fact-checking). Adds a small "What you won't find here →" pointer to /why/ near the top, between intro and "Why this exists." |
| Footer | Tiny line: Free, always · CC BY-SA 4.0 linking to /licence/ and /why/. Quiet, factual, discoverable without preachy. |
| Lesson page footers (curriculum only) | Free, always · CC BY-SA 4.0 link block — mirrors site footer. Reinforces commons posture per lesson. |
| Homepage | NO change. The philosophy is not the front door — the topics + lessons are. The link is in the footer where curious readers will find it. |
Public /why/ page — content draft (voice-checked)¶
This is the v1.0 draft for the new public page. Plain English, no first-person manifesto, no centerpiece on Sush.
# Why Plain AI exists
This is voluntary work. There's no business model, no signup, no premium tier.
There never will be.
Most explanations of AI sound like marketing or panic. The honest middle was
missing, so it's getting written one topic at a time, in the language a friend
or family member would actually use.
Anyone can copy, translate, or reuse anything here under Creative Commons
BY-SA 4.0 — the same licence Wikipedia uses. If a school, parent group,
library, or community group wants to take a lesson and run with it, that's
the point.
## What you won't find here
- Streaks, badges, points, or "come back tomorrow" loops
- Email signup forms or notifications
- Sponsored content, vendor logos, or affiliate links
- A paid tier, premium lessons, or paid certificates
- Tracking pixels or per-visit analytics
- A login wall
## What you will find
- Short pages, one idea each
- Real examples
- Honest takes — including when AI is good, and when it's overselling
- Lessons that try to be useful, not addictive
- Translations as they're contributed by community
If a feature would distract from those, it doesn't ship — even if it would
help "the brand."
## How this is funded
It isn't. There's no business behind this site. The hosting costs are pocket
money. The work is hours that would otherwise be Netflix.
The aim isn't growth. The aim is: someone reading this should leave
understanding more, with less anxiety, faster — and never feel like the page
wanted something from them in return.
## How this is made
This site is made by Sush, with help from AI tools — drafting text,
sketching diagrams, suggesting examples. Everything that sounds like
Plain AI was passed through a voice gate (mum, dinner-table, 12-year-old,
honesty) and edited by hand before it shipped. Where AI made an
illustration, the page says so.
We're honest about using AI to make a site about AI. Refusing to would
be precious, not principled.
## Why CC BY-SA 4.0, not CC BY-NC
Some "free" projects use a non-commercial licence. That sounds protective but
it actually blocks good actors — school textbook publishers, libraries
running paid programmes, NGOs that charge participants for printing. They're
the ones who'd take this content furthest.
CC BY-SA 4.0 lets anyone use it, including commercially, on the condition
that derivatives stay open under the same licence. The commons grows; it
doesn't get locked back up.
## If you spot something wrong
Use the feedback page on the main site, or email
hello@aguidetocloud.com. Corrections matter. They get acted on.
— Plain AI
Voice gate (passed)¶
- ✅ Mum test — would mum understand "voluntary work, no business model"
- ✅ Dinner-table test — would say all of this aloud
- ✅ 12-year-old test — no jargon, plain rhythm
- ✅ Honesty test — defendable in 5 years
- ✅ Forbidden-words scan — no frontier/ecosystem/agentic/multimodal/mass-market/robust/scalable/holistic/AI-powered/in-layman's-terms
- ✅ §0 value test — does this serve the reader? Yes — it answers "is there a catch?" and "can I trust this to stay free?", which are real reader questions
- ✅ Brag-allergy test (per Sush's voice profile) — not first-person, doesn't centerpiece Sush, day-job framing not present (this isn't the place for it)
Closing surfaces TWO correction paths (per Sush 6 May 2026 12:22 NZST)¶
- Feedback page:
https://www.aguidetocloud.com/about/— already the canonicalfeedback_urlincontent/planets.jsonfor the whole cosmos - Email:
hello@aguidetocloud.com— already used on/about/
Both serve different reader moods. Feedback page = "I want to file a structured note." Email = "I have 3 sentences and just want to hit send."
Existing /about/ page — minimal edit¶
ADD ONE small section between the existing intro paragraph and "Why this exists":
> If you're wondering "is there a catch?" — there isn't one.
> Free always, no email signup, no ads, no premium tier, no monetisation
> ever. The longer "why" is on the [Why Plain AI exists](/why/) page.
Don't restructure the rest. The existing /about/ voice is good.
Site footer — minimal edit¶
Current footer (per content/config.json):
- Left: "Plain AI · AI explained plainly"
- Right: "by A Guide to Cloud"
ADD ONE quiet line below or alongside:
- "Free, always · CC BY-SA 4.0" (links to /licence/ and /why/)
Implementation note: footerLeft and footerRight already exist in config. Add a new optional footerCommons field that renders below if present, so the chrome stays clean.
Implementation phasing¶
Goes in the same v1 release:
- New content/pages/why.json (the page above)
- Update content/pages/about.json (small "is there a catch?" section)
- Update content/config.json (add footerCommons field)
- Update build-shared.mjs footer() to render commons line if present (already part of refactor)
- Sitemap auto-includes /why/ via the walk-dist sitemap generator (already planned)
Total cost: ~1 hour additional editorial + ~30 min code. Negligible vs. the value (this is the trust signal that opens or closes whether someone shares the curriculum with their school).
🚦 Pre-curriculum next-up (in priority order)¶
A. Topic-page back-link fallback ✅ SHIPPED 6 May 2026¶
(See "Shipped 6 May 2026 (v3.2)" section above.)
B. First-time visitor onboarding ✅ SHIPPED 6 May 2026¶
(See "Shipped 6 May 2026 (v3.2)" section above. Foundation for the curriculum-era audience triage flip.)
C. Search modal polish ✅ SHIPPED 6 May 2026¶
(See "Shipped 6 May 2026 (v3.2)" section above.)
D. Mobile masthead audit ✅ SHIPPED 6 May 2026¶
(See "Shipped 6 May 2026 (v3.2)" section above.)
🚀 Curriculum-era IA reshape (the bigger work)¶
E. Homepage flip from "browse the museum" → "what brings you here?" 🔴¶
- What: Plain AI's homepage today is "topics-first" (78 plates in 6 category sections). When curriculum ships, this stops working — Lessons + Courses + Teacher resources need primary placement.
- Proposed homepage:
- Effort: 🔴 major. New homepage IA, new section components, copy, maybe a "Choose your path" landing.
- Trigger: when curriculum has its first lessons ready to ship.
F. New Learn (curriculum) tab 🔴¶
- What: Primary-nav becomes
Topics · Learn · What changed · About. The Learn tab routes to a curriculum hub with audience-keyed entry paths (parents · kids · teachers · ESL · retirees · mid-career non-tech). - Sub-pages:
/learn/— choose your audience/learn/<audience>/— start path with sequenced lessons/learn/<audience>/<lesson-slug>/— individual lesson page (different schema than/topics/)- Effort: 🔴 major. New content types in build.mjs (lessons + audiences + sequences). New templates. Lots of editorial work to write the lessons.
- Trigger: plan-mode session for the curriculum moonshot (P0 in
~/.copilot/cosmos-todo.md).
G. New Teach resource hub 🟡¶
- What: Hub for teachers/parents — lesson plans (PDF/HTML), classroom-tested activities, sequence guides, slides.
- Why it matters: the MoE NZ pilot pathway requires teacher-facing materials. Without them, teachers can't adopt Plain AI at scale.
- Effort: 🟡 medium-high. Content-heavy. Could partially reuse curriculum lessons.
- Trigger: after
Learntab v1 is live.
H. Page weight: lazy-load below the fold 🟡¶
- What: Even after v2's drop from 112KB → 79KB, the homepage still inlines all 78 topic cards. With curriculum (Learn paths + lessons) the homepage gets heavier again.
- Fix: use Intersection Observer to lazy-load category sections below the fold. Or split into per-category pages with a quick-jump nav on /.
- Effort: 🟡 medium. ~2-4h.
- Trigger: when homepage exceeds 100KB again, or when LCP slows down.
I. Long-term icon system 🔴¶
- What: v2 went from gradient covers → type-driven covers. The next evolution would be simple line-art icons per topic (Phosphor / Lucide / custom). Recognition cues for fast scanning.
- Effort: 🔴 high. ~78 icons to map + a designer pass. ~2 days.
- Trigger: brand-evolution pass when curriculum is well-established and content count is stable.
J. Plain AI v2 homepage — full spec 🟡¶
- When ready to flip the IA, the homepage spec lives here:
Header (meta-bar + masthead) — already shipped Hero — current "Understand AI, plainly" wordmark + tagline Audience triage — 4-card grid "What brings you here?" Featured paths — hand-picked 2-3 reading paths Latest changes rail — top 3 (already shipped) Topic categories — collapsed by default; expandable on click; or moved to /topics/ Footer (already shipped) - Effort: 🔴 major rewrite of
renderIndex()in build.mjs.
📐 Voice rules for UX copy (carry forward)¶
The Voice Guardrail (~/.copilot/plain-ai-voice-guardrail.md) applies to UX copy too, not just content. Specifically:
| Old (museum register) | Plain AI voice |
|---|---|
PLATE № NN |
Topic NN · 78 |
museum of AI |
AI explained plainly |
exhibit |
topic |
curated · plates · paths |
topics · paths · plain English |
curator's note |
editor's note or just note |
DISPATCH № (in /changes/) — kept. The newsroom register fits the changes wing and reads OK as-is.
🛡️ Things to NOT change without a strong reason¶
- The 4-line voice guardrail tests (mum / dinner-table / 12-year-old / honesty) on every new entry, lesson, or copy change.
- The cosmos-rail position above the masthead — the v1 mistake was putting it inline with primary nav; do not recombine them.
- Search modal pattern — Cmd+K + masthead launcher is the right pattern for this scale of catalogue (78 topics → growing). Don't replace with a hero search again.
- No
backdrop-filteranywhere (cosmos-wide rule, performance). - No paid content crosses cosmic boundaries via free pathways (Cosmos Law #6) — never paraphrase or expose Earth's practice-exam content here.
🌟 What "done" looks like for the curriculum moonshot¶
P0 from ~/.copilot/cosmos-todo.md:
🚀 Plain AI Curriculum — free forever, the global AI literacy commons. The Khan Academy of AI/cloud literacy.
Concrete milestones:
- ✅ Plain AI v1 (Sep 2024 - May 2026) — 78 topics + 4 reading paths shipped. (Where we are)
- ✅ Halt wing (May 2026) — 59 changes documented. (Done)
- ✅ UX v2 + Homepage v3 + v3.2 (May 2026) — nav split, search modal, type covers, voice softened, cache fix, card-fatigue fix → timeline + capped-cards rhythm, sitewide-fallback rail on every topic page, "Start here" band for cold visitors, search modal groups + recents + hints, mobile masthead second-row stacking. (Done — this doc)
- ⏳ Curriculum v1 — Learn tab + 1 audience (e.g. parents) + 5-7 lessons + first MoE NZ pilot (later 2026)
- ⏳ Curriculum v2 — 5+ audiences + Te Reo Māori translation start (2027)
- ⏳ Curriculum v3 — Teacher hub + 10+ language community translations (2028)
- ⏳ Curriculum v4 — UNESCO partnership, Pacific schools rollout (2029-2030)
The moonshot is real. Each step compounds.
Last updated: 6 May 2026 · 11:29 NZST · Session 9b67c31d-fca5-47fa-8b5a-b9515de99336. Update when items get shipped or new ones are identified.