About this case study

I built Re-vsion to explore a practical problem: how to help someone connect their existing experience to a specific role without pretending they have qualifications they do not. The project grew beyond a form and a prompt into an application with accounts, resumes, job descriptions, saved results, and a background processing path.

The screenshots below show original application UI rendered locally with synthetic data. They do not show a running backend, database, or AI processing during capture. The source code establishes the architecture described here; it does not independently establish the live deployment topology or outcomes.

01 / Product idea

Make the steps visible.

Rather than presenting one opaque “improve my resume” button, the interface separates the job into a sequence: add a resume, provide a role, request an enhancement, and review the result. That structure makes the user's inputs and the generated material easier to distinguish.

The dashboard gives these stages a shared home. The upload and job screens use the same application shell, so a candidate can move between their source material and the role they are targeting.

Re-vsion dashboard with upload, job, and enhancement steps and a fictional resume
Dashboard. Original application interface rendered locally with a fictional user and resume. Open the image for full resolution.
02 / Interaction design

From a job description to a reviewable result.

The job form makes the target role explicit instead of asking the model to guess what matters. A separate enhancement step then connects a stored resume to that role. The interface also has a comparison view, so the output can be read beside the source rather than accepted blindly.

Original job description form in the Re-vsion frontend
Role input. The original job-description form. No live matching request ran in the offline demo.
Re-vsion enhancement history showing a synthetic completed result
Saved work. The existing enhancement-history UI with a seeded completed state. No Anthropic request or new processing ran for the screenshot.
Original before-and-after comparison component with fictional example text
Comparison. The original comparison component with manually authored fictional before-and-after text, not an AI-generated result.

A career-path entry screen sits alongside the resume workflow. In the offline reproduction it displays two demo roles; it does not generate a career map. I include it because it shows how the product's scope extended from one document toward a broader career-planning flow.

Original Re-vsion career-path entry screen with two fictional roles
Career-path entry. Original UI with two synthetic roles. No career map was generated during capture.
03 / Source-backed architecture

A web app with a separate processing path.

The frontend is React 18 and TypeScript built with Vite. React Router provides views and the Axios service layer talks to the API. FastAPI mounts the application routes under /api. SQLAlchemy manages relational records; the configuration targets PostgreSQL, while the database code also contains SQLite compatibility.

BrowserReact + TypeScriptVite, routes, forms, comparison view
APIFastAPIAuth, resumes, jobs, enhancements
DataDatabase + filesSQLAlchemy/PostgreSQL intended; filesystem workspace

The worker reads pending records from the same database and source material from the workspace.

BackgroundPolling workerReads pending enhancements
Model serviceAnthropic APICalled by the worker, not the browser
OutputSaved resultsWorker updates records and files
Code-backed component map, not a verified live deployment diagram. The frontend-only screenshot demo did not run the API, database, worker or Anthropic.

The API also uses a configured filesystem workspace for source documents and generated output. The repository includes optional billing, email and Redis integration code, but their presence does not prove those services were active in production. The worker is a polling process, not evidence of a message queue.

Read the architecture notes ↗
04 / Security and documents

Accounts and files changed the shape of the problem.

Account routes return an access token and set a refresh token in an HttpOnly cookie. The frontend sends access-token headers and handles refresh through its API service. Backend dependencies decode access tokens before protected routes use the current user. Resume and job routes filter or check records against that user ID.

That is a description of controls present in the code, not a claim that the service has been independently security-audited. The distinction matters when presenting a project that handles personal documents.

The upload route validates files, parses text, stores the source in a workspace and writes resume metadata to the database. The enhancement workflow creates pending work for a separate worker, which polls the database, reads source material, calls Anthropic and saves results. Separating that path from the browser/API request was an important architectural boundary for a potentially slow task.

05 / Reflection

What I would carry forward.

Re-vsion taught me that the hardest part of an AI-assisted product is often everything around the model: clear input stages, document handling, ownership checks, asynchronous state and a way for users to inspect the output. A convincing interface is not proof that a processing workflow is reliable, which is why I have separated the UI evidence from the source-backed architecture here.

If I revisited the project, I would narrow and test the workflow before adding more features, make result provenance clearer in the interface, and put more attention into failure states and accessibility at mobile widths. The project is no longer active; this article documents what was built and what I learned from it.

Original Re-vsion comparison component at mobile width with fictional data
Mobile check. Original comparison layout at 390px width, with synthetic text. Open for full resolution.
06 / Evidence and limits

What these images actually show.

The linked images were captured from an isolated, local entry point in the original Re-vsion React codebase. Fixtures supplied fictional user, resume, job and result data. The capture blocked external and /api requests. The original components and styling rendered, but upload/parsing, enhancement generation, scoring, exports, payment, email and career-map generation did not run.

The original source was reviewed for this retrospective, but the repository is private. The architecture notes and capture explanation are reproduced here so visitors do not need repository access. Neither the code review nor these images independently verify a particular live host, customer usage, uptime or production configuration.