DommoLabs.
Back to work
Product HR Tech 2026

Hiring Humans

A hiring platform for small businesses that treats candidates like people and owners like people too — AI helps with the unfun parts, and the human still decides.

  • StatusLive at hiringhumans.ai
  • ScopeSolo, end-to-end product
  • Timeline~3 months concept to live
  • UseLive with real operators · first job free
Case study preview Hiring Humans

Full product walkthrough coming soon.

The problem

Candidates are applying to a thousand jobs with AI. Companies are screening them with AI. Somewhere in the middle, nobody is meeting anyone.

Small business owners — restaurants, law firms, salons, trades, retail shops with three to fifty employees — hire constantly, but hiring isn’t their job. It’s the thing that keeps them from doing their job. No HR infrastructure, no employer branding, no time to write a post or run a structured screen. Meanwhile the candidate gets reduced to a keyword-matched resume. A sailing charter that actually needs warm people-skills — the teacher who spends summers on the water, the server customers love — can’t see any of that through a resume filter.

What I built

A two-sided hiring platform where both sides show up.

Hiring Humans is a SaaS for small-business hiring. Owners spin up a branded career page in minutes, post a job the AI drafts for them, and collect video, audio, or text screener responses from candidates. Everything flows into a kanban pipeline with ratings, private and team notes, and a structured rejection taxonomy. The AI assists everywhere — drafting descriptions, suggesting screener questions, rewriting captions — and decides nothing. Every job ships with structured JSON-LD for Google Jobs, a QR code, a printable PDF flyer, and an embeddable iframe for the company’s own site. First job is free; after that it’s $59 per job or a monthly plan.

Built with
  • Next.js 16
  • Supabase
  • tRPC
  • Claude
  • Mux
  • Resend
Product preview Hiring Humans

Preview panels will live here once the full case study is authored.

How it works

Three product decisions shaped it more than anything else.

1

The resume is not the first thing.

Every job can ask text, audio, or video questions — from both sides. Candidates record in-browser with permission explainers, a live timer, preview-and-retake, and a file-upload fallback for when browser recording fails. The resume is still there, still attachable. It’s just no longer the gate.

The hypothesis is the whole product: thirty seconds of video says more than thirty minutes of resume. A charter captain can see someone’s warmth in a clip. A keyword filter can’t.

Workflow preview The resume is <em>not</em> the first thing.
2

AI drafts. The human decides.

A six-step wizard takes a title, an industry, and a location and returns a complete, editable job description. Regeneration is rate-limited — ten per job per hour — so cost stays sane without feeling stingy. Every generation is logged for billing and future analysis. Nothing is auto-rejected. Nothing is auto-scored. If the AI touches it, it’s a draft.

Same rule at every touchpoint — emails, caption rewrites on the Social Studio, industry classification from a URL. Three decisions made the rule actually hold.

Annotated workflow AI drafts. The human <em>decides</em>.
  1. 1
    Two-tier model strategy. Claude Sonnet writes anything the user sees. Claude Haiku does the invisible work — scraping, classification, extraction. Sonnet’s voice, Haiku’s thrift.
  2. 2
    Regeneration is a UX, not a feature. Rate-limited but generous. Streaming so the draft forms word-by-word. Every call logged to a usage table. Reads as fast even when it isn’t.
  3. 3
    Banned phrases as lint. A brand-voice doc bans “AI-powered,” “streamline,” “leverage,” “empower.” Voice violations are treated like lint errors. The product refuses to call itself AI-powered even though Claude is doing meaningful work.
3

The dashboard is a coach.

The main dashboard isn’t a wall of charts. It’s a set of prioritised cards — Needs Attention, Humans Waiting, Your Roles, contextual suggestions — that tell the owner what to do next. Stale jobs get flagged Slow or Stale so the ones that are dying don’t just sit there.

The funnel view, the source quality score, the job health table — they exist, but in service of the next decision. The product’s job is to point the owner at the person waiting, not to produce a dashboard.

Workflow preview The dashboard is a <em>coach</em>.
Where it is now

MVP shipped — eight of eleven roadmap phases live. The business side is complete end-to-end; the candidate-side public job board is deliberately post-MVP. What’s in the docs matches what’s in the code.

Status Live · hiringhumans.ai
Used by Real operators · first job free
Cadence Active build · job board next
§ Stack and specifics for the builders in the room
Role Concept, product, UX, architecture, build — everything. Started as a UX concept that won UX Hack Show Lisbon in 2023; rebuilt as a real SaaS.
Timeline ~3 months concept to live
Stack
Next.js 16 · React 19 · TurbopackTypeScript · tRPCSupabase · Postgres · RLSClaude (Sonnet + Haiku) via @ai-sdk/anthropicMux · webhook-driven media state machineResend · React EmailTanStack Query · Zustand · nuqs · React Hook Form + ZodRadix · shadcn/ui · Tailwind · design tokensFeature-Sliced Design
Access Public · first job free, then $59/job or monthly
Why this stack Multi-tenancy is enforced at the database, not in app code. Every business-scoped table has RLS policies backed by an is_business_member() Postgres function — an application bug can’t leak data across tenants, because the query returns zero rows. Mux handles video encoding and delivery because encoding one screener can consume more CPU than a day’s worth of application traffic; Supabase Storage handles resumes and logos because documents don’t need any of that. tRPC gives end-to-end type safety with no schema language and no codegen. Feature-Sliced Design reads like over-engineering until the codebase has fifteen dashboard components — then it’s the reason the next feature still ships.