Julius Gweepersonal portfolio

github.local/julius/projects/peerprep

julius-gwee/selected-workGitHub profile

PeerPrep

Public
Repository
Course project · archivedJan – Apr 2026
README.md

Realtime collaboration system

Better practice, together.

A technical-interview practice platform where matched participants solve coding problems together in a synchronized Monaco editor.

System design

A match creates an authenticated collaboration session; participants then exchange convergent document and presence updates while snapshots protect reconnects.

  1. 01RabbitMQ match event
  2. 02Collaboration service
  3. 03Supabase-authenticated join
  4. 04Socket.IO room
  5. 05Yjs document updates
  6. 06Redis snapshot + attempt history

What I owned

I owned the collaboration service and editor integration: consuming match events, creating session state, issuing join credentials, synchronizing Yjs documents, handling participant presence and reconnects, and persisting completed attempts. The wider course team owned matching, questions, authentication, history, and deployment around that boundary.

One important decision

Use Yjs with y-monaco and send encoded incremental updates through Socket.IO.

Reliability

  • Full document sync is sent on join and reconnect before normal incremental updates continue.
  • Explicit leave handling and reconnect grace periods distinguish a temporary drop from a completed departure.
  • Debounced snapshots reduce write frequency while retaining recoverable session state.

The current public evidence does not claim a measured synchronization latency, recovery rate, or user count.

Technical deep dive