klasslistan
0 forks
Digital klasslista för föräldrar. Next.js, PostgreSQL, Better Auth. Self-hosted.
id: 42
125,214 Lines
- JSON 74.9%
- TypeScript-JSX 11.5%
- Yaml 6.4%
- TypeScript 5.9%
- Markdown 0.5%
- CSS 0.4%
- SQL 0.3%
- Python 0.1%
- JavaScript 0.1%
- Shell 0%
- XML 0%
Klasslistan
En frivillig digital klasslista för föräldrar och vårdnadshavare i svenska förskolor och skolor.
Om projektet
Klasslistan gör det enkelt för föräldrar att hitta och kontakta andra föräldrar i samma grupp. Användare registrerar sig själva, lägger till sina barn och väljer vilka kontaktuppgifter de vill dela.
Huvudfunktioner:
- Klasslistor med kontaktuppgifter
- QR-kod/länk för att bjuda in andra föräldrar
- Valfria aktiviteter (kalas, lekdejter)
- Push-notiser (valfritt)
- Stöd för ljust/mörkt tema
Tech Stack
- Frontend/Backend: Next.js 15 (App Router)
- Språk: TypeScript
- Styling: Tailwind CSS v4, shadcn/ui
- Databas: PostgreSQL 16
- ORM: Drizzle
- Auth: Better Auth
- Deploy: Docker + Traefik
Utveckling
Förutsättningar
- Node.js 22+
- PostgreSQL 16 (eller Docker)
Kom igång
# Installera dependencies
npm install
# Kopiera miljövariabler
cp .env.example .env.local
# Starta PostgreSQL (om du använder Docker)
docker compose -f compose.dev.yaml up -d postgres
# Kör databasmigrationer
npm run db:migrate
# Starta utvecklingsservern
npm run dev
Öppna http://localhost:3000.
Skript
| Kommando | Beskrivning |
|---|---|
npm run dev | Starta utvecklingsserver |
npm run build | Bygg för produktion |
npm run start | Starta produktionsserver |
npm run typecheck | Typkontroll |
npm run db:generate | Generera migrationsfiler |
npm run db:migrate | Kör migrationer |
npm run db:studio | Öppna Drizzle Studio |
Miljövariabler
Obligatoriska
DATABASE_URL=postgresql://user:pass@localhost:5432/klasslistan
BETTER_AUTH_SECRET=<generera med openssl rand -base64 32>
APP_URL=http://localhost:3000
Valfria
# E-post (för verifiering, lösenordsåterställning)
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM=
# Feature flags
NEXT_PUBLIC_FEATURE_ACTIVITIES=true # Aktiviteter (kalas, lekdejter)
NEXT_PUBLIC_FEATURE_PUSH=true # Push-notiser
# Autentisering
REQUIRE_EMAIL_VERIFICATION=false
ENABLE_MAGIC_LINK=true
# Push-notiser (VAPID)
VAPID_PRIVATE_KEY=
NEXT_PUBLIC_VAPID_PUBLIC_KEY=
VAPID_SUBJECT=mailto:din@email.se
# Skolverkets API
SCHOOL_DATA_API_URL=
Produktion
Docker Build
docker build \
--build-arg NEXT_PUBLIC_APP_URL=https://klasslistan.se \
-t klasslistan .
Deploy med Docker Compose
# På produktionsservern
cd /srv/docker-root/projects/klasslistan
cp .env.example .env
# Redigera .env med produktionsvärden
IMAGE_TAG=latest docker compose --env-file .env up -d
Se compose.prod.yaml för fullständig konfiguration inkl. Traefik-labels.
Databasmigrationer
Migrationer körs automatiskt vid containerstart via scripts/start.sh.
Backup
PostgreSQL-data lagras i Docker-volym postgres_data. Säkerhetskopiera regelbundet:
docker exec klasslistan-postgres pg_dump -U klasslistan klasslistan > backup.sql
CI/CD
Projektet använder OneDev för CI/CD. Se .onedev-buildspec.yml.
Jobb:
- Build — lint, typecheck, security audit, docker build/push
- Deploy — automatisk deploy till produktion vid push till main
- Security Auto-Patch — schemalagd (söndagar 03:00) npm audit fix
- Rollback — manuell rollback till specifik image-tag
Build Retention
Konfigurerat i OneDev UI (Project Settings → Build):
- successful: 14
- failed: 2
- cancelled: 0
Projektstruktur
├── app/ # Next.js App Router
│ ├── (auth)/ # Inloggning, registrering
│ ├── (protected)/ # Skyddade sidor (kräver inloggning)
│ ├── (public)/ # Publika sidor
│ └── api/ # API-routes
├── components/ # React-komponenter
│ └── ui/ # shadcn/ui-komponenter
├── lib/ # Utilities och konfiguration
│ ├── auth/ # Better Auth setup
│ ├── db/ # Drizzle schema och klient
│ ├── email/ # E-postutskick
│ └── school-data/ # Skolverket-integration
├── drizzle/ # Databasmigrationer
├── public/ # Statiska filer
├── scripts/ # Deploy-skript
└── CLAUDE.md # AI-assistentinstruktioner
Licens
Proprietär. Kontakta Rockhost för frågor.