-
Notifications
You must be signed in to change notification settings - Fork 0
THREAD ARCHITECTURE
github-actions[bot] edited this page Sep 2, 2026
·
46 revisions
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Application β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ChatWithThreads β β
β β β β
β β βββββββββββββββββββββββ ββββββββββββββββββββββββββββ β β
β β β ChatContainer β β ThreadPanel β β β
β β β β β β β β
β β β ββββββββββββββββ β β ββββββββββββββββββββ β β β
β β β β MessageList β β β β ThreadView β β β β
β β β β β β β β β β β β
β β β β ββββββββββββ β β β β βββββββββββββββββ β β β
β β β β β Message β β β β β β ParentMsg ββ β β β
β β β β β with β β β β β βββββββββββββββββ β β β
β β β β β Thread β β β β β β β β β
β β β β β Preview β β β β β βββββββββββββββββ β β β
β β β β ββββββββββββ β β β β β ThreadMsg 1 ββ β β β
β β β β β β β β β ThreadMsg 2 ββ β β β
β β β β ββββββββββββ β β β β β ThreadMsg 3 ββ β β β
β β β β β Message β β β β β βββββββββββββββββ β β β
β β β β ββββββββββββ β β β β β β β β
β β β ββββββββββββββββ β β β βββββββββββββββββ β β β
β β β β β β β ReplyInput ββ β β β
β β β ββββββββββββββββ β β β βββββββββββββββββ β β β
β β β β MessageInput β β β ββββββββββββββββββββ β β β
β β β ββββββββββββββββ β β β β β
β β βββββββββββββββββββββββ ββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ThreadSidebar β β
β β β β
β β [All] [Unread] [Following] β β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Thread Item β β β
β β β #channel-name 2h ago β β β
β β β π€ User: Message preview... β β β
β β β π¬ 5 replies β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Thread Item [UNREAD] β β β
β β β #general 1m ago β β β
β β β π€ Alice: Need help with... β β β
β β β π¬ 12 replies π New β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Data Layer β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β PostgreSQL β β Hasura β β GraphQL β β
β β ββββ€ Engine ββββ€ Subscriptionsβ β
β β nchat_* β β β β β β
β β tables β β Permissions β β Real-time β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β² β² β² β
β β β β β
βββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββββββ
β β β
β β β
βββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββββββ
β β β β β
β ββββββββΌβββββββ ββββββββββΌβββββββββ ββββββββΌβββββββ β
β β Queries β β Mutations β βSubscriptionsβ β
β β β β β β β β
β β GET_THREAD β β CREATE_THREAD β β THREAD_SUB β β
β β GET_THREADS β β REPLY_TO_THREAD β β MESSAGES β β
β β GET_USERS β β JOIN_THREAD β β PARTICIPANTSβ β
β β SEARCH β β MARK_READ β β β β
β βββββββββββββββ βββββββββββββββββββ βββββββββββββββ β
β β² β² β² β
β β β β β
β ββββββββββββββββββββ΄βββββββββββββββββββ β
β β β
β β β
β βββββββββΌβββββββββ β
β β Apollo Client β β
β β β β
β β Cache β β
β β Optimistic UI β β
β β Error Handlingβ β
β βββββββββ¬βββββββββ β
β β β
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β
β
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β β Hook Layer β
β β β
β βββββββββΌβββββββββ β
β β use-thread β β
β β β β
β β - Data loading β β
β β - Subscriptionsβ β
β β - Send reply β β
β β - Mark as read β β
β β - Join/Leave β β
β ββββββββββββββββββ β
β β
β ββββββββββββββββββ β
β β use-threads β β
β β β β
β β - List threads β β
β β - Search β β
β β - Create β β
β β - Activity feedβ β
β ββββββββββββββββββ β
β β β
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β
β
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β β State Layer β
β β β
β βββββββββΌβββββββββ β
β β Thread Store β β
β β (Zustand) β β
β β β β
β β Active thread β β
β β Thread list β β
β β Messages cache β β
β β Unread counts β β
β β UI state β β
β β Participants β β
β ββββββββββββββββββ β
β β β
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β
β
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β β Component Layer β
β β β
β ββββββββββββββββββββ΄βββββββββββββββββββ β
β β β β
β ββββββββΌβββββββ ββββββββββΌβββββββββ β
β β ThreadView β β ThreadSidebar β β
β β β β β β
β β Displays β β Lists threads β β
β β thread msgs β β Filter/Search β β
β β Reply input β β Unread badges β β
β β Actions β β β β
β βββββββββββββββ βββββββββββββββββββ β
β β
β βββββββββββββββ βββββββββββββββββββ β
β β ThreadPanel β β MessageThread β β
β β β β Preview β β
β β Wrapper β β β β
β β component β β On messages β β
β βββββββββββββββ βββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User Actions β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 1. Click "Start Thread"
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Component Layer β
β β
β MessageItem.onClick() β onThread(message) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 2. Call hook method
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hook Layer β
β β
β useThreads.createThread(messageId, content) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 3. Execute GraphQL mutation
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GraphQL Layer β
β β
β CREATE_THREAD mutation β
β ββ Insert thread record β
β ββ Insert first message β
β ββ Add user as participant β
β ββ Return thread data β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 4. Update Apollo cache
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Apollo Client β
β β
β Cache.writeQuery(GET_THREAD, newThread) β
β Cache.modify({ threads: [...existing, newThread] }) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 5. Update Zustand store
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Thread Store β
β β
β addThread(newThread) β
β setActiveThread(newThread) β
β setThreadPanelOpen(true) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 6. Re-render components
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Component Layer β
β β
β ChatWithThreads re-renders β
β ββ ThreadPanel appears with new thread β
β ββ ThreadView shows parent message β
β ββ Reply input is ready β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β 7. Subscribe to updates
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Subscriptions β
β β
β THREAD_MESSAGES_SUBSCRIPTION β
β ββ Listen for new replies β
β ββ Update cache automatically β
β ββ Components re-render with new data β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User sends reply
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β 1. Create optimistic message β
β - Temporary ID β
β - User data β
β - Current timestamp β
ββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β 2. Update UI immediately β
β - Message appears in list β
β - Reply count +1 β
β - "Sending..." indicator β
ββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β 3. Send mutation to server β
β REPLY_TO_THREAD mutation β
ββββββββββββββββββββββββββββββββββββββββ
β
βββββΊ Success
β β
β βΌ
β ββββββββββββββββββββββββββββββββββββ
β β 4a. Replace optimistic data β
β β - Real ID from server β
β β - Server timestamp β
β β - Remove pending indicator β
β ββββββββββββββββββββββββββββββββββββ
β
βββββΊ Error
β
βΌ
ββββββββββββββββββββββββββββββββββββ
β 4b. Show error state β
β - Mark message as failed β
β - Show retry button β
β - Keep in cache for retry β
ββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Other User's Action β
β β
β User B sends reply in thread β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Database Update β
β β
β INSERT INTO nchat_messages (thread_id, content, ...) β
β UPDATE nchat_threads SET message_count++, last_reply_at β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hasura Event β
β β
β Triggers GraphQL subscription β
β THREAD_MESSAGES_SUBSCRIPTION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Apollo Client (User A) β
β β
β Receives subscription update β
β onData callback fires β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Cache Update β
β β
β cache.modify({ β
β fields: { β
β nchat_messages: [...existing, newMessage] β
β } β
β }) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Component Re-render β
β β
β ThreadView automatically shows new message β
β Unread badge updates (if not active) β
β Thread count increments β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
src/
βββ graphql/
β βββ queries/
β β βββ threads.ts # GET_THREAD, GET_THREADS, SEARCH
β βββ mutations/
β β βββ threads.ts # CREATE, REPLY, JOIN, LEAVE, etc.
β βββ threads.ts # Subscriptions
β
βββ hooks/
β βββ use-thread.ts # Single thread management
β βββ use-threads.ts # Thread list management
β
βββ stores/
β βββ thread-store.ts # Zustand store
β
βββ components/
β βββ chat/
β β βββ ThreadView.tsx # Main thread display
β β βββ ThreadPanel.tsx # Panel wrapper
β β βββ ThreadSummaryPanel.tsx # AI summary
β β βββ message-thread-preview.tsx # Preview on messages
β β
β βββ thread/
β βββ thread-panel.tsx # Full-featured panel
β βββ thread-sidebar.tsx # Thread list sidebar
β βββ thread-header.tsx # Thread header
β βββ thread-message-list.tsx # Message list
β βββ thread-reply-input.tsx # Reply composer
β βββ thread-participants.tsx # Participant list
β
βββ types/
βββ message.ts # ThreadInfo, Thread types
Message β "Reply in thread" β CREATE_THREAD β New Thread
Channel β GET_CHANNEL_THREADS β Thread List
User β GET_USER_THREADS β My Threads
Search β SEARCH_CHANNEL_THREADS β Filtered Results
View β GET_THREAD + GET_THREAD_MESSAGES β Display
Reply β REPLY_TO_THREAD β Optimistic Update β Server Sync
Follow β JOIN_THREAD β Notifications Enabled
New Reply β Subscription β Store Update β Badge Update
Mention β Notification β Unread Count++
Mark Read β MARK_THREAD_READ β Badge Clear
Query β SEARCH_CHANNEL_THREADS β Filtered List
Activity β GET_THREAD_ACTIVITY_FEED β Recent Activity
This architecture provides a robust, scalable, and maintainable thread system that integrates seamlessly with the existing nself-chat application.
nself-chat v0.3.0 | GitHub | Issues | Discussions | Demo
Edit this page | MIT License | Β© 2026
(See π Security section below for 2FA, PIN Lock, and security audits.)
(Search lives in π Reference below.)
- π¬ Advanced Messaging
- π E2EE Setup
- π Search Setup
- π Call Management
- πΊ Live Streaming
- π₯οΈ Screen Sharing
- πΉ Video Calling
- ποΈ Voice Calling
- π± Mobile Optimization
- π§ͺ Testing
- π i18n
- π API Overview
- π Complete Reference
- π» API Examples
- π€ Bot API
- π Auth API
- π GraphQL Schema
- π Deployment Overview
- π³ Docker
- βΈοΈ Kubernetes
- β Helm Charts
- β Production Checklist
- π Production Validation
- π’ Multi-Tenant
- ποΈ Architecture
- π Diagrams
- ποΈ Database Schema
- π Project Structure
- π TypeScript Types
- π SPORT Reference
- π 2FA
- π¬ Messaging
- π Call Management
- π Call State Machine
- π E2EE
- πΊ Live Streaming
- π± Mobile Calls
- π PIN Lock
- π Polls
- π₯οΈ Screen Sharing
- π Search
- π Social Media
- ποΈ Voice Calling
- π Security Overview
- π‘οΈ Security Audit
- β‘ Performance
- π Best Practices
- π 2FA
- π PIN Lock
- π E2EE
- π‘οΈ E2EE Audit
v1.0.0 β’ 2026