Veil is a real-time anonymous Q&A platform designed for events, livestreams, and interactive sessions. It empowers audiences to ask questions without revealing their identity, and gives moderators full control to filter, highlight, and respond — all in a sleek, live-updating interface.
- Anonymous Q&A – Attendees can ask questions without logging in
- Live WebSocket Updates – See questions in real time without refresh
- Moderator Dashboard – View, filter, answer, and hide questions
- Audience Upvoting – Surface popular questions via likes
- Poll Creation – Run simple polls to gather quick feedback
- Room Codes – Easily join sessions using a 6-character code
- Session Management – Organize and revisit rooms per event
| Layer | Tech |
|---|---|
| Frontend | Next.js 14, TailwindCSS, Shadcn UI, Lucide Icons |
| Backend | NestJS (WebSocket + REST API) |
| Database | Prisma + PostgreSQL |
| Authentication | Passport.js |
| Infra | Render (API), Vercel (Frontend) |
| Realtime | WebSockets (via socket.io) |
| Other | TypeScript, Turbo Monorepo, ESM Modules |
git clone https://github.com/cridiv/Veil.git
cd Veilpnpm installCreate a .env file in the root and include:
# Database
DATABASE_URL=postgresql://username:password@localhost:5432/veil_db
# Authentication
JWT_SECRET=your-jwt-secret-key
SESSION_SECRET=your-session-secret-key
# OAuth (if using social login)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
# App Configuration
NODE_ENV=development
PORT=5000
FRONTEND_URL=http://localhost:3000Note: Be sure to also add these in Vercel and Render during deployment.
Set up your PostgreSQL database and run migrations:
cd apps/api
pnpm run db:migrate
pnpm run db:seed # Optional: seed with sample dataRun both backend and frontend in separate terminals:
Backend (NestJS)
cd apps/api
pnpm run start:devFrontend (Next.js)
cd apps/web
pnpm dev- Connect repo on Render
- Set root directory to
apps/api - Add environment variables
- Build command:
pnpm install && pnpm run build- Start command:
pnpm run start:prod- Connect repo on Vercel
- Set root directory to
apps/web - Add all environment variables
- Deploy
Veil uses Passport.js for flexible authentication strategies:
- Local Strategy – Username/password authentication for moderators
- JWT Tokens – Secure session management
- Anonymous Access – No authentication required for audience participation
- OAuth Support – Google, GitHub, and other providers (optional)
We welcome all contributions!
- Fork the repo
- Create a branch:
git checkout -b feat/your-feature-name - Make changes and commit:
git commit -m "feat: your feature" - Push the branch:
git push origin feat/your-feature-name - Open a pull request 🎉
- Aderemi Ademola – Backend Lead, Realtime Systems (X: @crid_iv)
- Peters Joshua – Frontend Lead, UX Engineer (X: @joshpet77)
- Oyedapo Kayode – Product Designer (X: @Kayode_96)
This project is licensed under the MIT License.
Built to make questions speak louder than names. 🫶