Context
Cyclone starts with a simple problem that is difficult to execute well: bringing text conversations and audio-video communication into one product without losing consistency across permissions and navigation. It is neither client work nor affiliated with Discord.
Challenge and constraints
Synchronize messages, presence, and media in real time while keeping identity, application data, and audio-video transport clearly separated.
Approach
I assigned each responsibility to the most suitable service: Clerk for identity, Next.js for APIs and access control, Supabase for data and private events, and LiveKit for media using short-lived server-generated tokens.
Decisions and tradeoffs
This separation keeps media traffic out of Next.js and makes responsibilities easier to understand. The tradeoff is coordinating several services, secrets, permissions, and connection states.
Observable outcome
The deployed version covers text and voice channels, direct conversations, webcam, screen sharing, roles, moderation, and responsive navigation. I do not claim usage metrics that have not been measured.