Bhuvan M. Acharya
The Archive
All work
Case study/Oct 2026 →/active

CampusHire

A configurable college placement and recruitment management platform — the infrastructure layer of campus hiring.

Role

Designer & builder — for the Training & Placement cell of IIIT Tiruchirappalli

Stack

Java 25 · Spring Boot 4.1 · Spring Modulith · Next.js 16 · PostgreSQL 18 · Keycloak 26 · OpenFGA · Redis 8 · MinIO · Docker

Source

GitHub
CampusHire — Demo data

Demo data

Problem

Placement season runs on spreadsheets, chat groups and hope. The placement cell imports students by hand, eligibility rules live in someone's head, recruiters can't see their own applicant pools, and students hear about drives late. Every college rebuilds this mess every year.

Motivation

CampusHire is built for the Training & Placement cell of IIIT Tiruchirappalli — it encodes the process the cell runs by hand today: Excel imports, eligibility, drives, applications, offers and reporting. Placement officer dashboard The placement officer dashboard. Demo data. Application pipeline board The application pipeline board — every candidate stage, visible. Demo data.

Architecture

Students, coordinators, recruiters, placement officerBROWSERNginx terminates TLS and shields the stackNGINXTLS + RATE LIMITSThe CampusHire web applicationNEXT.JSWEB APPTwo stateless Spring Boot API replicasAPI × 2OIDC + PKCE identity with Google Workspace SSOKEYCLOAKCollege Google accounts sign students inGOOGLESSORecords, eligibility projections and analyticsPOSTGRESQL 18JSONB · GIN · MAT VIEWSCaches, pub/sub fan-out, rate limitsREDIS 8Relationship-based authorizationOPENFGAS3-compatible file storageMINIOPlatform modules plus CampusHire modulesSPRING BOOT 4 MODULAR MONOLITH — MODULITH-VERIFIEDOne-server production topology as codeDOCKER COMPOSE PRODNGINX · 2× API · CI
Architecture — campushire

The placement officer imports students from Excel, publishes drives with eligibility rules, students sign in with their college Google account and apply in one click, recruiters shortlist their own applicants, and everyone sees live placement analytics — with role-based access enforced on every record and field. Drive eligibility rules with live preview Eligibility rules with a live preview of who qualifies. Demo data.

Technical decisions

  • Modular monolith on Spring Modulith — module boundaries are verified in tests, not conventions.
  • Metadata-driven records: modules and 17 field types are data; records are JSONB with canonical values, optimistic concurrency, history, soft delete and uniqueness. CampusHire's 11 modules install into an institute as a declarative app pack.
  • Three-layer authorization: OpenFGA relationship checks per module, SQL record scopes on every read/write/export, and field-level security.
  • PostgreSQL 18 doing real work: JSONB, GIN indexes, materialized views.
  • 244 automated tests (JUnit 5 + Testcontainers covering PostgreSQL, OpenFGA, Redis, Mailpit and MinIO) gate CI.
  • Production topology as code: Docker Compose with Nginx (TLS), two stateless API replicas, Keycloak, PostgreSQL, OpenFGA, Redis, MinIO, plus Prometheus/Grafana and k6. Roles and access matrix Role-based access configured as data. Demo data.

Engineering challenges

Modeling eligibility as data instead of code, keeping Excel imports idempotent (dry run + downloadable error report), making OpenFGA tuple sync survive partial failure, and keeping a two-replica topology realistic about what it can serve. Excel/CSV import wizard The import wizard — Excel and CSV in, validated records out. Demo data.

Personal contribution

Designed and built by me, with AI-assisted tooling — an application of BM4A, the metadata-driven platform built alongside it. Built for the Training & Placement cell of IIIT Tiruchirappalli.

Outcome

In development — the full stack runs locally and in the one-server production compose; 244 automated tests pass in CI; analytics over 10,000 students and 200,000 applications answer in under 50 ms (integration test). The k6 load-test run on the target server and a dedicated security review are the next gates before the college rollout. Placement analytics Live placement analytics, built on PostgreSQL materialized views. Demo data. Student drives on mobile Student drives on mobile — where students actually check them. Demo data.

Lessons learned

Metadata-driven design is expensive for the first feature and cheap for every one after. Authorization is never "a middleware" — it's a data model.

Outcome

In development — the full stack runs locally and in the one-server production compose; 244 automated tests pass in CI; the k6 load-test run and the security review are the next gates before the college rollout.