resu-clean — Self-Hosted Resume Toolkit
A self-hosted resume toolkit that cleans, ATS-scores and tailors resumes using a verified profile of facts, searches and dedupes jobs from sources, then generates application kits without inventing experience or sending anything automatically.
What was happening.
A local-first job-search and resume workflow built for the reality of job applications: clean the resume, verify what is true, tailor against a job description, search sources, and package the application without handing your process to a SaaS platform.
What needed to change.
- Most resume tools are either generic SaaS products or AI wrappers that guess and invent facts instead of working from verified evidence.
- Job applications involve a long chain of work: resume cleaning, ATS scoring, tailoring to a specific posting, searching relevant jobs, and assembling a consistent kit — and most of it lives across scattered tools.
- A career system should remain local and portable, with no forced account, no telemetry, and no email automation that hides the decision-making behind the app.
How it was done.
The project treats a user-approved profile as the only trusted source of facts. New claims go to a pending queue and require approval before they become part of the resume record, which prevents the usual AI pattern of inventing employers, dates, metrics or titles.
Every model-assisted workflow validates output against the original resume and approved profile before it is shown. Facts that are invented or mismatched get discarded and the deterministic path is used instead, which keeps the system truthful even when a model is noisy.
A deterministic cleaning pipeline normalises the resume and the ATS scorer checks alignment against a job description. Model support is optional and layered on top of the deterministic logic rather than replacing it, so the product still works without a provider configured.
The app supports source detection, search, deduplication and ranking. It runs against configured job sources and normalises them into one model, which makes the job-search layer explicit and inspectable instead of a mysterious feed somewhere in the cloud.
After the resume is tailored, the system assembles the application materials: cover text, tracked job status, generated email, and packaged output for sending or saving. The tool helps organise the process without taking over the decision.
The numbers that came out.
Single-process ASP.NET backend serving API + built UI.
Data, resumes, profile facts, job searches and keys live locally.
OpenAI, Anthropic, Groq, Gemini, Ollama, LM Studio and more.
New facts are queued for verification before they become trusted.
Where it landed.
- A local-first resume system with clear guardrails against fabricated experience and unsupported claims.
- A realistic workflow from resume intake to ATS check to tailored application, with no need to surrender your process to a cloud service.
- An explicit separation between deterministic work and model-assisted work, so the app still functions even when a provider is unavailable.
- A portable project design: one .NET backend, one Svelte frontend, one SQLite data directory, and no database server to manage.
More case studies.
Full-Stack School ERP
Designed and shipped a full-stack ERP end-to-end — from requirements through deployment — consolidating student records, attendance, finance and communication, with notification, messaging and authentication capabilities serving the whole institution.
Read case studyAtlas — Distributed Infrastructure Engine
Atlas discovers and models infrastructure as a graph, schedules workloads, replicates state through a from-scratch Raft layer, injects controlled failures, correlates them into incidents and produces advisory AI analysis — running entirely over an in-memory event bus on a single machine, with real-time visualization and algorithmic transparency.
Read case studyNEXUS — Autonomous Homelab SRE
An evidence-first autonomous SRE agent built around four hard rules — evidence over vibes, allowlisted typed tools, approval enforced outside the model, and explainable reasoning. Investigates incidents the way a careful operator would, verified live against PostgreSQL and Redis.
Read case studyYour situation probably looks different — but the method doesn't.
Understand the work, decide the approach, deliver and measure. A free conversation establishes whether it applies to your problem.
or email joseph.gitau.c@gmail.com