On 26 August, Lex Fridman published his second conversation with David Heinemeier Hansson, the creator of Ruby on Rails. It runs five hours and twenty-two minutes. I listened to most of it at my desk, at night, with an agent building a feature in the terminal next to the player, which is the only honest way I could have listened to it.
DHH spent twenty years handcrafting code and being loud about how much the craft mattered. In that episode he says the quiet part out loud: agents now write the code, and he is fine. Not because the craft died, but because it moved. “When I’m working in Ruby code and asking agents to make changes, I still sweat the details,” he says, and then admits the economic payoff of that sweat is shrinking fast. What is not shrinking is the part he calls taste. “Most organizations don’t know what they want. They’re bottlenecked on ideas, vision, taste.”
He draws a line I have been trying to draw for months. Vibe coding is telling an agent to build something and never looking at what it built. Agentic engineering is the same speed with the details still sweated, by someone who knows what wrong looks like. And he keeps coming back to one word that has nothing to do with software: mission. “I have a mission. I’m going somewhere. I can channel all this new power towards a singular goal.”
That is the piece most people miss when they talk about AI and building. The tools are real. DHH puts it as decades of progress arriving in nine months. But power without a direction is just a faster way to be busy. Obsession is the precursor. The tools only decide how far the obsession gets to travel.
You can find the episode at lexfridman.com. This post is what it made me want to do: count my own obsession honestly, and say where it came from.
The precursor
Obsession is the precursor. With an art, it is also the reward.
A white belt at twenty-eight
I walked into a karate hall at twenty-eight. I am forty now, so this is not a young man’s story about finding himself. I went in as an adult who ran a company during the day and had noticed that nothing in his life had a syllabus anymore. Not as a child pushed in by a parent, not as a teenager with a tournament in mind. I tied a white belt and stood at the back of a line of people half my age.
Here is what I did not understand then and understand now. Obsession on its own is a fuel, and fuel does not care what it burns. I had been obsessed with games, with work, with the next thing. An art gives the fuel a shape. It has a lineage that was there before you and will be there after you. It has a floor you cannot fake your way across. It hands you a next objective every single evening, and it hands the same objective to everyone in the room, which is why a hall full of strangers becomes a family faster than any office I have run.
Now, at forty, I have stood in that hall in almost every role it offers. I was the white belt who did not know where he stood. I was the parent, when my son started training under a different coach and I discovered what it is like to pay the fees and have no idea what your child is actually learning. I was the coach, trying to hold sixty journeys in my head. I was the volunteer at the tournament desk with the tie sheets and the spreadsheet. With the blessing of my Sensei I became the owner of an academy. Somewhere in there I became a black belt, then a second degree black belt.
And then I became the sixth thing, the one nobody in the sport had been before: the person who builds its software. One blind spot, met from every chair in the room, and then the tools arrived that let one person do something about it at night.
That is why I say an obsession is more fulfilling when it has an art under it. The art gives it meaning. The meaning is what makes the three in the morning bearable. I told the longer version of how the build started in Why I built KombatOS. This post is the ledger.
The nuts and bolts
Here is the part I left out of the first post, and DHH’s conversation is the reason to put it in now.
I did not come to this as a manager who discovered a magic box. I came to it as someone who has been writing code, on and off, for most of his life. In school, in the early 2000s, I won Olympiads in coding. I took an A in every computer course I ever sat, at school and again in engineering. I worked briefly at Infosys as a systems engineer, which is where I learned how open systems actually fit together, the unglamorous plumbing between one machine and the next. Over the years I have dabbled in SQL, C++, Java and, as it happens, Ruby on Rails, which is the framework DHH built and the reason I first knew his name.
None of that makes me a great programmer. It makes me a person who knows what wrong looks like. When an agent hands me a query that will scan a whole collection on every request, or a permission check that trusts the wrong field, or a migration that would wipe what it was meant to move, I recognise it, because I have written all three by hand and paid for them. That recognition is the entire difference between the two things DHH separates: vibe coding, where you never look, and agentic engineering, where the speed is the same and the details are still sweated.
DHH says on the episode that he hates the word agentic. Loved or hated, call it what you like. My position is that to do it today you must know the nuts and bolts. Maybe tomorrow you will not. The tools are moving fast enough that I would not bet against it. But that is not today, and the people shipping real systems to real academies at three in the morning are the ones who can read what the agent wrote.
Which brings me back to his three bottlenecks: ideas, vision, taste. The first two you can bring from anywhere. My ideas come from the hall, not from a terminal. The third one comes back to the nuts and bolts every time. Taste in software is the residue of having done it by hand, of knowing which of the three options the agent offers will still be standing in a year. And that is the hole we are heading into right now. If the next generation never writes the bad query themselves, where does the taste come from? I do not have the answer. I only know that mine came from twenty-odd years of doing it the slow way, and that the agent gets it for free every night.

