Zum Inhalt springen
Zurück zu ausgewählten Projekten
Live im Produktivbetrieb
crwsync-Logo

crwsync

Kollaborativer Echtzeit-Arbeitsbereich, der Kanban-Aufgabenboards, Live-Teamchat und Dateispeicher in einem hochverfügbaren, verteilten Monorepo vereint.

crwsync-Arbeitsbereich-Dashboard

Eine verteilte, kollaborative Echtzeit-Arbeitsplattform, entwickelt, um den ständigen Kontextwechsel in Unternehmen zu beseitigen. Indem crwsync Kanban-Aufgabenverfolgung, latenzarme Teamkommunikation und zentralen Dateispeicher in einem entkoppelten Turborepo-Monorepo vereint, synchronisiert es den Zustand augenblicklich über Organisationen und verteilte Umgebungen hinweg — mit einer globalen Cmd+K-Suche, die Aufgaben, Nachrichten und Dateien durchsucht.

// Architektur

Verteiltes Turborepo

3 entkoppelte Apps (@crwsync/backend, @crwsync/dash, @crwsync/web).

// Echtzeit-Engine

Socket.IO + Redis 7

Horizontale WebSocket-Skalierung mit dem Redis-Pub/Sub-Adapter.

// Backend & Datenbank

NestJS 11 + Prisma 7

PostgreSQL-16-Persistenz mit RBAC-Guards auf Arbeitsbereichsebene.

// Infrastruktur

Docker Swarm

Containerisierte Multi-Service-Orchestrierung mit Health Checks.

// überblick

Was crwsync ist

crwsync verbindet Aufgabenboards im Kanban-Stil mit Live-Teamnachrichten in einer einzigen Oberfläche: Ein Team zieht eine Karte zwischen Spalten und sieht im selben Fenster die Chatnachricht eines Kollegen in Echtzeit eintreffen — mit geteilten Dateien, Aufgabenkommentaren und Checklisten ebenso griffbereit. Es ist als Turborepo-Monorepo auf Enterprise-Niveau gebaut — eine NestJS-API, ein Next.js-Dashboard und ein öffentliches Webportal — in Container entkoppelt und für Hochverfügbarkeit orchestriert.

Ein zweistufiges Rollenverwaltungssystem passt den Arbeitsbereich an die tatsächliche Hierarchie und die Zugriffsanforderungen eines Teams an, statt auf ein einziges, flaches Berechtigungsmodell zu setzen.

// 01. Strategischer Kontext

Warum crwsync so gebaut ist

01 // Problem

Zersplitterte Tools und ständiger Kontextwechsel

Moderne Entwicklungsteams wechseln täglich zwischen 9 und 15 verschiedenen Anwendungen. Das Hin- und Herspringen zwischen isolierten Kanban-Aufgabenboards, Issue-Trackern und separaten Chat-Kanälen zerstreut die Konzentration, führt zu Datenabweichungen und erzeugt Kommunikationsreibung, die das Arbeitstempo des Teams bremst.

Entscheidende Dynamik: 9–15 zersplitterte Apps pro Team
02 // Lösung

Aufgabenboards und Live-Messaging an einem Ort

crwsync vereint die Umsetzung, indem es Kanban-Aufgabenboards mit Drag-and-drop direkt mit Echtzeit-Raum- und Direktnachrichten in einer einzigen Ansicht verbindet. Auf einem modularen Turborepo-Monorepo aufgebaut, kombiniert es einen optimistischen UI-Zustand mit WebSocket-Broadcasts und rollenbasierten Berechtigungen auf Arbeitsbereichsebene.

Entscheidende Dynamik: Kollaborative Oberfläche in einer Ansicht
03 // Ergebnis

Latenz unter 100 ms und entkoppelte Architektur

Indem synchrone PostgreSQL-Datenbanktransaktionen über Redis Pub/Sub von flüchtigen Live-Broadcasts getrennt werden, erreicht das System eine Synchronisationslatenz unter 100 ms über verteilte Clients hinweg und lagert aufwendige Hintergrundlasten wie E-Mails an asynchrone BullMQ-Job-Queues aus.

Entscheidende Dynamik: Ereignisweitergabe unter 100 ms
// architektonischer Grundsatz
„Indem crwsync Live-WebSocket-Broadcasts von persistenten relationalen Datenbanktransaktionen entkoppelt, liefert es eine Synchronisationslatenz unter 100 ms und bewahrt zugleich strikte ACID-Garantien.“
— Architektonischer Grundsatz
// 02. Produkttour

