- Go 79.5%
- TypeScript 4.7%
- Shell 4.1%
- Nix 4%
- HTML 3.8%
- Other 3.9%
| .vscode | ||
| build | ||
| cmd | ||
| convert | ||
| dev-scripts | ||
| docs/design | ||
| e2e | ||
| handlers | ||
| images | ||
| importers | ||
| little_moments | ||
| magiclogin | ||
| mediastore | ||
| random | ||
| ratelimit | ||
| s3 | ||
| s3config | ||
| store | ||
| testdata/tinybeans-export | ||
| uploads | ||
| .air.toml | ||
| .env.example | ||
| .envrc | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc | ||
| .sqlfluffignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| docker-entrypoint | ||
| eslint.config.js | ||
| flake.lock | ||
| flake.nix | ||
| fly.toml | ||
| go.mod | ||
| go.sum | ||
| LICENSE.md | ||
| litestream.yml | ||
| nix-ci.nix | ||
| package.json | ||
| playwright.config.ts | ||
| pnpm-lock.yaml | ||
| README.md | ||
Little Moments
A minimalist and self-hostable web app for sharing photos and videos with close friends and family.
Status
- Milestone 1: Read-only TinyBeans mirror - Completed 2026-03-25
- Milestone 2: Add real database - Completed 2026-03-28
- Milestone 3: Use cloud storage - Completed 2026-04-11
- Milestone 4: User authentication - Completed 2026-06-13
- Milestone 5: Deployment to the web - Completed 2026-06-15
- Milestone 6: Media uploads - Completed 2026-07-13
- Milestone 7: User interaction - Incomplete
- Milestone 8: Full functionality - Incomplete
Requirements
- Go 1.26
- SQLite
- ffmpeg
If you have Nix, you can start a development shell with all required dependencies pre-installed:
nix develop
Quick start
Importing data
Currently, the app is a read-only mirror of your TinyBeans data.
To export your data from TinyBeans, use tinybeans-export to dump your photos, videos, comments, and users from TinyBeans into a local folder.
If you don't have TinyBeans data, you can use the test data in ./testdata/tinybeans-export
# Replace with your actual TinyBeans export if you have one.
# Leave as-is to use test data.
TINYBEANS_EXPORT_DIR=./testdata/tinybeans-export
go run ./cmd/import-from-tinybeans \
--media-dir ./data/media \
"${TINYBEANS_EXPORT_DIR}"
Start the server
To run the development version of the app, run the following:
PORT=4120 ./dev-scripts/serve
Little Moments will begin serving at http://localhost:4120
Deployment
Fly.io
To deploy manually to Fly.io, replace fly.toml with your own, and provide a Fly API token:
FLY_API_TOKEN='your-api-token' nix run .#deploy-to-fly
The deploy targets the app named in fly.toml. Set FLY_APP to deploy to a
differently-named app without editing fly.toml.
The image is tagged with the current commit (git rev-parse --short HEAD). Set
DEPLOY_IMAGE_TAG to override it.
Design doc hot reload
Run the design doc server, then open the URL it prints:
dev-scripts/serve-design-doc
Scope
Little Moments is maintained by Michael Lynch as a fun hobby project.
Due to time limitations, I keep the app's scope limited to only the features that I use. That unfortunately means that I sometimes reject proposals or contributions for perfectly good features. It's nothing against those features, but I only have bandwidth to maintain features that I use.