Contract FastAPI developer · Singapore

FastAPI developer in Singapore, available now

FastAPI is easy to start with and easy to leave in a state you cannot operate. The back end I run in production handles sessions, billing, a job queue, file storage and an admin surface — and the parts that took the work were never the route handlers. They were the migration story, the webhook idempotency, the worker that has to stream logs back to a browser, and refusing to boot on a half-configured environment. That is the part I am useful for.

  • A live FastAPI service with Stripe billing, background workers and an admin surface
  • SQLAlchemy 2 and Alembic against PostgreSQL, with a real migration history
  • An API smoke suite of nearly 2,000 lines that runs against the actual service
See selected work

Availability and engagement

Straight answers to the things recruiters screen on first.

Available now Singapore, on-site or hybrid Full-time contract engagements Fixed-scope projects Day rate on request

FastAPI

What I actually do with FastAPI.

API design

Typed request and response models, generated OpenAPI that stays honest, and versioning that does not break existing clients.

Data layer

SQLAlchemy 2 with Alembic migrations on PostgreSQL, and a SQLite path for single-worker local development.

Auth & sessions

Argon2 password hashing, signed host-only session cookies, CORS allow-lists and per-endpoint rate limiting.

Payments

Stripe Checkout, signature-verified webhooks over the raw body, a credit ledger, refunds and disputes, plus a reconciliation command.

Background work

A job runner with process spawning, staged progress, ETA estimation, failure classification and live log tailing to the client.

Operational safety

Startup checks that refuse to run on a mixed test/production secret set, and alerting on the failures that actually cost money.

Worked examples

Three problems and how they were solved.

Drawn from systems I built and still operate, so I can go into as much detail as you want.

Billing that survives being audited

The webhook endpoint verifies Stripe signatures against the raw request body, and handles completed checkouts, delayed asynchronous payments, refunds and dispute creation as distinct cases rather than one happy path. Credits move through a ledger, not a mutable balance column, so any figure can be explained after the fact. There is a reconciliation command that replays a date range and reports drift. The service also refuses to start if it finds test keys alongside a production configuration — a five-line check that removes an entire category of incident.

Serving output you do not trust

The product generates HTML from a language model and then shows it to users, which means serving untrusted markup from an authenticated application. Rather than sanitising and hoping, the previews are served from a separate origin, inside a sandboxed frame with an opaque origin, with the session cookie scoped host-only so it cannot travel there. Three independent controls, each of which would be sufficient alone. Getting this wrong is how a feature becomes a breach.

A worker you can watch

Builds take minutes, so the API cannot just return a job id and go quiet. The worker runs pipeline stages as subprocesses, tracks stage-level progress with an ETA derived from previous runs, classifies failures into causes the user can act on, and tails logs back to the browser while it runs. Most of the perceived quality of a long-running API is in this layer, not in the work itself.

FAQ

FastAPI contracting in Singapore — common questions

Are you available for FastAPI contract work in Singapore?

Yes — available now for full-time contract engagements, on-site or hybrid in Singapore, and for fixed-scope projects delivered through The Digerati.

What is your day rate?

Day rate on request. It depends on engagement length, on-site requirement and scope.

Do you work with async SQLAlchemy?

Yes, and I am equally happy telling you when you do not need it. Async pays off when you are genuinely I/O-bound across many concurrent requests; on a service that spends its time waiting for one database, it often adds complexity without throughput.

Can you take over an existing FastAPI service?

Yes. The first thing I usually do is get a smoke suite running against it, because that tells you more about a codebase in an afternoon than reading it for a week.

Do you handle deployment as well?

Yes — uvicorn behind Caddy or nginx, Docker where it helps, and I have run services on plain VPS hosting as well as managed platforms. I would rather hand over something you can operate than something that only I can.

What about Django or Flask?

Both are fine and I have shipped in them. If you already run Django, I would not propose rewriting it in FastAPI to suit my preferences.