feat: add WannPassts booking app with Go backend and Vue frontend

Initial project setup for a privacy-focused, self-hosted scheduling app:

- Go backend with JWT auth, SQLite storage, and chi router
- Calendar integrations via Google OAuth (FreeBusy), CalDAV, and ICS links
- Public booking pages with configurable slots and booking requests
- AES-256-GCM encryption for stored provider tokens
- Vue 3 + TypeScript frontend with Vite, Pinia, and Vue Router
- Docs, .gitignore, and .env.example for local development
This commit is contained in:
Tronax 2026-08-25 18:50:28 +02:00
commit cb30223fd4
Signed by: Tronax
SSH key fingerprint: SHA256:2pKKXDZucWvaF/GzXNz0FY53EAO1YDLN80bqS+TTz/o
47 changed files with 6599 additions and 0 deletions

33
backend/.env.example Normal file
View file

@ -0,0 +1,33 @@
# ─── WannPassts Backend Konfiguration ────────────────────────────────────────
# Diese Datei nach backend/.env kopieren und anpassen.
# HTTP-Port des Backends
PORT=8080
# SQLite-Datenbankdatei (relativ zum backend-Verzeichnis)
DB_PATH=wannpassts.db
# Öffentliche URL des Backends (wichtig für den Google-OAuth-Redirect!)
APP_URL=http://localhost:8080
# URL des Frontends (dev: Vite, prod: gleiche Origin wie StaticDir)
FRONTEND_URL=http://localhost:5173
# Statische Secrets in Produktion zwingend setzen (z. B. `openssl rand -hex 32`)
# JWT_SECRET sichert Logins, ENCRYPTION_KEY verschlüsselt gespeicherte Kalender-Tokens.
JWT_SECRET=
ENCRYPTION_KEY=
# ─── Google Kalender (OAuth) ─────────────────────────────────────────────────
# 1. https://console.cloud.google.com → Projekt anlegen
# 2. APIs & Services → „Google Calendar API“ aktivieren
# 3. OAuth-Zustimmungsbildschirm: External, Scope calendar.readonly
# 4. Credentials → OAuth-Client-ID (Webanwendung)
# Autorisierte Redirect-URI: {APP_URL}/api/calendars/google/callback
# (lokal also http://localhost:8080/api/calendars/google/callback)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# ─── Optional: Frontend-Build direkt ausliefern (Produktion) ────────────────
# cd frontend && npm run build → STATIC_DIR=../frontend/dist
STATIC_DIR=