I recently spent an afternoon building an enterprise CRM from scratch using Claude Code — Anthropic's A I coding assistant that runs directly in your terminal. The stack: Symfony 7 on the backend with API Platform, React 18 with TypeScript on the frontend, PostgreSQL, and Docker Compose to tie it all together. Here's what I actually learned.
What We Built
In a single session we scaffolded a full CRM with:
- JWT authentication with role-based access (admin, manager, sales, user)
- Core entities: Accounts, Contacts, Deals, Activities
- A REST API auto-generated by API Platform with filtering and pagination
- A React frontend with list and detail views for every entity
- Docker Compose setup for the full stack
Not bad for an afternoon.
The Good: Claude Moves Fast
The scaffolding phase was genuinely impressive. Asking Claude to "scaffold a Symfony + React CRM" produ ced a coherent, well-structured project in minutes — entities with proper Doctrine mappings, serialization gro ups, API Platform attributes, a Zustand auth store, React Query for data fetching. It didn't just generate boi lerplate — the architecture was sensible.
It also handles breadth well. When I asked to support B2C sales in addition to B2B, it understood the d omain implications immediately, explained three different approaches with trade-offs, and implemented the chos en solution cleanly: making Account optional on Deal and adding a class-level constr aint ensuring every deal has either an account or a contact.
The Honest Part: It Guesses Wrong
Here's where I want to be straight with you: Claude gets things wrong, sometimes confidently.
The most common pattern I noticed was environment assumptions. When composer ins tall failed, Claude correctly diagnosed a PHP version mismatch (8.5 vs the library's ceiling of 8.4) an d a missing ext-sodium. The fix — adding platform overrides to composer.json — was r ight. But then it didn't initially account for symfony/yaml being missing, or that Symfony Flex w ould inject duplicate keys into .env. Each of those needed a nudge.
Similarly with Docker: it built a Dockerfile that compiled PHP extensions from source, whi ch timed out. When told it failed, it immediately switched to mlocati/php-extension-installer — a much better approach — but that wasn't the first instinct.
The json_login issue is another good example. The login endpoint returned 404 because the route wasn't registered in routes.yaml and because the default username field needed to be overridden to email. Both are well-documented Symfony gotchas. Claude fixed them immediate ly when I reported the error — but it didn't anticipate them upfront.
The pattern is consistent: Claude fixes its mistakes quickly when you point them out, but it do esn't always get it right the first time. Think of it less like a developer who has set up this exact stack dozens of times, and more like a very fast developer who has broad knowledge but needs you to validate as you go.
What Works Best
A few things I'd recommend based on this session:
Stay in the loop. Don't just run docker compose up and walk away. Watch w hat Claude generates, test each step, and give feedback. The session goes much smoother when it's a dialogue r ather than a one-shot prompt.
It's strongest on architecture and weakest on environment specifics. The entity design , API structure, auth flow, React component hierarchy — all solid. The PHP version matrix, which extensions are pre-compiled in which Docker images, exactly how Symfony Flex modifies your .env — less reliable.
Domain questions get good answers. When I asked "what's the difference between contact s and accounts?" and "how do we handle B2C sales?", the responses were clear and practical. It understands CRM domain logic well.
Corrections land cleanly. This is underrated. When something broke, I didn't have to e xplain the full context — a short description of the symptom was usually enough. It doesn't get defensive or double down.
Would I Use It Again?
Yes, without hesitation — with the right expectations. Claude Code is not a replacement for a developer who knows your stack deeply. It's closer to a very capable pair programmer who can move extremely fast, knows a lot, but occasionally needs you to catch a mistake and steer it back.
For greenfield projects especially, the time savings in the scaffolding phase alone make it worth using . Getting from zero to a working Symfony + React + Docker stack with auth, CRUD, and a sensible domain model in an afternoon is not something you'd do alone at that speed.
The key is treating it as a collaboration. You bring the context and validation. It brings the speed. N either of you should be working alone.
Built with: Symfony 7.4, API Platform 3, React 18, TypeScript, Docker Compose, PostgreSQL