crowd-source-faq

Codebase Audit - Yaksha FAQ Portal (Crowd Source FAQ)

Generated: 2026-06-01 Source: CodeGraphContext MCP (117 files, 354 functions, 83 modules)

Project Overview

Full-stack FAQ & Community Platform. TypeScript backend (Express + MongoDB) + React/Vite frontend.


Directory Structure

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

Controllers (21 files)

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  

Routes (12 files)


Models (17 files)

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

Services (3 files)

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

Utils (26 files)

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

Frontend Pages & Complexity

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

Key System Features

1. Escalation System

2. Time-Trial System

3. Freshness System

4. AI Duplicate Detection

5. SpillTheTea Notifications

6. Zoom Integration

7. Promotion Service

8. Search System


High-Complexity Functions (>15 CC)

Backend Controllers

Backend Services

Backend Utils

Frontend Components


Potentially Unused Functions (Dead Code)

These may be dead code or entry points called dynamically:

Controllers

Note: Functions marked as potentially unused may be entry points, cron callbacks, or called via string refs. Manual audit recommended.


Environment Variables Required

# 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

Admin Users


Database: yaksha_faq

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: