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:
- Describe the role → a complete, structured JD in seconds, grounot a blank template.
- Publish (explicit approval required) → a real public apply page, instantly.
- Promote → a branded QR hiring poster, a ready caption, and one-click share to 8 platforms.
- 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.
- 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
- chatgpt-apps-sdk
- codex
- gotenberg
- gpt-5.6
- mcp
- mongodb
- next.js
- node.js
- oauth2
- resend
- resvg
- satori
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.