crwsync in Aktion

Ein kundenorientierter Rundgang durch jedes Modul — was es leistet und wie es sich anfühlt, es zu nutzen

Globale Module

Drei arbeitsbereichsweite Ansichten, erreichbar über die obere Navigationsleiste

Screenshot: Start-Dashboard

Start-Dashboard

Der Einstiegspunkt des Arbeitsbereichs — Feed der letzten Aktivitäten, angeheftete Projekte, offene Aufgaben und eine Live-Momentaufnahme der Team-Präsenz auf einen Blick.

⌘KGlobale Omni-Suche

Globale Omni-Suche

Drücken Sie an beliebiger Stelle im Arbeitsbereich Cmd+K (oder Strg+K), um ein einheitliches Suchfenster zu öffnen. Aufgaben, Nachrichten, Dateien und Mitglieder — alles an einem Ort durchsuchbar, mit sofortigen unscharfen Treffern schon während der Eingabe.

Screenshot des geöffneten Cmd+K-Omni-Suchfensters von crwsync mit Suchergebnissen aus Aufgaben und Nachrichten
02Aufgabenverwaltung

Aufgabenboard

Ein Kanban-Board mit Drag-and-drop, auf dem Ihr Team Arbeit gemeinsam voranbringt — in Echtzeit. Legen Sie eine Karte in einer neuen Spalte ab, und alle Teammitglieder sehen sie sofort wandern, ganz ohne Neuladen.

  • Spalten per Drag-and-drop: Verschieben Sie Aufgaben mit flüssigem Drag-and-drop zwischen Workflow-Phasen — Umordnungen bleiben sofort bei allen Teammitgliedern erhalten.
  • Aufgaben-Detailpanel: Öffnen Sie jede Aufgabe für eine vollständige Bearbeitungsoberfläche: Rich-Text-Beschreibung, Checklisten mit Fortschritt, Fälligkeitsdaten und Prioritätslabels.
  • Teilaufgaben-Checklisten: Gliedern Sie Arbeit mit Inline-Checklisten in Schritte. Ein Fortschrittsbadge zeigt den Stand schon in der Board-Ansicht auf einen Blick.
  • Kommentare & @Erwähnungen: Kommentar-Threads zu jeder Aufgabe mit @Erwähnungs-Benachrichtigungen, damit der Kontext bei der Arbeit selbst bleibt.
  • Anhänge & Vorschauen: Ziehen Sie Dateien direkt auf eine Aufgabe oder fügen Sie Bilder ein. Vorschaubilder und ein Lightbox-Viewer laden direkt im Detailpanel.
  • Filter, Ansichten & Aktivität: Filtern Sie nach Bearbeiter, Priorität oder Label. Wechseln Sie zwischen Kanban-, Listen- und Tabellenansicht. Jede Änderung wird in einem Aktivitätsverlauf pro Aufgabe protokolliert.
Socket.IO@dnd-kitTanStack QueryTipTapFractional Indexing
03Teamkommunikation

Chatraum

Eine vollwertige Live-Messaging-Ebene in derselben Ansicht wie Ihre Aufgaben. Projektkanäle, Direktnachrichten, Dateifreigabe und Emoji-Reaktionen — alles in unter 100 ms übertragen.

  • Projektkanäle: Jedes Projekt erhält einen eigenen Kanal. Der Kontext bleibt beim Board, nicht in einer separaten App.
  • Direktnachrichten: Private Eins-zu-eins-Unterhaltungen mit jedem Mitglied des Arbeitsbereichs — eigener Posteingang, dieselbe Echtzeit-Zustellung.
  • Tippanzeigen: Sehen Sie, wenn Teammitglieder gerade eine Antwort verfassen — flüchtige Signale, die asynchrone Kommunikation live wirken lassen.
  • Online-Präsenz: Live-Status online/abwesend neben dem Avatar jedes Mitglieds, in der Seitenleiste und in Nachrichten-Threads.
  • Emoji-Reaktionen: Reagieren Sie mit Emoji auf jede Nachricht. Die Zähler aktualisieren sich live für alle im Raum.
  • Datei- & Bildfreigabe: Ziehen Sie Anhänge in jede Nachricht. Bilder öffnen sich in einer Lightbox. Badges für ungelesene Nachrichten und Benachrichtigungen halten das Team auf dem Laufenden.