What two hundred and sixteen days look like
Every number below was pulled from the repository, the working transcripts and the production database on 5 September 2026. Nothing was rounded up.
216
days since the first commit
213,732
lines of code live today
2,445
commits on main
97
pull requests shipped
Git is not the starting line
The repository opens on 2 February 2026 with an empty commit from an AI agent. The next morning it receives a working prototype: 77 files, about 6,800 lines. That prototype was built on Emergent, an AI app builder, in the weeks before, and the weeks before that are not in git at all. So the first honest thing to say about the count is that it starts late.
Emergent kept auto-committing until 5 March. Fifteen active days, 1,165 commits, and a codebase of roughly 61,000 lines by the end of it. On 6 March I took the keyboard myself, with Claude Code, and the repository changed character overnight. Auto-commits became hand-authored, reviewed, tested work. From that day to this one there are 1,280 of my own commits across 94 active days, 97 pull requests, and about 153,000 net new lines.
The Emergent month is under-counted by construction. One auto-commit can hold a whole afternoon. Treat every Emergent number in this post as a floor.
Two hundred and thirteen thousand lines
There are 213,732 lines of application code in production today. 104,933 of them are Python on the backend, across 306 files and 631 API endpoints. 108,258 are React on the frontend, across 482 files and 163 screens. If you prefer books, that is about three and a half copies of War and Peace.
The live count undersells the work, because code gets rewritten. Across the whole history 427,480 lines were written and 72,616 were later deleted or replaced. Beside the code sit 32,316 lines of written plans, handoffs, specs and session logs, because a one-person night shift that does not write things down forgets them by the next night.
- 3 Feb import6,822
- February43,845
- March74,998
- April92,523
- May92,661
- June120,607
- July161,817
- August210,686
- 5 September213,732
The pace went up, not down
Side projects have a familiar shape: a burst, then a fade. This one did the opposite. 143 commits in March, 86 in April around the first live tournament, then 204 in June, 409 in July and 391 in August. May is the quiet month, and it was quiet on purpose: the Sanshinkan post-event cycle was running and the multi-academy rebuild was being designed, not typed.
Of the hand-authored commits, 232 are features and 164 are fixes. 95 of the 97 pull requests merged, and every merge to main is a production deploy. There is no staging environment. There are academies.
- 1,026Feb
- 282Mar
- 86Apr
- 2May
- 204Jun
- 409Jul
- 391Aug
- 45Sep
Half of it was built between midnight and 7 AM
I have kept one rule for thirteen years: work ends around six in the evening, and the evening belongs to the hall. That rule shows up in the commit history as a hole in the day. Almost nothing between seven and eleven in the morning. A small shoulder in the afternoon. Then the real shift, which starts after the last class and runs until the sun comes up.
Fifty-one percent of my commits land between midnight and seven in the morning. Thirty-one percent land on a weekend, and Saturday is the busiest day of the week. There was a stretch from 27 June to 19 July with a commit on every one of twenty-three days. The longest single sitting started at nine in the evening on 3 July and ended just after six the next morning.
How many hours is that? I do not have a timesheet, so I did the conservative thing. Commits less than two hours apart count as one sitting, and each sitting is credited from forty-five minutes before its first commit to its last commit. That method gives 187 sittings and a little over 470 hours since March, plus roughly seventy for the Emergent month. It is a floor. Testing on production, WhatsApp support with academy owners, and the visits to halls to watch people use the thing leave no trail in git.
470+hrs
provable from commit timestamps alone
A floor, not a total.
23
day streak
27 June to 19 July, no day off
9.2hrs
longest single sitting
3 July, 9 PM to 6 AM
31%
of commits on weekends
Saturday is the busiest day
Thirty days, in conversation
This is the part DHH was describing, seen from the inside. Claude Code keeps a transcript of every working session, and the retained window covers 6 August to today. In those thirty days I wrote 10,419 prompts and received 18,464 answers, edits and checks back. That is about 350 prompts a day, over 53 sessions, many of which ended after sunrise.
The prompts are not “build me a CRM.” They are the details being sweated. Why a session pack must be recounted after every attendance write instead of ticked down by one. Why a coach seat must never see another member’s fees. Why an approved registration means in the bracket, and a payment is information, never a silent gate. Every rule an academy owner taught me is written into a memory file, and the platform reads its own memory before it touches anything. There are 109 of those notes and 51 session logs.
10,419
prompts I wrote
in thirty days, about 350 a day
18,464
answers, edits and checks back
264 MB of transcript
53
working sessions retained
many of them past sunrise
160
memory notes and session logs
the platform remembers its own decisions
What changed
The agents write the code. The thirteen years decide what the code is for.
The surface area
Effort is only interesting if it turned into something. Here is the platform by the numbers a developer would ask for, and then by the jobs an academy owner would recognise.
Backend
- API endpoints631
- Data collections in code105
- Automated tests1,077
- Ops and migration scripts263
- Email and WhatsApp senders22
Frontend
- Screens163
- React components408
- Seats designed for6
- Android builds uploaded to Play5
- Disciplines with curriculum presets5
Process
- Pull requests97
- Branches cut242
- Files touched, all time1,294
- Written plans, specs and logs145
- Live events run on it20
Eight jobs, one system
Tournaments
- Registration and paid checkout
- Weigh-in, check-in, ID cards
- Bracket generation, mat queue
- Karate, BJJ and MMA scoreboards
- Public results and athlete records
Members
- Profiles, families, households
- Plans, session packs, invoices
- GST-inclusive billing, UPI
- Excel import with a dry run
- Leads and follow-up worklist
Attendance
- Face-scan kiosk
- Phone and PIN check-in
- Class timetable and batches
- Streaks and pack recounts
Belts and curriculum
- Belt systems per discipline
- Universal 5x3 curriculum frame
- 6,604 syllabus aspects, 1,225 videos
- Belt tests, letter grades, certificates
Engagement
- WhatsApp via AiSensy
- Email with per-academy templates
- Reminders with chosen audiences
- In-app notification centre
- Web push to phones
Portals
- Member app with the journey view
- Parent portal, multi-child
- Coach seat with privacy redaction
- Waivers and consent, signed
Recognition
- Hall of Fame nominations
- Appreciation cards
- Achievements and trophy cabinet
- Fight team lineage
Platform
- Per-academy currency and region
- Billing console, viewer seats
- Android app on Play Store
- SEO pages for every event
Not a demo. It runs academies.
These are live document counts from the production database on the morning I wrote this. They are the numbers I care about most, because every one of them is a person in a hall somewhere who did not have to fill in a form twice.
44
academies set up
105 clubs registered
1,211
member profiles
957 login accounts
7,558
attendance check-ins
305 faces enrolled for scan
753
belt promotions recorded
109 grading applications
9,714
messages delivered
WhatsApp, email, reminders, alerts, in-app
12,104
curriculum items
3,531 progress marks by coaches
674
tournament registrations
20 events, 157 brackets, 839 fighters
428
waivers signed digitally
309 consent decisions, 490 achievements logged
Messages delivered is WhatsApp 1,839, email 1,399, reminders 2,248, alerts 2,457 and in-app 1,771. The first live event was the Sanshinkan All India Open at Talkatora on 12 April, about 500 athletes. The BJJ module ran its first nationals with SJJIF on 26 July.
What each month put on the mat
February
- Prototype on Emergent
- Tournament registration and brackets
- Live scoring, the first scoreboard
March
- I take the keyboard
- Sanshinkan onboarding, 1,500 entries
- Demo feedback from senseis
April
- Sanshinkan All India Open, about 500 athletes at Talkatora
- Check-in desk, ID cards, medals
June
- Multi-academy rebuild of the CRM
- Face attendance
- Rebrand to KombatOS
July
- BJJ module, SJJIF Nationals
- Paid checkout, weigh-in, mat queue
- Pricing launched
August
- Parent portal, family profiles
- Notification revamp, belt-test arc
- Billing enforcement, Play Store
- Curriculum on every academy
September
- Session packs, GST-inclusive plans
- Reminder audiences
- One-door student sign-up
- Web push notifications
Next
- USD and EUR payment rail
- Faster face scan
- Getting-started checklist
- WhatsApp coexistence on Meta

Built at 3 AM so your 6 AM class just works
The effort is real, it is ongoing, and it is pointed at your academy.
I counted all of this for the academy owners and coaches who run on KombatOS, because they deserve to know what is behind the thing they trust with their students. But I also counted it for myself, and for anyone who listened to that five-hour conversation and wondered whether it applies to them.
It does, on one condition. DHH is right that the code is no longer the scarce thing. Taste is, and taste comes from having done it. Direction is. A mission is. And the surest way I know to find one is to walk into a hall at whatever age you are, tie a white belt, and stand at the back of the line until the art hands you a problem you cannot stop thinking about. The obsession comes first. The art makes it worth having. The tools just decide how far it gets to travel.
Mine has travelled two hundred and sixteen days so far. Same dopamine. Bigger quest.

Aditya Singh
Founder of KombatOS. Managing Director and co-founder of Expedify, an agentic AI company. Won coding Olympiads at school and worked as a systems engineer at Infosys before running companies. Started karate at twenty-eight, forty now, second degree black belt, and runs an academy.
Run your academy on the thing all of this built
Members, belts, attendance, WhatsApp and tournaments in one system. Free to start.

