There’s something uncomfortable about publishing this post. Soamee is a software agency. Companies hire us to build digital products. And over the past year and a half, we’ve used Claude Code extensively to build our own website. This is what we found when we opened the git log.
This isn’t a marketing piece about AI. It’s an honest post-mortem: what saved us weeks, what we had to rebuild, and why we keep using the tool despite its limitations.
The repository numbers
Before the analysis, the facts:
- 639 commits since January 2025
- 331 commits with Claude Code participation (marked with
Co-Authored-By: Claude) - 534
.astrofiles in the current project - 345 blog posts published or in draft
- 115 case studies across multiple languages
- 5 languages: Spanish, English, Portuguese, Italian, and German
- The site has been running continuously in production on Dokku at soamee.com
That 52% of commits with AI involvement doesn’t mean Claude Code wrote half the code. It means it was present in more than half of our working sessions — sometimes generating entire files, sometimes suggesting a three-line fix.
What Claude Code built
The translation system
This is the use case where we recovered the most time. The site has five languages. Every blog post, every case study, every service page exists in ES, EN, PT, IT, and DE. Without AI, that would have meant hiring four translators or accepting a significant lag between Spanish content and its translated versions.
Claude Code generated the initial translations. Not perfect ones — Portuguese tends to bleed Spanish when the model loses context, German needs umlaut review, Italian sometimes mixes registers. But a working draft exists in seconds, not days. The commit log tells the story: “Revisión contextual del portugués: bloques en español y acentos ambiguos”, “Corrige contenido en alemán: umlauts, erratas y bloques en español”.
We review every translation. But reviewing is much faster than creating from scratch.
The translation verification script
We have a translation checker that fails CI if any Spanish content is missing its version in the other four languages. Claude Code wrote the first version of scripts/translation-checker.cjs, complete with category aliases, exceptions for ES-only pages, and integration with the pre-push hook.
It’s a 400-line Node script that does exactly what we specified. Not glamorous. Exactly the kind of task where a human developer takes two hours and Claude Code takes twenty minutes.
Repetitive components
The site has service pages, industry pages, solution pages — many pages with similar structure but different content. Claude Code generated most of them following the established pattern. When the pattern’s design changed, we updated them in batch.
It also wrote the URL normalization middleware (HTTP to HTTPS, trailing slashes, 301 redirects for 404 errors detected in Google Search Console), the sitemap generator, and several CI scripts.
Blog content
Virtually every post on this blog had some Claude Code involvement. Sometimes it generated the full draft from an outline; sometimes it suggested structure for posts I’d already started; sometimes it just expanded sections that felt thin.
The voice is always reviewed. The structure is usually suggested. The data is always verified manually.
What humans had to do
Visual design
This is the clearest boundary. Claude Code can implement a design you describe precisely. It cannot invent one. Soamee’s visual identity — deep purple (#1e1548), mint (#5dd3b3), 45-degree diagonal stripe patterns, concentric bubbles — came from human decisions, not AI.
When we asked Claude Code to “improve the blog design,” it sometimes produced something that worked technically but didn’t sound like us. We had to learn to be very specific: “add a 3px left border in mint color on blockquotes” works. “Improve the design” doesn’t.
Architecture decisions
Choosing Astro 5 with hybrid SSR was a human decision. Choosing Tailwind CSS v4 before there was much documentation was a human decision (and an expensive one in debugging time). Choosing Dokku over other deployment options was a human decision.
Claude Code can evaluate options when you present them, but the selection criteria — what matters for our business, our stack, our operational capacity — come from us.
Reviewing every PR
No Claude Code-generated change went to production without review. Not because we don’t trust the model, but because human review catches things the model can’t know: whether a paragraph’s tone matches how we talk, whether a new feature makes business sense, whether an internal link points to the right place.
The git log shows commits like “Fix broken internal links: /contacto and /servicios/consultoria-tecnologica”. Those links were broken by a previous AI-generated change. They were fixed in a subsequent review session.
Real business logic
The contact form sends through Mailgun. The rate limiting logic, error handling, required fields — we designed those. Claude Code implemented the code once we had the expected behavior clearly defined.
The workflow that worked
It took us a few months to find the workflow that actually functions. What doesn’t work: giving Claude Code an ambiguous task and expecting a perfect result. What does work:
1. Specification first. Before opening Claude Code, we write what we want: the exact behavior, the constraints, the edge cases. The more specific the specification, the fewer iterations.
2. Branches and PRs always. Every AI-generated change goes on a branch. Never directly to master. This lets you review the full diff before merging and revert easily if something breaks.
3. CI as a safety net. The translation checker, the image checker, internal link tests — everything runs in CI. Claude Code sometimes generates content that passes syntactically but fails semantically (a link to a page that doesn’t exist, a referenced image that wasn’t created). CI catches it.
4. Review in sections. We don’t review a 50-file PR all at once. We divide it into thematic blocks: first the Spanish content, then one language’s translations, then the others.
5. A human closes the commit. Always. The commit message is written by a human, not Claude Code. It’s a small signal but an important one that someone looked.
What surprised us (good and bad)
Positive surprises
CSS debugging is extraordinarily good. Tailwind CSS v4 was new territory with sparse documentation when we adopted it. Claude Code helped us understand why certain breakpoints weren’t behaving as expected and how v4’s layer system works. Without that help, we’d have taken much longer to stabilize the design system.
Automation scripts are its sweet spot. Translation checker, link checker, sitemap generator, SEO snapshot scripts — tools that would have taken days to write get generated in hours and then refined.
Consistency across similar files is remarkable. When you have a pattern — a service page, a blog post with FAQ, a case study — the model replicates it faithfully. Humans are inconsistent by nature; the model is not.
Negative surprises
Dependency hallucination. Especially in the early phases with Astro 5 and Tailwind v4, Claude Code sometimes suggested APIs that didn’t exist in those versions. We learned to always verify against official documentation before implementing.
The long-context problem. In very long sessions, the model can “forget” constraints established at the start. A real example: we established early on that we wouldn’t use certain deprecated components, and five hours later Claude Code suggested them again. Short, focused sessions work better.
“Generic” design by default. Without very specific instructions, Claude Code tends toward solutions that look like any other Tailwind site. Technically correct, visually without personality. Brand identity requires constant supervision.
Portuguese translations need special review. The model confuses Spanish and Portuguese more frequently than any other language pair. Probably because of language similarity. PT reviews are systematically longer than DE or IT ones.
Would we do it again? Yes, with caveats
If we were starting soamee.com today, we’d use Claude Code from day one. But with these clear guidelines:
Use it for volume, not decisions. If you need to create 20 similar pages, Claude Code is unbeatable. If you need to decide whether those pages should exist, that’s on you.
Review time doesn’t disappear, it changes. Before the AI workflow, we spent time creating. Now we spend time reviewing. It’s a change in nature, not a proportional reduction. Creating with AI is faster; reviewing requires attention and judgment.
Don’t drop CI out of trust. Every time we think “this change is so simple it doesn’t need a full check,” something breaks. CI runs always, without exceptions.
Brand voice is non-transferable. Claude Code can imitate styles, but it doesn’t know your company, your clients, your internal values. Texts that matter — value propositions, service descriptions, case studies — always go through human editing.
Conclusion
639 commits. 331 with AI involvement. 534 Astro files. 5 languages. And a website that runs in production, ranks, and converts.
Did Claude Code build soamee.com? Not exactly. We built it, with Claude Code as the primary tool for volume work. The distinction matters: the tool has no stake in the outcome, doesn’t know the business context, doesn’t make the decisions that define the product.
If you have a project with lots of repetitive content, translations into multiple languages, or need to move lots of code quickly, Claude Code can significantly change your output capacity. With systematic human review, robust CI, and calibrated expectations about what it can and cannot do.
If you’re curious about how we make stack decisions — including why we chose Astro over Next.js for this site — we cover that in detail in that post. And if you’re interested in the work we do for clients, you can see our open-source contributions and how we work.
The git log doesn’t lie. And ours says this combination works.