Work

Case files

The systems companies actually run on, each told the same way: the problem, what I built, the engineering story, what it changed, and what I would do differently.Each case file has an engineering section with the architecture, data model, and trade-offs, and a postmortem with what broke. The business framing is there too, but you can skip it.Each case file leads with the business situation and the outcome. The engineering detail follows for anyone on your team who wants to check it.Each one is a story about a business, a mess, and the software that replaced the mess. Start anywhere.

Siam Max Co., Ltd.In production

SMV4

The system a cross-border freight forwarder runs on, rebuilt from the ground up while the old one kept shipping.One NestJS API with about 35 domain modules behind a Tauri desktop app, two web portals, and two Expo mobile apps. A full accounting engine with GL auto-posting, FX revaluation, and Thai tax reports, a dual-country ledger dimension, one carrier abstraction over DHL, Thailand Post, and DMS, all self-hosted on nginx and systemd.Siam Max's shipping, billing, accounting, HR, and payroll run on software I designed, built, and operate alone. It replaced a first-generation system I also built, without stopping daily operations, and it has been in production since.A shipping company working between Thailand and Myanmar needed one system for everything from waybills to payroll. I built it. Then I built it again, properly.

TypeScriptNestJS 11MongoDBReact 19+6
Way2MyanmarIn production

Way2Myanmar

A multi-tenant logistics platform for a franchise network, and the ERP that is replacing its back office.A tenant-scoped Express and MongoDB platform with per-tenant module entitlements, a franchise settlement ledger with atomic running balances, and tenant-isolated Socket.IO rooms for realtime. Its successor, W2M ERP, is NestJS on PostgreSQL with a single-writer double-entry posting engine, a FIFO cost-layer inventory ledger, multi-currency AR/AP, and a per-domain migration CLI from the old data.Way2Myanmar's franchise network takes orders, clears customs, invoices customers, and settles with franchisees on a platform I built and run. I am now moving its accounting and inventory onto a proper ERP, test-first, without interrupting the business.Shipping between Thailand and Myanmar involves a lot of people who need to see the same order at the same time, in three languages. This is the system that lets them, and the story of what it grew into.

Node.jsExpressMongoDBReact 18+7
Way2MyanmarIn production

W2M AI

A Claude-powered assistant that answers staff questions straight from the production database, with guardrails.An agentic tool-use loop over the live MongoDB with read-only query, aggregation, and schema tools, plus an ask-user tool for clarification. Role-scoped collection allowlists, sensitive-field stripping, hard caps on documents, pipeline stages, timeouts, and iterations, per-user daily token budgets, rate limiting, and a full audit log. Streams over SSE into a Tauri desktop app.Operations staff ask questions like "how many orders shipped last week?" in English, Burmese, or Thai and get an answer from live data in seconds, without a developer writing a report. Every answer is logged, budgeted, and limited to what that person is allowed to see.I taught an AI to answer questions about a shipping company's data, and spent most of the effort making sure it could not do anything else.

Anthropic Claude SDKNode.jsExpressMongoDB+4
ADCOM SHOPIn production

ADCOM SHOP

Point of sale, inventory, repair jobs, and a public storefront for a computer shop, in one app.One Express application serving both the staff back office and the public storefront. POS sale orders, inventory with stock movements, service and repair job tracking, Puppeteer-rendered PDF reports, barcode generation and scanning, receipt and label printing, and a Vitest and Supertest suite running against in-memory MongoDB.A computer shop runs its counter, its stock, its repair bench, and its online store on one system instead of a notebook, a spreadsheet, and a marketplace page. End-of-day and monthly reports come out as PDFs.The shop where you get your laptop fixed now tracks every sale, part, and repair job in one place, and sells online from the same stock. I built that.

Node.jsExpressMongoDBReact 18+5

Also built

Products and experiments

Substantial projects that do not have a full case file yet.

Maesot Market

In development

Cross-border e-commerce, Thailand → USA

E-commerce platform selling Thai and Burmese goods to US customers: public storefront with live shipping quotes and Stripe checkout, and a role-permissioned staff back office for sourcing, inventory, shipping batches, and finance.

  • Next.js 15 App Router + TypeScript with 31 data models, deployed on Vercel
  • Stripe Checkout with webhooks, NextAuth, transactional email via Resend, Cloudinary media
  • Staff back office: orders, purchases, suppliers, sourcing, shipping batches, rate cards, expenses, payments, refunds, reports
Next.js 15TypeScriptMongoDBStripeNextAuthTailwindCloudinaryVercel

AI Orchestrator

Multi-agent research system with cross-vendor review

A Python multi-agent system built on the Claude Agent SDK: a lead agent delegates research and analysis to cheaper sub-agents, and every draft answer, with the evidence it read, is checked by an independent GPT reviewer that can force revisions.

  • Lead Claude Sonnet agent with Haiku research and Sonnet analysis sub-agents using custom document-search tools
  • Independent OpenAI GPT reviewer gate before anything reaches the user; ask-human tool for human-in-the-loop decisions
  • Audit-logging hooks (blocks secret-file reads), per-run cross-vendor cost accounting, eval harness with unit tests
PythonClaude Agent SDKOpenAI SDKEvals

Side projects

Smaller things

Ano Listen

Self-hosted music streaming app

ReactExpressMongoDBFFmpegTailwind 4PWA

MongoDB Backup Server

Scheduled backups for a fleet of apps

Node.jsExpressnode-cronCloudflare R2

Kokoro TTS

Local neural text-to-speech

PythonFlaskONNX

IssueFlow

Multi-tenant issue-tracking SaaS

TypeScriptExpressReact 19StripeTurborepo

You Are Like Me

Find strangers who think like you

Next.js 15SupabaseTailwindFramer Motion

Earlier

Where it started

  • NYSS Express USReceiving and shipping online-shop items from New York to Thailand and Myanmar: labels, pickups, tracking, rates, payments.
  • Money Transfer AppMulti-currency (THB / MMK / MYR / AUD / USD) transfer ledger for a local Myawaddy business: exchange rates, approvals, bank slips.