JobCraftsMan

Rails 8 + Nuxt 4 · Claude · coming soon

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.

Stack

Rails 8Nuxt 4Claude Sonnet 4.6Claude Haiku 4.5Prawn

← All selected work