5d2630a02f03dd70c963939e8c6511e73e1f2ddf
Vereinskalender
State-of-the-art Kalenderapp fuer Vereine mit Admin-Freigaben, persoenlichen Kalenderansichten und iCal-Export. Die App basiert auf Next.js (App Router), Prisma und NextAuth (Credentials).
Features
- Admins koennen Termine sofort freigeben oder Vorschlaege bestaetigen/ablehnen.
- Mitglieder schlagen Termine vor; Freigaben laufen ueber das Admin-Panel.
- Mehrere Kalenderansichten (Monat, Woche, Liste) mit FullCalendar.
- Eigene Ansichten mit iCal-Abonnement fuer externe Apps (iOS/Android).
Tech-Stack
- Frontend: Next.js 14 (App Router), React 18, Tailwind CSS, FullCalendar
- Backend: Next.js Route Handlers, Prisma ORM, SQLite
- Auth: NextAuth (Credentials + Prisma Adapter)
- Export: iCal via
ical-generator
Projektstruktur
app/- Routen, Layouts und Seitencomponents/- UI-Komponenten (Kalender, Admin-Panel, View-Manager)app/api/- API-Routen (Auth, Events, Views, iCal)prisma/- Schema und Migrationslib/- Prisma Client, Auth-Helfer
Lokale Entwicklung
npm install
cp .env.example .env
npm run prisma:migrate
npm run dev
Open http://localhost:3000.
Konfiguration
In .env (lokal) bzw. per Umgebungsvariablen (Docker/Prod):
DATABASE_URL="file:./dev.db"
NEXTAUTH_SECRET="replace-with-strong-secret"
NEXTAUTH_URL="http://localhost:3000"
ADMIN_EMAILS="admin@example.com"
Admin-Setup
ADMIN_EMAILS (kommagetrennt) steuert, welche Accounts beim Signup als Admin markiert werden.
Wichtige Befehle
npm run dev- lokale Entwicklungnpm run build- Production Buildnpm run start- Server starten (Production)npm run prisma:migrate- DB Migrationen fuer SQLite (Dev)npm run prisma:deploy- Schema push (Container-Start)npm run prisma:studio- Prisma Studionpm run copy:fullcalendar-css- FullCalendar CSS nachpublic/vendor/fullcalendar/kopieren
APIs (kurz)
POST /api/register- RegistrierungGET /api/events- Events (Admins sehen alles, User nur eigene + freigegebene)POST /api/events- Termin vorschlagen/anlegenPATCH /api/events/:id- Freigeben/Ablehnen (Admin)GET /api/views- Eigene AnsichtenPOST /api/views- Ansicht erstellenPOST /api/views/:id/items- Termin zur AnsichtDELETE /api/views/:id/items- Termin entfernenGET /api/ical/:token- iCal Feed der Ansicht
iCal-Abonnement
Unter "Meine Ansichten" wird fuer jede Ansicht eine iCal-URL erzeugt. Diese kann in Kalender-Apps (iOS/Android) abonniert werden.
Docker
cp .env.example .env
docker compose up --build
Wichtig fuer persistente Logins:
NEXTAUTH_SECRETin.envfix setzen (nicht bei jedem Build wechseln).- Die SQLite-DB liegt im
data/-Volume des Containers und bleibt erhalten.
Schnellere Builds (Best Practices)
package-lock.jsoncommitten und im Dockerfilenpm cinutzen (bereits vorbereitet).- BuildKit-Cache nutzen (im Dockerfile aktiv, benoetigt Docker BuildKit).
- Fuer schnelle lokale Iteration:
docker compose -f docker-compose.dev.yml up --build.
Sicherheitshinweise
- Keine Secrets committen;
.envist in.dockerignore. - Fuer Prod echte Secrets und eine externe DB nutzen.
Description
Languages
TypeScript
95.3%
CSS
3.1%
Shell
1.2%
Dockerfile
0.3%