38 lines
1.3 KiB
Markdown
38 lines
1.3 KiB
Markdown
# 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
|
||
|
||
|