Two products I built and run myself, with AI as a closely supervised helper
A simple HR management tool with a plain-language assistant, and a PDF product taken from a broken serverless deployment to an audited, self-hosted app, both built under a strict, written way of working with AI coding tools.
Big ambitions, small team
Products built by one person tend to collect shortcuts that break once real users arrive. A solo engineer has to move quickly without letting security, test coverage, or careful root-cause work slip, and AI coding tools make it easy to move quickly and easy to let those things slip.
Two products, one set of standards
This section covers two products, both built with AI coding tools working under clear rules:
- An AI-assisted HRMS tool: one place for leave, attendance, shifts, timesheets, the org chart, assets, and policy documents. A built-in assistant takes plain-language requests and answers policy questions by quoting the company's own documents, with the page. It runs on Next.js, FastAPI, and PostgreSQL.
- Solo product hardening: a PDF processing product I took from a serverless deployment that didn't work to a self-audited WebAssembly engine about 93% lighter, with verified payment handling, then moved it off Vercel to a self-hosted setup. I built it alone, following a written working protocol.
Simple pieces, clear boundaries
AI-assisted HRMS tool
─────────────────────────────────────────────────
• Next.js web app, FastAPI API, PostgreSQL
• Leave, attendance, shifts, timesheets, org chart, assets, documents
• Assistant acts through the API as the signed-in user
• Policy answers quote the source document and page
Solo product hardening (PDF engine)
─────────────────────────────────────────────────────
• WebAssembly rendering, no native binaries (the same code runs on a laptop and a server)
• Self-hosted Supabase in Docker, off Vercel
• Signed webhook checks and protection against double charging
• First load cut from 1.47 MB to 106 KB (about 93%)Implementation notes
- Each company's data stays separate. In the HRMS, every record carries an
organization_id, and tests check that one company can't read or change another's records. - Policy answers must show their source. Instead of letting an AI model guess at company policy, the HRMS assistant quotes the matching passage and names the document and page. When nothing matches, it says so.
- No outside AI service in the HRMS. Requests and policy questions are handled inside the app, so company documents aren't sent anywhere else.
How I work with AI coding tools
I built and run both products with AI coding tools, under written rules rather than ad-hoc autocomplete:
- Rules written down for the AI. Each repository has an AGENTS.md that sets out how changes are made. In the HRMS, every task also leaves a written handover.
- Reproduce first, then fix. In the HRMS, a bug is reproduced before it's fixed, and the fix comes with a test that would have caught it.
- Nothing is taken on trust. Claims, endpoints, and architecture are checked against the test suites and code reviews.
What changed
- Everyday HR in one simple tool, with policy answers anyone can check against the source document.
- About 93% less to download on first load, and nine security findings fixed, on the PDF product.
2 detailed write-ups
Questions about this work?
Happy to go deeper on any part of this: the architecture, the trade-offs, or the decisions behind it.
anupojuprudhvi@gmail.com