Architecture
System diagram
Loading diagram…
Frontend
Three separate apps, each deployed to its own Vercel project. Core Warden (the game) is a Phaser 3 + TypeScript single-page app on corewarden.app — a top-down action RPG playable in the browser, targeting Android tablets and desktop keyboards. Matlu Codex is a static Astro 6 site for players and contributors: lore pages fetched from Notion at build time, a creature gallery, and a community submission form with Supabase Storage for art uploads. Agentic Experiments (this site) is an Astro 6 dev log tracking agent performance, weekly metrics, and architecture decisions; audience is the development team (primary) and curious external developers (secondary).
Data
Supabase hosts all persistent data.
The matlu_runs table stores leaderboard entries — each run's score,
timestamp, and player identifier — written by the game client and read back for the
leaderboard screen.
stats_weekly and cognitive_load store aggregated delivery
metrics written by the weekly collect-stats.js script and surfaced on
this site's metrics dashboard.
Supabase Storage holds creature-art uploads submitted through the Codex contribution
form (binary blobs; Postgres stores only the URL).
Agents
All agent workflows run as GitHub Actions cron jobs.
The Triage Agent (22:00 UTC nightly) sweeps unlabelled Linear backlog
issues, assesses each against the codebase, and applies readiness labels
(ready, needs-refinement, blocked,
too-large) so the implementation agent always has triaged work to pick up.
The Nightly Agent (02:00 UTC) selects ready issues, spawns
an isolated Claude Code session per issue (max 3 in parallel), and opens a pull request
for each completed one.
The Error Monitor checks Better Stack daily for unresolved errors and
files Linear bugs automatically.
Other weekly agents handle lore auto-fill, sprite generation, release notes,
architecture review, and the PR grooming / backlog hygiene passes.
Tooling
Two MCP servers are active in the project.
PixelLab MCP generates pixel-art sprites on demand — characters,
isometric tiles, tilesets — assembled into spritesheets and committed to
public/assets/sprites/ via the Sprite Credit Burn workflow.
Linear MCP lets agents read and update issue metadata without
leaving the Claude Code session.
Key scripts: collect-stats.js (weekly metrics aggregation),
fetch-agent-issues.js (selects issues for the nightly run),
create-labels.js (idempotent label bootstrap), and
npm run sprites:assemble (assembles raw frames into spritesheets).
CI runs on every push to main and claude/** branches:
tsc --noEmit + vite build for the game, and
astro check + astro build for both Astro sites.