Keepsake: Rescuing Your Children’s Memories from Brightwheel
- tags
- #AI #Go #Wails #Vue #Automation
- categories
- Engineering Portfolio
- published
- reading time
- 3 minutes
Keepsake is a friendly, cross-platform desktop application designed to help parents easily download their children’s photos and videos from Brightwheel. It automatically handles session capture, deduplication, legacy migrations, and EXIF metadata restoration in a clean, local-first utility.

The Motivation
One of the cool things that we as parents get that my parents never did is the added visibility into our kids’ lives while at school. Apps like Brightwheel have been great for schools to share photos and messages, and we always get a kick out of all the pictures we see.
And while for the last few years—while they’ve been attending—it hasn’t really been a big consideration that we’d want them, now that they’re leaving, I’ve had the digital hoarding itch to make sure I have them all backed up.
The unfortunate part is these apps don’t make it easy to get our images out. At least not yet. After a few years of school, there are just way too many pics to spend the entire night downloading them manually.
Fortunately, with a few JS console commands and some API parsing, I was able to quickly loop over and download them for myself. But lately, I’ve adopted a bit of a mantra: If you need it, there’s likely others who could use it also.
While in the past, the thought of dedicating a weekend to this side quest would have seemed too daunting or fraught with the “Why? You got what you needed, move on” voice, the ability to code like a 20-year-old on Adderall with some prompting and general AI guidance makes it possible for me to build and share these solutions with others.
So that’s where Keepsake comes in. This was a little utility knife tool I built with the likes of Kimi 3 and Kilo, coupled with a deep dive in the Chrome Developer Console, to make it seamless for any parent to quickly download their children’s photos in bulk. Nothing is stored in the cloud; it runs entirely locally, routing a local proxy to securely capture cookies without saving them.
Hopefully, someone else finds this tool as useful as my wife did!
Architecture & Tech Stack
Instead of a heavy web-scraper or interactive CLI, Keepsake is built as a lightweight, cross-platform desktop application.
- The Engine: A native Go backend leveraging Wails v2 to bind backend logic directly to a web-based view.
- The Interface: A responsive Vue 3 dashboard styled with Tailwind CSS and daisyUI that displays progress bars, active download logs, and a real-time photo grid gallery.
- The Auth Capture: An internal, local reverse proxy that captures secure session cookies during a normal, browser-based Brightwheel login flow, bypassing the need to store passwords or manage complex MFA challenges manually.
- The Metadata Polish: A pure-Go EXIF writer that automatically writes original timestamp metadata and activity descriptions directly into the downloaded image headers.
Development Process & Challenges
The core challenge was navigating security constraints. Since Wails v2 doesn’t expose low-level APIs for intercepting cookies from a standard Webview, I had to build a tiny custom proxy inside the Go backend. When you log in, the proxy intercepts the Brightwheel session cookies securely and immediately redirects you to the main dashboard interface.
Additionally, because we wanted to keep the application lightweight and written in pure Go, rather than calling out to external dependencies like exiftool, Keepsake implements its own binary-level JPEG EXIF metadata injection.
This tool exists simply because parents currently lack an official way to export their children’s daily memories in bulk. We would love nothing more than for this project to be made happily obsolete by Brightwheel offering an official direct download option!