M87
January 6, 20263 min readBy Daniel Blank

Claude Code in Action: Building a Full-Stack App in 3 Minutes

Watch 22 tool calls unfold as Claude builds a complete Next.js todo app - captured from a real session transcript.

Claude Code in Action: Building a Full-Stack App in 3 Minutes

The Request

We asked Claude Code to build a full-stack application:

"Build me a full-stack todolist app with Next.js 14, TypeScript, Tailwind CSS, API routes for CRUD operations, and server actions. Make it actually work."

Starting conditions:

  • Directory: capture-session/
  • Existing files: none

Why this request? A simple todo app triggers ~4 tool calls. Adding a "serious stack" (Next.js, TypeScript, API routes, validation) forces Claude through the full workflow: scaffolding, discovery, implementation, and testing.

Session Statistics

22
Tool Calls
7
Files Created
484
Lines of Code
~3m
Total Time

Tool Breakdown

Every tool call was captured via hooks logging to tool-calls.jsonl:

ToolCountPurpose
TodoWrite5Task planning and progress tracking
Bash7Shell commands (npm, build, test)
Read3File discovery
Write6Creating new files
Edit1Modifying existing file

Complete Tool Sequence

22 tool calls across 5 phases, captured in real-time:

1
Planning
18:23:34TodoWriteCreate 5-task plan

Initialize Next.js → Install dependencies → Create API routes → Build UI components → Test application

2
Scaffolding
18:23:38Bashnpx create-next-app@latest todo-app

--typescript --tailwind --eslint --app --src-dir --no-import-alias

18:24:07Bashnpm install @dnd-kit/core @dnd-kit/sortable

Installing drag-and-drop libraries for sortable todos

18:24:13Bashls -la todo-app/

Verify project structure was created correctly

18:24:18Bashnpm install uuid @types/uuid

Additional dependencies for unique ID generation

18:24:31TodoWriteUpdate progress

Mark initialization complete, activate: Create API routes

3
Discovery
18:24:36Readglobals.cssparallel

Check existing Tailwind configuration and base styles

18:24:36Readpage.tsxparallel

Examine default page structure to understand patterns

18:24:36Readlayout.tsxparallel

Check root layout for metadata and font configuration

4
Implementation
18:24:50Writesrc/types/todo.ts

8 lines - TypeScript interface for Todo type

18:24:51Writesrc/app/api/todos/route.ts

116 lines - Full CRUD API: GET, POST, PUT, DELETE handlers

18:24:57TodoWriteUpdate progress

Mark API complete, activate: Build UI components

18:25:13Writesrc/components/TodoItem.tsx

85 lines - Individual todo with edit, complete, delete actions

18:25:31Writesrc/components/TodoList.tsx

206 lines - Main component with add form, filtering, drag-drop

18:25:41Writesrc/app/page.tsx

27 lines - Root page rendering TodoList component

18:25:49Editsrc/app/layout.tsx

Update metadata title and description for Todo App

18:25:50Writesrc/app/globals.css

42 lines - Custom styles for todo items and animations

5
Validation
18:26:01TodoWriteUpdate progress

Mark UI complete, activate: Test application

18:26:06Bashnpm run build

Compile TypeScript, verify no build errors

18:26:16Bashnpm run dev

Start development server on localhost:3000

18:26:21Bashcurl localhost:3000

Health check - verify server responds with 200

18:26:31TodoWriteAll tasks complete

5/5 tasks marked as completed

Phase Analysis

Click each phase to see the detailed breakdown:

The Agentic Loop

This session ran the loop 22 times. Each iteration: decide → execute → observe → repeat.

Key patterns observed:

  • Single-threaded - No swarms or competing agents. One flat message list, fully debuggable.
  • Parallel when safe - 3 Read calls executed simultaneously (same timestamp). Tools parallelized when independent.
  • TodoWrite as memory - 5 TodoWrite calls tracked progress. Working memory persists across tool calls.

Files Created

The final project structure:

~/todo-app
$ tree src/
todo-app/src/
├── types/
└── todo.ts(8 lines)
├── app/
├── api/todos/
└── route.ts(116 lines)
├── page.tsx(27 lines)
├── layout.tsx(edited)
└── globals.css(42 lines)
└── components/
├── TodoItem.tsx(85 lines)
└── TodoList.tsx(206 lines)
7 files created, 484 lines of code

Key Observations

Discovery before modification - Claude read 3 files before writing any code. Real developers do the same - understand the codebase first.

Verification at every phase - ls -la after scaffolding, npm run build after implementation, curl after starting the server. Trust but verify.

Edit vs Write distinction - 6 Write calls for new files, 1 Edit call for surgical change to existing file. Claude picks the right tool.

TodoWrite as execution plan - 5 TodoWrite calls throughout. Not just tracking - it's Claude's working memory for multi-step tasks.

Parallel tool execution - 3 Read calls at identical timestamps. Claude parallelizes independent operations for efficiency.


Want to understand the architecture behind this? Read our technical deep-dive into how Claude Code works.

Ready to lead the industry?

Don't let your team get left behind. Book a consultation today to start your journey towards becoming a truly AI-native organization.

Free 30-minute initial strategy session.