JobCraftsMan
An AI coach for the whole job hunt — interview practice, cover letters and CV building in one place. Built solo on Rails 8 and Nuxt 4, launching soon.
Visit jobcraftsman.com- Status
- In active development — launching soon
- Role
- Solo — product, design, frontend, backend, ops
- Frontend
- Nuxt 4 · Vue 3 · TypeScript on Vercel
- Backend
- Rails 8 API-only · PostgreSQL · Puma
- AI
- Claude Sonnet 4.6 (generation) · Haiku 4.5 (refinements)
- Deploy
- Kamal 2 to DigitalOcean · managed Postgres
What it does
JobCraftsMan puts the three things a job seeker actually needs into one tool. You can practice an interview — preset questions at easy, medium or hard, or tailored to a role or a pasted job description — and get a score and specific feedback on each answer. You can write a cover letter and refine it with plain-language instructions. And you can build a CV from a reusable profile, get AI suggestions to sharpen it, and score it against a job description for ATS fit.
It's aimed at active job seekers — early-career, career changers, returners — and it's English at launch, built to add more languages.
Two models, picked per job
The coaching runs on Claude, but not one model for everything. The expensive, high-quality work — generating an interview with model answers, scoring a CV against a job description — uses Sonnet 4.6. The cheaper, high-frequency work — rewriting a cover-letter line, polishing a CV bullet — uses Haiku 4.5. Matching the model to the job is the difference between a tool that's pleasant to use and one that's too expensive to run.
A whole interview — the question list and a strong answer for each — is generated in a single call and stored, so the user can work through it without burning a request per question. Per-answer feedback is then a small, focused call rather than re-sending the entire transcript.
Credits, not surprises
AI features cost money on every use, so JobCraftsMan runs on an append-only credit ledger rather than ad-hoc metering. Each paid action — generate an interview, improve a CV, score it against a JD — costs a credit; the balance is always the sum of the ledger, never a counter that can drift. Free accounts start with a few credits; the paid tier tops up monthly.
Every credit spend is wrapped in a transaction with the AI call, so a failed generation rolls the credit back instead of charging for nothing. A per-user daily spend ceiling sits on top as a hard stop, and an ATS score is cached against a hash of the CV and the job description so re-viewing an unchanged result never costs a second credit.
The foundations
Underneath the AI is the unglamorous work that makes a product trustworthy: JWT auth with per-device sessions, email verification before anything can be spent, rate limiting, a full audit log of every meaningful action, GDPR export and soft-delete, and error tracking wired in from the start. Cover letters and CVs render to PDF server-side with Prawn — pure Ruby, no headless browser.
It deploys to DigitalOcean with Kamal 2 and a managed Postgres instance, with background jobs and caching both running on Postgres rather than a separate Redis. It's the same zero-to-one-hundred pattern as my other products: I own the product decisions, both halves of the code, and the operational details — here, before the public launch rather than after.