Preskoči na sadržaj
nazad na projekte

// projekat ·

Architex: Platforma za vežbanje system design-a

Napravio sam mesto za vežbanje system design-a sa pravim review tokom. Stack: Node.js, Express, SQLite, React, Excalidraw.

Node.js / Express / SQLite / JWT / React / Vite / Tailwind CSS / Excalidraw

Uloga: Univerzitetski projekat · IT354 · Godina: 2025 · Status: isporučeno

ukratko: Platforma za vežbanje system design-a napravljena oko Excalidraw-a. Student nacrta rešenje, preda ga i dobije ocenu sa pisanim komentarom. Tok draft, predaja, ocena živi na serveru, pa klijent ne može da preskoči korak.

Problem

System design se uči kroz dijagrame, ali dijagrami obično putuju kao screenshot-ovi u chat-u. Nema istorije nacrta, nema jasnog trenutka predaje i nema jednog mesta za komentare. Hteo sam alat u kome student izabere scenario (rate limiter, URL shortener, obrada plaćanja), nacrta rešenje, preda ga i dobije ga nazad ocenjenog.

Ograničenja

  • Dijagrami su veliki, proizvoljni JSON. Excalidraw scena je lista elemenata sa pozicijama, vezama i stilovima. Backend mora da je primi bez slepog verovanja u njen oblik.
  • Tok se sprovodi na serveru. Rešenje ide DRAFT → SUBMITTED → GRADED. Posle predaje student više ne može da ga menja, a oceniti može samo admin.
  • Deployment ostaje trivijalan. Projekat se pokreće na laptopu recenzenta, pa nema servera baze ni kontejnera.

Odluke

  • Excalidraw kao platno. Dolazi kao React komponenta i izvozi čist JSON scene, pa je editor bio zavisnost, a ne poseban podprojekat.
  • Dve uloge, provera na svakoj ruti. Korisnici crtaju, admini pregledaju. JWT nosi ulogu, middleware je proverava, a rute za rešenja vraćaju 403 kad admin pokuša da menja nacrt ili korisnik otvori tuđi rad.
  • SQLite sa CHECK ograničenjima. Uloge (USER, ADMIN), status rešenja, težina scenarija i ocena od 1 do 5 ograničeni su u šemi, pa loša vrednost pada na bazi čak i ako neka provera na ruti promakne.
  • Jedan JSON string po dijagramu. Cela scena se čuva u jednom polju umesto da se razbija na tabele oblika. API odbija sve što nije serijalizovan niz elemenata.

Ishod

Studenti prave nacrte, predaju ih i čitaju komentare. Admini filtriraju predaje po statusu i ocenjuju ih. Čuvanje cele scene svelo je snimanje na jedan red i jedan upit, uz cenu da se u dijagram nikad ne može zaviriti SQL-om. Za tok pregleda to je bio dobar kompromis: niko ne pita bazu koja rešenja imaju load balancer.