A Rubik's cube coach that works with nothing behind it.
Cubiq scans a physical cube, verifies a four-stage CFOP plan, and walks you through it — as an installable static PWA with no build step, no framework and no network. The backend, the panel and this site are all optional.
Search
Answers before you finish typing
Titles, tags and full section text across every page, AND semantics with prefix matching. This box is not a mock-up: it calls the same engine as the ⌘K overlay.
The product
Three things, and only the first is required
Cubiq is a coaching app that happens to have a backend. The split is enforced, not aspirational: a test fails if any core file so much as mentions the API.
The app →
Scan, validate, plan, coach — all in the browser, all offline. One Web Worker holds both the CFOP planner and the quick solver, and it refuses to show a plan it cannot verify.
The database →
An optional Go backend over ArcadeDB, where 38 relational tables were remapped onto a graph and every junction table became an edge carrying its own properties.
The infrastructure →
Two machines and one public IP: a 1 vCPU edge that terminates TLS, and a private VM with no public address that runs every container.
Changelog →
One product, one semver history.
Counted
Measured, not claimed
Figures from this repository and from a live deployment, not from a pitch deck.
The schema counts come from the bootstrap job — see the schema page.
Design
Why offline-first
The cube is physical
A phone loses signal on a train and the cube is still in your hands. Scanning, planning and solving never touch the network, so they cannot fail with it.
Verify or refuse
The planner throws if any stage postcondition fails. The app would rather offer the quick solver than show a plan it cannot prove.
Never assume the cube
A session is downgraded to re-scan-required on reload, and again after five minutes hidden. The user may have turned the cube while the phone was in a pocket.
Offline is free, and says so
With no backend nothing is ever charged. Two designs that pretended to bill offline use were deleted rather than shipped.
Contents
Explore the docs
Type to filter — the same live-filter component any page can use.
The app
Dependency-free PWA, one worker, boot order, checkpoints, and what still does not exist.
The ArcadeDB schema
Why a graph, the auditable base type, the edge catalogue, and ledger strategy.
How the infrastructure runs
Two machines, one public IP, where TLS ends, and the rules that fail quietly.
Development and production
Both tiers side by side: what differs, what must not, and how to bring either up.
Living beside other products
The port register, one namespace per product, and where the boundaries are.
Getting started
How this documentation site itself is laid out, and how to add a page to it.
Writing pages
The component vocabulary: admonitions, tabs, code blocks, live filters.
AI authoring tutorial
Build the prompt, feed the right context, run the correction loop.
Changelog
Cubiq's release history, kept in strict semver.