The other night I was cleaning out my GitHub repos (old demos die hard) and I came across some code I wrote for my family back in 2020.

That year over Christmas, I sat at my in-laws’ kitchen table in Alabama scanning old family photos using a high-speed scanner I’d just bought (the legendary Fujitsu iX1500). We’re talking well over 1,000 photos going back to the 1920s.

My process back then was… tedious.

  1. Scan a batch.
  2. Load them into a Google Sheet.
  3. Fill in columns for dates, locations, and notes.
  4. Pester my mother-in-law for details (“Who is this cousin? Is this 1984 or 1985?”).
  5. Run a hacky Python script I wrote to smash that spreadsheet data into the image’s EXIF tags.

It worked, but it was a slog. Once I uploaded them to Google Photos, they looked great on the timeline, and it got the job done. But the tool chain was brittle. I hadn’t touched it since.

The “New Tote”

A couple of weeks ago, my mother-in-law (now moved to North Carolina) found another tote of family photos. I still have the scanner. I wanted her to be able to do this herself, but there was zero chance she was going to wrangle a CSV file and run a Python script from the terminal.

In the past, this would have been the end of the project. Building a custom GUI application with face detection and metadata editing? That’s a two-weekend project minimum. For a user base of one? Not worth it.

But we are entering the Era of Personal Software.

90 Minutes to a Full App

I decided to see what was possible. I fired up the Gemini CLI and started refactoring.

I didn’t just want the old script; I wanted a tool my mother-in-law could actually use.

  • Goal: A desktop app to scan, tag, and organize photos.
  • Constraint: I only had a Sunday morning while the coffee was fresh.

The Result? In about 90 minutes, I went from a dusty CLI script to PhotoSync, a full-fledged React & Python GUI application.

PhotoSync Editing Interface

Here is what the new version does that the old one didn’t:

  1. Local AI Face Detection: It uses face_recognition to find faces in the photos automatically. It tracks them in a local SQLite database, so once you tag “Uncle Bob” once, it suggests him next time.
  2. Visual EXIF Editor: No more spreadsheets. You click the photo, type the date and description, and hit save.
  3. Workflow Automation: When you save, it renames the file based on the date and moves it to a “Processed” folder, ready for upload.

The Power of “Vibe Coding”

This experience perfectly illustrates the concept of “Personal Software” or “Vibe Coding”. The barrier to entry for creating bespoke, tailored software for extremely niche use cases (e.g., “My mother-in-law’s photo scanning workflow”) has collapsed.

I didn’t have to look up the documentation for vision AI models I’d never used. I didn’t have to debug the sqlite3 schema. I just described the workflow I wanted to Gemini, and it handled the implementation details.

I spent my time acting as the Product Manager, deciding how it should work, rather than the Junior Dev figuring out how to code it.

The One Snag: The Platform Wall

The only part of this project that hit a wall wasn’t the code—it was the API limits of the big platforms.

I built a feature to pull images down from Google Photos to fix their metadata locally. It works great! But I couldn’t build the “Re-upload” button I wanted. The Google Photos API does not allow apps to update or delete media items they didn’t create.

So for now, the re-upload step is manual to avoid creating duplicates. Even with AI, we still play in the sandboxes we’re given.

Build Your Own Tools

This tool is open source and available at github.com/jduncan-rva/photosync if you have a similar need.

But the real takeaway isn’t the photo app. It’s the acceleration. If there is a friction point in your life—a spreadsheet you hate updating, a file organization task you dread, a report you write manually—the cost to build a software solution for it has dropped by 30x.

If you haven’t tried building your own Personal Software yet, this weekend is the perfect time to start.

Check out my other guides on accelerating your workflow: