Ugrás a tartalomhoz
Vissza a válogatott munkákhoz
Élesben működik
crwsync logó

crwsync

Valós idejű, közös munkatér, amely a Kanban feladattáblákat, az élő csapatüzenetezést és a fájltárolást egyesíti egy magas rendelkezésre állású, elosztott monorepóban.

A crwsync munkatér irányítópultja

Elosztott, valós idejű közös munkatérplatform, amelyet arra terveztek, hogy megszüntesse a vállalati környezetváltások terhét. A Kanban feladatkövetést, az alacsony késleltetésű csapatkommunikációt és a központosított fájltárolást egy szétválasztott Turborepo monorepóban egyesítve a crwsync azonnal szinkronba hozza az állapotot a szervezetek és az elosztott környezetek között — egy globális Cmd+K keresővel, amely feladatokra, üzenetekre és fájlokra egyaránt kiterjed.

// Architektúra

Elosztott Turborepo

3 különálló alkalmazás (@crwsync/backend, @crwsync/dash, @crwsync/web).

// Valós idejű motor

Socket.IO + Redis 7

Vízszintesen skálázható WebSocket Redis Pub/Sub adapterrel.

// Háttérrendszer és adatbázis

NestJS 11 + Prisma 7

PostgreSQL 16 tárolás munkatérhez kötött, szerepkör-alapú jogosultsági védelemmel.

// Infrastruktúra

Docker Swarm

Konténerizált többszolgáltatásos vezénylés állapotellenőrzésekkel.

// áttekintés

Mi a crwsync

A crwsync a Kanban-stílusú feladattáblákat az élő csapatüzenetezéssel egyetlen felületen egyesíti, így a csapat áthúz egy kártyát az oszlopok között, és ugyanabban a nézetben, valós időben látja egy csapattárs csevegőüzenetét — a megosztott fájlok, feladat-hozzászólások és ellenőrzőlisták pedig ugyanúgy kéznél vannak. Vállalati szintű Turborepo monorepóként épült: egy NestJS API, egy Next.js irányítópult és egy nyilvános webportál, konténerekre bontva és magas rendelkezésre állásra vezényelve.

A kétrétegű szerepkörkezelő rendszer a munkateret a csapat tényleges hierarchiájához és hozzáférési igényeihez igazítja, nem pedig egyetlen, lapos jogosultsági modellhez.

// 01. Stratégiai háttér

Miért épül így a crwsync

01 // Probléma

Szétaprózott eszközök és folyamatos környezetváltás

A modern fejlesztőcsapatok naponta 9 és 15 különálló alkalmazás között ugrálnak. Az elszigetelt Kanban feladattáblák, hibakövetők és különálló csevegőcsatornák közötti váltogatás szétszórja a figyelmet, adateltéréseket okoz, és olyan kommunikációs súrlódást teremt, amely lassítja a csapat munkatempóját.

Kulcsdinamika: Csapatonként 9–15 szétszórt alkalmazás
02 // Megoldás

Egy helyre hozott feladattáblák és élő üzenetküldés

A crwsync a végrehajtást egyesíti: a húzással rendezhető Kanban feladattáblákat közvetlenül a valós idejű szoba- és közvetlen üzenetküldéssel kapcsolja össze egyetlen nézetben. Moduláris Turborepo monorepóra épül, és az optimista felületi állapotot WebSocket-szórással, valamint munkatér-szintű, szerepkör-alapú jogosultságokkal párosítja.

Kulcsdinamika: Egyetlen közös munkafelület
03 // Eredmény

100 ms alatti késleltetés és szétválasztott architektúra

A szinkron PostgreSQL adatbázis-tranzakciókat a Redis Pub/Sub segítségével elválasztva az efemer élő szórástól, a rendszer 100 ms alatti szinkronizációs késleltetést ér el az elosztott kliensek között, miközben a nehéz háttérfeladatokat, például az e-mail-küldést aszinkron BullMQ feladatsorokra bízza.

Kulcsdinamika: 100 ms alatti eseményterjedés
// architekturális alapelv
„Az élő WebSocket-szórás és a tartós, relációs adatbázis-tranzakciók szétválasztásával a crwsync 100 ms alatti szinkronizációs késleltetést ér el, miközben megőrzi a szigorú ACID-garanciákat.”
— Architekturális alapelv
// 02. Termékbemutató

A crwsync működés közben

Ügyfélközpontú bemutató minden modulról — mit tud, és milyen érzés használni

Globális modulok

Három munkatér-szintű nézet, amely a felső navigációs sávból érhető el

Kezdő irányítópult képernyőkép

Kezdő irányítópult

A munkatér nyitóközpontja — legutóbbi tevékenységek, kitűzött projektek, függő feladatok és a csapat élő jelenlétének pillanatképe egy pillantással.

⌘KGlobális omni-keresés

Globális omni-keresés

Nyomja meg a Cmd+K (vagy Ctrl+K) billentyűkombinációt a munkatér bármely pontján az egységes keresőablak megnyitásához. Feladatok, üzenetek, fájlok és tagok — minden egy helyen kereshető, gépelés közben azonnali, közelítő találatokkal.

Képernyőkép a crwsync Cmd+K omni-keresőablakáról, megnyitva, feladatok és üzenetek közötti találatokkal
02Feladatkezelés

Feladattábla

Húzással rendezhető Kanban tábla, ahol a csapat együtt viszi előre a munkát — valós időben. Húzzon egy kártyát egy új oszlopba, és minden csapattárs azonnal látja az elmozdulást, frissítés nélkül.

  • Húzható oszlopok: Mozgassa a feladatokat a munkafolyamat szakaszai között gördülékeny húzással — az átrendezés azonnal megmarad minden csapattársnál.
  • Feladatrészletek panel: Nyisson meg bármely feladatot a teljes szerkesztőfelülethez: formázott szövegű leírás, haladásjelzős ellenőrzőlisták, határidők és prioritáscímkék.
  • Részfeladat-ellenőrzőlisták: Bontsa lépésekre a munkát soron belüli ellenőrzőlistákkal. A haladásjelvény a tábla nézetből is egy pillantással mutatja a készültséget.
  • Hozzászólások és @említések: Szálakba rendezett hozzászólások minden feladathoz @említéses értesítésekkel, így a kontextus a munkánál marad.
  • Mellékletek és előnézetek: Húzzon fájlokat közvetlenül a feladatra, vagy illesszen be képeket. A bélyegképek és a lightbox nézegető a részletek panelen belül töltődnek be.
  • Szűrők, nézetek és tevékenység: Szűrjön felelős, prioritás vagy címke szerint. Váltson a Kanban, a Lista és a Táblázat nézet között. Minden módosítás bekerül a feladat tevékenységnaplójába.
Socket.IO@dnd-kitTanStack QueryTipTapFractional Indexing
03Csapatkommunikáció

Csevegőszoba

Teljes értékű élő üzenetküldő réteg, ugyanabban a nézetben, mint a feladatok. Projektcsatornák, közvetlen üzenetek, fájlmegosztás és emoji-reakciók — mind 100 ms alatt érkezik.

  • Projektcsatornák: Minden projekt saját csatornát kap. A kontextus a táblával együtt marad, nem egy különálló alkalmazásban.
  • Közvetlen üzenetek: Privát, kétszemélyes beszélgetések bármelyik munkatérbeli taggal — külön postaláda, ugyanaz a valós idejű kézbesítés.
  • Gépelésjelzők: Lássa, ha a csapattársak éppen választ írnak — efemer jelzések, amelyektől az aszinkron kommunikáció élőnek hat.
  • Online jelenlét: Élő online/távol állapot minden tag profilképe mellett, az oldalsávban és az üzenetszálakban egyaránt.
  • Emoji-reakciók: Reagáljon bármely üzenetre emojival. A számlálók élőben frissülnek a szoba minden tagjánál.
  • Fájl- és képmegosztás: Húzzon mellékleteket bármely üzenetbe. A képek lightboxban nyílnak meg. Az olvasatlan-jelvények és az értesítések szinkronban tartják a csapatot.
Redis 7NestJS GatewaySocket.IOJelenlét-motorPub/Sub
04Fájltárolás

Csapatmeghajtó

