A photo management platform built as a pair: a containerized web application and a native mobile client against the same backend. Building both sides is what made the API design honest — anything awkward in the contract shows up immediately on the second consumer.
The mobile client
React Native, targeting Android and iOS with a small amount of native Kotlin and Swift where the bridge was not enough.
- Photo management with captions and metadata
- Smart albums with automatic organization
- Advanced search across caption, filename, and location with filtering
- Device integration, showing device photos alongside uploaded content in one view
- Privacy controls — public/private settings with batch operations
- Location support with automatic detection and reverse geocoding
- Optimized for smooth scrolling and fast loading on large libraries
The web side
TypeScript throughout, with a Python service layer and a Docker deployment. Roughly 26 commits of iteration on the web app on top of the mobile client’s build-out.
Why it is not open
Both repositories carry personal photo data and deployment configuration tangled into the codebase. Untangling that safely is more work than opening it up is worth right now — the Duck Tracker audit was a useful reminder that “just make it public” deserves a real review first, not an optimistic one.