stadtwerke/innungsapp/README.md

159 lines
3.8 KiB
Markdown

# InnungsApp
Die digitale Plattform für Innungen — News, Mitgliederverzeichnis, Termine und Lehrlingsbörse.
## Stack
| Schicht | Technologie |
|---|---|
| **Monorepo** | pnpm Workspaces + Turborepo |
| **Mobile App** | Expo (React Native) + Expo Router |
| **Admin Dashboard** | Next.js 15 (App Router) |
| **API** | tRPC v11 |
| **Auth** | better-auth (Magic Links) |
| **Datenbank** | PostgreSQL + Prisma ORM |
| **Styling Mobile** | NativeWind v4 (Tailwind CSS) |
| **Styling Admin** | Tailwind CSS |
| **State Management** | Zustand (Mobile) + React Query (beide Apps) |
## Projekt-Struktur
```
innungsapp/
├── apps/
│ ├── mobile/ # Expo React Native App (iOS + Android)
│ └── admin/ # Next.js Admin Dashboard
├── packages/
│ └── shared/ # TypeScript-Typen + Prisma Client
└── ...
```
## Setup
### Voraussetzungen
- Node.js >= 20
- pnpm >= 9
- PostgreSQL-Datenbank
- SMTP-Server (für Magic Links)
### 1. Abhängigkeiten installieren
```bash
pnpm install
```
### 2. Umgebungsvariablen
```bash
cp .env.example apps/admin/.env.local
# .env.local befüllen (DATABASE_URL, BETTER_AUTH_SECRET, SMTP_*)
```
### 3. Datenbank einrichten
```bash
# Prisma Client generieren
pnpm db:generate
# Migrationen anwenden
pnpm db:migrate
# Demo-Daten einspielen (optional)
pnpm db:seed
```
### 4. Entwicklung starten
```bash
# Admin Dashboard (http://localhost:3000)
pnpm --filter @innungsapp/admin dev
# Mobile App (Expo DevTools)
pnpm --filter @innungsapp/mobile dev
```
Oder alles parallel:
```bash
pnpm dev
```
## Datenbank-Schema
Das Schema befindet sich in `packages/shared/prisma/schema.prisma`.
Wichtige Tabellen:
- `organizations` — Innungen (Multi-Tenancy)
- `members` — Mitglieder (verknüpft mit Auth-User nach Einladung)
- `user_roles` — Berechtigungen (admin | member)
- `news`, `news_reads`, `news_attachments` — News-System
- `termine`, `termin_anmeldungen` — Terminverwaltung
- `stellen` — Lehrlingsbörse (öffentlich lesbar)
## Auth-Flow
1. **Admin einrichten:** Seed-Daten oder manuell in der DB
2. **Mitglied einladen:** Admin erstellt Mitglied → "Einladung senden" → Magic Link per E-Mail
3. **Mitglied loggt ein:** Magic Link → Session → App-Zugang
## API (tRPC)
Alle API-Endpunkte sind typsicher über tRPC definiert:
- `organizations.*` — Org-Einstellungen, Stats, AVV
- `members.*` — CRUD, Einladungen
- `news.*` — CRUD, Lesestatus, Push-Benachrichtigungen
- `termine.*` — CRUD, Anmeldungen
- `stellen.*` — Public + Auth-geschützte Endpunkte
## Deployment
### Admin (Vercel)
```bash
# Umgebungsvariablen in Vercel setzen:
# DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL, SMTP_*
# Deploy
vercel --cwd apps/admin
```
### Mobile (EAS Build)
```bash
cd apps/mobile
eas build --platform all --profile production
eas submit --platform all
```
## DSGVO / AVV
- AVV-Akzeptanz in Admin → Einstellungen (Pflichtfeld vor Go-Live)
- Alle personenbezogenen Daten in EU-Region (Datenbankserver in Deutschland empfohlen)
- Keine Daten an Dritte außer Expo Push API (anonymisierte Token)
## Roadmap
Siehe `innung-app-mvp.md` für die vollständige Roadmap.
## Apps starten (Schnellstart)
Um die Anwendungen lokal zu starten, öffne ein Terminal im Hauptverzeichnis (`innungsapp/`) und nutze folgende Befehle:
**Admin Dashboard starten:**
```bash
pnpm --filter @innungsapp/admin dev
```
Das Dashboard ist im Browser unter [http://localhost:3000](http://localhost:3000) erreichbar.
**Mobile App starten:**
```bash
pnpm --filter @innungsapp/mobile dev
```
Dies startet den Expo-Server. Scanne den QR-Code mit der **Expo Go App** auf deinem Smartphone oder drücke `a` (für den Android Emulator) bzw. `i` (für den iOS Simulator) im Terminal.
**Beides gleichzeitig starten:**
```bash
pnpm dev
```