Internal AI assistants that survive real users
Most teams can get a demo working. The hard part is retrieval that returns the right document, tool calls that do not silently fail, and an interface people open on a Monday morning. That is the part I build
I ship product work on an internal LLM assistant used by thousands of employees at a major bank, and I have owned AI tooling end to end across Angular, React, Svelte, and FastAPI
Fixed scope, fixed price, and a date
Every engagement below is quoted as an outcome rather than a block of hours. If your problem does not fit one of these, the first call is where we find that out
Internal LLM Assistant
Leadership decided the company needs AI. Nobody can say what to actually build, and the pilot that someone started in a notebook does not survive contact with real employees
A working internal assistant your team uses: retrieval over your own documentation, tool calls into your own systems, authentication, and an interface that does not need a workshop to explain
- Retrieval pipeline over your documentation, with an evaluation set so quality is measured instead of argued about
- Tool and function calling into your internal APIs, with schema validation, timeouts, and sane failure behaviour
- Streaming chat interface in React, built to your design system rather than a generic template
- SSO integration and access control that matches how your company already handles identity
- Deployment into your infrastructure, plus written handover so your team can extend it
Angular to React Migration Audit
You have an Angular codebase, a React hiring market, and no credible answer to how long a migration takes or what it puts at risk. So the decision keeps getting postponed
A migration roadmap you can put in front of a budget holder: what moves first, what stays, what it costs, and where the real risk sits
- Structured audit of your repository, dependency graph, and framework-specific coupling
- Incremental migration plan by product surface, designed so feature delivery never stops
- Risk register covering state management, routing, shared components, and test coverage gaps
- Effort estimate per surface, in ranges honest enough to plan against
- Ninety minute walkthrough call with your engineering leads
The audit fee is credited toward the migration if you decide to go ahead. Full migrations typically run from $15,000 depending on surface count
Discuss this engagementVibe-Coded MVP Rescue
The MVP got built fast with AI tooling, found real users, and now breaks in production. Nobody on the team fully understands the code, and every fix creates two new bugs
A codebase that stops surprising you: the dangerous parts fixed, the rest documented, and a written map of what still needs work
- Audit of authentication, data model, and error handling, ranked by how badly each can hurt you
- Fixes to the failures that actually reach users, shipped first
- Tests and CI on the paths that carry revenue, not blanket coverage theatre
- Written map of remaining technical debt with a cost estimate for each item
AI Reliability Engineering
You wired an LLM into your product. It works in the demo and fails for users: malformed outputs, hung requests, jobs that vanish, and no way to tell whether a prompt change made things better or worse
The infrastructure layer that turns an LLM call into a dependable product feature
- Structured outputs with schema validation and retry behaviour that degrades gracefully
- Tool calling that handles partial failure instead of pretending it cannot happen
- Async task orchestration, queues, and status handling for work that outlives a request
- Token streaming that survives reconnects and slow clients
- Evaluation harness and observability so prompt and model changes are measured, not guessed
Ongoing AI feature support
For teams that shipped an AI feature and need it to keep working. Model releases, prompt drift, and quality regressions are ongoing problems, not one-time ones
- Response quality monitoring against your evaluation set
- Prompt and model updates when providers ship changes
- Small feature work and fixes within an agreed monthly scope
- A named person who already knows your codebase when something breaks
The terms, before you have to ask for them
Fixed price, not hourly
You buy a defined outcome with a defined price. My speed is my problem to optimise, not a reason to charge you less for the same result
Weekly working software
Every week you get something you can click, not a status report. If the direction is wrong, you find out in week one rather than week four
Your code from day one
Work happens in your repository under your license. There is no handover cliff and nothing to buy back at the end
Honest scope boundaries
The proposal says what is explicitly out of scope. New scope becomes a new fixed-price increment instead of a quiet schedule slip
Problem, what I did, what changed
This work is internal and under NDA, so what follows describes the problem, the architecture, and the scope I owned rather than screenshots
Image generation platform for a design team
A company-wide image generation API existed, but the designers who were supposed to use it had only a flat list of tasks. There was no way to organise work, iterate on a result, or track long-running generations without hammering the server with status requests
I owned the Angular frontend and crossed into the FastAPI backend whenever a feature needed server-side work. I built a board-based workspace where designers group generations into project spaces, added drag-and-drop between boards, image reactions, and editing flows across several generation modes. For async work I designed a priority-queue polling model that schedules status checks by importance instead of polling everything on a fixed interval
More than a thousand internal users work in organised boards rather than a flat queue, and generation status stays current without aggressive polling against the shared API
Backend that made the platform possible
The shared generation API had no concept of end users, no task history, and no durable storage. The interface needed all three, and there was no separate backend team waiting to build them
I designed and built a FastAPI backend-for-frontend: corporate SSO for end users with service-level routing to the generation API, an event consumer that processes completed tasks off Kafka, and persistence coordinated across PostgreSQL and S3. As the product grew I extended it to support reactions, board operations, and image post-processing
User-facing features shipped without a backend handoff in the middle, which is the reason the frontend could keep moving at all
Migrating a live AI assistant to React
A company-wide internal LLM assistant ran on a legacy Svelte frontend that needed to become React. Thousands of employees used it daily, so stopping feature delivery for a rewrite was never an option
I shipped product features inside the mixed Svelte and React codebase while moving product logic into React-owned areas, and fixed the FastAPI backend where features required it. Alongside that I helped put stricter quality rails around new React code with Vitest, Biome, Oxlint, and Playwright, so the new surface did not inherit the old one's problems
Migration and feature delivery ran as a single track instead of two competing ones, on a product thousands of employees depend on
Code you can actually read
The client work above is internal and closed-source. These public repositories show the same engineering, in code you can read
simple-openai-proxy
The tool-calling and structured-output layer I build on client projects
fastapi-mvp
The service bootstrap that keeps delivery fast without cutting corners
lint-gost-tex
A finished CLI product with real rules, tests, and edge cases
From first message to handover
Call
You describe the problem. I tell you whether I am the right person for it, including when the answer is no. No slide deck, no discovery invoice
Proposal
A fixed scope, a fixed price, a delivery date, and an explicit list of what is not included. If it does not fit your budget, you have lost a phone call
Build
Work happens in your repository with something demoable every week. You see progress as software, and course corrections happen early
Handover
Deployment, documentation, and a walkthrough with your team. You are not dependent on me afterwards unless you choose to be
The questions that come up on every first call
Do you work hourly?
No. Fixed price against a defined outcome. Hourly billing means you pay more when I am slower, which is a strange thing for both of us to want
Who owns the code?
You do, from the first commit. Work happens in your repository under your license, and nothing is held back at handover
Can you sign an NDA?
Yes. Most of my experience is on internal products under NDA already, which is why the case studies here describe architecture and scope rather than screenshots
What happens if the scope changes?
Small things get absorbed. Anything larger becomes a separate fixed-price increment that you approve before it starts, rather than a quiet slip in the delivery date
How do you handle payment?
Typically fifty percent up front and fifty on delivery, with longer projects split into milestones. Invoicing details are confirmed in writing before any work begins
What timezones do you work with?
I work asynchronously by default and overlap with European and Asian business hours. Weekly demos are scheduled to suit your team, not mine
Tell me what is broken
The most useful first message is one paragraph: what you are trying to build or fix, and what is currently in the way. I reply within a day, and I will tell you directly if I am not the right person for the job