A small workshop, a few crafts.
Everything here starts with something I wanted but couldn't find — so I built it myself. Some of it turns into an app, some into a printed part, some into a script that quietly runs at night.
Android apps
Small, focused apps in Kotlin and Compose, built to solve one everyday problem properly.
3D printing
Functional parts drawn in Fusion 360 and printed to actually get used, not to sit on a shelf.
Automation & infrastructure
Backups, sync jobs and small services that run in the background so I don't have to think about them.
Desktop tools
Python utilities for comparing files, searching media libraries and automating slow manual work.
Some of what's running.
No names and no download links — these are private tools, built for one household and one machine. This is just what they do.
- Desktop Search a local video library in plain language. A vision model describes what's in each frame, the descriptions are indexed as vectors, and the whole archive becomes searchable — entirely offline, on one machine.
- Android Shared appointments across two phones, with reminders that fire locally and a notification when the other person adds or edits something. Birthdays roll forward on their own, deletions go to a trash that empties after thirty days, and pasted text is parsed into a filled-in form.
- Desktop Two external drives, checked against each other: a fast pass on name, size and date, or a full SHA-256 pass with a cached hash index. Duplicates and unreadable files get flagged, and nothing is deleted without confirmation.
- Android One shopping list, two phones, always the same. Items can be added by voice, and the other device is notified the moment something changes.
Also on Android
- Keeps household documents offline behind a PIN and fingerprint, encrypted on the device.
- Surfaces voice messages buried deep in WhatsApp's folders.
Also on the desktop
- Scores a large photo and video archive file by file, and sets aside whatever needs a second look.
- Pairs files across two drives by checksum before anything gets moved.
- Swaps an edited clip back over the original, keeping a backup until it's confirmed.
- Turns speech in a video into plain text with a local Whisper model.
- Samples three points in a video's audio to report which language is spoken.
- Lays evenly spaced frames into a single grid image per video.
- Music for a Discord server: queue, playlists, role-based permissions, automatic disconnect.
- Pulls the audio track out of a video as MP3 or WAV.
Most of these took a few evenings. None of them are products — they exist because the alternative was doing the same thing by hand every week. If one of them sounds like something you need, or you're curious how it was put together, ask me about it.
Want to say hi?
Questions, ideas, or just a hello — leave a message and I'll get back to you.