The Numbers Behind Shipping Six Products: How We Actually Use Claude Code
A look at the real git history, commit cadence, and automation behind AityTech's product portfolio — conventional commits, an agent-driven workflow, and where AI-assisted tooling actually pulls its weight.
A Small Team, Six Products
AityTech ships PrivateAI, Legacy Dragon, AgentKits, Yomite, and StudyKits, with Zunavi in active development — five shipped products plus one in the pipeline, maintained by a small team. That’s not a viable pace without leaning hard on tooling. Here’s what that actually looks like, using the real history of this homepage’s own repository as the example.
What the Git History Actually Shows
We pulled the raw numbers instead of guessing. This repository’s commit log runs from late January 2026 to today, with commits distributed like this:
- January: 32 commits
- February: 31 commits
- March: 7 commits
- April: 11 commits
- May: 2 commits
- June: 2 commits
- August: 11 commits (so far)
That’s not a smooth, constant cadence — it’s bursty, concentrated around active build periods and quiet during stretches where the site didn’t need attention. That’s the honest shape of how a small team actually works: intense pushes when something ships, near-silence in between.
Of the commits with conventional prefixes, the breakdown is feat: (29), fix: (21), chore: (7), ci: (3), and perf: (1). We don’t chase 100% commit-message purism, but the convention holds well enough to make the history readable months later — which matters more than it sounds like when you’re context-switching across six products.
Where Claude Code Actually Fits
The repo has a .claude/ directory with defined workflows, orchestration rules, and a library of scoped skills — frontend design, backend development, devops, databases, and more — that get pulled in only when a task actually needs them. The point isn’t “AI writes the code unsupervised.” It’s narrower than that: routine, well-defined work gets delegated to a focused workflow instead of consuming a person’s full attention for something mechanical.
Two concrete examples from this same blog:
Translation. The blog you’re reading runs in English, Japanese, and Vietnamese. Translations aren’t done by hand per-article — scripts/translate-articles.mjs uses the Claude Agent SDK (@anthropic-ai/claude-agent-sdk) to translate new or changed articles, and hashes existing content so unchanged articles don’t get re-translated on every run. That’s the kind of task that’s tedious for a human to do consistently across three languages and is exactly the shape of thing worth automating.
OG images. Every blog post needs a social preview image sized and branded consistently. scripts/generate-og-images.mjs renders one from a shared HTML template using Puppeteer, per article, per language, and skips any that already exist unless you force a regenerate. Nobody’s opening a design tool to make these one at a time.
What’s Still Not Automated
Worth being direct about this: the product decisions, the architecture, what to build next, and whether a given piece of writing is actually worth publishing — none of that is automated. The tooling handles the mechanical layer (translation, image generation, deployment) so that time goes toward the parts that actually require judgment. That’s the whole point of the split: automate the parts that are the same every time, keep human attention on the parts that aren’t.
The Deploy Side
The site itself is static output — no server to manage, deployed straight to Cloudflare Pages. That’s a deliberate choice that pairs with the same philosophy running through the rest of AityTech’s products: fewer moving parts, less infrastructure to babysit, more time going into the actual product work.
Curious about the specifics of any part of this — the translation pipeline, the OG image generation, or how we structure agent workflows? Reach out at [email protected].
Let's Build Something Together
Have a project in mind? We craft iOS apps, web platforms, and AI solutions from our studio in Japan.
Get in TouchRelated Articles
Why Legacy Dragon Ships as a Single Binary: Parsing COBOL Where the Network Doesn't Reach
The shops still running COBOL and JCL are also the shops with the tightest network controls in software. A parser that needs npm install or a cloud API call is dead on arrival there — which is why Legacy Dragon isn't built that way.
GuidesWhy AgentKits Organizes Agents by Funnel Stage, Not by Tech Stack
Most open-source Claude Code agent repos group agents by technical domain. AgentKits' Marketing Kit groups them by TOFU/MOFU/BOFU instead — a deliberate bet on depth over breadth.
GuidesInside MinuteAI: Transcription That Never Leaves Your Mac or iPhone
How MinuteAI turns meetings, interviews, and voice memos into text entirely on-device — the model pipeline, the memory constraints, and why none of it touches a server.