GigGeni
Skill-based talent competition platform with a 4-round elimination system, Gemini 2.0 Flash AI quiz generation and subjective grading, BullMQ async workers, and a Next.js 15 frontend.
Node.jsTypeScriptExpressMongoDBSocket.IOBullMQRedisGemini AINext.jsCloudinary
S Situation
GigGeni needed a talent discovery platform where employers post skill-based competitions and candidates compete through four elimination rounds — quiz, video submission, interview, and final task — with AI-assisted evaluation to scale the screening process without manual review.
T Task
I built the entire backend API and the Next.js web application: the competition state machine, AI evaluation pipeline, async job infrastructure, real-time notifications, and the full employer/candidate-facing frontend.
A Actions
- Built a 16-module Node.js/TypeScript/Express API with a 4-round competition state machine per participant: Round 1 (AI-generated quiz), Round 2 (video submission review), Round 3 (scheduled Zoom interview), Round 4 (task submission and final presentation).
- Integrated Gemini 2.0 Flash for two AI features: automatic quiz generation from competition details (title, description, skills, criteria → structured MCQ/true-false/short-answer/essay JSON with configurable point distribution), and automated subjective answer grading that evaluates free-text responses against correctness criteria and awards partial credit (0–100% of question points) — eliminating manual Round 1 scoring.
- Set up BullMQ backed by Redis with three queues (email-sending, competition-updates, notification-sending) and a dedicated competition worker process running concurrently via the concurrently package — score aggregation runs out of the API process so heavy computation never blocks requests.
- Implemented Socket.IO with JWT-authenticated connections and per-user rooms — live notification delivery dispatched from the notificationQueue worker, keeping all connected clients updated on round progression and competition results.
- Handled media with Cloudinary streaming upload for both images and videos with auto-cleanup on deletion — covering profile pictures, Round 2 video submissions, and task deliverables.
- Multi-token JWT strategy: 15-minute access token, 7-day refresh token, and a separate 15-minute reset token — each with its own secret — plus SHA256-hashed 6-digit OTPs with 15-minute expiry for email verification.
- Added Mongoose post-save hooks that automatically recalculate and persist profile completion percentages per role (Employee: skills, experience, education; Employer: company details, LinkedIn) after every profile update.
- Applied Helmet security headers, express-rate-limit (100 req/15 min), CORS whitelist (giggeni.com, admin.giggeni.com), and Pino structured JSON logging across the API.
- Built the Next.js 15 frontend with Redux Toolkit + RTK Query (tag-based cache invalidation, automatic Bearer token injection, auto token refresh on 401), shadcn/ui components, Framer Motion animations, and dark/light mode via next-themes — covering competition browsing, quiz manager with AI generation UI, participant round tracker, video review, Zoom scheduling, and leaderboard.
R Results
- Platform live at giggeni.com — employers can run end-to-end talent competitions without any manual Round 1 screening thanks to AI quiz generation and grading.
- Separate BullMQ worker process keeps score aggregation and email delivery fully decoupled from API response times.
- 4-round elimination flow handles the full hiring funnel — quiz to final task — within a single platform.