Kadra — AI Workplace Simulator
Kadra simulates showing up to work at a startup. You onboard, attend standup, pick up a ticket, fix it, get reviewed, merge, and close out the sprint with a retro — the full daily engineering loop, with AI teammates on the other side of every interaction. Three personas carry the sprint: Priya (Tech Lead) hands off the day's ticket and leaves grounded, in-character PR review comments; Marcus (Engineer) is a streaming chat you can ask for a hand while you work; Dana (PM) frames the sprint. Each remembers how you've worked with them before, and /team shows you what each one has learned about your working style. In github mode the work is real: Kadra provisions a sandbox repo, plants a bug, and hands you clone and PR instructions. You fix it and open a PR, and CI grades it out-of-band in a Vercel Sandbox — the merge gate is that authoritative test grade, never the persona's opinion. Demo mode simulates the same loop end-to-end with no account needed. The sprint closes on a retro dashboard: an overall rating, metric tiles, a per-day timeline, and each teammate's in-character reflection on working with you.
Try It Live
- Upload a construction PDF and watch AI classify it
- See extracted entities: costs, dates, spec sections
- Explore the interactive dependency graph
- Run impact analysis on a document delay
Key Numbers
Features
- Full daily engineering loop: onboard → standup → ticket → PR → review → merge → retro
- Three AI teammates with persistent memory of your working style
- Real GitHub repos provisioned per sprint with a planted bug
- Out-of-band CI grading in a Vercel Sandbox as the authoritative merge gate
- In-character PR review comments grounded in the actual diff
- Streaming AI chat with a peer engineer while you work
- Sprint retro dashboard with metrics, timeline, and teammate reflections
- Demo mode — the entire loop runs on mocks with no account
Architecture
┌──────────────────────────────────────────────────────────┐
│ app/ Next.js App Router — pages, server actions, │
│ API routes, GitHub webhooks │
└───────────────────────┬──────────────────────────────────┘
▼
┌──────────────────────────────────────────────────────────┐
│ engine/ SprintEngine — orchestrates the loop │
└───────────────────────┬──────────────────────────────────┘
┌───────────────┴───────────────┐
▼ ▼
┌────────────────────┐ ┌────────────────────────────┐
│ domain/ pure │ │ ports/ interfaces │
│ sprint state │ │ GithubGateway │
│ machine, metrics, │ │ PersonaService │
│ retro, next-step │ │ Grader · Repository │
└────────────────────┘ └─────────────┬──────────────┘
▼
┌──────────────────────────────────────────────────────────┐
│ adapters/ real + mock, swapped by composition.ts │
│ GithubAppGateway │ MockGithubGateway │
│ AiPersonaService │ MockPersonaService (AI Gateway) │
│ VercelSandboxGrader│ MockGrader │
│ DrizzleRepository │ InMemoryRepository (Neon) │
└──────────────────────────────────────────────────────────┘Tech Stack
Key Learnings
Hexagonal ports paid for themselves immediately — because every dependency has a real adapter and a mock, the full 247-test suite runs with no network, no database, and no LLM, while the same code runs live on Vercel by flipping env-gated adapters
AI personas must never be the gate. Letting a persona decide whether a PR merges makes correctness a matter of tone; the authoritative test grade decides, and the persona only narrates it in character
Grading has to run out-of-band. Doing it inline in the request made the loop feel broken on slow CI, so grading moved to a Vercel Sandbox with results arriving via webhook
Per-teammate memory is what makes the simulation land — a standup that references how you worked last sprint reads as a colleague rather than a prompt
Env-gated composition beats feature flags scattered through the code: one composition.ts that wires real-vs-mock per environment keeps the demo path and the production path honestly identical
Want to see more AI projects?
Check out the rest of my AI Lab or get in touch to discuss AI/ML collaboration.