← back to index

Gamification Engine — Repo-as-Save-File (Victoria instance)

What this is

The first shipped, working gamification engine for the EVE Glyph adaptive game. It renders the spinning-sphere mechanic as a live, playable progress system where the cadet's own GitHub repository is the save file — no backend, no account, no vendor lock-in, and specifically no Perplexity in the chain.

This directory reflects, in the canon EDU repo, gamification that was first built and deployed in the Victoria instance (EVEglyphDesign/Victoria, live at eveglyphdesign.github.io/Victoria). The design doctrine lives here; Victoria is the first worked instance.

Scope note: this reflection is Victoria-specific by intent (per operator direction, 2026-07-11). The engine is written against one repo (REPO_OWNER/REPO_NAME in progress.ts). Generalizing it so any cadet's repo becomes their save file is deferred until a second cadet exists.

Files

FileWhat it is
progress.tsThe engine. Reads the public GitHub contents API for three twin-layer folders, computes a 0–100 completeness score, assigns a certification tier, and evaluates guided quests. No auth, no backend.
JourneyPanel.tsxThe React UI: score ring (three vector arcs that light and close as layers fill), tier display, layer bars, quest checklist. This is the sphere-close, rendered.
nodes.tsMinimal vector metadata (Vector type + VECTOR_META colors) the panel imports as @/lib/nodes. Faithful trimmed copy from Victoria so the engine is self-contained here.
tsconfig.json / package.jsonThe build harness (see below).

The engine files are copied verbatim from the shipped Victoria build so the canon repo carries the real, deployed engine — not a paraphrase of it.

Build harness

The canon repo can now compile this engine, not just carry it. The harness is a minimal local TypeScript type-check — no bundler, no backend, no vendor lock-in.


cd game/gamification-engine
npm install        # react, @types/react, lucide-react, typescript (dev only)
npm run typecheck  # tsc --noEmit -p tsconfig.json

The @/lib/progress and @/lib/nodes imports resolve via tsconfig.json path aliases pointing at the files in this folder, so the vendored code runs unchanged from how it ships in Victoria (no edits to the engine to make it compile).

Verified: tsc --noEmit passes with exit 0 under strict mode across progress.ts, nodes.ts, and JourneyPanel.tsx (checked 2026-07-11). node_modules/ and package-lock.json are gitignored — run npm install locally to reproduce.

Live page (Vite)

Beyond type-checking, the web/ folder is a Vite app that mounts JourneyPanel as a real, running page — the sphere-close visual, live twin score, tiers, and quests, rendered in a browser.


cd game/gamification-engine/web
npm install
npm run dev      # live dev server
npm run build    # static output to web/dist/ (deployable to GitHub Pages, S3, anywhere)

vite.config.ts aliases @/lib/progress and @/lib/nodes to the canon engine files one level up, so JourneyPanel.tsx is mounted unchanged — one source of truth, no copy drift. base: "./" makes the static build work from any subpath. Output is fully static: no backend, no vendor lock-in.

Verified: vite build completes with exit 0 (1573 modules); the built page renders in a headless browser with the panel mounted, six quests, live tier read from GitHub, and zero console/page errors at desktop (1280px) and mobile (390px) (checked 2026-07-11). web/dist/ and web/node_modules/ are gitignored — run npm run build locally to reproduce.

Note: the live score reflects the repo the engine is configured against (REPO_OWNER/REPO_NAME in progress.ts — currently Victoria). The page reads real folder contents; it is not mocked.

How it maps to the spinning-sphere canon

The engine is the spinning-sphere simulation made playable. The mapping is direct:

Spinning-sphere doctrineEngine implementation
Triangle = three-fold structure, minimum stable carrier (Axiom 1)Three twin layers: Identity (ancestry), Capability (technology), Values (faith)
Adding vectors → structure rounds toward a sphereEach committed file in a layer adds depth; breadth across all three is the triangulation
Balance is achieved, not automatic; the sphere is harder to holdScore = breadth (all three layers off zero = 60) + depth (further files = up to 40, capped)
Rounder = more sovereign, fully measured from every sideTiers climb: Unmapped → First Bearing → Cross-Fixed → Triangulated (all three) → Sphere Forming (75+) → Sovereign Twin (100)

Scoring (as shipped)

Why the repo is the save file

Progress is read live from the cadet's public repository. That makes progress portable across any device, survivable forever, and independent of any platform — the core independence requirement. The game can be hosted anywhere (Victoria runs on free GitHub Pages) and the save state travels with the repo, not with a vendor.

Handoff (Victoria-specific)

When the repo transfers from the steward account to the cadet, only two values change in progress.tsREPO_OWNER and REPO_NAME — then rebuild. This is flagged with a HANDOFF comment at the top of the file. Nothing else changes.


© 2026 Dany Theriault. EVE "digital stem cell" glyph and glyph-based design principles — all rights reserved. Stewardship of rights of use and assignment for large public and institutional usage rests with the Pacific Utilities Design Council. Published as a time-stamped record of authorship and intent.

Pour le bien-être du peuple.

© 2026 Dany Theriault. EVE “digital stem cell” glyph and glyph-based design principles — all rights reserved. Stewardship of rights of use and assignment for large public and institutional usage rests with the Pacific Utilities Design Council. Published as a time-stamped record of authorship and intent.
pour le bien-être du peuple