commit 3c6ad58863821fe9d2b205df2d4eb0ae7417078a Author: Sam Geyskens Date: Thu May 14 23:39:40 2026 +0200 Add README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..c99b036 --- /dev/null +++ b/README.md @@ -0,0 +1,151 @@ +# πŸ’€ SlaapKampioen + +Slaaptracker voor jou en je Discord vrienden. Log elke nacht je slaap, bekijk wie het meeste slaapt in verschillende periodes, en vergelijk optioneel je slaapfases (diepe slaap, REM, lichte slaap). + +## Features + +- πŸ” Login via Discord +- βž• Slaap loggen β€” bedtijd + wektijd invullen, totaal wordt automatisch berekend +- 🧠 Optionele slaapfases (diepe slaap, lichte slaap, REM, wakker momenten) +- πŸ† Klassement per periode: Gisternacht / Deze week / Deze maand / Dit jaar +- πŸ“… Persoonlijke geschiedenis met grafiekje en fase-visualisatie +- 🎨 Dark mode, mobielvriendelijk +- 🐳 Docker Compose + nginx ready + +--- + +## 1. Discord OAuth app aanmaken + +1. Ga naar https://discord.com/developers/applications +2. Klik **New Application** β†’ geef het een naam (bv. "SlaapKampioen") +3. Ga naar **OAuth2** β†’ **General** +4. Kopieer **Client ID** en **Client Secret** +5. Voeg onder **Redirects** toe: + ``` + https://slaap.jouwdomein.be/api/auth/callback/discord + ``` + *(of `http://localhost:3000/api/auth/callback/discord` voor lokaal testen)* + +--- + +## 2. Configuratie + +```bash +cp .env.example .env +``` + +| Variabele | Waarde | +|-----------|--------| +| `POSTGRES_PASSWORD` | Sterk wachtwoord voor de DB | +| `NEXTAUTH_URL` | Jouw publieke URL, bv. `https://slaap.jouwdomein.be` | +| `NEXTAUTH_SECRET` | Output van `openssl rand -base64 32` | +| `DISCORD_CLIENT_ID` | Van stap 1 | +| `DISCORD_CLIENT_SECRET` | Van stap 1 | + +--- + +## 3. Docker Compose starten + +De app luistert op `127.0.0.1:3010` β€” alleen bereikbaar via nginx. + +```bash +docker compose up -d +docker compose logs -f app +``` + +Bij de eerste start worden migrations automatisch uitgevoerd: +``` +πŸ”„ Running database migrations... +πŸš€ Starting SlaapKampioen... +``` + +--- + +## 4. Nginx instellen + +Zie `nginx.example.conf`. Pas de domeinnaam aan en kopieer naar `/etc/nginx/sites-available/`: + +```bash +sudo cp nginx.example.conf /etc/nginx/sites-available/slaapkampioen +sudo ln -s /etc/nginx/sites-available/slaapkampioen /etc/nginx/sites-enabled/ +sudo nginx -t && sudo systemctl reload nginx +``` + +SSL via certbot: +```bash +sudo certbot --nginx -d slaap.jouwdomein.be +``` + +--- + +## 5. Gitea setup + +```bash +git init +git remote add origin https://jouw-gitea.be/username/slaapkampioen.git +git add . +git commit -m "feat: initial SlaapKampioen" +git push -u origin main +``` + +### Gitea Actions CI/CD (optioneel) + +Het workflow bestand staat al in `.gitea/workflows/deploy.yml`. +Voeg deze secrets toe in je Gitea repo settings: + +| Secret | Waarde | +|--------|--------| +| `DEPLOY_HOST` | IP of hostnaam van je server | +| `DEPLOY_USER` | SSH gebruiker | +| `DEPLOY_KEY` | PrivΓ© SSH sleutel | + +Zorg dat de repo op de server staat in `/opt/slaapkampioen` (of pas het pad aan in het workflow bestand). + +--- + +## 6. Lokaal ontwikkelen + +```bash +npm install + +# Lokale postgres +docker run -d --name sleep-pg \ + -e POSTGRES_DB=sleep \ + -e POSTGRES_USER=sleep \ + -e POSTGRES_PASSWORD=dev \ + -p 5432:5432 \ + postgres:16-alpine + +# .env voor lokaal: +# DATABASE_URL=postgresql://sleep:dev@localhost:5432/sleep +# NEXTAUTH_URL=http://localhost:3000 +# NEXTAUTH_SECRET=$(openssl rand -base64 32) +# DISCORD_CLIENT_ID=... +# DISCORD_CLIENT_SECRET=... + +npx prisma migrate dev --name init +npm run dev +``` + +--- + +## Slaapfase referentiewaarden + +| Fase | Normaal bereik | +|------|---------------| +| Diepe slaap | 13–25% van totaal | +| Lichte slaap | 45–65% van totaal | +| REM | 15–25% van totaal | +| Wakker | < 5% van totaal | + +De app berekent automatisch of je waarden "Normaal", "Lang" of "Kort" zijn β€” zoals de OnePlus Health app. + +--- + +## Tech stack + +- **Next.js 14** (App Router) +- **NextAuth v4** (Discord OAuth) +- **Prisma** + **PostgreSQL** +- **Tailwind CSS** +- **Docker Compose** + **nginx**