Docs Case Studies

Strata — Two Agents Build a Web App

A 291-line PRD, cpk init, and the codepakt board managing two agents building a complete narrative web application. The board decomposes the PRD into 15 tasks across 5 epics, wires dependencies, and agents pick up work via cpk task pickup. Review from the dashboard catches bugs, and the agents fix them in a second pass.

Result: A production-quality Astro web app managed through the codepakt board. 15 tasks, two agents, zero conflicts. Dashboard review found 4 real bugs, and the board tracked the fix cycle. View source on GitHub →

Why This Case Study Matters

The earlier case studies showed codepakt managing single-file browser projects. Strata tests whether the board handles a real multi-file web app:

  • Multiple files — 11 source files across pages, components, layouts, content, and styles
  • Framework complexity — Astro 5 with content collections, Zod schema validation, MDX rendering, dynamic routes
  • Real product — not a toy. Archive browsing, filtering, search, structured authoring, responsive design
  • Larger PRD — 291 lines with 20 sections covering information architecture, user flows, experience requirements, and exit criteria

This tests whether codepakt’s task board, dependency graph, and review workflow hold up on a project that actually matters.

The Setup

Goal: Build a narrative web app where each case study captures the decision, not just the outcome. Structured MDX authoring, archive with search and filters, detail pages with timeline and artifact components, responsive reading experience.

PRD: 291 lines covering product vision, user jobs, information architecture, functional requirements, experience requirements, success metrics, and milestone plan.

Initialization:

cpk server start
cpk init --name strata --prd ./PRD.md

An agent decomposed the PRD into 15 tasks across 5 epics with dependencies.

The Agents

AgentRoleTasks assigned
claudeSchema design, design system, content pipeline, detail page, timeline/artifact components, about page, filters, search, responsive polish, authoring docs10
codexApp shell initialization, case study template + sample content, archive card component, archive homepage, search implementation5

Task Breakdown

All 15 tasks from the actual codepakt board:

TaskTitlePriorityAgentEpic
T-001Initialize Strata app shell with static editorial stackP0codexFoundation
T-002Define case study schema and validation rulesP0claudeAuthoring
T-003Create reusable case study template and seeded sample caseP0codexAuthoring
T-004Establish editorial design system and shared layout primitivesP0claudeReading Experience
T-005Implement content loading and archive sorting pipelineP0claudeArchive
T-006Build archive card component with case metadataP1codexArchive
T-007Ship archive homepage routeP1codexArchive
T-008Implement case detail route and structured narrative renderingP1claudeCase Detail
T-009Build timeline component for decision evolutionP1claudeCase Detail
T-010Build artifact media component with captionsP1claudeCase Detail
T-011Add archive filters and dedicated tag routeP1claudeDiscovery
T-012Implement full-text local search across case contentP1codexDiscovery
T-013Create about page for product framing and methodologyP1claudeFoundation
T-014Document authoring workflow and publish pathP2claudeAuthoring
T-015Polish responsive reading and discovery flowsP2claudeReading Experience

How Coordination Worked

Session 1: Foundation + Core Build (17:03–19:34)

17:03 — 15 tasks created from PRD decomposition.

17:05 — Codex picked up T-001 (app shell). Created the Astro project with MDX support, static output mode, base layout, and global CSS.

17:09 — T-001 completed. Dependency resolver unlocked T-002 (schema) and T-004 (design system). Claude started both in parallel.

17:14 — Claude completed T-002 (content collection schema with Zod validation — title, summary, date, tags, status, domain, outcome, timeline events, artifacts). This unlocked T-003 (template) and T-005 (content pipeline).

17:14–19:22 — The heavy lifting. Claude worked on T-004 (design system) and T-005 (archive pipeline) concurrently. These were the largest tasks — archive cards with outcome badges, case detail page layout, timeline component, artifact rendering, content loading and sorting. Both completed around 19:22.

19:23 — The interesting part. When Claude picked up T-008 (case detail route), T-006 (archive card), T-009 (timeline), and T-010 (artifacts), it found they were already implemented as part of T-004 and T-005. Instead of rebuilding, Claude verified the existing work matched the requirements and marked them complete instantly. Four tasks resolved in seconds.

19:24–19:34 — Claude knocked out the remaining tasks: T-013 (about page), T-011 (archive filters + tag routes), T-012 (search), T-014 (authoring docs in README), and T-015 (responsive polish with 720px and 480px breakpoints).

Session 2: Bug Fixes (19:41–19:45)

After review, Claude returned to fix real issues discovered during testing:

  • T-003: Artifact references pointed to .png files that didn’t exist. Created actual SVG placeholder artifacts.
  • T-007: Archive cards used nested <a> tags (invalid HTML — <a> inside <a>). Replaced with <div> cards + JS click handlers.
  • T-012: Search only indexed frontmatter fields. Added raw MDX body text to the search index.
  • T-006: Archive cards were missing the status badge (published/revisited). Added it.

Four targeted bug fixes, each addressing a real issue that would have broken the production site.

What Shipped

A complete editorial web application:

  • Archive homepage — card grid sorted by date, filterable by tag/domain/outcome, with full-text search
  • Case detail pages — structured narrative rendering with metadata header, timeline visualization, inline artifacts with captions
  • Content schema — Zod-validated MDX frontmatter with 7 required fields + 4 optional fields
  • Tag routes/tags/:tag filtered archive views
  • About page — product framing, framework explanation, methodology
  • Design system — editorial typography, outcome badges, status indicators, tonal surface hierarchy
  • Responsive — 720px and 480px breakpoints for reading on any device
  • Authoring workflow — documented template, copy-and-fill pattern, validation at build time
  • Seeded content — “Dropping GraphQL for REST” sample case study exercising all schema fields
  • ~1,200 lines of Astro/TypeScript/CSS across 11 source files

By the Numbers

MetricValue
Total active build time~30 minutes
Agents2 (Claude, Codex)
Tasks created15
Tasks completed15
Tasks auto-resolved4 (work already done by earlier tasks)
Bug-fix pass4 targeted fixes
Merge conflicts0
Task collisions0
Source files11 (pages, components, layouts, content, styles)
Lines of code~1,200
PRD size291 lines, 20 sections

Takeaways

The board manages real web apps, not just toys. Codepakt’s task board tracked 15 tasks across a project with content collections, Zod validation, dynamic routes, MDX rendering, and responsive breakpoints. The dependency graph enforced correct build order across 11 source files — no manual sequencing needed.

Review catches what agents miss. The first pass built the app. Dashboard review found four real bugs (invalid HTML, missing assets, incomplete search index, missing UI elements). The bugs went back on the board, agents fixed them surgically. This review-and-fix cycle is the core value of the loop — the board makes it structured, not ad hoc.

Task overlap resolves cleanly on the board. Four tasks were already done when agents picked them up — earlier tasks had absorbed the work. Agents verified and closed them. Codepakt’s granular task tracking means you see exactly what happened: no hidden work, no ambiguity about what’s done.

cpk init --prd turns a 291-line spec into a managed project. The PRD produced 15 well-scoped tasks across 5 epics with correct dependencies. The board became the single source of truth — monitor progress, review completions, and steer the build from one place.

The dependency graph scales to multi-file projects. Unlike single-file projects, Strata has 11 source files. The board’s dependency graph serialized access to shared abstractions (schema, layout, design tokens) and parallelized independent work (about page, search, filters). No manual coordination — the board handled it.