What it is

Workopia Hire is a conversational ATS — the entire hiring workflow runs inside one ChatGPT conversation. A small business owner describes a role and, without leaving the chat, gets a job description, a live apply page, a promotion kit, ranked applicants, and a signed-ready offer.

Inspiration

Hiring one person means juggling five disconnected tools: a job board, a design app, an applicant tracker, email, and a document editor. For a café or a small shop that has no HR team, that overhead is the real barrier. But the decision already happens in a chat window — so we put the whole process there.

What it does

A complete hiring loop, in five moves:

  1. Describe the role → a complete, structured JD in seconds, grounot a blank template.
  2. Publish (explicit approval required) → a real public apply page, instantly.
  3. Promote → a branded QR hiring poster, a ready caption, and one-click share to 8 platforms.
  4. Review → every applicant is auto-scored 0–100 against the role's must-haves and ranked, with the matched/missing-skill evidence and the resume attached.
  5. Hire → interview invites, and a compliant offer letter as a real PDF — preview before send.

Built-in guardrails: market pay benchmarks (44+ countries) and st(including US state-level minimums) are shown separately, so the owner sees what the market pays and what the law requires. Below-floor offers are blocked server-side before they can be sent.

How we built it

Built with Codex + GPT-5.6 — the model plans and converses, the backend is deterministic.

  • Next.js 15 App Router on Vercel, live at hire.workopia.ai
  • An MCP server (JSON-RPC 2.0) exposing 6 tools / 19 actions, with ChatGPT Apps SDK widgets (skybridge resources) for the JD, poster, candidate pipeline, and offer preview
  • A self-contained OAuth 2.1 authorization server — PKCE, dynamic client registration, refresh-token rotation — so the app connects from ChatGPT (and Claude) with no external dependency
  • MongoDB for jobs, applications, and GridFS resumes; satori + resvg for poster rendering; Resend for email; Gotenberg for offer PDFs

Challenges we ran into

  • Widget mounting: ChatGPT's Apps SDK only mounts a widget when the resource is served as text/html+skybridge. A more "standards-compliant" mime silently broke every widget after the first — the fix was one line, the diagnosis was not.
  • Cross-tool session memory: shared-secret callers had no stable identity, so a later tool lost the applicant selected in an earlier turn. We attached a stable subject so context persists across the whole conversation.
  • The wage-floor guardrail: making "block below-floor offers" hold across pay units (hourly vs annual) and jurisdictions, without false positives.

Accomplishments

The loop actually closes: publish, apply, auto-score, and generate an one domain. In the demo, the guardrail blocks a real below-minimumoffer before it can be sent.

What we learned

Conversational software still needs deterministic edges — explicit approvals, server-side blocks, and evidence-backed ranking are what make it trustworthy, not just fluent.

What's next

Verified wage floors across more jurisdictions, a richer employer workspace, and business/enterprise workflows on the same MCP core.


Live: https://hire.workopia.ai · MCP endpoint: https://hire.we Demo: https://www.youtube.com/watch?v=Wc0hHG7TSho

Built With

Share this project:

Updates