Redis 7NestJS GatewaySocket.IOPräsenz-EnginePub/Sub
04Dateispeicher

Team-Laufwerk

Eine gemeinsame Dateibibliothek des Arbeitsbereichs neben Ihren Boards und dem Chat — Team-Dateien hochladen, ansehen und ordnen, ohne die App zu verlassen. Auch an Aufgaben und Nachrichten angehängte Dateien liegen hier.

  • Dateibibliothek des Arbeitsbereichs: Jede in den Arbeitsbereich hochgeladene Datei — Aufgabenanhänge, Chat-Medien, eigenständige Uploads — erscheint in einem geordneten Laufwerk.
  • Raster- & Listenansicht: Wechseln Sie zwischen einem visuellen Raster aus Vorschaubildern und einer kompakten Listenansicht mit Metadatenspalten.
  • Upload per Drag-and-drop: Legen Sie Dateien irgendwo im Laufwerkspanel ab, um sie hochzuladen. Fortschrittsanzeigen und sofortige Vorschaubild-Erzeugung nach Abschluss.
  • Vorschau & Download: Klicken Sie auf eine Datei, um ein vollständiges Vorschaufenster mit Bild-Lightbox zu öffnen. Download mit einem Klick.
  • Zugriff auf Arbeitsbereichsebene: Dateien sind privat für den jeweiligen Arbeitsbereich. Rollenbasierter Zugriff stellt sicher, dass nur berechtigte Mitglieder sensible Dateien ansehen oder herunterladen können.
MinIOS3-kompatibelPresigned UploadsCloudflare R2
// 03. Architektur & Topologie

Verteilte Monorepo-Architektur

Entkoppelte Container, orchestriert für Hochverfügbarkeit und latenzarme Synchronisation

topology.ascii
                      [ Client Browser / Mobile Web ]
                                     │
                                     │ HTTPS / WSS (TLS Termination)
                                     ▼
         ┌───────────────────────────────────────────────────────────┐
         │           Reverse Proxy & Edge Ingress (NGINX)            │
         │            Routes *.crwsync.xyz with SSL & Gzip           │
         └──────────────┬─────────────────────────────┬──────────────┘
                        │                             │
        ┌───────────────┴───────────────┐             │
        ▼                             ▼            ▼
    ┌───────────────────────┐   ┌───────────────────────┐   ┌───────────────────────────┐
    │     @crwsync/web      │   │     @crwsync/dash     │   │     @crwsync/backend      │
    │   (Next.js 16 SSR)    │   │   (Next.js 16 SPA)    │   │        (NestJS 11)        │
    │   crwsync.xyz:3000    │   │ dash.crwsync.xyz:3001 │   │    api.crwsync.xyz:4000   │
    │   • Marketing Portal  │   │   • Kanban Viewport   │   │  • REST API Controllers   │
    │   • Auth Redirection  │   │   • Live Chat Panels  │   │  • Socket.IO Gateways     │
    │   • Static Docs/Legal │   │   • Zustand State     │   │  • Dual-Layer RBAC Guards │
    └───────────────────────┘   └───────────┬───────────┘   │  • BullMQ Queue Producers │
                                            │               └─────────────┬─────────────┘
                                            │ REST / WSS Events           │
                                            └─────────────────────────────┘
                                                          │
                           ┌──────────────────────────────┴──────────────────────────────┐
                           │                                                             │
                           ▼                                                           ▼
           ┌───────────────────────────────┐                             ┌───────────────────────────────┐
           │     PostgreSQL Relational     │                             │        Redis 7 In-Memory      │
           │       Database Instance       │                             │      Pub/Sub & Queue Broker   │
           ├───────────────────────────────┤                             ├───────────────────────────────┤
           │ • Prisma 7 ORM Data Modeling  │                             │ • Socket.IO Redis Adapter     │
           │ • Relational Integrity & ACID │                             │ • BullMQ Worker Queue State   │
           │ • Scoped Multi-Tenant Tables  │                             │ • Ephemeral User Presence     │
           │ • Indexed Foreign Keys & DTOs │                             │ • Real-time Typing Streams    │
           └───────────────────────────────┘                             └───────────────────────────────┘
                           ▲                                                           ▲
                           │                                                             │
                           └──────────────────────────────┬──────────────────────────────┘
                                                          │
                                                          ▼
                           ┌─────────────────────────────────────────────────────────────┐
                           │               Docker Swarm Orchestration Engine             │
                           │   • Stack Compose Deployment (`stack.yml`)                  │
                           │   • Isolated Virtual Overlay Network (`crwsync_net`)        │
                           │   • Automated Container Health Checks & Zero-Downtime Rolls │
                           │   • Memory Hard Limits & Restart Policies (512MB/service)   │
                           └─────────────────────────────────────────────────────────────┘

