← All projectsapprenticeship2024Under the hood ↓

Faderco HR Portal

My first production system. Built it alone, from “what do you need” to “it's live.”

An internal HR portal that retired the spreadsheets: candidate intake through offer, 50+ a cycle.

Role
Apprenticeship · solo, 10 months
Stack
DjangoReactPostgreSQLBootstrapStreamWebRTCGoogle OAuth2
Result
4h → 15minper interview, once the call moved into the browser
Access
internal tool, code stays with Faderco

A Screens

Click any screen to open it in the zoom viewer. Wheel to zoom, drag to pan.

01The change that mattered: interviews moved into the browser over WebRTC, and a four-hour round-trip per candidate became zero.
02The pipeline at a glance. This is what replaced the spreadsheet.
03Intake through offer for 50+ candidates a cycle.
04Interview scheduling.
05Candidates who were not right this time, kept findable for when they are.
06Job post management.
07A second role with its own surface: managers raise requests, HR runs the process.
08Sign-in, over Google OAuth2.

Under the hood

Faderco HR Portal

Under the hood

Faderco HR Portal

B Architecture

A vacancy, end to end

Two staff roles and a candidate who never gets an account. Every stage moves the applicant's record one notch along a five-state ladder, and the interview happens on a private link that dies with the call.

From a vacancy to a hire

A hiring pipeline with two roles on it: managers raise the need, HR runs the process, and the interview happens in the browser.

  • What people use
  • Code I wrote
  • Where it is kept
  • Someone else's service

A vacancy becomes a hire

The whole pipeline is one chain of records. A request becomes a post, a post collects applicants, and an applicant carries an interview and an evaluation, so nothing about a candidate lives in somebody's inbox.

C Decisions

The calls that made the difference, and what each one bought.

  1. Shipped their first remote interviewing on the Stream API. A four-hour drive each way became a fifteen-minute call in the browser.

  2. Every interview room is a UUID with a per-candidate guest id and an expiring token, so a link cannot be forwarded into an open door.

D What it runs on

  • Django
  • React
  • PostgreSQL
  • Bootstrap
  • Stream
  • WebRTC
  • Google OAuth2

internal tool, code stays with Faderco

↑ Back to the surface