Közös munkatéri fájltár a táblák és a csevegés mellett — töltse fel, tekintse meg és rendszerezze a csapat anyagait anélkül, hogy elhagyná az alkalmazást. A feladatokhoz és üzenetekhez csatolt fájlok is itt találhatók.

  • Munkatéri fájltár: A munkatérbe feltöltött minden fájl — feladatmellékletek, csevegőmédia, önálló feltöltések — egyetlen rendezett meghajtón jelenik meg.
  • Rács- és listanézet: Váltson a bélyegképekből álló vizuális rács és a metaadat-oszlopokat mutató, kompakt lista között.
  • Húzással feltöltés: Ejtse a fájlokat a meghajtópanel bármely pontjára a feltöltéshez. Folyamatjelzők, és a befejezéskor azonnali bélyegkép-generálás.
  • Előnézet és letöltés: Kattintson egy fájlra a teljes előnézeti ablakhoz képlightboxszal. Letöltés egy kattintással.
  • Munkatérhez kötött hozzáférés: A fájlok az egyes munkaterek számára privátak. A szerepkör-alapú hozzáférés biztosítja, hogy az érzékeny anyagokat csak jogosult tagok láthassák vagy tölthessék le.
MinIOS3-kompatibilisPresigned UploadsCloudflare R2
// 03. Architektúra és topológia

Elosztott monorepo architektúra

Szétválasztott konténerek, magas rendelkezésre állásra és alacsony késleltetésű szinkronizációra vezényelve

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)   │
                           └─────────────────────────────────────────────────────────────┘

Műszaki döntések és indoklások mátrixa

A stabilitást, a fejlesztési sebességet és a vízszintes skálázhatóságot meghatározó alapvető architekturális kompromisszumok

Réteg és hatókörTechnológiaválasztásFőbb képességek és indoklás
Build és fejlesztés
Monorepo motor
Turborepo + pnpm workspaces

Atomi commitok, megosztott konfigurációk, gyorsítótárazott buildek

Egységes TypeScript-konfigurációkat, megosztott ESLint-készleteket és azonnali feladatcsővezeték-gyorsítótárazást tesz lehetővé a @crwsync/backend, a @crwsync/dash és a @crwsync/web között, miközben szigorú szimbolikus-link-izolációval minimalizálja a függőségek felfúvódását.
Központi API
Szerverkeretrendszer
NestJS 11 (TypeScript)

Szigorú moduláris DI, típusos DTO-k, egyedi RBAC-védők

Vállalati architektúra deklaratív függőséginjektálással, class-validator alapú bemenettisztítással és összeállítható végrehajtási védőkkel, amelyek kétrétegű RBAC-t érvényesítenek a REST vezérlőkön és a Socket.IO átjárókon egyaránt.
Frontend
Kliens keretrendszer
Next.js 16 + React 19

Szerverkomponensek, Radix UI építőelemek, Tailwind CSS v4

Egyesíti a villámgyors, szerveren renderelt nyitóoldalakat (@crwsync/web) egy rendkívül interaktív, akadálymentes, kliensoldali állapotkezelő alkalmazáshéjjal (@crwsync/dash), amely 100 ms alatti felületi visszajelzésre van optimalizálva.
Valós idejű
Valós idejű réteg
Socket.IO + Redis 7 Pub/Sub

Vízszintes WebSocket-skálázás a Swarm replikák között

Elválasztja az efemer valós idejű socket-szórást a relációs adatbázis-tranzakcióktól. A Redis adapter a szobák szórását több NestJS replika között osztja el, csomagvesztés nélkül.
Háttér
Aszinkron feldolgozás
BullMQ + Redis 7

Szétválasztott, tranzakciós feladatsorok újrapróbálkozási késleltetéssel

A nehéz háttérfeladatokat (Handlebars e-mail-renderelés, meghívótoken-kézbesítés, összefoglalók generálása) elkülöníti a HTTP-szálaktól, konfigurálható exponenciális újrapróbálkozási szabályokkal és dead-letter sorokkal.
Adattárolás
Adatbázis
PostgreSQL 16 + Prisma 7

@prisma/adapter-pg meghajtó, relációs integritás

Szigorú ACID-tranzakciókat garantál a többbérlős szervezetekhez, projektekhez, táblákhoz és feladatoszlopokhoz. A nagy teljesítményű @prisma/adapter-pg meghajtót használja automatizált sémamigrációkkal.
Tárolás
Objektumtároló
MinIO (fejlesztés) + S3-kompatibilis (éles)