Matrix aus technischen Entscheidungen und Begründungen

Zentrale architektonische Abwägungen für Stabilität, Entwicklungsgeschwindigkeit und horizontale Skalierbarkeit

Schicht & UmfangTechnologiewahlZentrale Fähigkeiten & Begründung
Build & Entwicklung
Monorepo-Engine
Turborepo + pnpm workspaces

Atomare Commits, geteilte Konfigurationen, gecachte Builds

Ermöglicht einheitliche TypeScript-Konfigurationen, geteilte ESLint-Presets und sofortiges Caching der Task-Pipeline über @crwsync/backend, @crwsync/dash und @crwsync/web hinweg und begrenzt zugleich das Aufblähen der Abhängigkeiten durch strikte Symlink-Isolation.
Kern-API
Server-Framework
NestJS 11 (TypeScript)

Strikt modulare DI, typisierte DTOs, eigene RBAC-Guards

Enterprise-Architektur mit deklarativer Dependency Injection, Eingabebereinigung per class-validator und komponierbaren Ausführungs-Guards, die zweistufiges RBAC sowohl in REST-Controllern als auch in Socket.IO-Gateways durchsetzen.
Frontend
Client-Framework
Next.js 16 + React 19

Server Components, Radix-UI-Primitives, Tailwind CSS v4

Verbindet blitzschnelle, serverseitig gerenderte Landingpages (@crwsync/web) mit einer hochinteraktiven, barrierefreien, zustandsbehafteten clientseitigen Anwendungsshell (@crwsync/dash), optimiert auf UI-Rückmeldung unter 100 ms.
Echtzeit
Echtzeit-Schicht
Socket.IO + Redis 7 Pub/Sub

Horizontale WebSocket-Skalierung über Swarm-Replikate

Trennt flüchtige Echtzeit-Socket-Broadcasts von relationalen Datenbanktransaktionen. Der Redis-Adapter verteilt Raum-Broadcasts ohne Paketverlust auf mehrere NestJS-Replikate.
Hintergrund
Asynchrone Verarbeitung
BullMQ + Redis 7

Entkoppelte transaktionale Job-Queues mit Retry-Backoff

Isoliert aufwendige Hintergrundjobs (Handlebars-E-Mail-Rendering, Versand von Einladungs-Tokens, Erzeugung von Zusammenfassungen) von HTTP-Threads, mit konfigurierbaren exponentiellen Retry-Richtlinien und Dead-Letter-Queues.
Persistenz
Datenbank
PostgreSQL 16 + Prisma 7

@prisma/adapter-pg-Treiber, relationale Integrität

Garantiert strikte ACID-Transaktionen für mandantenfähige Organisationen, Projekte, Boards und Aufgabenspalten. Nutzt den leistungsstarken @prisma/adapter-pg-Treiber mit automatisierten Schema-Migrationen.
Speicher
Objektspeicher
MinIO (Dev) + S3-kompatibel (Prod)

Presigned Uploads, Zugriffssteuerung auf Arbeitsbereichsebene

Versorgt Avatare, Aufgabenanhänge, Chat-Medien und das dedizierte Dateien-Modul des Arbeitsbereichs. Die öffentliche Avatar-Route bleibt offen, während die Datei-Routen des Arbeitsbereichs authentifizierungsgeschützt bleiben, da Anhänge privat für einen Arbeitsbereich sind.
DevOps
Orchestrierung
Docker Swarm

Deklaratives stack.yml, Rolling Updates ohne Ausfallzeit, Speicherlimits

Schlanke Container-Orchestrierung über den nativen Docker-Daemon ohne Kubernetes-Overhead. Bietet isolierte Overlay-Netzwerke, automatische Health Checks, Rolling Deployments ohne Ausfallzeit und 512-MB-RAM-Obergrenzen.
// 02b. Unter der Haube

