Full-stack and AI engineer. I build web products and the AI systems behind them, and I care most about the part that has to be right: the API, the data model, the escalation path, and the deploy that puts them in front of users. Next.js and TypeScript on the front, Python (FastAPI, Django) and Go on PostgreSQL behind. Remote, from Nairobi.
- Building AI features that know their limits: retrieval-augmented answers on the Anthropic API, with a human-in-the-loop escalation path, so the model handles the routine and a person handles the rest.
- Backend work on data-heavy platforms: ingestion pipelines, query paths that stay fast as tables grow past eight figures, and the migrations that get there without downtime.
- Running my own small production systems end to end, including point-of-sale and marketplace software in daily use by Kenyan businesses.
| System | What it does | The hard part | Stack |
|---|---|---|---|
| Companion | A support assistant that answers routine questions and hands risky, clinical or uncertain ones to a human | Safety-first routing: crisis and clinical messages reach a person without a model call; low-confidence answers escalate, and the staff reply returns to the member | Next.js, TypeScript, FastAPI, Anthropic API, RAG |
| Arizona Sunshine Portal | Public portal over Arizona campaign finance filings | 12.6M records kept queryable and correct through repeated bulk ingests | Django, PostgreSQL, React |
| ClearDD | Financial due diligence, automated: builds the statements on the client's reported basis, computes EBITDA, working capital and trailing twelve months, flags anomalies and produces the workbook, deck and PDF that advisers deliver | Tying the reported basis line for line, and carrying add-backs through to the deck without a number drifting | Django, DRF, Celery, PostgreSQL, React |
| ProcureCrawl, at IntegralMASS | Opportunity intelligence for Arizona investors: procurement contracts, commercial property, businesses for sale and economic data, aggregated, scored and delivered as reports | Scheduled crawlers over sources that disagree with each other, and scoring an investment group will act on | Python, Celery, Next.js |
| Extreme POS | Point of sale running a Nairobi print shop: sell, invoices, purchases, stock reports, suppliers, debts, accounting, shift handover | Twelve modules rebuilt from observation, then changed week to week against the live database the shop trades on | PHP 8, SQLite, vanilla JS |
| Classy Carry POS | Point of sale and stock control for a leather goods retailer | M-Pesa STK push, offline-tolerant SQLite, staff role gating | PHP 8, SQLite, M-Pesa Daraja |
Lead developer on ProcureCrawl. Earlier product work: GoVerde Errands Marketplace (FastAPI, WebSocket chat, escrow payments, role-based access) and Tensor Marketplace (Django REST, Stripe webhooks, signed expiring file delivery).
Tools I wrote to think about systems rather than to ship features: chronos, boolean algebra over cron schedules, in Dart. subnetics, a CIDR buddy allocator with a live fragmentation treemap. MpesaGuard, exactly-once payment integrity for M-Pesa.
| Layer | What I reach for |
|---|---|
| Languages | Python, Go, TypeScript, PHP, SQL, Dart |
| Backend | Django, Django REST Framework, FastAPI, Celery, REST and GraphQL |
| AI | Anthropic API (Claude), RAG, human-in-the-loop escalation, output evaluation |
| Data | PostgreSQL, Redis, MongoDB, SQLite |
| Infrastructure | Docker, Linux, Nginx, GitHub Actions, VPS and cPanel deploys |
| Frontend | React, Next.js, Vue, TypeScript, Tailwind |
- 12.6M records in one Django and PostgreSQL deployment, still serving reads in milliseconds.
- 60% of request latency removed by moving the hottest endpoints to Go.
- 3,820 contributions so far in 2026, 3,142 of them in private repositories.
- 21 public repositories across Python, Go, Dart, PHP and TypeScript.
- Tests before "done". A feature without a failing-then-passing test is a rumour.
- Migrations are reversible, deploys are boring, and logs say what happened.
- I would rather delete a service than add one.
- Email: emosmwangi@gmail.com
- Portfolio: amosmwangi.com
- LinkedIn: amosmwangi-sr-software-engineer
- WhatsApp: +254 768 349 005
- Signal: AmosMwangi.82
Open to remote full-stack, AI, and platform engineering roles. Nairobi, UTC+3: the whole European working day, and US mornings.
The portrait is not a photograph. It is 60 columns of characters, generated from one by
scripts/ascii.py, kept as text in
assets/portrait.txt, and set in type by
scripts/portrait_svg.py, which prints it a line at a time and
holds a cursor at the end. It stops moving if your system asks for reduced motion.


