Carriv: tailoring a résumé to a posting without inventing anything
Applying properly costs 30 to 45 minutes per posting; asking a chatbot to "write the résumé" produces invented experience that collapses in the interview. Carriv adapts a master profile to a given posting under a zero-fabrication rule written into every prompt.
30 to 45 minutes of work per application, down to about thirty seconds.
Nothing invented: everything on the résumé holds up in an interview.
The PDF clears ATS filters instead of being rejected on layout.
The credit is refunded automatically if generation fails. Never paid for nothing.
The model may reorder, select, rephrase and omit, but never fabricate an experience, a date, an employer, a diploma or a number. Translation is the only permitted transformation, with strict fidelity to the degree level.
The ATS score is not produced by the model. A real ATS is a keyword-matching engine, not a judge: the LLM extracts and ranks the gaps, the score is a deterministic function. Re-scoring always returns the same number, and applying a rewrite can only add a keyword, so it can never lower the score.
The OpenAI client is capped at 90 s with a single retry, instead of 10 minutes and 2 retries. On Vercel, a hung request has to fail while the Lambda is still alive, otherwise the catch block that issues the refund never runs and the user pays for a generation they never received.
The application has a deliberate visual identity; the PDFs stay strictly ATS-safe: one column, typography only, no colour and no ornament. That is exactly where most generators fail.
The Stripe amount is never trusted from the client: the credit count comes from a server-side table indexed by Price ID, with a signature-verified webhook. Extension tokens are stored as SHA-256 only. An explicit 30-page cap guards against PDF decompression bombs.