No description
  • Go 79.5%
  • TypeScript 4.7%
  • Shell 4.1%
  • Nix 4%
  • HTML 3.8%
  • Other 3.9%
Find a file
2026-07-23 03:07:22 +02:00
.vscode Fix VS Code formatter for Go (#139) 2026-05-17 13:05:14 +02:00
build Show VCS metadata on the About page 2026-06-15 17:01:58 +00:00
cmd Simplify e2e fixtures to one per-test server fixture (#322) 2026-07-23 02:52:17 +02:00
convert Centralize image naming (#303) 2026-07-14 03:01:52 +02:00
dev-scripts Make Go test script options strict (#318) 2026-07-19 14:34:02 +02:00
docs/design Make permissions into a table (#223) 2026-06-19 18:40:13 +02:00
e2e Explain the seed DB better in e2e tests (#325) 2026-07-23 03:07:22 +02:00
handlers Share upload persistence finalization (#321) 2026-07-19 14:41:14 +02:00
images Centralize image naming (#303) 2026-07-14 03:01:52 +02:00
importers Centralize image naming (#303) 2026-07-14 03:01:52 +02:00
little_moments Centralize image naming (#303) 2026-07-14 03:01:52 +02:00
magiclogin Centralize image naming (#303) 2026-07-14 03:01:52 +02:00
mediastore Move media writer interfaces to consumers (#302) 2026-07-13 18:19:43 +02:00
random Switch to partial implementation of magic link login (#167) 2026-06-06 18:06:38 +02:00
ratelimit Switch rate limiter to be per-IPv4 and per-email (#180) 2026-06-13 04:18:38 +02:00
s3 Move media path mapping into writers (#283) 2026-07-13 02:02:41 +02:00
s3config Make callers build S3 media paths (#253) 2026-06-21 20:19:17 +02:00
store Simplify e2e fixtures to one per-test server fixture (#322) 2026-07-23 02:52:17 +02:00
testdata/tinybeans-export Add test animated photo (GIF) to tinybeans-export testdata (#97) 2026-03-29 00:17:50 +01:00
uploads Centralize image naming (#303) 2026-07-14 03:01:52 +02:00
.air.toml Watch JavaScript files during local development 2026-07-17 15:23:58 +00:00
.env.example Add an env var for litestream DB path (#187) 2026-06-13 21:03:55 +02:00
.envrc Add initial design doc (#1) 2026-03-06 18:48:29 +01:00
.gitignore Switch JavaScript tooling to pnpm (#161) 2026-06-04 14:38:57 +02:00
.prettierignore Ignore reference directory in frontend checks (#127) 2026-05-03 14:06:22 +02:00
.prettierrc Bootstrap Go app from go-app-starter template (#3) 2026-03-21 17:02:35 +01:00
.sqlfluffignore Ignore reference directory in sqlfluff (#129) 2026-05-03 14:06:33 +02:00
AGENTS.md Update AGENTS.md to include details about build-all-flake-targets (#315) 2026-07-18 01:16:25 +02:00
CLAUDE.md Bootstrap Go app from go-app-starter template (#3) 2026-03-21 17:02:35 +01:00
CONTRIBUTING.md Add license and contributing guidelines (#4) 2026-03-21 16:44:42 +01:00
docker-entrypoint Exec docker entrypoint foreground processes (#204) 2026-06-17 02:15:32 +02:00
eslint.config.js Lint inline template scripts (#320) 2026-07-19 14:28:10 +02:00
flake.lock Use separate nixpkgs input for ffmpeg (#292) 2026-07-13 16:22:35 +02:00
flake.nix Reformat the e2e test part of flake.nix (#324) 2026-07-23 03:04:44 +02:00
fly.toml Deploy to Fly.io with a Nix-built image instead of a Dockerfile (#254) 2026-06-22 21:13:07 +02:00
go.mod Add authentication using a shared secret (#131) 2026-05-17 13:22:26 +02:00
go.sum Add authentication using a shared secret (#131) 2026-05-17 13:22:26 +02:00
LICENSE.md Add license and contributing guidelines (#4) 2026-03-21 16:44:42 +01:00
litestream.yml Add an env var for litestream DB path (#187) 2026-06-13 21:03:55 +02:00
nix-ci.nix Deploy to Fly.io with a Nix-built image instead of a Dockerfile (#254) 2026-06-22 21:13:07 +02:00
package.json Lint inline template scripts (#320) 2026-07-19 14:28:10 +02:00
playwright.config.ts Rename auth service session manager mock (#157) 2026-06-01 14:17:55 +02:00
pnpm-lock.yaml Lint inline template scripts (#320) 2026-07-19 14:28:10 +02:00
README.md Fix milestone 6 formatting (#312) 2026-07-15 16:36:45 +02:00

Little Moments

NixCI

A minimalist and self-hostable web app for sharing photos and videos with close friends and family.

Status

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.