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
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.
The placement officer dashboard. Demo data.
The application pipeline board — every candidate stage, visible. Demo data.
Architecture
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.
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.
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.
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.
Live placement analytics, built on PostgreSQL materialized views. Demo data.
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.