Presigned feltöltések, munkatérhez kötött hozzáférés-szabályozás

Ez szolgálja ki a profilképeket, a feladatmellékleteket, a csevegőmédiát és a dedikált Fájlok munkatér-modult. A nyilvános profilkép-útvonal nyitva marad, míg a munkatéri fájlútvonalak hitelesítés mögött maradnak, mivel a mellékletek egy munkatér számára privátak.
DevOps
Vezénylés
Docker Swarm

Deklaratív stack.yml, állásidő nélküli, gördülő frissítések, memóriakorlátok

Könnyű konténervezénylés a natív Docker démonnal, Kubernetes-többletterhelés nélkül. Izolált overlay hálózatokat, automatikus állapotellenőrzéseket, állásidő nélküli, gördülő telepítéseket és 512 MB-os RAM-korlátokat kínál.
// 02b. A motorháztető alatt

Nagy gyakoriságú együttműködésre tervezve

Négy alapvető képesség, szétválasztva a kliens és a szerver között

// 01 • Állapot-szinkronizálás és optimista felület

Valós idejű Kanban motor

Interaktív, húzással működő feladat-munkafolyamatok törtindexes átrendezéssel, optimista kliensoldali módosításokkal és azonnali, több klienses eseményszórással.

  • Socket.IO szórás: A többbérlős oszlop- és kártyafrissítések azonnal eljutnak az aktív projektszobákhoz.
  • Törtindexelés: O(1) elemátrendezés a kártyák között, költséges, láncreakciószerű adatbázis-frissítések nélkül.
  • Optimista felület: TanStack Query gyorsítótár-visszagörgetés, ha hálózati hiba szakítja meg a szerveroldali mentést.
  • Többfelhasználós jelzők: Vizuális jelenlétjelzők, amikor a csapattársak megtekintik a feladatokat vagy dolgoznak rajtuk az oszlopban.
  • Ellenőrzőlisták és hozzászólások: Részfeladat-ellenőrzőlisták haladásjelvénnyel és feladatonként szálakba rendezett, @említéses hozzászólások.
  • Szűrők, nézetek és tevékenységnapló: Felelős/prioritás/címke szűrők, Lista/Táblázat nézetváltó és időrendi, feladatonkénti tevékenységnapló.
  • Socket.IO
  • @dnd-kit
  • TanStack Query
  • TipTap
  • Fractional Indexing
// 02 • WebSocket-kommunikáció

Csatorna- és DM-alapú élő üzenetküldés

Tartós, szobaalapú üzenetküldő architektúra, amely a nyilvános projektcsatornákat, a feladatokhoz kötött szálas megbeszéléseket és a kétszemélyes közvetlen beszélgetéseket szolgálja ki.

  • Tartós socket-szobák: Dinamikus szobabelépési/kilépési életciklus, projektenként és közvetlen üzenetküldő csatornánként kezelve.
  • Redis Pub/Sub réteg: Vízszintesen skálázható WebSocket-üzenetküldés elosztott NestJS csomóponti példányok között.
  • Jelenlét és jelzők: Valós idejű felhasználói online/távol állapotkövetés és efemer gépelésjelzők.
  • Olvasási visszaigazolások és jelvények: Aszinkron olvasatlanüzenet-követés és azonnali kliensértesítés-szinkronizálás.
  • Reakciók és fájlmegosztás: Emoji-reakciók élő számlálókkal, húzással csatolható mellékletek lightbox-előnézettel és tartós értesítések.
  • Redis 7
  • NestJS Gateway
  • Jelenlét-motor
  • Pub/Sub
  • Emoji-reakciók
// 03 • Biztonság és jogosultságkezelés

Munkatér-szintű szerepkör-alapú hozzáférés-szabályozás