Gebaut für hochfrequente Zusammenarbeit

Vier Kernfähigkeiten, entkoppelt über Client und Server

// 01 • Zustandssynchronisation & optimistische UI

Echtzeit-Kanban-Engine

Interaktive Aufgaben-Workflows mit Drag-and-drop, Umordnung per Fractional Indexing, optimistischen clientseitigen Mutationen und sofortigem Event-Broadcasting an mehrere Clients.

  • Socket.IO-Broadcast: Mandantenfähige Spalten- und Kartenaktualisierungen werden sofort an aktive Projekträume gesendet.
  • Fractional Indexing: Umordnung von Elementen zwischen Karten in O(1), ohne aufwendige kaskadierende Datenbank-Updates.
  • Optimistische UI: Rollback des Caches von TanStack Query, falls Netzwerkfehler die serverseitige Persistierung unterbrechen.
  • Mehrbenutzer-Anzeigen: Visuelle Präsenzmarker, wenn Teammitglieder Aufgaben in der Spalte ansehen oder bearbeiten.
  • Checklisten & Kommentare: Teilaufgaben-Checklisten mit Fortschrittsbadges und Kommentar-Threads mit @Erwähnungen pro Aufgabe.
  • Filter, Ansichten & Aktivitätsprotokoll: Filter nach Bearbeiter/Priorität/Label, ein Umschalter zwischen Listen- und Tabellenansicht und ein chronologischer Aktivitätsverlauf pro Aufgabe.
  • Socket.IO
  • @dnd-kit
  • TanStack Query
  • TipTap
  • Fractional Indexing
// 02 • WebSocket-Kommunikation

Live-Messaging in Kanälen & Direktnachrichten

Eine persistente, raumbasierte Messaging-Architektur für öffentliche Projektkanäle, aufgabenbezogene Threads und Eins-zu-eins-Direktunterhaltungen.

  • Persistente Socket-Räume: Dynamischer Beitritts-/Austritts-Lebenszyklus, verwaltet pro Projekt und Direktnachrichtenkanal.
  • Redis-Pub/Sub-Schicht: Horizontal skalierbares WebSocket-Messaging über verteilte NestJS-Knoteninstanzen hinweg.
  • Präsenz & Anzeigen: Echtzeit-Statusverfolgung online/abwesend und flüchtige Tippanzeigen.
  • Lesebestätigungen & Badges: Asynchrone Verfolgung ungelesener Nachrichten und sofortige Synchronisation der Client-Benachrichtigungen.
  • Reaktionen & Dateifreigabe: Emoji-Reaktionen mit Live-Zählern, Anhänge per Drag-and-drop mit Lightbox-Vorschau und persistente Benachrichtigungen.
  • Redis 7
  • NestJS Gateway
  • Präsenz-Engine
  • Pub/Sub
  • Emoji-Reaktionen
// 03 • Sicherheit & Autorisierung

Rollenbasierte Zugriffskontrolle im Arbeitsbereich

Ein einziges, streng hierarchisches Rollensystem — Inhaber, Admin, Mitglied, Gast — steuert jede Aktion im Arbeitsbereich von der API-Guard-Schicht bis hinunter zur UI, mit Selbstverwaltung für Beförderung, Herabstufung und Eigentumsübertragung.

  • Hierarchische Rollen: Die Stufen OWNER, ADMIN, MEMBER und GUEST werden pro Arbeitsbereich vergeben und bei jeder Mutation durchgesetzt.
  • NestJS-Guards & Decorators: Deklarative @RequireWorkspaceRoles()-Guards, ausgewertet an jedem REST-Endpunkt und WebSocket-Gateway.
  • Rollenbasierte Steuerung im Frontend: Administrative Steuerelemente wie Mitglied entfernen, Spalte löschen und Projekt löschen werden nur für berechtigte Rollen angezeigt.
  • Einladungs- & Eigentumsübertragungs-Abläufe: Einladungen mit zugewiesener Rolle, Beförderung und Herabstufung von Mitgliedern sowie vollständige Eigentumsübertragung über die Arbeitsbereichs-Einstellungen.
  • NestJS-Guards
  • Arbeitsbereichs-RBAC
  • JWT + HttpOnly Cookies
  • Rollenverwaltung
// 04 • Speicher & Medien

Dateien, Anhänge & Medienspeicher

