Services

What you get, and what it actually includes.

No packages or tiers. I take on one problem at a time and finish it — usually a backend that needs building, an AI feature that needs to be real software, or a system that stopped behaving.

Backend

APIs & system architecture

The foundation everything else sits on. I design around your data model and access patterns first, then write the service layer — so the API still makes sense when the feature list doubles.

  • FastAPI services with typed request and response models
  • Database schema design, indexing, and safe migrations
  • Multi-tenant architecture and per-customer data isolation
  • Authentication, roles, and permission boundaries
  • Background jobs and scheduled tasks with retries
  • OpenAPI docs your frontend team can work from directly
AI

LLM features that survive contact with users

Most AI features fail because nobody measured them. I build the evaluation set alongside the feature, so you can see accuracy and cost per query before it reaches customers — and after every change.

  • Retrieval over your own documents, with citations to the source
  • Structured extraction from messy text, validated before it's stored
  • Agents and tool-calling with human confirmation on risky actions
  • Evaluation sets that catch regressions when a prompt changes
  • Cost and latency controls: caching, model routing, streaming
  • Guardrails against prompt injection and leaked personal data
Real-time

Chat, presence & video

Real-time is where most backends quietly break — the demo works on one worker and fails at scale. I build delivery that doesn't care which process a user landed on.

  • WebSocket chat with read receipts and typing state
  • Redis pub/sub delivery across every worker and server
  • Reconnection handling and message ordering
  • Self-hosted video meetings on your own domain
  • File sharing and upload handling inside conversations
  • Notification fan-out to email, SMS, or push
Operations

Deployment & keeping it up

Shipping is the start, not the end. I set up the boring infrastructure that means an incident takes twenty minutes to diagnose instead of a whole afternoon.

  • AWS setup: EC2, RDS, load balancers, certificates, DNS
  • nginx reverse proxy, SSL, and WebSocket configuration
  • systemd services so processes restart themselves
  • Secrets in AWS Secrets Manager instead of a .env file
  • Structured logging and error tracking with real context
  • Handover documentation your team can follow without me

How the work runs

Four steps, every time.

Understand the problem

A call and a look at what exists. I want the constraint you're actually stuck on, not just the feature request.

Scope and quote

A written plan with milestones and a fixed price. If I think the work isn't worth doing, I say so here.

Build in the open

Small pull requests you can review as they land, with a working deployment from the first week — never a big reveal at the end.

Hand over properly

Documentation, runbooks, and a walkthrough. You should be able to operate it without calling me — and call me anyway if you want to.

Next step

Describe the problem, not the solution.

The most useful first message tells me what's breaking or what you're trying to launch. I'll tell you what I'd do about it.