How gabriel-logan/private-meet works
Private Meet is a self-hostable, account-free chat and WebRTC meeting app with mobile and Wails desktop clients and a Go backend. The principal workflow is to create or join a room, obtain a token through REST sign-in, connect over WebSocket for room membership, chat, presence and WebRTC signaling, then establish peer-to-peer media and image transfer. Separate client layers provide encrypted messaging and mesh media. The README documents capabilities beyond the sampled source; links for those are cited to it, while unsampled implementation details are not inferred.
Main entry points: router.go HTTP routing · auth.go REST API · pages/Chat.tsx Mobile chat · pages/Chat.tsx Desktop chat
Components 22
Client experiences
- Mobile home
client/mobile/src/pages/Home.tsx - Desktop home
client/web-desktop/frontend/src/pages/Home.tsx - Mobile chat
client/mobile/src/pages/Chat.tsx - Desktop chat
client/web-desktop/frontend/src/pages/Chat.tsx - Mobile auth state
client/mobile/src/stores/authStore.ts - Desktop auth state
client/web-desktop/frontend/src/stores/authStore.ts
Room and chat
- WS protocol
client/shared/protocol/ws.ts - Mobile WS client
client/mobile/src/lib/wsInstance.ts - Desktop WS client
client/web-desktop/frontend/src/lib/wsInstance.ts
Privacy and media
- Mobile E2EE
client/mobile/src/lib/e2ee.ts - Desktop E2EE
client/web-desktop/frontend/src/lib/e2ee.ts - Mobile WebRTC mesh
client/mobile/src/hooks/useWebRTCMesh.ts - Desktop WebRTC mesh
client/web-desktop/frontend/src/hooks/useWebRTCMesh.ts - WebRTC helpers
client/web-desktop/frontend/src/lib/webRTC.ts
Backend services
- REST API
server/internal/httpapi/handlers/auth.go - HTTP routing
server/internal/httpapi/router.go - Server entry
server/cmd/api/main.go - JWT security
server/internal/security/jwt.go - WebSocket endpoint
server/internal/ws/handler.go - Room relay
server/internal/ws/hub.go - WebSocket manager
server/internal/ws/manager.go
Other components
- Participant
Connections 22
- Participant → Mobile home: creates or joins
- Participant → Desktop home: creates or joins
- Mobile home → REST API: signs in
- Desktop home → REST API: signs in
- REST API → JWT security: issues token
server/internal/httpapi/handlers/auth.go - Server entry → HTTP routing: configures
server/cmd/api/main.go - HTTP routing → WebSocket endpoint: routes WS
server/internal/httpapi/router.go - HTTP routing → REST API: routes sign-in
server/internal/httpapi/router.go - Server entry → WebSocket manager: creates manager
server/cmd/api/main.go - HTTP routing → WebSocket manager: passes manager
server/internal/httpapi/router.go - WebSocket endpoint → JWT security: validates token
server/internal/ws/handler.go - Mobile chat → Mobile WS client: uses connection
- Desktop chat → Desktop WS client: uses connection
client/web-desktop/frontend/src/pages/Chat.tsx - Mobile chat → Mobile E2EE: encrypts messages
- Desktop chat → Desktop E2EE: encrypts messages
client/web-desktop/frontend/src/pages/Chat.tsx - Mobile chat → Mobile WebRTC mesh: runs meeting
- Desktop chat → Desktop WebRTC mesh: runs meeting
client/web-desktop/frontend/src/pages/Chat.tsx - Mobile WebRTC mesh → WS protocol: handles signaling
client/mobile/src/hooks/useWebRTCMesh.ts - Desktop WebRTC mesh → WS protocol: handles signaling
client/web-desktop/frontend/src/hooks/useWebRTCMesh.ts - Desktop WebRTC mesh → WebRTC helpers: delegates media
client/web-desktop/frontend/src/hooks/useWebRTCMesh.ts - WebSocket endpoint → Room relay: relays room events
- WebSocket manager → Room relay: dispatches rooms