Even a Whisper Gets Translated: Teaching a Phone to Listen to Its Own Speaker

The Korean tagline I wrote for the original Play Store listing translates roughly to: “Even a whisper gets translated, reading YouTube by ear.” It was a promise about one specific feature, not a slogan I picked for how it sounded. What “Listening to Its Own Speaker” Actually Means Most translation apps expect you to talk into them, or hold them up to someone else talking. TransLee has always done something slightly different: it can also just sit next to whatever sound is already in the room, a phone playing a YouTube video, a TV, a radio, and translate that sound live, without any screen-sharing or app integration on the source side. ...

July 17, 2026 · 3 min · VibePapa

From Two Phones to a Family Archive: The Whole Pipeline

This is the map. If you’ve followed the series, this ties the pieces together. If you’re starting here, this is the whole system in one view — how my daughter’s photos and videos get from two phones to my eighty-seven-year-old mother’s tablet, sorted by month, for nothing per month. The Whole Pipeline [Dad's phone] [Mom's phone] | | Synology Drive auto-backup (over the internet) | | v v [ Home NAS: two backup folders ] <- never edited | hourly check copies NEW files (skips anything already handled) v [ Working folder: the "cutting board" ] | I open a browser gallery and pick the keepers v [ One "Import" button ] - convert videos to H.264 720p (ffmpeg) - resize photos - file into Year / Month by the file's date v [ Growth archive on the NAS ] | served over a free Cloudflare tunnel v [ Kids Player app -> "My Records" tab ] - tap a month - videos play continuously - photos drift by, gently zooming v [ Grandmother's tablet. Daughter's tablet. ] Every arrow except one is automatic. The single human step is “pick the keepers,” and it takes about a minute a day. ...

July 17, 2026 · 3 min · VibePapa

Month Grid, Continuous Play, and a Gentle Drift Across the Photos

A perfectly sorted archive is worthless if the people it’s for can’t watch it. My two viewers are an eighty-seven-year-old and a two-year-old. Between them, they can’t manage menus, can’t type, and won’t tap through a playlist. So the watching part had to be as close to zero-effort as I could make it. The rule I designed to was simple: pick a month, then sit back. Everything after that first tap should happen on its own. ...

July 17, 2026 · 3 min · VibePapa

Skip What You Already Have: Duplicate Detection Without a Database

Here’s a problem that sounds harder than it is. New files arrive on the cutting board every hour. I sort them in passes, over several days. The automatic check keeps copying. So how does the same photo never get imported twice? No database. One small ledger, plus a cheap shortcut, do the whole job. The Ledger Does the Real Work When the hourly check copies a file onto the cutting board, it writes one line in a small record — a plain text ledger I’ve been calling R throughout this series. ...

July 16, 2026 · 3 min · VibePapa

The File System Is the Database

There’s no database behind my daughter’s archive. No table of photos, no index, no metadata store. When the app needs to know what’s in “July 2026,” it opens the July 2026 folder and looks. That sounds lazy. I’d argue it’s the opposite — it’s the one decision that keeps the whole system simple enough for one person to maintain. How It’s Organized The archive is just folders on the NAS: ...

July 16, 2026 · 3 min · VibePapa

One Button: Shrink the Video, Sort It by Month, Done

By this point in the pipeline, the boring parts are done. New files have been copied to the cutting board. I’ve picked out the ones that are my daughter. What’s left is the step that turns “a pile of selected files” into “a browsable month in her archive.” That’s one button. By now the picker has already moved my chosen files into a hand-off folder. In the app’s My Records tab, there’s a count of what’s waiting in that folder, and next to it a button that says, in effect, bring these in. I press it, and the rest happens on its own. ...

July 16, 2026 · 4 min · VibePapa

10 Seconds to Zero: Rebuilding My Translator on Gemini's Streaming API

The old version of TransLee worked. People used it. It just made you wait. The Old Pipeline: Record, Wait, Stitch The original app was built in Flutter, with a Node.js server in the middle talking to OpenAI’s Whisper for speech-to-text and GPT for translation. The flow looked like this: [Record 5-15 seconds] -> [Whisper: speech to text] -> [GPT: translate text, using the tail of the previous chunk for context] -> [Text-to-speech] -> [Play the translated audio] ⬑ repeat, waiting the full cycle each time ⬏ Five to fifteen seconds isn’t a random number. It was a setting I chose on purpose, because shorter chunks meant the translation kept losing the thread mid-sentence, and longer chunks meant a longer wait before you heard anything at all. The fix for the “losing the thread” problem was to keep the last bit of the previous chunk’s text and glue it onto the front of the next one before sending it off to be translated, so GPT had enough context to know what was going on. It worked. It also meant every single sentence arrived several seconds after it was actually spoken. ...

July 14, 2026 · 5 min · VibePapa

Translee : A Real-Time Translator I Built on Gemini Live Translate

I put my phone next to a TV playing a Kenyan news broadcast in Swahili, low volume. My translator picked up the sound and started speaking the English translation back to me as the newscaster kept talking. No 5-second wait. No 15-second wait. The words just kept coming. It’s a Progressive Web App: open the link on a phone, add it to the home screen, and it behaves like a native app, no App Store or Play Store involved. ...

July 14, 2026 · 3 min · VibePapa

Your Phone Saves H.265. The Browser Wants H.264.

The photos were easy. The videos nearly stopped the whole project. A video of my daughter would back up to the NAS perfectly, and then, when I tried to play it in the browser, I’d get sound but no picture. Or a black rectangle. Or, for the big ones, an endless spinner while it buffered. The file was fine. It just wouldn’t play. Two separate problems were hiding here, and it took me a while to see they were separate. ...

July 14, 2026 · 3 min · VibePapa

The AI Couldn't Recognize My Own Daughter

Here’s the plan I was sure would work: point an AI at a folder of thousands of mixed photos, give it a few pictures of my daughter, and let it pull out every photo of her automatically. No more manual sorting. It didn’t work. And the reason it didn’t work is interesting enough that I want to tell it straight, including the part where I was wrong. The Idea Face recognition is a solved problem, right? Phones do it. The plan was: ...

July 13, 2026 · 4 min · VibePapa