Overview
Profila helps candidates measure a CV, choose improvements, edit in place, and keep a versioned working copy — with a simple job board for the search around it.
I designed, built, and operate it as a full product: accounts, scoring, policy, and production. The public loop is short — know the score, then raise it — but the system is built like something people should trust with a résumé, not like a demo wrapped around a model.
The score is our meter, not an employer’s. That constraint shaped the product as much as the architecture did.
The Challenge
A CV product fails in ways a typical CRUD app does not:
- Résumés are sensitive; keeping original files around is a liability, not a feature
- Inference is slow and contended — if it sits on the request path, the rest of the product waits with it
- A free tier without limits gets abused; a free tier without a real access model is a rewrite later
- “ATS score” copy is easy to ship and hard to defend
- Auth, telemetry, and release discipline still have to be present when the team is small
What was needed was a trustworthy scoring product: a real account model, a fair free tier, and an analysis pipeline that does not take the app down with it.
The Solution
I treated policy and privacy as part of the architecture, not as follow-up work:
- Clear product split: the interface stays presentational; scoring, identity, limits, and jobs live behind the API
- Privacy-first ingest: derive what analysis needs, do not retain original uploads, and keep privileged surfaces free of résumé bodies
- Async analysis: validate up front, then queue the slow work so the interactive path stays responsive
- Capabilities, not scattered plan checks: the same access model covers free, paid, and internal roles — including a launch with billing off
- Fair use: rate limits on auth, a metered free tier, and reuse when the candidate measures the same CV again
- Honest launch: feature flags to ship a focused loop without pretending unused commercial paths are live
- Observability without leakage: product analytics and error tracking that do not need CV contents to be useful
Inference stays off the hot path. The product can improve the model later without rewriting how people sign in, get limited, or get a result.
Key Technical Features
- Server-side sessions, confirmation before privileged actions, and session invalidation on credential changes
- Separate controls for authentication abuse and daily analysis use — a failed run does not burn a free slot
- Background jobs with retries and progress the UI can surface, without holding original files in the pipeline
- Immutable CV revisions (restore without duplicating) and a job board with a fixed pipeline
- Upload validation, log redaction for sensitive fields, and admin tools that list accounts rather than documents
- Containerized production at the edge, with automated tests and security scanning on the way to release
Impact
Profila
- Shipped as a product — live at profila.dev, with a complete measure → choose → edit → save loop
- Sensitive data stays bounded — original files are not kept; support and error paths are designed not to display CV text
- The product stays interactive during analysis — scoring is a job, not a blocked request
- Policy is encoded once — launch without billing, keep room for paid and admin access, preview free results instead of hiding the product
- Honest scoring — structure, impact language, and length; not a fake ranking against an employer’s ATS
What that bought
| Outcome | Detail |
|---|
| Smaller data footprint | Only what the product needs to score and version; not the original file |
| Fair free tier | Metered use, plus reuse when nothing about the CV has changed |
| Responsive core | Slow inference isolated from the request path |
| Access that can evolve | Capabilities instead of one-off plan branches |
| Safer operations | Telemetry and admin without résumé contents in the blast radius |
Profila turned “upload a CV, call a model” into a product with privacy defaults, enforceable policy, and an operations story you can actually run.
Takeaway
This is the kind of product work I care about: systems people can trust — sensitive data handled on purpose, access modeled as policy, slow work moved off the interactive path, and a launch that stays honest about what the score is (and is not).