1.3 KiB
1.3 KiB
MirrorMatch Architecture (MVP)
Goals
- Invite-only groups.
- Create a Set with 2–10 photos and 2–4 names (Options).
- Users can upload photos and set:
- the correct Option (secret until reveal)
- points (1–10)
- Only other users (not the uploader of that photo) can guess for points.
- No reveal until:
- an admin/uploader triggers reveal, and/or
- auto-reveal when everyone in the Group has finished guessing (configurable).
Components
- Next.js app: renders UI + server actions for all privileged operations.
- Postgres: source of truth (users/groups/sets/guesses).
- MinIO (S3): stores image objects; app stores only
storageKey. - Auth.js (NextAuth): email magic links + optional OAuth.
Security / privacy model
- All pages require login.
- A user can only read/write data for Groups they belong to.
- Image access is via short-lived presigned URLs generated server-side for authorized users.
- Invite tokens are hashed in the database.
Deployment shape (Proxmox)
- Run the app as a Docker container behind your reverse proxy.
- Run Postgres + MinIO as Docker containers (or managed separately if you already have them).
- Configure SMTP env vars to your email server for:
- magic link auth
- invite emails