Last time I wrote here, I’d deployed three AI agents for Google’s Gen AI Academy. This is what came after: the hackathon at the end of that programme, where you build one thing and submit it.
I built a journal. It’s called Daybook. You write a few lines about your day, and when you stop typing it reads what you wrote and answers underneath. No chat window, no send button. Ask it for Insights and it reads a few weeks at once and tells you what you keep coming back to.
Building it took an evening. The rest of the week went to finding out what was quietly wrong with it, and that turned out to be the more useful part.
The first version was a chatbot wearing a journal’s name
It worked. I typed, it replied, everything saved. I demoed it to myself and felt good about it.
Then I read back what I’d actually written in it. “excited and scared.” “not sure tho.” Three words at a time.
That isn’t journaling. That’s texting.
The problem wasn’t the colours or the writing box. It was underneath. The database stored a chat transcript: user, assistant, user, assistant. There was no such thing as “an entry” anywhere in it. And a text box with a send arrow teaches you to send messages, the same way a blank page teaches you to write paragraphs. The interface had trained me to chat, and I hadn’t noticed.
So I rebuilt it. An entry became one piece of writing belonging to one day. Daybook’s reply became part of that entry instead of a message in a thread. The send button came off completely. It saves as you type, and when you pause, it reads.
Most of that work was undoing. It’s the change I’d defend hardest, and it’s invisible in a screenshot.
Google has two wallets
Halfway through, every call to Gemini came back with the same error: your prepayment credits are depleted.
Which was odd, because I could see ₹956 of Google Cloud credits sitting in my billing account.
They’re two different pools. Cloud credits pay for Cloud Run, Firestore, the infrastructure. The Gemini API through AI Studio runs on its own prepaid balance, which was at zero. Same company, same project, same models, different wallet.
₹500 of prepaid credit fixed in thirty seconds what I’d spent an hour trying to solve with architecture.
Not every problem is an engineering problem.
A deploy that didn’t deploy
Later I fixed a bug, deployed, and watched the bug happen again. Fixed it differently, deployed, same thing.
The deploy script had been made safer at some point. For a service that already exists, it builds the new version and sends it zero traffic, so your live app keeps serving while you test the new one. It even prints the command to promote it once you’re happy.
I hadn’t been running that command. My live URL had been serving the same old version for hours while I fixed things into a void.
“I deployed it” and “it’s live” are two different claims. I’d been treating them as one.
The date bug
I’d missed a couple of days, so I opened September 3rd to fill it in.
Daybook answered it by referring to something from my September 5th entry.
Two days that hadn’t happened yet, on a page I was writing as though it were Thursday. The fix was simple once I saw it: an entry may only be read alongside entries dated before it.
For a journal specifically, that matters more than it sounds. The promise is that it remembers with you. Something that knows things you haven’t told it yet isn’t remembering, it’s watching.
What actually shipped
A journal where the AI never announces itself. No assistant panel, no “ask me anything,” no robot icon. You write, and something reads it.
Every day opens with one question drawn from your own earlier entries, so there’s never a blank page. That’s the most common reason people quit journaling, and it’s an interface problem more than a discipline problem.
Insights reads across weeks. Mine told me something I hadn’t put together myself: that I crash hard after long screen-focused days, and that hands-on physical work restores me better than resting does. Five separate entries, none of which said that. I didn’t know it until it was read back to me.
That’s the product. Not an assistant. A reader.
What I’d tell myself on Monday
Check what’s running, not what you wrote. Half my debugging went into code that was never live.
Use the thing like a person, not like a builder. Demoing it, everything looked fine. Actually journaling in it for a week is what exposed the three-word entries and the wrong dates.
The structural mistakes don’t show up in screenshots. A chatbot-shaped database and a missing date filter look identical to a working app until you live with it.
I still don’t write code. I’ve got noticeably better at knowing when to stop trusting the thing that does.