work aarvam
Aarvam
The platform behind Aarvam, Cybernaut EdTech's 24-hour college hackathon in Karur. Built end to end as a freelance engagement: public sign-up and payment checks, a week of division-specific training and assessments, problem statements, submissions, desk check-in and results — one team login, one admin panel.
- Role
- Full-stack, freelance
- Status
- Live in production
- Client
- Cybernaut EdTech

Five phases, two divisions, and only twenty seats.
Aarvam runs as a pipeline. Teams of five register and pay, train for a week in a Learnathon for their division, pick a problem statement, upload an idea deck, then build for 24 hours on site. Stitched together from forms and spreadsheets, every phase is another hand-off to reconcile.
The platform carries a team through every phase on a single Team ID, and gives organisers a panel for each: a payment queue, an assessment builder, scheduled problem release, a submissions export, a check-in desk and results — with three staff roles and an audit log of every change.
With ten seats a division and money changing hands, the failures that mattered were event-day ones: a seat sold twice, a score seen early, a queue at the desk.
- Client
- React 18 + VitePublic site, team portal, admin
- React Query + RHFZod schemas shared with the API
- QR check-inCamera scan at the desk
- Server
- Express API85 routes, three staff roles
- Cron jobsSeat holds, test windows, releases
- GradingSingle, multi, numeric; re-score
- Audit logBefore/after on admin changes
- Data & services
- MongoDB15 models, transactional sign-up
- AWS S3Payment proofs, decks, photos
- BrevoFive branded transactional emails
Deployed: Client on Vercel, API on Railway, as one npm-workspaces monorepo.
Twenty seats, none sold twice
A seat is reserved the moment team details are in, held 45 minutes for the UPI payment, and held 24 hours after a rejected payment while the team re-uploads. The count and the insert share one MongoDB transaction, and both concurrent sign-ups write the per-division counter that mints the Team ID — so Mongo aborts one and retries it against the true count.
Why: at ten seats a division, one double-sold seat is a refund and an apology.
Assessments that can't leak
One shared attempt per team, questions shuffled per team by a seeded PRNG so every answer maps back regardless of order, and autosave as they work. Correct answers never leave the server before a team submits, a cron closes the window and auto-submits stragglers, and every route checks the team's division.
Caught in review: an unscoped route let a team reach the other division's test by id.
Results go live in one step
Judges' scores arrive as a CSV, validated all-or-nothing and always staged unpublished, so a typo is fixed by re-importing before anyone sees it. Publishing flips every row and the event-wide switch together, and every read path requires both.
Why: a half-finished import must never reach a team's dashboard.

Team registration: team details and division picker beside a running checklist of what is still missing

The two divisions, Hardware and Software, each showing its own seats left

The five-step timeline from registration through the Learnathon to the 24-hour build