
I didn’t mean to build software. I meant to buy flowers. But flowers wilt and my wife was in the hard, sunlit middle of retraining to become a Spanish teacher. Notes piled like small cities on the table, lesson plans taped to the wall, her voice practicing gentle imperatives in the kitchen as water boiled. She was learning to teach; I on the other hand wanted to learn to help. So one lat evening, with the flat kind of courage that comes just around midnight, I opened my laptop and typed into the empty box: Let’s make a tiny Spanish A1 grammar app.
The cursor blinked. The newest version of ChatGPT 5 replied the way a patient librarian would: What do you want it to do?
How do you build what you can’t build? With verbs, apparently. I wrote: It should be playful. I want to click things. I want feedback – not scolding, just nudges. And it should be 100% A1. No surprises. I paused, then added the truth of it: It’s for my wife. It’s a gift.
The first version arrived like a paper model: a neat window, buttons that said all the right things, a place to type. It was almost what I’d dreamed, except that every time I typed a letter, the input field lost focus, like a shy kitten running off. “Next” kept repeating the same question. The “Start” button was as ceremonial as a museum door that didn’t open.
I told the AI and it didn’t argue; it listened. So the input should hold focus. Next should genuinely go next. Start should lead to topics first, not straight into chaos. Got it. It slipped away to fix things and I refreshed the page the way a child checks the oven window.
We found a rhythm, the two of us: I would describe a feeling, not a function. Let me decide when to proceed; keep explanations visible a beat longer; don’t whisk me away before I’ve understood what I did. And it would translate feeling into code. Every little quirk became a character in a small, stubborn story: the Start button that wouldn’t start, the progress bar that filled and then refused to end, the flash of explanations that blinked out too soon. I reported them like sightings. It fixed them like weather.
And then, later that night, we stepped into plot.
“Could it have modes?” I asked. “Something that respects the way memory works? She’s going to be using this a lot. She’ll want the easy things to pass and the hard things to come back on purpose.”
Mastery Mode, the AI said, without fanfare. An item only counts when you get it right twice in a row. Misses return later, gently.
“And another,” I said, greedy now that the horizon was wider. “A mode that hoards my mistakes. A box I can tip out and work through every session, until it’s empty.”
Improvement Mode, it said. We’ll keep your wrong answers in a little shoebox in the browser. When you fix one, it vanishes for the next round.
A shoebox. That was almost exactly how I pictured it: a cardboard square under the bed, full of old stumbles and nearly-there’s. We added a button to empty it entirely, the way you might throw out a junk drawer in spring. For once I understood a line of code without seeing it: a promise that mistakes could be collected and redeemed.
While we were building the rooms, the house wanted furniture. We began with a dozen tasks per topic, and then – because the app felt too clean, the way a staged apartment does – we added more. Examples multiplied. Articles that trick you into saying la agua when you need el – check. Plurals that snip a z into ces. Adjectives agreeing like polite guests with their hosts. Phrases that taste like a country – Lo siento, Por favor, ¿Cuánto cuesta?
The app got heavier. It stopped feeling like a demo and started feeling like a practice room: scuffed floor, light from one high window, a shelf of drills you reach for without thinking. We made it so you could choose topics up front or choose nothing and let the app shuffle everything like a deck sprayed across the table. We kept sessions to ten items – long enough to warm the mind, short enough to make finishing feel inevitable. We made the explanations linger. We turned the answer buttons white. We gave you the power to advance only when you wanted to. The summary at the end looked like a small report card you’d actually want to read.
I wasn’t coding; I was pointing. I told the app what it felt like to learn, and it bent in that direction. Each time I wrote, I learned to be more precise. Each time it replied, I learned that precision was gentler than I’d thought.
In the quiet moments, I pictured her – my wife – leaning over the kitchen table at dawn, tea in her hand, choosing ser/estar because she’d be explaining it later to a roomful of nervous faces. I pictured the relief of a mistake shown cleanly and then forgiven. I pictured her not as a student, but as a pilot: checklists, bright instruments, a steady climb.
We had a glitch later when I already thought & hoped we were done. The Start screen looked gorgeous, but the button did nothing, as if it had been painted on. It should have deflated me, but it didn’t. I knew the ritual now. I wrote: “Start leads nowhere.” The AI returned: Parse error caught and fixed. Start now opens the topics overview. Also, I added a gentle note so you know what to do next. We were learning each other’s timing.
The night I finished, it rained. I pressed “Build” one last time and gave the file a name that would make sense to no one but me. I closed the laptop and carried it to the living room where she was marking something with a purple pen.
“I made you something,” I said.
Her eyebrows went up. “Is it edible?”
“Almost,” I said, and opened the app.
The first screen welcomed her in both languages. She clicked Start, the way you touch a bell and half expect nothing to happen. The topics opened like drawers. She smiled at the names – ser/estar, gustar, Präpositionen – and chose two, then three, then none at all, letting the app choose for her. When the mode selector appeared, she tilted her head the way she does when she’s deciding between two good paths.
“What’s Mastery?” she asked.
“Ten that you answer correctly twice in a row,” I said. “They only count if you prove it.”
She nodded. “Good.”
“What about Improvement?” she said.
“That one remembers your mistakes and brings them back until they’re not mistakes anymore.”
She looked at me, and the quick gratitude in her eyes was the entire point of all the hours – of the stubborn Start button, the obstinate Next, the lingering explanations, the shoebox of wrong answers. She picked Standard. The first question arrived, bright and simple. She missed it, laughed, read the explanation and got the next one right. The feedback was kind in both languages. She kept going. The room felt like a small flight taking off.
At the end, the summary laid out her trail – what she tried, what she got, what she learned. It didn’t judge; it witnessed. She clicked back to the overview, then, without speaking, reopened the app and chose Mastery.
Later, when the house was a hush and the rain had tapered off, I opened the blog editor to write all this down. I wanted to capture not the code, but the conversations: the way I learned to ask for what I wanted and to listen to what would work; the way a tool became a partner; the way a gift can be both practical and tender if you let it.
If there is a moral, it’s not that anyone can code (though perhaps anyone can, if they start with sentences). It’s that making something for someone you love requires the same grammar as learning a language: patience, repetition, small gambles, clearer and clearer words. The app is a single file that runs in a browser, yes. But for me, it’s also a kind of letter, one that says I see your effort, I respect your craft, I want to lay a path of stepping stones where the water runs too quick.
Before I closed the laptop, I added a dedication, tucked in the code like a pressed flower:
Para ti, que enseñas con paciencia y una sonrisa.
Que esta app sea un compañero más en tu camino,
para preparar clases, para ejercicios rápidos entre medias,
y para esos pequeños “ajá” que hacen el español tan bonito.
She read it the next morning. Then she kissed me on the cheek, took her tea and started another session. The shoebox would be empty soon; Mastery would click into place. And I, who still can’t really code, had built something that worked.
by mario