Auch verfügbar in: EN English

Entwicklung

Inhalt

ITSWEBER Play ist ein pnpm-Monorepo mit mehreren Apps und Paketen. Dieser Leitfaden beschreibt den Einstieg in die lokale Entwicklungsumgebung.


Voraussetzungen

Werkzeug Mindestversion Hinweis
Node.js 22 LTS Empfohlen: aktuelle LTS-Version
pnpm 9.x Über Corepack installiert, nicht separat
Docker aktuelle Version Docker Desktop oder Docker Engine, eine Mindestversion nennt das Repo nicht
Docker Compose v2 Als Plugin (docker compose)
Git 2.x

pnpm-Hinweis

pnpm wird über Corepack verwaltet, das in Node.js 22 enthalten ist. Kein separater pnpm-Install nötig:

corepack enable
pnpm --version   # Bestätigt die aktive Version

Auf Windows ist pnpm nach corepack enable direkt im PATH verfügbar. Alternativ kann pnpm explizit aufgerufen werden:

node "C:/Program Files/nodejs/node_modules/corepack/dist/pnpm.js" install

Setup


git clone https://github.com/ITSWEBER-OFFICIAL/itsweber-play
cd itsweber-play


corepack enable


pnpm install


cp .env.example .env



docker compose -f docker-compose.dev.yml up -d play-postgres play-redis play-minio


pnpm --filter @play/db migrate:dev


pnpm dev

Nach dem Start sind die Dienste erreichbar unter:


Projekt-Struktur

Verzeichnis App/Paket Technologie Dev-Port
apps/web Web-Frontend Next.js 15 (App Router, RSC) 3000
apps/api Backend-API Fastify + tRPC + Better Auth 4000
apps/worker Video-Worker BullMQ + FFmpeg + yt-dlp — (Hintergrund)
apps/remotion Demo-Rendering Remotion — (Port im Repo nicht festgelegt)
packages/db Datenbank-Client Prisma Schema + Client —
packages/theme Theme-System 6-Ebenen-Token-System —
packages/shared Gemeinsame Typen TypeScript Enums/Typen —
packages/storage Speicher-Client MinIO-Client-Wrapper —
docker/all-in-one Docker-Image Dockerfile + s6-overlay + Nginx —

Nützliche Befehle


pnpm dev


pnpm --filter @play/web dev
pnpm --filter @play/api dev


pnpm --filter @play/api exec tsc --noEmit


pnpm typecheck


pnpm --filter @play/db studio


pnpm --filter @play/db migrate:dev --name beschreibung


pnpm --filter @play/db exec prisma generate


docker compose -f docker-compose.dev.yml logs -f


docker compose -f docker-compose.dev.yml down


pnpm test


pnpm lint

Commit-Konventionen

ITSWEBER Play verwendet Conventional Commits:

type(scope): betreff

Erlaubte Typen:

Typ Verwendung
feat Neue Funktion
fix Fehlerbehebung
chore Wartung, Abhängigkeits-Updates, Build-Konfiguration
docs Dokumentationsänderungen
refactor Code-Umstrukturierung ohne Funktionsänderung
style Formatierung ohne Funktionsänderung
test Tests hinzufügen oder anpassen
perf Performance-Verbesserungen

Scopes sind optional und nicht fest vorgegeben, im Repo kommen zum Beispiel studio oder channels vor.

Beispiele:

feat(api): add yt-dlp import endpoint
fix(web): show correct upload progress on retry
chore(deps): update prisma to 6.2.1
docs(wiki): add German theming documentation

Beitragen

Beiträge sind willkommen. Bitte vor größeren Änderungen ein Issue eröffnen, um den Scope abzusprechen.

  • Informationen zu PR-Richtlinien und Code-Standards: CONTRIBUTING.md im Repository-Root
  • Lizenz: AGPL-3.0 — alle Beiträge werden unter denselben Bedingungen lizenziert
  • Attribution: © Benjamin Weber · ITSWEBER bleibt unveränderlich

Scope-Einschränkungen:

  • Keine privaten Informationen (IPs, interne Pfade, persönliche Daten) im öffentlichen Repository
  • Kein Branding-Override in Code oder Dokumentation (Instanz-Branding erfolgt via NEXT_PUBLIC_*-ENV)

Architektur-Hinweise

Wichtige Konventionen für Beitragende:

  • Icons: Feather-Style SVGs über <Icon name="..." /> — keine Emoji, keine anderen Icon-Libraries
  • Fehler-UX: Validation-Errors immer als lesbarer Deutsch-Text im Toast; niemals rohe Zod-Objekte
  • Prisma-Migrations: Bestehende Migrationsordner nicht umbenennen. Sie folgen dem Muster JJJJMMTTHHMMSS_name, z. B. 20260417213012_session_a_schema_extensions
  • s6-overlay-Abhängigkeiten: init-dirs → postgres-init → postgres → migrate; api und worker warten auf migrate, minio und redis; web und nginx hängen nur an init-dirs
  • Vollständige Architekturdoku: Architektur