Bluesquare Dev Week 2026 · 3 hours
Hands-on, with Claude Code and Superpowers.
Today
Today
Repo github.com/BLSQ/wee-appBoard github.com/orgs/BLSQ/projects/12App wee-app-one.vercel.app
Part 1 · Why
Part 1 · Why
The agent writes and rewrites them.
Hundreds of lines arrive in minutes.
The agent can check its own work.
Part 1 · Why
Part 1 · Why
Part 1 · Why
Part 1 · Why
| GitHub Spec Kit | GSD | Superpowers | |
|---|---|---|---|
| Steps | constitution → specify → plan → tasks → implement → converge | discuss → plan → execute → verify → ship | brainstorm → spec → plan → implement → review |
| Who drives | You, command by command | You, phase by phase | Skills load on their own |
| Main concern | What and why before how | A fresh context for each task | Keeping the agent on the method |
| Tests | Left to the constitution | A verify phase after the build | Test first, required |
Same family: Kiro, OpenSpec, BMAD. Today: Superpowers, for the discipline (next slide).
Part 1 · Why
Part 1 · Why
Usually not
The process slows exploration.
Debatable
A direct prompt often does it.
Often yes
The spec and the plan help you keep track.
Yes
Specs and ADRs record why things were done.
Today's issues are too small to show a gain. The aim is to try the workflow.
Part 1 · Why
An ADR is a short file in the repo that records one technical decision.
More adr.github.ioOriginal post Documenting Architecture Decisions (Nygard, 2011)
Part 1 · Why
docs/adr/ before brainstorming0006 Synthetic seed derived from anonymised IASO data
0008 No authentication yet
0012 Migrate during the deploy build
Part 2 · Wee-App
| In the database | |
|---|---|
| Org units | 1,332 |
| country / districts / chiefdoms / facilities | 1 / 13 / 152 / 1,166 |
| Devices (12 never synced) | 200 |
| Syncs over 90 days | 6,066 |
| Users, anonymised | 41 |
Real org units from an IASO dump, synthetic syncs, no personal data.
Part 2 · Wee-App
path: ancestor ids joined by dots; the district is the 2nd segmentdevice_syncapp_user: the IASO user who synced, not a dashboard accountPart 2 · Wee-App
| You know | Here | |
|---|---|---|
| Django ORM | Kysely | Typed SQL builder, not an ORM |
| DRF views | tRPC | Typed functions called from the frontend |
| Django migrations | Kysely migrations | Numbered files |
| pytest | Vitest | Queries on an in-process Postgres (PGlite); each test inserts its rows |
| Testing Library | Components in jsdom: render with props, find by role and text | |
| React + MUI | React + Mantine | Components and charts; MapLibre for maps |
| A server | Vercel + Neon | One URL and one database per pull request |
For today, not knowing the stack is fine. The agent handles the syntax.
Part 2 · Wee-App
ui/ + api/ in one folderPart 2 · Wee-App
| How | Pattern to copy | |
|---|---|---|
| Query | Real SQL on a Postgres that runs inside the test (PGlite); each test inserts its rows | queries.test.ts |
| Component | Rendered with props in a simulated browser (jsdom); find by role and text, click | SyncTable.test.tsx |
| Page, procedure | No test: the type-check, then try the feature | |
| Whole app | The preview of the pull request |
No test replaces the database or a component with a fake (a mock): a test that passes means the real code ran. pnpm test runs everything in a few seconds, with nothing to start first.
Part 2 · Wee-App
pnpm dev on :3000pnpm test uses none of these: each test file gets its own empty Postgres, in memoryPart 2 · Wee-App
device-syncs/, built the same waysrc/routes/Part 2 · Wee-App
CLAUDE.mdmainPart 3 · How we work
Part 3 · How we work
| Features | ||
|---|---|---|
| #2 | List devices that have stopped syncing | S |
| #5 | Chart syncs per day over the last 30 days | S |
| #6 | Device detail page with its sync history | S |
| #3 | Sync health per district on a map | M |
| #7 | Sync activity per user | M |
| #17 | Filter devices by user, on list and map | M |
| #19 | Improve the table of synced devices | M |
| #20 | Basic dashboard page | M |
| #21 | Dark mode | S |
| Cross-cutting | ||
|---|---|---|
| #12 | Pin the Node and pnpm versions | S |
| #10 | Type-check and tests on every pull request | S |
| #9 | End-to-end smoke test | M |
| #11 | Linting, dead code, module boundaries | M |
| #13 | Decide what documentation we need, write it | M |
| #8 | Sign-in with a Bluesquare account | L |
Missing something? Open an issue and take it.
Board github.com/orgs/BLSQ/projects/12Issues github.com/BLSQ/wee-app/issues
Part 3 · How we work
Part 3 · How we work
Part 3 · How we work
Part 3 · How we work
pnpm installPart 3 · How we work
The agent waits for your answers.
Part 3 · How we work
Needs Claude Code, Docker, Node 22.12 or newer, pnpm, and write access to BLSQ/wee-app.
Repo github.com/BLSQ/wee-appBoard github.com/orgs/BLSQ/projects/12App wee-app-one.vercel.app
Part 3 · How we work
docs/adr/
docs/superpowers/specs/
docs/superpowers/plans/
Your work today adds to all three. Read a few while pnpm install runs, or while the agent implements.
Round table · 1:45
Leave the agent running. Then swap driver and navigator.
Round table · Inside Superpowers
Round table · Inside Superpowers
Round table · Inside Superpowers
Round table · Inside Superpowers
In this repo: the deployed app fails with relation "device_sync" does not exist
Round table · Inside Superpowers
Before any "done", the skill asks for the output of a check run just now. The check has to match the claim.
The tests run in Node and never load the page. For "the page works", the matching check is to open the page.
Close · 2:40
Close · 2:52
Close
Superpowers github.com/obra/superpowersGuide superpowers-guide.com