One front door for a recruitment group.
A group of four specialist recruitment brands across Australia and New Zealand, around 40 consultants, was running its working day across six rented tools that never shared a record. I replaced them with one platform the business owns, on its own server, reading one people record. It is called HQ.
Open it on this page.
Clients is the contact board. Match is the search. Home, reports and training are in the same sign-in. Nothing on the screen is a real client or candidate. Pick a stop below and the prototype jumps straight there, or sign in as anyone and wander.
The problem
Everything the business needed already existed somewhere. Team news lived in a chat channel and scrolled away by lunchtime. Support requests went into a form and landed on a board nobody reported from, so no one could say how long anything took or what people kept asking for. Training sat in a rented learning platform and a pile of old posts. Dashboards ran on scripts and spreadsheets. Onboarding ran on manual forms and someone remembering to send a calendar invite.
An earlier reporting build had already surfaced $150,397 in revenue the old reporting missed. It made the real problem obvious: six tools, six logins, six versions of who works here, and a monthly bill for each.
Finding a candidate was the worst of it. The CRM offered Boolean search on fields only, so a recruiter had to guess the exact words a colleague typed years ago. Search “foreman” and you would never find the record that said “site supervisor”. Notes were not searchable. CVs were not searchable. Tens of thousands of people the business had already paid to find were effectively invisible.
Six tools, one record.
team news, gone by lunchtimelogin · copy · bill
support nobody reported fromlogin · copy · bill
training and old postslogin · copy · bill
dashboardslogin · copy · bill
on and offboarding, from memorylogin · copy · bill
fields only, no notes, no cvslogin · copy · bill
What I built
One platform behind a single Google sign-in, restricted to the company domain. A sidebar that is always there, one search across people, posts, dashboards and training, and each person’s own numbers on the home page before they open a single report. Six modules, one data model underneath.
The feed
Posts, reactions, comments and pinned announcements, scoped to the whole group or a single brand. Mentions find you, and a digest reaches people who do not log in daily. The old channel ran alongside it through an overlap, so nothing was lost in the move.
Match
A search engine over the business’s own candidates. More on this below, because it is the part nobody had seen before.
Dashboards
Every report the business already relied on, rebuilt in the product on live data. A seven-tab consultant weekly review that takes ten to fifteen minutes before a catch-up and fills the rest in itself. The same picture one level up for agency managers, with ranked consultants, colour-coded client health and a full financial-year history, aggregated from the consultant data rather than calling the CRM again. A KPI leaderboard scored against targets pro-rated to the days each person actually worked, so leave, part-time hours and a short week stop distorting the table. A weighted leadership score from 0 to 100. A scorecard that runs from group to brand to office to person. And a self-serve report builder with five ready-made packs, a custom builder, branded email, PDF or spreadsheet output, and scheduling that handles six timezones properly.
Training
A 100-day development programme built natively into the system, sitting in the same database as the performance data. Five pathways, 43 modules, 400+ lessons, 1,500+ content blocks across seventeen types, 500+ quiz questions marked on the server, and five milestone gates each signed off by a mentor. Competency ratings carry forward until a behaviour is consistently there, and every quiz attempt is kept, so the business can see which question everyone gets wrong and fix the lesson rather than the learner. Alongside it, 166 legacy modules, roughly 30 hours of the company’s own content, came across from the old platform. The import was checked against the original source by a verifier written to share no logic with the importer: 3,471 pieces of content, zero errors.
People operations
One form starts an onboarding, and the checklist, calendar and training all follow. The new starter’s first week books itself into their calendar, with each event linked to the lesson it belongs to, and they can be reached before day one on a personal email. Offboarding is a form too: access removed, assets returned, manager and payroll notified, account deactivated. Not a task someone has to remember. Agency managers get their own scoped portal to update their team, start an onboarding or offboarding, and see training completion and their own dashboards, and nothing beyond that. Tested deliberately with two real accounts.
Support
Real tickets with owners, quotable references, six categories and four severities. Each ticket captures the page, brand and device it came from, so nobody has to ask “where were you?”. Reporting runs on medians, not averages, and reads as product pain rather than a scoreboard. It started clean: the old board stays readable as history and nothing new goes into it.
The assistant
An in-app assistant sits over all of it, answering from 600+ indexed trainings and reading a person’s own stats without sending anything outside the system.
Match
Every candidate’s fields, every note ever written about them, and the full text of every CV (PDF, Word, RTF and plain text) are combined into one profile per person, split into passages so a single line buried in a CV can still surface someone, and searched two ways at once: by meaning and by keyword. Seven signals decide the ranking: meaning, keyword strength, skills and tickets, what the CV says, how close the job title is, how recently the record was touched, and how near the person lives. Each is arithmetic on real evidence, so every score can be explained.
Recruiters get sliders instead of one score they cannot argue with, plus four presets: balanced, semantic-led for a vague brief, skills and tickets for compliance-heavy roles, and fresh and local. Every result explains itself, down to “skills 2 of 3, same city, updated 12 days ago”, and in red when a required ticket is missing.
It was taught the industry by hand. A general model does not know a chippie is a carpenter, that MEWP and scissor lift both mean EWP, or that Tāmaki Makaurau is Auckland. So Match carries 610 New Zealand locations down to suburb level with Te Reo names and macron folding, 80+ role families with seniority tiers, and 950+ tickets and licences. Synonyms are added to a search, never substituted for what was typed. Three ways in: a free-text brief, a live job, or a saved talent pool. 5,000+ jobs synced, each with its own candidate matches.
Owned, private, and nothing leaves
The whole Match engine runs on a small model on the business’s own server. There is no per-search cost and no candidate data is ever sent to an outside AI service. A comparable build on commercial AI services was costed at $900 to $2,200 a month, or $30 to $65 per consultant. This removes that line entirely, and the privacy conversation with it.
Candidate data sits on a Sydney server, with New Zealand data held in Australia documented rather than assumed. There are two locks on the door: a company-only gateway in front of the site and Google sign-in inside it. The database is not reachable from outside, and the server has no open door: it dials out, nothing dials in. Access is enforced on the server, not hidden in the page, so a consultant cannot reach another’s data at all. Match and the reporting are read-only to the CRM; they can never change or delete anything, and it stays the single source of truth. Backups are restored and tested, because a backup nobody has restored is an assumption.
One place.
Every person, every number, every candidate, in one place. Owned outright.