Contract Python developer · Singapore

Python developer in Singapore, available now

I write Python that runs unattended. Most of my recent work is two systems I built and operate myself: a design-to-code engine of roughly 88,000 lines of Python, and a football prediction pipeline that ingests third-party sports data, engineers around 200 features from it, and trains calibrated models against them on a schedule. Both run in production, both have paying or registered users, and both fail loudly rather than silently when something upstream changes.

  • Around 100,000 lines of production Python shipped in the last two years
  • Services, CLIs, scheduled pipelines and ML training code — not just scripts
  • Typed, tested and packaged: pytest, mypy, Typer, proper console entry points
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

Python

What I actually do with Python.

Long-running pipelines

Restartable ingestion with response caching, rate limiting and idempotent upserts, so a failed run is resumed rather than repeated.

Binary and format work

Hand-written readers for undocumented formats, including a Kiwi schema decoder over zstd-compressed Figma files.

Machine learning

XGBoost, scikit-learn and PyTorch with Optuna search, isotonic calibration and hierarchical priors — plus the audit code that proves the numbers.

LLM integration

Multi-provider clients with per-stage model routing, vision input, prompt caching, concurrency and resumable checkpoints.

Browser automation

Playwright and headless Chromium for rendering, measurement and visual regression, not just scraping.

Testing

pytest suites over the parts that actually break: decoders, transforms, API surfaces and calibration.

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.

A decoder nobody had documented

Figma’s .fig files are a Kiwi-encoded binary format wrapped in zstd, with no published schema. I wrote the byte-buffer reader and varint decoding by hand, then re-projected the decoded structures into a normalised document tree — around 5,000 lines just for that projection layer. The lesson that transfers: when the vendor API cannot give you what you need, the format itself is usually still tractable.

Models that admit what they do not know

The prediction pipeline trains separate Poisson goal models and multinomial classifiers for leagues, domestic cups, club cups and internationals, because pooling them makes all four worse. Each market gets an isotonic calibrator, so a stated 70% means roughly 70% in practice — and the calibration curve is published on the site rather than kept internal. I archived an entire parallel horse-racing system after measuring that it only matched the market, which is the same discipline applied to a negative result.

Deterministic where it can be, model-driven where it must be

In the design-to-code engine, a deterministic pre-bake converts absolutely positioned layers into Tailwind before any model is involved, and navigation and footers are generated with no LLM at all where their shape qualifies. That keeps token cost down, makes output reproducible, and means the model only handles the part that genuinely needs judgement.

FAQ

Python contracting in Singapore — common questions

Are you available for Python 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, so it is easier to give you a straight answer once I know the shape of the role.

Which Python frameworks do you use?

FastAPI for services, Typer for CLIs, SQLAlchemy for data access, pytest for tests. For machine learning, scikit-learn, XGBoost and PyTorch with Optuna for hyperparameter search. I will work in whatever your team already uses rather than importing my own preferences.

Do you do data engineering as well as application code?

Yes. A good deal of my recent Python is ingestion and feature engineering — pulling from third-party APIs into a relational store, deriving features, and keeping the whole thing restartable and cheap to re-run.

Can you work on an existing Python codebase?

That is most of what contract work is. I am comfortable inheriting a system, reading it before changing it, and leaving it more tested than I found it.