Wisuda Oktober ITB 2026 Website
Official website of the October 2026 ITB graduation. I built the graduate CSV import, the synthetic seed data and the profile API.

Overview
The official website of the October 2026 ITB graduation parade, live at wisokto2026.wisudaitb.id. It has a graduate directory, a TA Fair where visitors like final projects, Words of Appreciation messages, merchandise and donations. A team of 12 staff and 2 leads built it in five sprints, from 15 September to 17 October 2026.
Stack
A Bun monorepo with a Hono and Prisma API on PostgreSQL, a React 19 public site and a committee dashboard. Zod schemas generate the OpenAPI contract, and orval generates typed TanStack Query hooks from it, so frontend and backend share one source of truth. Every task was a work order merged through a reviewed pull request.
Graduate import
The committee needed to load the graduate roster from a CSV. I built the admin-graduates module: it parses the file, validates every row with Zod and upserts by NIM, so importing the same file twice is safe. The same module serves the admin endpoint POST /api/v1/admin/graduates/import and a command-line tool for the leads.
Seed data
I generated 1,000 synthetic graduates across 12 faculties and 50 study programs, 17.5% of them with a final-project title and abstract. With it the graduate directory and the TA Fair could be demoed and load-tested with more than one page of data.
Profile API
GET /api/v1/profile returns everything the profile page needs in one authenticated call: the user's profile, their roster entry, the messages they sent and received, the TA Fair entries they liked and the totals. It ships with its own test suite and a generated client hook.

