๐ What this page is
End-to-end status of the Maqueen Lab project โ what's shipped, what's in flight, and what's still left. Auto-rendered from observed repo state, not from a wishlist.
๐ By the numbers
โ Shipped
Phase 1 โ Original 20-item roadmap (v0.1.0 โ v0.1.60)
| Category | Done |
|---|---|
| 10 app improvements | Voice commands ยท Tilt-to-drive ยท AI session summary ยท Time-lapse export ยท Drag-to-trace autopilot ยท AR webcam overlay ยท Robot personalities ยท Battery indicator ยท Telemetry export ยท 2-robot pairing |
| 10 educational games | SLAM the Room ยท Echo Hunt ยท Maze Runner ยท Buzz the Tune ยท Simon Says NeoPixel ยท Math the Distance ยท Robot Soccer ยท Line Follower Race ยท PWM Lab ยท Morse Decoder |
โ 20 / 20
Phase 2A โ Reach (turn product into adoption)
| # | Item | What landed | Status |
|---|---|---|---|
| 1 | Main cockpit i18n (FR + AR) | js/lang.js 1932 LoC + 304 data-i18n + flag picker + RTL | DONE |
| 2 | Etsy package โ slim & ready | Slimmed 86โ10 files (260 KB). Build script tested, 1.02 MB ZIP | DONE |
| 3 | Teacher kit (8 lesson plans) | A4 print-ready, mapped to FR Cycle 3/4 + NGSS + CCSS-M + CSTA, ๐พ PDF button | DONE |
| 4 | PDF export from flyer/poster | ๐พ PDF button on both, first-click i18n toast hint | DONE |
| 5 | Curriculum mapping | 8 Labs + 10 games ร FR Cycle 3/4 ยท NGSS ยท CCSS-M ยท CSTA | DONE |
โ 5 / 5
โก Multipliers โ small effort, large leverage
| Item | What it does | Status |
|---|---|---|
| ๐ญ Demo without robot | js/demo-mode.js โ fake BLE shim activated by ?#demo=1 or localStorage flag. Replaces connect/sendLine/isConnected; emits synthetic ECHO:N + DIST/LINE/IR sensor values. Floating orange badge. Conversion lever: teachers/kids try every Lab without buying hardware. | DONE |
| ๐ /share deep links | js/share-link.js โ encodes theme ยท lang ยท demo into URL hash. Auto-applies on load (RTL flips for AR). Public API MqShare.url() / .copy() / .addButton(). | DONE |
| ๐ Local-only telemetry | js/telemetry.js + viewer โ auto-tracks visits, themes, langs into localStorage. Zero network โ no fetch, no beacon, no cookies. Heatmap with bar charts, JSON export, opt-out. | DONE |
โ 3 / 3
๐ Phase 2B โ Hardening (4 of 5)
| # | Item | Status |
|---|---|---|
| 2B-6 | Smoke tests (Playwright) โ 32 tests covering hubs ยท labs ยท lessons ยท demo-mode ยท telemetry ยท share-link ยท a11y ยท lang switcher ยท auto-render | DONE โ 32/32 |
| 2B-7 | Split maqueen-tab.js (4580 LoC) | PENDING |
| 2B-8 | GitHub Actions CI โ link audit + inlined-md staleness + JSON validity + secret-leak guard + a11y sanity + smoke tests | DONE |
| 2B-9 | A11y pass โ js/a11y.js on 53 pages: skip-link, focus-visible ring, auto-aria-label, aria-hidden on decorative emoji, prefers-reduced-motion, lang ensured | DONE |
| 2B-10 | Performance budget (Lighthouse CI) | PENDING |
๐ i18n parity (full coverage)
| Surface | EN | FR | AR | Mechanism |
|---|---|---|---|---|
Main app index.html | โ | โ | โ | js/lang.js + 304 data-i18n |
| Labs (10 files) | โ | โ | โ | Inline T table |
| Workshops (9 files) | โ | โ | โ | 3-file pattern + inline T |
| Docs guides (5 ร 3 files) | โ | โ | โ | 3-file pattern |
| Auto-rendered (CHANGELOG ยท CUSTOMIZE ยท todo ยท README) | โ | โ | โ | _md-render.js lang-aware loader |
| Flyer + Poster | โ | โ | โ | Inline T table |
Translation files for FR + AR: README.{fr,ar}.md, docs/{CHANGELOG,CUSTOMIZE,todo}.{fr,ar}.md โ +1132 lines of new content. Every HTML auto-renders the right language.
๐๏ธ Bonus shipped during this session
- 8 single-purpose Labs (
labs/) with right-rail Message Log faithful to main app's> #N VERB/< ECHOformat - Cross-link labs โ lessons (๐ Lesson button on every lab)
- Brand sweep:
ROBI-9 LAB โ MAQUEEN LABacross HTML/CSS/JS (90 occurrences); mascotRobi-9 โ Maqueen(14 files) - Auto-rendered HTML for every
.mdviadocs/_md-render.js+docs/_inline-md.mjs(works over file:// too โ no CORS) - Pre-commit hook auto-runs
inline-mdwhen markdown changes; quiet on no-op - Defensive theme sanitizer in every lab
- Mobile scale-to-fit for flyer + poster (A4 layout preserved on phones)
- Slim Etsy package โ 86 โ 10 essential files (260 KB)
- Real QR code on flyer + poster pointing to live app
- Asset-ref checker (
tools/_check-asset-refs.py) โ caught 3 broken refs in distance-lab - Link audit (
tools/_audit-links.py) โ 53 HTML, 0 broken hrefs, 1 acceptable orphan
๐ก Partial / work-in-progress
Nothing currently mid-flight in the codebase. Last partial item (Etsy package) was either shipped (slim version) or punted to manual (the 3 launch-critical photo/video items).
๐ต What's left
Phase 2B โ Hardening (2 of 5 remaining)
| # | Item | Why now | Effort |
|---|---|---|---|
| 2B-7 | Split js/maqueen-tab.js (4580 LoC) into per-card modules | Pre-condition for any further main-app work. One file = one accident. Now safe with smoke tests green. | 3-4 h |
| 2B-10 | Performance budget โ Lighthouse CI + budget file | School hardware is slow. Catch perf regressions in CI. Budget: โค 1.5 s LCP on cheap Android tablet. | 1 h |
Phase 2C โ Depth (5 of 5 remaining)
| # | Item | Effort |
|---|---|---|
| 11 | Top 3 wishlist labs (curated from labs/wishlist.html votes) | varies |
| 12 | Multi-robot Lab (WebRTC peer-to-peer) โ Phase 1 #10 was checked but no first-class lab | 4-6 h |
| 13 | Progress badges / kid passport (localStorage-only, no backend) | 2 h |
| 14 | Add-on framework (Gravity sensors + I2C accessories) โ verb namespace stubbed in firmware | 4 h |
| 15 | Phase 2 firmware (firmware/v2-raw-pins.ts) โ same protocol, raw pins.* calls | 6 h |
๐ด Manual โ only you can do
These are not codable. Either hardware/photo or external account access. Block the Etsy publish until done.
| Item | Why |
|---|---|
| ๐ท Photograph a real micro:bit on a laptop running the app (Etsy hero image) | Single biggest Etsy thumbnail conversion factor for teacher-product listings. |
๐ฌ Record a 60-second listing video using seller-only/ETSY_LISTING.md as the script | Etsy algorithmically prefers listings with video by ~30%. |
| ๐ Create LAUNCH10 promo code in Etsy Shop Manager | Drives first 10 reviews fast. |
๐๏ธ Architecture map
5 surfaces, all reachable from the main index.html hub. Full link audit: 0 broken hrefs, 1 acceptable orphan (tools/tests.html).
maqueen-app/ โโโ index.html โ Main app (BLE cockpit + Playground tabs) โโโ README.html โ auto-rendered from README.md (+ FR/AR variants) โ โโโ labs/ โ Phase 1 bonus ยท 10 HTML files โ โโโ index.html โ Labs hub (8 cards + wishlist) โ โโโ joystick ยท distance ยท music ยท servo ยท ir ยท lights ยท vision ยท copilot โ โโโ wishlist.html โ community vote โ โโโ docs/ โ Documentation surface โ โโโ index.html โ Docs hub (10+ cards) โ โโโ guide ยท pinout ยท plan ยท schematics ยท schematics-kids โ 5 guides ร 3 langs โ โโโ lessons/ โ Phase 2A-3 ยท 8 A4 lesson plans + index โ โโโ curriculum.html โ Phase 2A-5 ยท standards mapping โ โโโ telemetry.html โ Multiplier 1 ยท usage heatmap โ โโโ report.html โ this page โ โโโ CHANGELOG ยท CUSTOMIZE ยท todo ยท next โ auto-rendered .md โ โโโ _md-render.js ยท _inline-md.mjs โ shared renderer โ โโโ workshops/ โ Printables (FR/EN/AR) โ โโโ hub.html โ workshops hub (8 cards) โ โโโ manual.{html,fr,ar} โ 12-mission classroom manual โ โโโ booklet ยท cheatcards ยท energizers โ โโโ flyer.html ยท poster.html โ A4 print + ๐พ PDF + QR + i18n โ โโโ js/ โ Behavior layer โ โโโ ble.js ยท ble-shim.js ยท ble-scheduler.js ยท core.js ยท maqueen-tab.js (4580 LoC) ยท โฆ โ โโโ lang.js โ i18n machinery (1932 LoC, EN/FR/AR) โ โโโ a11y.js โ skip-link ยท focus-ring ยท aria-label ยท prefers-reduced-motion โ โโโ telemetry.js โ localStorage-only visit counters โ โโโ share-link.js โ URL-hash state encoder โ โโโ demo-mode.js โ fake BLE shim (try without robot) โ โโโ firmware/ โ v1-maqueen-lib.ts (MakeCode, BLE UART) โโโ etsy-package/ โ slim, 10 files, 260 KB โ โโโ tests/smoke.spec.mjs โ Phase 2B-6 ยท 32 Playwright tests โโโ .github/workflows/ci.yml โ Phase 2B-8 ยท link audit + tests + a11y + secrets โโโ tools/ โโโ _audit-links.py โ static link/orphan audit (used by CI) โโโ _check-asset-refs.py โ finds missing assets โโโ inject-script.py โ bulk-inject <script> into all HTML โโโ git-hooks/pre-commit โ auto-runs inline-md when .md changes
๐ CI & quality
Every push and PR to main runs two CI jobs. They block merge if anything regresses.
| Job | Checks | Failure mode |
|---|---|---|
| audit |
โ
Link audit (53 HTML ยท 0 broken hrefs ยท 1 allowed orphan) โ Inlined-md staleness โ refuses commits that edited .md without re-running the inlinerโ JSON validity โ product.json + build-info.jsonโ Secret-leak grep โ API_KEY= ยท PRIVATE_KEY ยท TODO:.*SECRETโ A11y sanity โ every <html> has lang, every <img> has alt
|
Hard-fails on broken hrefs or stale inlined md |
| smoke |
โ
Playwright headless (chromium) โ 32 tests covering hubs ยท labs ยท lessons ยท auto-render ยท demo-mode ยท telemetry ยท share-link ยท a11y ยท lang switcher ยท workshops hub flyer/poster โ Total runtime ~1.3 min in CI |
Fails on any test failure; uploads Playwright report on failure |
Local quality tools
npm testโ run smoke testsnode docs/_inline-md.mjsโ refresh inlined markdown blockspython tools/_audit-links.py --strictโ link audit (CI mode)python tools/_check-asset-refs.py path/to/x.htmlโ verify asset refs existnode etsy-package/build-package.jsโ build the buyer ZIP
๐ Explicitly won't do
- Translate technical docs (CHANGELOG.md, CUSTOMIZE.md) โ contributor-facing, EN is fine
- Cross-browser smoke tests (Firefox/WebKit) โ Web Bluetooth is Chromium-only anyway
- Virtual physics layer for demo-mode โ current synthetic responses are enough; full physics would 5-10ร the code
- Modify
js/ble.jsโ stable forked dependency from bit-playground; rule is to wrap, never patch
๐ Where we are now
Phase 1 (20 items) DONE ยท Phase 2A (5 items) DONE ยท Multipliers (3 items) DONE ยท Phase 2B (3 of 5) 3/5 ยท Phase 2C (0 of 5) 0/5 ยท Manual 3 items pending
Recommended next pick: 2B-7 (split maqueen-tab.js) โ now safe to attempt
with smoke tests green. Then 2B-10 (Lighthouse CI) โ small, high-leverage.