How fenetdiriba/peercode-ai works
PeerCode AI is a browser-based collaborative interview-practice editor. Users create or join a room by link, or submit a skill profile for matchmaking; matched users are routed into a shared room. There they edit synchronized code, chat and presence, request Gemini-assisted edits, and run JavaScript/TypeScript in a browser worker. The server provides matchmaking, WebRTC signaling, a non-persistent relay fallback, and the AI endpoint. Documented capabilities are included, but unsampled subsystem links are omitted or marked unverified rather than inferred as direct calls.
Main entry points: RoomView.tsx Room interface · App.tsx App routing · app.js Server router · MatchView.tsx Match screen
Components 27
Browser experience
- App routing
src/App.tsx - Room entry
src/components/LandingView.tsx - Profile identity
src/lib/identity.ts - Skill onboarding
src/components/OnboardingModal.tsx - Match screen
src/components/MatchView.tsx
Collaborative room
- Room interface
src/components/RoomView.tsx - Room lifecycle
src/hooks/useRoom.ts - Collaboration session
src/lib/collab.ts - Client relay
src/lib/relay.ts - Code editor
src/components/CodeEditor.tsx - Room chat
src/components/ChatPanel.tsx - Peer presence
src/components/PresencePanel.tsx - Code runner
src/lib/runner.ts - Connection status
src/components/StatusBar.tsx - Monaco setup
src/lib/monaco.ts - Language options
src/lib/languages.ts
Server services
- Server router
server/app.js - WebRTC signaling
server/signaling.js - Room relay
server/relay.js
Matchmaking
- Matchmaking client
src/hooks/useMatchmaking.ts - Match scoring
shared/matching.js - Match queue
server/matchmaking.js
AI assistance
- AI prompt
src/components/AiPrompt.tsx - AI request client
src/lib/ai.ts - AI hint endpoint
server/ai.js
Other components
- Participant
- Gemini
Connections 31
- Participant → App routing: opens app
README.md - App routing → Profile identity: loads profile
src/App.tsx - App routing → Room entry: routes to
src/App.tsx - App routing → Match screen: routes to
src/App.tsx - App routing → Room interface: routes to
src/App.tsx - Room entry → App routing: requests room route
README.md - App routing → Skill onboarding: renders
src/App.tsx - Match screen → Matchmaking client: starts matching
src/components/MatchView.tsx - Matchmaking client → Match queue: joins queue
README.md - Match queue → Match scoring: scores pairs
server/matchmaking.js - Matchmaking client → Match scoring: shares matching math
shared/matching.js - Match screen → App routing: routes matched room
src/App.tsx - Room interface → Room lifecycle: uses room state
README.md - Room lifecycle → Collaboration session: creates session
src/hooks/useRoom.ts - Collaboration session → Client relay: sets up relay
src/lib/collab.ts - Room interface → Code editor: renders editor
README.md - Room interface → Room chat: renders chat
README.md - Room interface → Peer presence: renders presence
README.md - Room interface → Code runner: runs code
src/components/RoomView.tsx - Room interface → Connection status: renders status
README.md - Code editor → Monaco setup: configures editor
src/components/CodeEditor.tsx - Room interface → Language options: selects language
src/components/RoomView.tsx - Room interface → AI prompt: opens prompt
src/components/RoomView.tsx - AI prompt → AI request client: requests hint
src/components/AiPrompt.tsx - AI request client → AI hint endpoint: posts hint request
README.md - AI hint endpoint → Gemini: generates edit
README.md - Server router → Match queue: routes match socket
server/app.js - Server router → WebRTC signaling: routes signaling socket
server/app.js - Server router → Room relay: routes relay socket
server/app.js - Collaboration session → WebRTC signaling: introduces peers
README.md - Client relay → Room relay: forwards updates
README.md