Generated: 2026-06-01 Source: CodeGraphContext MCP (117 files, 354 functions, 83 modules)
Full-stack FAQ & Community Platform. TypeScript backend (Express + MongoDB) + React/Vite frontend.
crowd-source-faq/
├── backend/
│ ├── config/ db.ts (connectDB)
│ ├── controllers/ 21 controllers (auth, faq, post, comment, search, escalation...)
│ ├── middleware/ auth.ts, admin.ts
│ ├── models/ 17 Mongoose models
│ ├── routes/ 12 route files (admin, analytics, auth, faq, community...)
│ ├── services/ aiClient.ts, knowledgeBase.ts, promotionService.ts
│ ├── utils/ 26 utilities (search, cache, logger, vttParser, zoom...)
│ └── scripts/ addIndexes.ts (migration)
├── frontend/
│ └── src/
│ ├── admin/pages/ 13 admin pages (Dashboard, FAQs, Users, Moderation, Zoom...)
│ ├── components/ community, faq, layout, ui (20+ components)
│ ├── pages/ HomePage, FAQPage, CommunityPage, AccountPage, Login...
│ ├── hooks/ useAuth, useNotifications
│ └── utils/ api.ts
└── context/ This folder
| Controller | Key Functions | Complexity |
|---|---|---|
| postController.ts | getAllPosts(49), checkDuplicate(22), resolvePost(16), createPost(10) | Highest |
| admin2faController.ts | computeTOTP(28), enable/disable/verify2FA | TOTP-based 2FA |
| zoomAuthController.ts | callbackZoom(24) | OAuth flow |
| commentController.ts | addComment(24), toggleUpvote(13), toggleDownvote(11) | |
| faqController.ts | getAllFAQs(22), getPaginatedFAQs(14), updateFAQ(14) | |
| freshnessController.ts | voteReview(20), runFreshnessCheck(14), verifyEscalatedFAQ(13) | |
| escalationController.ts | runUnansweredEscalationCheck(11), getEscalatedPosts, resolvePost | |
| adminController.ts | getStats(18), getFaqGrowth(17), getUserActivityChart(17) | |
| reputationController.ts | issueBadge(14), awardPoints(13), revokeBadge(10) | |
| zoomController.ts | processRecordingEvent(18) | |
| aiController.ts | getAiConfig, updateAiConfig, testProvider, detectActiveProvider | |
| searchController.ts | semanticSearch(9) | |
| authController.ts | register, login, logout, refresh | |
| notificationController.ts | getNotifications, markRead | |
| communitySearchController.ts | searchPosts | |
| moderationController.ts | suspendUser(10), getModerationLogs(10) | |
| dataExportController.ts | exportUserData | |
| knowledgeController.ts | ingest transcript knowledge | |
| teaNotificationController.ts | SpillTheTea notifications | |
| unresolvedSearchController.ts | track unanswered queries |
| Model | Purpose |
|---|---|
| User.ts | Authentication, roles, reputation |
| FAQ.ts | Questions/answers with embeddings |
| CommunityPost.ts | User posts with comments, upvotes, escalation |
| Comment.ts | Thread comments |
| TeaNotification.ts | SpillTheTea event notifications |
| Notification.ts | User notifications |
| NotificationSettings.ts | Per-user preferences |
| FreshReviewLog.ts | FAQ freshness voting logs |
| FreshReviewVote.ts | Per-cycle vote tracking |
| UnresolvedSearch.ts | Unanswered query tracking |
| TranscriptKnowledge.ts | Extracted Zoom meeting knowledge |
| ZoomMeeting.ts | Zoom meeting metadata |
| AiConfig.ts | AI provider configuration |
| SearchLog.ts | Search query logging (TTL 90 days) |
| AdminLog.ts | Admin action audit log |
| ModerationLog.ts | Moderation action log |
| ReputationLog.ts | Reputation points history |
| Badge.ts | User badges |
| Service | Key Functions | Notes |
|---|---|---|
| aiClient.ts | chat(18), summarize(13), parseDuplicateResponse(12), vectorFilter(11) | Multi-provider AI |
| knowledgeBase.ts | scoreAndSort(16), searchKnowledge(8), extractKnowledgeFromTranscript(7) | Zoom transcript processing |
| promotionService.ts | checkPromotionEligibility(13), promoteToAdminApproved(8), promoteToCommunityApproved(8) | Community post -> FAQ |
| Utility | Purpose |
|---|---|
| search.ts | computeRRF, vector search |
| duplicateDetector.ts | AI-powered duplicate detection (needs API key) |
| aiProvider.ts | Multi-provider resolution (Anthropic > OpenAI > Grok > MiniMax) |
| embeddings.ts | Vector embedding generation |
| vttParser.ts | parseVTTWithSpeakers(23) - VTT caption parsing |
| zoomOAuth.ts | getUserZoomToken(12) - OAuth token management |
| zoomExtractor.ts | parseExtractedItems(18) - meeting data extraction |
| zoomFallback.ts | withFallback(23), _isRetryable(17) - resilient Zoom calls |
| zoomHealth.ts | getZoomHealth(20) - health check |
| zoomCache.ts | Caching for Zoom data |
| cache.ts | Invalidate-based caching |
| circuitBreaker.ts | Execute with failure tracking |
| logger.ts | Request/scoped logging |
| fileLogger.ts | File-based logging |
| requestLogger.ts | HTTP request logging with sanitizeBody(14), statusColor(9) |
| metrics.ts | Prometheus metrics |
| notificationDispatcher.ts | dispatchNotification |
| rateLimit.ts | Rate limiting (stripped by user preference) |
| sanitize.ts | Input sanitization |
| validation.ts | Input validation |
| crypto.ts | Encryption utilities |
| requestContext.ts | Request-scoped context |
| jobQueue.ts | Background job processing |
| Page | Complexity | Notes |
|---|---|---|
| PostDetailDialog.tsx | 164 | HIGHEST - massive dialog component |
| CommunityPage.tsx | 121 | Community feed |
| FAQPage.tsx | 89 | FAQ browsing |
| CreatePostDialog.tsx | 77 | Post creation |
| AdminModeration.tsx | 53 | Moderation panel |
| UserDetailModal.tsx | 46 | User management modal |
| HomePage.tsx | 44 | Landing + search |
| AdminAISettings.tsx | 42 | AI config UI |
| FaqReview.tsx | 33 | Freshness voting UI |
| AdminUnresolvedSearch.tsx | 33 | Unanswered query tracker |
| CommunityPostCard.tsx | 29 | Post card with escalation badges |
| ResultCard.tsx | 24 | Search result card |
| AdminDashboard.tsx | 24 | Stats overview |
| ThreadDetail.tsx | 91 (CommentNode), 91 (ThreadDetail) | Comment tree |
| WordCloud.tsx | 20 | Tag cloud |
escalationController.ts manages scheduler (default 60min interval)GET /community/escalated-posts, POST /:id/resolve, POST /:id/dismissnone | escalated | resolved | dismissedrunUnansweredEscalationCheck() - batch marks posts + notifies adminsrunTimeTrialCheck() awards “first_responder” badge atomicallyevergreen | seasonal | volatilestill_accurate | needs_updateupdate_requested if no votes after ESCALATION_DAYSfreshnessController.ts runs on intervalRequires env: ANTHROPIC_API_KEY |
OPENAI_API_KEY |
XAI_API_KEY |
MINIMAX_API_KEY |
duplicateDetector.ts - semantic similarity checkaiClient.ts - multi-provider with circuit breakerpost_answered | post_deleted | first_responder_awarded | etc.teaNotificationController.ts manages dropsGET /api/zoom/auth → Zoom → GET /api/zoom/callbackpromoteFAQ() - creates FAQ from resolved postThese may be dead code or entry points called dynamically:
Note: Functions marked as potentially unused may be entry points, cron callbacks, or called via string refs. Manual audit recommended.
# MongoDB
MONGODB_URI=mongodb+srv://... (cluster0.z3cgb58, yaksha_faq)
# AI Providers (at least one required)
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
XAI_API_KEY=
MINIMAX_API_KEY=
# Zoom OAuth
ZOOM_CLIENT_ID=odkt50ZxS2lBwN0TOoUjQ
ZOOM_CLIENT_SECRET=
ZOOM_REDIRECT_URI=/api/zoom/auth/callback
# Auth
JWT_SECRET=
ADMIN_EMAIL=admin@yaksha.com
ADMIN_PASSWORD=[redacted]
# Feature flags
UNANSWERED_ESCALATION_DAYS=16
UNANSWERED_ESCALATION_CHECK_MINUTES=60
Collections: faqs, communityposts, comments, users, notifications, tea_notifications, fresh_review_logs, fresh_review_votes, unresolved_searches, transcript_knowledge, zoom_meetings, search_logs (90-day TTL), admin_logs, moderation_logs, reputation_logs, badges
Key Indexes:
escalationStatus+createdAt on communitypostsescalationStatus+escalatedAt on communitypostsfaqId+reviewCycle+voterId unique on fresh_review_votesreviewStatus+flaggedAt on faqs