← all work
live2024

Host family pairing — 112 families, matched in days, not weeks

A pairing app that cut the international-student host family matching process by more than half — drag-and-drop pairing, a scoring engine, and year-over-year rollover.

PythonFlaskSQLiteJavaScript (SortableJS)Cloudflare Access

Architecture

Roster importCSV in, validated
Recommender100-pt scoring engine
Pairing boarddrag-and-drop, instant
Rollovernext year, history kept
Exporteverything out, clean

The problem

Every August, my school’s international program matches dozens of incoming students with host families. The old process was a spreadsheet relay: columns of notes, tribal knowledge, and weeks of back-and-forth email. One student, one family, one wrong match — and the fall semester starts awkward.

What I built

A web app that turns the whole process into one place:

  • Drag-and-drop pairing board — students on one side, families on the other; pair them visually, undo freely, see the whole roster at a glance.
  • A recommender engine — every unpaired student is scored against every eligible family on a 100-point model: age proximity to in-house kids, shared interests, cultural proficiency, prior hosting experience, and capacity. Hard filters (gender mismatches, prior-year repeats) are excluded automatically. It’s a decision support system, not a black box — the human makes the final call.
  • Year-scoped history — pairings are stored per school year, so next-year rollover carries continuing matches forward while preserving the full history. Nothing is ever silently overwritten.
  • CSV in, CSV out — import the roster, export the final match list, and feed the rest of the onboarding pipeline.

The result

The matching process went from weeks to days — cutting turnaround by more than half for a program serving 112 families — and the pairing decisions now have reasons attached to them, not just gut feel.

Design decisions → Matching 112 students to 112 families without a spreadsheet relay — the recommender model, drag-and-drop as source of truth, and why history is sacred.

Why it matters

This is the “automate the boring, keep the human in the loop” pattern: build the tool that removes the grunt work, score the options so decisions are explainable, and let the domain expert (me, the coordinator) make the final match.