← 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
read the source →

A Screens

The interview moved into the browser

WebRTC replaced a four-hour round trip with a fifteen-minute call. This is the change the whole project is judged on.

What replaced the spreadsheet

Every candidate, stage and decision in one pipeline. Before this the process lived in a file passed between inboxes.

Intake through offer, 50+ a cycle

Applications, screening, interviews and offers as one tracked flow, so nobody is lost between two stages neither side owns.

Two roles, two surfaces

Managers raise hiring requests, HR runs the process. Each sees only the surface their job needs, off the same data.

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