How grenxnja/meetopia works
Meetopia is a browser-based video meeting app using Stream for calls and a locally persisted guest identity. A guest gets an identity, the app initializes Stream, and users can create or join meetings; meeting pages look up the call, enforce invited-call membership, then move through setup into the meeting room. Separate views expose upcoming, previous, and recorded calls. The README also describes Clerk security, but the sampled implementation shows guest identity instead; unsampled internals and that discrepancy limit confidence about authentication wiring.
Main entry points: CallList.tsx Call and recording lists · GuestProvider.tsx Guest identity · page.tsx Meeting route · useGetCalls.ts Call query and sorting
Components 24
Identity and clients
- Guest identity
providers/GuestProvider.tsx - Guest persistence
lib/guest.ts - Name prompt
components/GuestNameModal.tsx - Stream client
providers/StreamClientProvider.tsx - Token action
actions/stream.actions.ts
Meeting lifecycle
- Meeting actions
components/MeetingTypeList.tsx - Meeting route
app/(root)/meeting/[id]/page.tsx - Call lookup
hooks/useGetCallById.ts - Pre-call setup
components/MeetingSetup.tsx - Live meeting room
components/MeetingRoom.tsx - End call control
components/EndCallButton.tsx - Personal room page
app/(root)/(home)/personal-room/page.tsx
Meeting discovery
- Call query and sorting
hooks/useGetCalls.ts - Call and recording lists
components/CallList.tsx - Meeting card
components/MeetingCard.tsx - Upcoming page
app/(root)/(home)/upcoming/page.tsx - Previous page
app/(root)/(home)/previous/page.tsx - Recordings page
app/(root)/(home)/recordings/page.tsx
Navigation and interface
- Home page
app/(root)/(home)/page.tsx - Home overview
components/HomeHero.tsx - Sidebar navigation
components/Sidebar.tsx - Home layout
app/(root)/(home)/layout.tsx
Other components
- Stream Video
- Guest user
Connections 26
- Guest user → Guest identity: provides identity
providers/GuestProvider.tsx - Guest identity → Guest persistence: reads and persists
providers/GuestProvider.tsx - Guest identity → Name prompt: prompts for name
providers/GuestProvider.tsx - Stream client → Guest identity: uses identity
providers/StreamClientProvider.tsx - Stream client → Token action: requests token
providers/StreamClientProvider.tsx - Stream client → Stream Video: initializes client
providers/StreamClientProvider.tsx - Home page → Home overview: renders
app/(root)/(home)/page.tsx - Home page → Meeting actions: renders
app/(root)/(home)/page.tsx - Meeting actions → Stream Video: creates calls
components/MeetingTypeList.tsx - Meeting actions → Meeting route: navigates to
components/MeetingTypeList.tsx - Meeting route → Call lookup: loads call
app/(root)/meeting/[id]/page.tsx - Call lookup → Stream Video: queries calls
hooks/useGetCallById.ts - Meeting route → Pre-call setup: renders setup
app/(root)/meeting/[id]/page.tsx - Meeting route → Live meeting room: renders room
app/(root)/meeting/[id]/page.tsx - Live meeting room → End call control: renders control
components/MeetingRoom.tsx - Call query and sorting → Guest identity: filters by identity
hooks/useGetCalls.ts - Call query and sorting → Stream Video: queries calls
hooks/useGetCalls.ts - Call and recording lists → Call query and sorting: loads call data
components/CallList.tsx - Call and recording lists → Stream Video: queries recordings
components/CallList.tsx - Call and recording lists → Meeting card: renders entries
components/CallList.tsx - Upcoming page → Call and recording lists: renders upcoming
app/(root)/(home)/upcoming/page.tsx - Previous page → Call and recording lists: renders previous
app/(root)/(home)/previous/page.tsx - Recordings page → Call and recording lists: renders recordings
app/(root)/(home)/recordings/page.tsx - Home layout → Sidebar navigation: renders navigation
app/(root)/(home)/layout.tsx - Sidebar navigation → Call query and sorting: loads call counts
components/Sidebar.tsx - Personal room page → Call lookup: loads personal call
app/(root)/(home)/personal-room/page.tsx