docs/design/)Category model + guest portal designdocs/reference/)docs/archive/)Crowd Source FAQ is a semantic search-powered FAQ and community Q&A platform targeting 1 million registered users. Questions are resolved through a hybrid vector + keyword search. Unanswered questions flow into a community board where subject-matter experts and community votes surface the best answers. Approved answers are promoted back into the official FAQ.
GitHub: https://github.com/vicharanashala/crowd-source-faq Production Backend: https://yaksha-faq-backend.vercel.app Production Frontend: https://yaksha-faq-frontend.vercel.app
| Layer | Technology |
|---|---|
| Frontend | React 18, Tailwind CSS, Vite |
| Backend | Node.js, Express.js, TypeScript (ES modules) |
| Database | MongoDB Atlas |
| Search | MongoDB Atlas Vector Search (cosine similarity) + MongoDB $text keyword search, merged via Reciprocal Rank Fusion |
| Embeddings | @xenova/transformers Xenova/multi-qa-mpnet-base-dot-v1 (768-dim, local singleton pipeline) |
| Auth | JWT (7-day expiry) + bcrypt (salt factor 12) |
| Rate limiting | express-rate-limit (300 req/15min general, 1000 req/15min admin) |
| AI providers | Anthropic, OpenAI, XAI, MiniMax (auto-detected, per-pipeline override supported) |
.js extensions on all relative imports.# Option 1: Full-stack runner (recommended)
./run.sh
# Option 2: Manual (via pnpm workspaces)
pnpm install # Install workspace dependencies
pnpm dev # Starts both apps concurrently
# Or individual apps:
cd apps/backend && pnpm dev # tsx server.ts on port 6767
cd apps/frontend && pnpm dev # Vite on port 5173
# Seed data:
cd apps/backend && pnpm run seed # 130 FAQs + users
run.sh at the project root orchestrates the full local dev environment:
| Step | What it does |
|---|---|
| Env setup | Prompts for MONGODB_URI and JWT_SECRET if not in .env/.env.local, saves to .env.local |
| Optional vars | Prompts for MINIMAX_API_KEY, NGROK_AUTH_TOKEN, ZOOM_CLIENT_ID/SECRET, REDIS_URL/TOKEN, SENTRY_DSN |
| Port check | Kills any existing process on ports 5173 or 6767 before starting |
| Ngrok tunnel | Starts ngrok on port 6767 if NGROK_AUTH_TOKEN is set; auto-updates ZOOM_REDIRECT_URI in .env.local |
| Backend | tsx watch server.ts — PID written to /tmp/yaksha-backend.pid, logs to logs/session_*.txt |
| Health check | Polls http://localhost:6767/csfaq/api/health until MongoDB is connected (max 20s) |
| Frontend | npm run dev — appends to the same session log |
| Cleanup | pkill -f "tsx.*server" + kills PIDs on SIGINT/SIGTERM |
Session logs are stored in logs/session_YYYY-MM-DD_HH-MM-SS.txt with a main_log.txt symlink to the latest.
See ARCHITECTURE.md for the full environment variable reference including AI provider keys, Zoom OAuth credentials, Cloudinary config, and notification settings.