How arsenehuot/openhive works
OpenHive is a self-hosted team messaging app. Users enter through authentication and a workspace, then browse channels or direct messages, compose and organize conversations, and receive activity and presence updates. Distinct capabilities include channel/workspace administration, invitations, file sharing, scheduled messages, search, and LiveKit calls; webhook and bot configuration extend the workspace. The app store coordinates client state, while Supabase provides auth, database, realtime, and storage services. README-described features whose implementation was not sampled are represented at their documented directory paths; edges show only documented or sampled wiring.
Main entry points: client.ts Supabase client · channel-view.tsx Channel conversations · message-input.tsx Compose messages · page.tsx Workspace app
Components 25
Messaging
- Channel conversations
src/components/chat/channel-view.tsx - Compose messages
src/components/chat/message-input.tsx - Threaded replies
src/components/chat/thread-panel.tsx - Saved messages
src/components/bookmarks/saved-items-panel.tsx - Activity feed
src/components/activity/activity-panel.tsx - Search
src/components/search/search-dialog.tsx - Scheduled messages
src/hooks/use-scheduled-messages.ts - File uploads
src/app/api/upload/route.ts
Workspace
- Authentication
src/app/auth/page.tsx - Workspace app
src/app/workspace/page.tsx - Navigation
src/components/sidebar/sidebar.tsx - Workspace setup
src/components/workspace/workspace-setup.tsx - Workspace settings
src/components/workspace/workspace-settings-dialog.tsx - Invitations
src/app/api/invite/route.ts - Join workspace
src/app/api/invite/complete/route.ts - Email delivery
Calls
- Call controls
src/components/calls/call-panel.tsx - Call token API
src/app/api/livekit/token/route.ts - LiveKit
Platform services
- Webhook settings
src/components/workspace/webhook-settings.tsx - Incoming webhook
src/app/api/webhook/[id]/route.ts - Client state
src/lib/store/app-store.ts - Supabase client
src/lib/supabase/client.ts - Supabase services
Other components
- Team member
Connections 33
- Team member → Authentication: signs in
- Team member → Workspace app: opens workspace
- Authentication → Supabase client: authenticates
- Workspace app → Navigation: renders navigation
- Workspace app → Client state: reads state
- Navigation → Channel conversations: opens conversation
- Channel conversations → Compose messages: composes in
- Channel conversations → Threaded replies: opens replies
- Compose messages → Supabase client: sends messages
- Channel conversations → Supabase client: loads conversations
- Threaded replies → Supabase client: loads replies
- Saved messages → Supabase client: loads saved items
- Activity feed → Supabase client: loads activity
- Search → Supabase client: searches messages
- Scheduled messages → Supabase client: manages schedules
- Compose messages → File uploads: uploads attachments
- File uploads → Supabase services: stores files
- Workspace setup → Supabase client: creates workspace
- Workspace settings → Supabase client: updates settings
- Workspace settings → Webhook settings: configures webhooks
- Webhook settings → Supabase client: manages webhooks
- Team member → Incoming webhook: posts payload
- Incoming webhook → Supabase services: reads webhook and writes message
- Team member → Invitations: invites member
- Invitations → Supabase services: verifies and adds member
- Invitations → Email delivery: sends invitation
- Team member → Join workspace: completes invitation
- Join workspace → Supabase services: updates account and membership
- Call controls → Call token API: requests token
- Call token API → Supabase services: verifies and reads settings
- Call token API → LiveKit: issues room token
- Call controls → LiveKit: joins call
- Supabase client → Supabase services: uses auth, data, realtime