Egyetlen, szigorúan hierarchikus szerepkörrendszer — Tulajdonos, Adminisztrátor, Tag, Külső résztvevő — az API-védőrétegtől egészen a felületig minden munkatér-műveletet kapuz, önkiszolgáló adminisztrációval az előléptetéshez, a visszaminősítéshez és a tulajdonjog átadásához.

  • Hierarchikus szerepkörök: OWNER, ADMIN, MEMBER és GUEST szintek, munkaterenként kiosztva és minden módosításnál érvényesítve.
  • NestJS-védők és dekorátorok: Deklaratív @RequireWorkspaceRoles() védők, amelyeket minden REST végpont és WebSocket-átjáró kiértékel.
  • Frontend-szintű szerepkörkapuzás: Az adminisztratív vezérlők, például a tag eltávolítása, az oszlop törlése és a projekt törlése csak a jogosult szerepkörök számára jelennek meg.
  • Meghívási és tulajdonjog-átadási folyamatok: Szerepkörrel kiosztott meghívók, tagok előléptetése és visszaminősítése, valamint teljes tulajdonjog-átadás a munkatér beállításaiból.
  • NestJS-védők
  • Munkatér-RBAC
  • JWT + HttpOnly Cookies
  • Szerepkör-adminisztráció
// 04 • Tárolás és média

Fájlok, mellékletek és médiatárolás

S3-kompatibilis objektumtároló, amely a dedikált csapati fájlmeghajtót, a feladatmellékleteket és a csevegőmédiát szolgálja ki — bezárva a kört a feladatok, a beszélgetések és a fájlok egy helyen történő szinkronizálásában.

  • Presigned feltöltések: MinIO helyi fejlesztésben, S3-kompatibilis tároló élesben, presigned URL-ekkel a közvetlen kliensoldali feltöltésekhez.
  • Munkatéri fájlmodul: Munkaterenként dedikált fájlmeghajtó rács- és listanézettel, előnézetekkel és letöltésekkel a táblák és a csevegés mellett.
  • Feladat- és csevegőmellékletek: Húzással feltöltés a feladatokon és a csevegésben, bélyegkép-előnézetekkel és képlightboxszal.
  • Munkatérhez kötött hozzáférés: A fájl- és profilkép-útvonalak hitelesítés mögött vannak és munkatérhez kötöttek, eltérően a nyilvános profilkép-végponttól.
  • MinIO
  • S3-kompatibilis tárolás
  • Presigned feltöltések
  • Fájlszobák
// 04. Kihívások és akadályok

Mérnöki akadályok és megoldások

A nagy egyidejűségű, valós idejű vezénylés során felmerült legfontosabb akadályok

// 01 • Valós idejű egyidejűség

Versenyhelyzetek és párhuzamos húzás

Az akadály

Egyszerre több kliensen végzett feladat-átrendezés naiv egész számos indexeléssel (1, 2, 3...) láncreakciószerű SQL-sorfrissítéseket, holtpontokat és versenyhelyzeteket okozott, amelyekben a kártyák ugráltak a helyükről.

A megoldás

Lexorank törtindexelést alkalmaztam Redis optimista zárolással párosítva. A kártya mozgatásakor a pontos középérték-rangot O(1) időben számolja ki a rendszer a szomszédos sorok módosítása nélkül, és a frissítéseket azonnal szétszórja Socket.IO-n keresztül.

Hatás: Nulla adatbázis-sorzárolás, azonnali optimista felület-egyeztetés és konfliktusmentes, többfelhasználós táblamódosítások.

  • Lexorank
  • Redis zárak
  • Törtindexelés
  • O(1) átrendezés
// 02 • Hitelesítés és biztonság

Több domainre kiterjedő munkamenet-izoláció és WSS kézfogások

Az akadály

A monorepo a crwsync.xyz, a dash.crwsync.xyz és az api.crwsync.xyz domaineken fut. A tokenek localStorage-ban tárolása az XSS-nek tette ki a hitelesítést, a hagyományos sütik pedig nem működtek aldomainek között, és a WebSocket-váltás ellenőrzésénél sem.

A megoldás

Kriptográfiailag aláírt, HttpOnly, SameSite=Lax munkamenet-sütiket konfiguráltam Domain=.crwsync.xyz hatókörrel, NGINX TLS-lezárás mögött. A NestJS WebSocket-átjárók a kezdeti HTTP-váltási kézfogás során megvizsgálják és érvényesítik a munkamenet-sütit.

Hatás: Megszűnt a tokenek kitettsége a kliensoldali szkriptek előtt, zökkenőmentes SSO lett elérhető az aldomainek között, és a valós idejű socket-kapcsolatok is biztonságosak lettek.

  • HttpOnly sütik
  • Domain-hatókör
  • WSS kézfogás
  • XSS-védelem
