The Final Sprint — 30 Commits in 48h, Zero Features
For six months, every day of development added something. A feature, a screen, a pipeline, an integration. The commit counter climbed, files piled up, and the app grew.
This week, I did the opposite. 30 commits in 48 hours. Zero features. Nothing but polish, fixes, and preparation for the moment the app leaves alpha and enters the real world.
AI personalization — 15 commits to say "stop"
TAMSIV's AI lets users introduce themselves by voice. You press a button, describe your life in 30 seconds, and the assistant adapts. The problem: the configuration screen had 15 subtle bugs.
A button hidden by an overlay. Truncated text on small screens. An infinite loop when the user interrupted the AI mid-response. The prompt resetting after every edit. Action buttons stacking on top of each other instead of laying out vertically.
None of these bugs would have been caught in a quick test. You had to use the app like a real user — tap everywhere, interrupt at the wrong moment, go back, try again. 15 commits to make a single screen reliable.
Subscriptions go production-ready
The Free/Pro/Team subscription system had existed since February. It worked in alpha. But "works in alpha" and "ready for production" are two very different things.
The overhaul touched the wording (clarifying what's free vs paid), the alpha modal design (which has no reason to exist in production), and especially the free plan limits. Every string was re-read, every screen verified across 3 different screen sizes.
The kind of work that doesn't show up in a changelog, but makes the difference between a user who understands what they're paying for and a user who uninstalls out of confusion.
The small details that change everything
A stop button for TTS. When the AI responds out loud and you want to stop it, before you had to mute your phone. Now a toggle is enough.
Strict LLM scope. The AI had a tendency to answer off-topic questions — weather, trivia, philosophy. In production, it needs to stay focused: tasks, memos, events. Period. A backend guardrail that politely refuses everything else.
The image generation toggle. Each conversation can generate a cover image via AI. But that costs credits. A switch in the dictaphone header now lets you disable image generation on the fly.
versionCode 30 — the number that matters
Every Android build has a number. We're at the 30th. The previous 29 were alpha — builds for 12 testers who accepted bugs in exchange for early access. Build 30 is the last one before anyone can download TAMSIV from the Play Store.
It's an ordinary number. But it represents the moment where "my app" becomes "an app." Where the code is no longer protected by the forgiving filter of beta testers. Where every bug is a potential 1-star review.
Why a feature-free sprint
The solo developer's temptation is to always add more. One feature leads to another. The backlog never empties. And the bigger the app grows, the more each addition creates unexpected interactions with everything else.
This sprint taught me something: polish isn't the enemy of progress. It's the opposite. Fixing 15 bugs on a single screen made the app more solid than any new feature could have.
Users don't see commits. They see an app that works — or doesn't. And the difference comes down to these 30 invisible commits.