Our trip photos always ended up scattered across group chats and different cloud accounts. I didn't want to run a photo server or charge a subscription, so I built Moa: a shared photo album where every album is a private GitHub repo in your own account.
It's my first real project, built mostly with Claude Code.
How it works
- One album = one private repo. Originals, previews and thumbnails are committed into day folders. Friends you invite become collaborators, and you can clone the repo anytime.
- Saving at the same time. Every change is a small op (add photos, tag, like). Before each commit, the app replays the ops on the latest state and retries if someone else committed first, so nobody's changes are lost.
- Optional encryption. AES-GCM in the browser, so GitHub only stores ciphertext.
-
View-only links. Friends without GitHub can look. Encrypted copies go into secret gists, and the key lives only after the
#in the URL, which browsers never send to a server.
Limits
- Creating an album or uploading needs a GitHub account.
- About 10 GB per album is recommended.
Try it
Free for one album, $3.99 once for more (no subscription): albummoa.app
Would "Sign in with GitHub" stop your non-developer friends? I'd love to hear.
Top comments (1)
Using GitHub as the storage layer for shared albums is a clever trust story.
Professional curiosity (Staff SDET) meant running albummoa.app through an automated scan before more people try it cold. 94/100 (A) overall. The item I'd fix first is a very short page title ("Moa — shared albums", 19 characters), which gives search and link previews little to work with. Something like "Moa — private shared photo albums stored in your GitHub" is a one-line change that tells people what it is before they click. Beyond that, 9 smaller things showed up.
I'd love to hear how you plan to handle GitHub's repo size ceiling once families start dumping whole vacation rolls in.