S3-kompatibler Objektspeicher für ein eigenes Team-Dateilaufwerk, Aufgabenanhänge und Chat-Medien — und damit der Schlussstein, der Aufgaben, Unterhaltungen und Dateien an einem Ort synchronisiert.

  • Presigned Uploads: MinIO in der lokalen Entwicklung, S3-kompatibler Speicher in Produktion, mit Presigned URLs für direkte Client-Uploads.
  • Dateien-Modul des Arbeitsbereichs: Ein eigenes Dateilaufwerk pro Arbeitsbereich mit Raster-/Listenansicht, Vorschauen und Downloads neben Boards und Chat.
  • Aufgaben- & Chat-Anhänge: Uploads per Drag-and-drop an Aufgaben und im Chat, mit Vorschaubildern und einer Bild-Lightbox.
  • Zugriff auf Arbeitsbereichsebene: Datei- und Avatar-Routen sind authentifizierungsgeschützt und auf den Arbeitsbereich begrenzt, anders als der öffentliche Avatar-Endpunkt.
  • MinIO
  • S3-kompatibler Speicher
  • Presigned Uploads
  • Datei-Räume
// 04. Herausforderungen & Hürden

Technische Hürden & Lösungen

Zentrale Hindernisse bei der Orchestrierung hochgradig paralleler Echtzeit-Abläufe

// 01 • Echtzeit-Nebenläufigkeit

Race Conditions & gleichzeitiges Drag-and-drop

Das Hindernis

Das gleichzeitige Umordnen von Aufgaben über mehrere Clients hinweg mit naiver Ganzzahl-Indizierung (1, 2, 3...) löste kaskadierende SQL-Zeilenupdates, Deadlocks und Race Conditions aus, bei denen Karten ihre Position wechselten.

Die Lösung

Es wurde Lexorank-Fractional-String-Indexing in Kombination mit optimistischem Locking über Redis implementiert. Beim Verschieben einer Karte wird der exakte mittlere Rang in O(1) berechnet, ohne Nachbarzeilen zu verändern, und die Updates werden sofort über Socket.IO gesendet.

Auswirkung: Keine Datenbank-Zeilensperren, sofortiger Abgleich der optimistischen UI und konfliktfreie Board-Änderungen durch mehrere Benutzer.

  • Lexorank
  • Redis-Locks
  • Fractional Indexing
  • O(1)-Umordnung
// 02 • Authentifizierung & Sicherheit

Sitzungsisolation über mehrere Domains & WSS-Handshakes

Das Hindernis

Das Monorepo umfasst crwsync.xyz, dash.crwsync.xyz und api.crwsync.xyz. Tokens in localStorage zu speichern setzte die Authentifizierung XSS aus, während Standard-Cookies weder über Subdomains hinweg geteilt noch beim WebSocket-Upgrade geprüft werden konnten.

Die Lösung

Kryptografisch signierte HttpOnly-Sitzungscookies mit SameSite=Lax wurden mit Domain=.crwsync.xyz hinter NGINX-TLS-Terminierung konfiguriert. Die NestJS-WebSocket-Gateways prüfen und validieren das Sitzungscookie während des initialen HTTP-Upgrade-Handshakes.

Auswirkung: Die Token-Exposition gegenüber clientseitigen Skripten wurde beseitigt, nahtloses SSO über Subdomains hinweg wurde ermöglicht und Echtzeit-Socket-Verbindungen wurden abgesichert.

  • HttpOnly-Cookies
  • Domain-Scoping
  • WSS-Handshake
  • XSS-Abwehr
// 03 • DevOps & Infrastruktur

Container-Speichersättigung & Rollouts ohne Ausfallzeit

Das Hindernis

Docker-Images des Monorepos überschritten 1,5 GB, mit Speicherspitzen bei SSR und Kompilierung — das riskierte OOM-Kills in Produktion und brach bei Deployments aktive WebSocket-Verbindungen ab.

Die Lösung

Es wurden mehrstufige Dockerfiles mit Turborepo-Prune entwickelt (turbo prune --scope=<app> --docker), die die Image-Größe auf unter 120 MB senkten. Swarm-Services wurden mit harten 512-MB-Speicherlimits und Rolling Updates orchestriert (parallelism: 1, start-first order).