// 03 • DevOps és infrastruktúra

Konténer-memóriatelítődés és állásidő nélküli kiadások

Az akadály

A monorepo Docker-képei meghaladták az 1,5 GB-ot, az SSR és a fordítás során memóriacsúcsokkal, ami élesben OOM-leállítás kockázatával járt, és a telepítések közben megszakította az élő WebSocket-kapcsolatokat.

A megoldás

Turborepo-val metszett, többlépcsős Dockerfile-okat készítettem (turbo prune --scope=<app> --docker), amelyek a képméretet 120 MB alá csökkentették. A Swarm-szolgáltatásokat 512 MB-os szigorú memóriakorlátokkal és gördülő frissítésekkel vezényeltem (parallelism: 1, start-first order).

Hatás: 90%-os képméret-csökkenés, szigorúan korlátozott RAM-lábnyom, valamint zökkenőmentes, állásidő nélküli gördülő telepítések, egyetlen megszakadt socket-kapcsolat nélkül.

  • Turbo Prune
  • Docker Swarm
  • Gördülő frissítések
  • 512 MB-os RAM-korlát
// 05. Technológiai stack

Full-stack architektúramátrix

Rétegenkénti részletes bontás a könyvtárakról, meghajtókról és keretrendszerekről

Monorepo
  • Turborepo
  • pnpm workspaces
  • TypeScript
Frontend és UI
  • Next.js 16
  • React 19
  • Tailwind CSS v4
  • Radix UI
  • @dnd-kit
  • TipTap
Háttérrendszer és API
  • NestJS 11
  • Prisma 7
  • PostgreSQL 16
  • @prisma/adapter-pg
Valós idejű működés és WSS
  • Socket.IO
  • Redis 7 (Pub/Sub adapter)
Háttér-feladatsorok
  • BullMQ
  • Redis bróker
Tárolás és média
  • MinIO (helyi)
  • Cloudflare R2 (éles)
Kliensállapot
  • Zustand
  • TanStack Query v5
Hitelesítés és biztonság
  • Passport.js (JWT/Local)
  • bcrypt
  • HttpOnly sütik
Kommunikáció
  • Nodemailer
  • Handlebars sablonok
Lokalizáció
  • Megosztott i18n csomag
  • Angol
  • Spanyol
DevOps és telepítés
  • Docker
  • Docker Swarm
  • NGINX fordított proxy
  • GitHub Actions
  • Sentry
  • Playwright E2E
// 06. Helyi futtatás és értékelés

Próbálja ki élőben és helyben

A crwsync.xyz webportál élesben elérhető. Az alkalmazás irányítópultja munkamenet-alapú hitelesítés és többbérlős szervezeti védők mögött van, ezért a demó belépési adatokat nem tesszük közzé — interaktív bemutatóért vegye fel velem közvetlenül a kapcsolatot.

A teljes monorepo forráskódja nyilvános portfólió-átnézésre és műszaki értékelésre. A teljes, szétválasztott stacket helyben is futtathatja: a Docker Compose biztosítja a PostgreSQL-t, a Redis-t és a MinIO-t, a Turborepo pedig elindítja a NestJS API-t és mindkét Next.js alkalmazást.

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

Értékelési közlemények és szimulációs részletek

  • Szimulált munkatéri adatok: A csapatok, projektek, Kanban feladatok és csevegőcsatornák az éles demóban előre feltöltött minták, az értékelés magánszférájának védelmében.
  • Élő valós idejű motor: A WebSocket-átjáró, a Redis 7 Pub/Sub busz, a NestJS API és a PostgreSQL adatbázis élőben fut konténerizált éles infrastruktúrán, valódi eseményterjedéssel.
  • PolyForm Noncommercial licenc: A forráskód nyilvánosan megtekinthető tanulmányozásra, tanulásra és portfólió-átnézésre a PolyForm Noncommercial License 1.0.0 alapján — a kereskedelmi felhasználáshoz külön licenc szükséges.

Ismerje meg a(z) crwsync projektet működés közben

Nyilvánosan elérhető műszaki értékeléshez, kódellenőrzéshez és architekturális vizsgálathoz.