Jainth

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
The Aarvam landing page, headlined 'You vs AI', beside a hackathon pass with a live registration countdown
The problem

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.

Architecture
  1. Client
    • React 18 + VitePublic site, team portal, admin
    • React Query + RHFZod schemas shared with the API
    • QR check-inCamera scan at the desk
  2. Server
    • Express API85 routes, three staff roles
    • Cron jobsSeat holds, test windows, releases
    • GradingSingle, multi, numeric; re-score
    • Audit logBefore/after on admin changes
  3. 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.

The hard parts
  • 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.

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

    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 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

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