Auswirkung: 90 % kleinere Images, streng begrenzter RAM-Bedarf und nahtlose Rolling Deployments ohne Ausfallzeit und ohne einen einzigen abgebrochenen Socket.

  • Turbo Prune
  • Docker Swarm
  • Rolling Updates
  • 512-MB-RAM-Obergrenze
// 05. Technologie-Stack

Full-Stack-Architekturmatrix

Umfassende Aufschlüsselung der Bibliotheken, Treiber und Frameworks, Schicht für Schicht

Monorepo
  • Turborepo
  • pnpm workspaces
  • TypeScript
Frontend & UI
  • Next.js 16
  • React 19
  • Tailwind CSS v4
  • Radix UI
  • @dnd-kit
  • TipTap
Backend & API
  • NestJS 11
  • Prisma 7
  • PostgreSQL 16
  • @prisma/adapter-pg
Echtzeit & WSS
  • Socket.IO
  • Redis 7 (Pub/Sub-Adapter)
Hintergrund-Queues
  • BullMQ
  • Redis-Broker
Speicher & Medien
  • MinIO (lokal)
  • Cloudflare R2 (Prod)
Client-Zustand
  • Zustand
  • TanStack Query v5
Authentifizierung & Sicherheit
  • Passport.js (JWT/Local)
  • bcrypt
  • HttpOnly-Cookies
Kommunikation
  • Nodemailer
  • Handlebars-Templates
Lokalisierung
  • Geteiltes i18n-Paket
  • Englisch
  • Spanisch
DevOps & Deployment
  • Docker
  • Docker Swarm
  • NGINX Reverse Proxy
  • GitHub Actions
  • Sentry
  • Playwright E2E
// 06. Lokaler Betrieb & Evaluierung

Live ausprobieren & lokal nachbauen

Das Webportal unter crwsync.xyz ist live im Produktivbetrieb. Das Anwendungs-Dashboard liegt hinter sitzungsbasierter Authentifizierung und mandantenfähigen Organisations-Guards, daher werden keine Demo-Zugangsdaten öffentlich bereitgestellt — kontaktieren Sie mich direkt für eine interaktive Vorführung.

Der vollständige Monorepo-Quellcode ist öffentlich, für Portfolio-Sichtung und technische Bewertung. Sie können den kompletten entkoppelten Stack lokal betreiben: Docker Compose stellt PostgreSQL, Redis und MinIO bereit, und Turborepo startet die NestJS-API und beide Next.js-Apps.

local-setup.sh
# 1. Clone monorepo and install dependencies
git clone https://github.com/JustTunya/crwsync.git
cd crwsync
pnpm install

# 2. Start local infrastructure (PostgreSQL, Redis, MinIO)
docker compose -f docker-compose.dev.yml up -d

# 3. Configure environment variables (fill in secrets, see README)
cp apps/backend/.env.example apps/backend/.env
cp apps/frontend/dash/.env.example apps/frontend/dash/.env
cp apps/frontend/web/.env.example apps/frontend/web/.env

# 4. Generate Prisma client, run migrations, seed demo workspace (optional)
pnpm --filter @crwsync/backend run prisma:generate
pnpm --filter @crwsync/backend run prisma:migrate:dev
pnpm seed

# 5. Start web, dashboard and API via Turborepo
pnpm dev
# Marketing Portal: http://localhost:3000
# App Dashboard:    http://localhost:3001
# Backend API:      http://localhost:8080

Hinweise zur Evaluierung & Details zur Simulation

  • Simulierte Arbeitsbereichsdaten: Die Teams, Projekte, Kanban-Aufgaben und Chat-Kanäle in der Produktiv-Demo sind vorab eingespielte Testdaten, um die Privatsphäre bei der Evaluierung zu wahren.
  • Live-Echtzeit-Engine: Das WebSocket-Gateway, der Redis-7-Pub/Sub-Bus, die NestJS-API und die PostgreSQL-Datenbank laufen live auf containerisierter Produktivinfrastruktur mit echter Ereignisweitergabe.
  • PolyForm-Noncommercial-Lizenz: Der Quellcode ist öffentlich einsehbar für Studium, Lernen und Portfolio-Sichtung unter der PolyForm Noncommercial License 1.0.0 — kommerzielle Nutzung erfordert eine gesonderte Lizenz.

crwsync in Aktion erleben

Öffentlich zugänglich für technische Bewertung, Code-Review und Architekturprüfung.