Skip to content
ZERONE
Back to projects
B2B SaaS · HR-Tech · AI matching · 2026

Case 06 — PairSonal: matching platform for temp staffing & recruitment

Bilaterally anonymous B2B matching between companies and HR service providers. Anonymity is an architectural invariant, not a marketing promise — contact data lives in a separated sphere and is released server-side only on a mutual match.

0Cold calls (by design)
4Match dimensions
2Market sides · equal
1-KlickFramework-contract activation

The challenge

Staffing agencies flood HR departments with cold outreach — phone, email, pressure. Many companies strip contact data from their job ads. The agencies in turn pay six-figure sums per region (benchmark ~€6,000/year for raw address lists) for databases in which most companies have no current demand. What was missing was a bilateral, technically-enforced channel that finds supply and demand in a structured way — without one side drowning the other in noise.

Architecture

A Next.js frontend with separate portals for the two market sides, a FastAPI backend with OAuth2/JWT auth and sphere-separated contact-data persistence. PostgreSQL primary for profiles, demands and matches, with Alembic migrations. A bespoke Python matching engine scores four dimensions deterministically — region (PLZ lookup), profession, industry, placement type — with no black-box model: every recommendation is explainable through the scoring function. A contact router enforces the anonymity invariant server-side and opens the channel only on a mutual match.

FastAPI · OAuth2 · JWT · OpenAPIAPIORCHESTRATORNext.js · company portalUI-CWORKERNext.js · agency portalUI-PWORKERMatching engine · region · profession · industry · placementMATWORKERAnonymisation sphere · contact gateANOWORKERAdmin router · pilot control · badge issuanceADMWORKERPostgreSQL · SQLAlchemy · AlembicDBPRIMARY
APIFastAPI · OAuth2 · JWT · OpenAPI
UI-CNext.js · company portal
UI-PNext.js · agency portal
MATMatching engine · region · profession · industry · placement
ANOAnonymisation sphere · contact gate
ADMAdmin router · pilot control · badge issuance
DBPostgreSQL · SQLAlchemy · Alembic

Pipeline

Matching & contact-opening flow

  1. 01Company posts the demand in a structured way (free): industry, profession, region by postal code, placement type, conditions.
  2. 02Matching engine scores all agency profiles against the demand — deterministic scoring function across four dimensions, every decision auditable.
  3. 03Agency sees matching demands and expresses interest — the company's HR contact data is technically absent from the payload.
  4. 04Company curates interested agencies and actively picks which one may make contact — no broadcast, targeted decision power.
  5. 05On a mutual match, the contact router opens the channel, the framework contract activates, and the engagement is booked via a one-click concretisation.

Technology stack

Next.js · React · TypeScriptTailwind CSS v4FastAPI · UvicornSQLAlchemy · AlembicPostgreSQLpython-jose (JWT) · passlib (bcrypt)OAuth2 Password-FlowCustom Matching-Scorer (Python)OpenAPI 3.0systemd · nginx · Let's Encrypt

Outcome

Live in Early Access on pairsonal.de with a regional pilot rollout. Anonymity is implemented as an architectural invariant: an agency cannot reach a company through the platform until the company itself unlocks the match. Matching remains deterministic and explainable — the same demand yields the same suggestion list, no model drift, no black-box overselling. Compared with the competitor's broadcast model, the curated-choice flow reduces cognitive load on both market sides.

Similar challenge?

Talk to us — we listen first, deliver second.

Request a project