# John Kingola: Backend resume

> Backend engineer · Python, FastAPI, PostgreSQL and TimescaleDB · Multi-tenant SaaS and rate-limited APIs. Nairobi, Kenya (UTC+3) · remote as a contractor or through an EOR · no visa sponsorship needed.

I check that something is true before anyone relies on it: trading strategies, AI agents, and the systems around them.

- **Solo** built a multi-tenant SaaS, architecture to production
- **4** role-based access tiers
- **60/min** per-key API rate limits
- **6 yrs** shipping production software

I design and ship backend systems end to end. I built the multi-tenant Change Intelligence Platform solo in six months (Next.js, FastAPI and Supabase, four role-based tiers, a self-hosted LLM) and still maintain it; designed a backtest-as-a-service API on TimescaleDB with a Redis cache keyed on the strategy hash and per-key rate limits; and at ConsultHasha built the REST layer and production endpoints the product and its client integrations ran on, owning architecture, deployment, and reliability. I have shipped production software for six years, since 2020, and I treat performance as something to measure: the platform's latency pass followed an audit that found I/O-wait bottlenecks and N+1 queries.

### Why hire me: decisions, and how I checked them
- **Why does the same backtest get computed twice?** Thought: The same strategy is requested a hundred ways, so a cache keyed on the request keeps missing. Tested: Keyed the Redis cache on the strategy hash, with per-key rate limits of 60 a minute in front of TimescaleDB. Result: A repeat request for an unchanged strategy is served from the cache, however it is phrased. Proof: Private repo, described.
- **Where is the platform's latency actually coming from?** Thought: Guessing optimises the wrong layer. Tested: Started the latency and build-performance pass from an audit, which surfaced I/O-wait bottlenecks and N+1 query patterns. Result: The fixes went after what the audit measured, on a multi-tenant SaaS I built solo and still maintain. Proof: [change-tca.com](https://change-tca.com).
- **What does "balance" actually mean in this API?** Thought: The schema documents a field; only a live account shows what is spendable. Tested: Checked CreditWatch against a live account: the spendable figure is credit, not balance. Result: Shipped 1.0.0 on that finding. Windows and Linux were built and unit tested but not claimed, because no one had run the installed binary. Proof: [CreditWatch 1.0.0](https://github.com/Astralchemist/creditwatch/releases/tag/v1.0.0).
- **Are the numbers in the quant libraries everyone uses correct?** Thought: Performance statistics are easy to get subtly wrong and rarely checked against reference values. Tested: Ran reference-value tests and benchmarks against ffn, skfolio, quantstats, Databento dbn, gs-quant, Qlib and barter-rs, and retested every bug on a fresh clone before filing. Result: Five fixes merged and credited (ffn v1.3.0, skfolio v1.4.1); quantstats and Databento fixed what I reported. Proof: [github.com/Astralchemist](https://github.com/Astralchemist).

### Projects
- **Backtest API** (Trading infrastructure; Private, described architecturally). Backtest as a service: the boring parts, built so the same strategy is never computed twice. Hard part: Cache keys that survive strategy edits. The same strategy is asked for a hundred ways, so the key is the strategy hash, not the request. Stack: Python, FastAPI, TimescaleDB, Redis, Docker.
- **Signly** (Forex signal verification; Maintained, not live). Verify Telegram trading signal channels before trusting them. Built and shipped, and maintained; not live, with the public site offline. Hard part: Parsing free-text signals reliably, and defining a verdict that penalises stop-loss indiscipline instead of rewarding win rate. Stack: Python, FastAPI, Polygon, PostgreSQL.
- **Rig** (Semantic codebase graph over MCP; npm v0.3.0 · Show HN). npx rig-constellation gives a coding agent a map of the codebase instead of grep. Local-first, no key, nothing uploaded. Hard part: About 100 commits in four days to v0.1.5, stable per-project ports, and keeping the map live during indexing. Stack: TypeScript, MCP, Node, SQLite.
- **Cernos** (Strategy research engine in Rust, LEAN indicators ported; Pre-release · private repo). A terminal tool that finds trading strategies on the web, translates them into one JSON format with an LLM, checks each translation against the original code in a sandbox, backtests and breeds them, and exports the winner as standalone Python or C++. Hard part: Counting every parameter trial. The first gauntlet records each parameter set it tries and judges with CSCV/PBO and a probabilistic Sharpe of at least 0.95, so tuning cannot hide in the result. The first BTC-USD run failed all 12 trials. Stack: Rust, OpenRouter LLM loop, Sandboxed containers, Python and C++ export.
- **CreditWatch** (Cloud-credit runway from the menu bar; 1.0.0 released 2026-09-21). Answers one question: how long does the prepaid GPU credit last at the current burn. Hard part: The account schema documented balance. A live account proved the spendable figure is credit. Windows and Linux were built and unit tested but not claimed, because no human had run the installed binary. Stack: Kotlin, Compose Desktop, SQLite, Keychain.
- **Liquidity Engine** (BTC order-book research, pre-registered; Public · negative result). A deterministic Rust engine that records BTC perpetual order books on three venues, replays them exactly, and tested a market-making strategy that does not work at retail fees. Hard part: Measuring what a fill costs. Probes resting at the touch saw 41 to 66 ticks of adverse drift within one second on every venue, in every session, under every fill model. Stack: Rust, WebSocket feeds, L2 queue model, Python figures.
- **Trading Strategy Library** (Public quant work; Open source). A strategy catalogue plus research tools, from indicator to execution to statistics. Hard part: Keeping research honest. The research suite is labelled research-only in its own README, and that label stays. Stack: Python, MQL5, NumPy, QuantConnect Lean.
- **StickyInc** (Commitment pane fed by MCP; v0.5.1 · v0.6 in review). Tell an LLM to call the dentist Friday, an MCP tool call fires, and a checkbox appears on screen. No backend, ever. Hard part: Detecting whichever agent CLI is installed without asking for a key or a config file. Stack: TypeScript, Rust, Tauri, MCP.
- **Strategy Rebuilds** (16 published FX and gold systems, reverse-engineered; In progress · private). Rebuilt published MyFxBook systems from their trade logs: profiled 16, inferred their entry rules, and ported the strongest to MT5 and to a core-plus-adapters Python kit where session, trend and pause filters attach without touching the entry logic, then tested them on real broker ticks. Hard part: Separating an edge from tuning. Filters were chosen on January to June 2026 and checked on July to October; only 33% of profitable setups held, and one-shot holdouts with hashed configs failed after costs. Live demo fills then confirmed the cost model. Stack: MQL5, MT5 real-tick tester, Python, Dukascopy and broker ticks.

## Experience
- **The Change Intelligence Platform**, Lead engineer (contract), then maintainer (Dec 2025 to Present, Dubai, UAE · remote)
  - Built and shipped the platform solo in six months, Dec 2025 to Jun 2026, from architecture to production, under the direction of change-management practitioners. On retainer since for maintenance and feature work.
  - Multi-tenant change-management SaaS: Next.js and FastAPI on a Docker Compose stack with Supabase. Fine-tuned Llama 3.1 8B and served it with vLLM on a Modal L4 GPU, behind an OpenAI-compatible API with an OpenRouter fallback.
  - Four role-based tiers, including a delegated Champion portal with magic-link auth, PDF export via Puppeteer, a seven-tag sentiment model, and an automated LinkedIn outreach pipeline.
  - Led a latency and build-performance pass after an audit surfaced I/O-wait bottlenecks and N+1 query patterns.
  - Stack: Next.js, FastAPI, Python, Supabase, PostgreSQL, Docker Compose, Llama 3.1 8B, vLLM, Modal, OpenRouter, Puppeteer
- **Early-stage stealth startup**, Technical advisor, algorithmic systems (Oct 2025 to Present, Dubai, UAE · remote)
  - Joined as lead algorithmic engineer at the founding stage, then moved to an advisory role while funding closes.
  - Designed the backtest-as-a-service API: FastAPI, TimescaleDB, a Redis cache keyed on the strategy hash, and per-key rate limits.
  - Stack: Python, FastAPI, TimescaleDB, Redis
- **ConsultHasha**, Principal systems engineer (2024 to 2025, Nairobi · hybrid)
  - Early engineer at a startup. Designed and built the REST API layer and the production service endpoints the product and its client integrations ran on.
  - Owned architecture, deployment, and reliability.
- **Upwork**, Freelance quant and full-stack developer (2020 to 2025, Remote)
  - MQL5 and MT5 Expert Advisors built to client risk specifications, then Python backtesting tools, Telegram signal bots, and execution dashboards.
  - Also Docker-first Next.js and Postgres client platforms.
  - Stack: MQL5, MetaTrader 5, Python, Telegram bots, Next.js, PostgreSQL, Docker

## Skills
- Data and backend: Python, FastAPI, PostgreSQL and pgvector, TimescaleDB, Redis, RabbitMQ
- Delivery: Docker Compose, GitHub Actions CI, Cross-platform credential stores, Release engineering, Latency and build-performance passes, Upstream PRs to quant libraries
- Web and product: TypeScript, React, Next.js, Tailwind CSS, Node.js, Supabase
- AI and GPU inference: vLLM on CUDA GPUs (Modal L4), PyTorch, Hugging Face Transformers, Accelerate, KV-cache and GPU memory tuning, Llama 3.1 8B fine-tuning and serving, Claude, OpenRouter, Ollama fallback, Tool-calling loops, embeddings, and RAG
- Tooling and desktop: Rust (Tauri, research engines), Kotlin (Compose Desktop), MCP servers, npm publishing, SQLite, Linux and VPS ops
- Trading and research: Backtesting engines, Signal extraction, L2 order books, markouts, and adverse selection, Power laws and EVT, MQL5, MT5, and Pine Script, QuantConnect Lean

## AI tools I build with
- **Claude Code** (Anthropic): Daily coding agent. Rig wires its MCP server into it, and StickyInc runs on it through claude -p with no API key.
- **Cursor** (Anysphere): AI editor. Rig wires its MCP server into Cursor, so the editor's agent queries the codebase graph instead of grepping.
- **Codex** (OpenAI): CLI agent. Rig wires into it, and StickyInc can run on it through codex exec.

Web version: https://kingola.dev/resume/backend/ · PDF: https://kingola.dev/john-kingola-resume-backend.pdf · Contact: kingolajohn55@gmail.com
