AI-native full-stack engineer  ·  Canberra, Australia

One engineer.
AI agents.
The whole system.

I design, build, test, ship and operate production software end to end by directing AI coding agents — Node.js APIs, PostgreSQL, WeChat Mini Programs and Alibaba Cloud infrastructure. Most recently: a complete commerce platform for a biotech company, taken from an empty repository to paying customers, alone, with Cursor and then Claude Code writing the code.

140K
lines of code, written by AI agents I directed
760+
automated tests guarding every change
49
database migrations in production
100+
UI pages shipped across 3 surfaces
11
third-party integrations
1
engineer, with AI agents

Featured work

YuanQiPai.

An integrated business platform for a biotech company, serving a dealer network and consumer members: admin console, REST API, WeChat Mini Program and a stand-alone customer registration system. I owned every layer — architecture, code, tests, infrastructure and the production launch — with AI coding agents writing the code under my direction.

2025 — Present Sole developer, with AI agents Node.js · Express · PostgreSQL · WeChat Mini Program · Alibaba Cloud

System architecture
Admin Console
42 pages
Drag-and-drop page builder, orders & after-sales, members & tiers, coupons, finance reconciliation, anti-counterfeit traceability.
WeChat Mini Program
58 pages
Dynamic home-page renderer, catalogue & cart, in-app payment, points wallet & withdrawals, team hierarchy, scan-to-verify.
Registration System
Stand-alone
Public mobile form for 20 countries, admin back-office with an ECharts map dashboard, independently deployed.
Node.js · Express API
17 route modules · 33 services
JWT + RBAC at the endpoint level · layered middleware for auth, tiered rate limiting and error handling · payment abstraction · commission engine · audit log.
PostgreSQL
49 incremental migrations · dual-track JSON fallback · seed back-fill
Alibaba Cloud
ECS · OSS direct upload · SMS · MTS video transcoding
Payments
WeChat Pay v3 · Alipay · AdaPay · original-channel refunds
Ecosystem
WeChat Login · WeCom SSO · Order Centre · Hupun ERP · store sync

Under the hood

Built to survive production.

The interesting problems weren't the features. They were the edge cases that break real money and real data.

Payments 3 rails

Three payment rails behind one abstraction.

WeChat Pay v3 (JSAPI / H5), Alipay (PC / JSAPI) and AdaPay share a single payment layer. A complete after-sales state machine handles request → review → original-channel refund. Orphan-payment detection automatically refunds money that lands after an order was cancelled — so a late gateway callback never becomes a support ticket. Orders also surface in WeChat's native Order Centre.

Data 0 downtime

A database migration nobody noticed.

PG-primary, JSON-fallback dual-track reads moved production from file storage to PostgreSQL without a maintenance window. 49 incremental migrations apply themselves at boot; empty tables back-fill from seed data.

Security timing-safe

Defence in depth, not a checkbox.

Helmet headers, fine-grained CORS, tiered rate limits for login / submission / API, RBAC on every endpoint, PII masking on list responses, audit trails with IP and operator, and constant-time token comparison via crypto.timingSafeEqual.

Integrations 11 APIs

Signatures without the SDK.

WeChat Pay, Alipay, AdaPay, WeChat Login, WeCom SSO, WeChat Order Centre, Aliyun SMS / OSS / MTS, Hupun ERP and a store platform. Where an SDK was heavy or missing I implemented the signing scheme directly — HMAC-SHA1 for Aliyun MTS, MD5 for Hupun, HMAC-SHA256 for store sync.

Quality 760+ tests

Green before it ships.

61 Jest suites cover API contracts, refund flows, payment simulation, security and data consistency. GitHub Actions runs the suite and a Docker build on every push to main. ESLint sits at zero errors across the repository.

Sync ×30 back-off

Two systems. One truth.

Registration submissions enqueue instantly and push to the main platform with exponential back-off — up to 30 attempts. Members match on country + ID number, then phone. Unmatched customers become placeholder members that are claimed automatically on their first Mini Program login, so no duplicates are ever created.

Money reversible

A commission engine the business can tune.

Reward base, payout timing, conversion to shopping credit and level-difference awards are all configurable from the console and settled automatically on order completion — with full reversal. Wallet payments split across shopping credit and balance, net of in-flight withdrawals.

A closer look

The details are the design.

Two small pieces from the codebase that say more than a feature list.

Dual-track reads

When “success” is the bug.

After a migration a PostgreSQL table can be empty while the JSON store still holds production data. A query that “succeeds” with zero rows, if trusted, makes the whole admin console look wiped. The dual-track layer decides — per domain — when PostgreSQL is authoritative and when to fall back, so the rollout could be staged, and reversed, with one environment variable.

server/services/dual-track.js
// PG has rows             → use PG
// PG table missing        → fall back to JSON, or throw if authoritative
// PG empty, JSON has data → fall back, or trust PG if authoritative
//                           (a deleted row can never be "resurrected")

function isPgAuthoritative(domain) {
  if (isTruthyEnv('PG_JSON_FALLBACK')) return false; // escape hatch
  if (isTruthyEnv('PG_AUTHORITATIVE')) return true;
  if (process.env.NODE_ENV === 'production') return true;
  const list = String(process.env.PG_AUTHORITATIVE_DOMAINS || '')
    .split(',').map((s) => s.trim()).filter(Boolean);
  return !!(domain && list.includes(domain));
}

async function loadListPreferPg({ loadPg, loadJson, domain, autoSeed }) {
  const authoritative = isPgAuthoritative(domain);
  let pgList;
  try { pgList = await loadPg(); }
  catch (err) {
    // only a missing table may fall back — never a network or auth error
    if (!isMissingRelation(err) || authoritative) throw err;
    return normalizeList(loadJson());
  }
  if (pgList.length > 0) return pgList;
  const jsonList = normalizeList(loadJson());
  if (jsonList.length && autoSeed) await autoSeed(jsonList); // idempotent
  return authoritative ? pgList : jsonList;
}
Orphan payments

Callbacks don't respect order state.

A customer cancels; seconds later the gateway's delayed notification lands and the money is now attached to an order that no longer exists. Instead of a manual reconciliation, the callback path recognises any payment that arrives against a non-pending order and refunds the surplus through the original channel — under a row lock, with a ledger entry, and without ever throwing, so the gateway always receives its acknowledgement.

server/services/orphan-refund.js · condensed
// Runs inside the payment callback. Never throws: a failed refund is
// logged and retried, so the gateway always gets its ACK.

const SURPLUS_REFUNDABLE = new Set([
  'cancelled', 'pending_ship', 'shipped', 'pending_receive',
  'completed', 'refunded', 'refunding', 'offline_pending_review'
]);

async function refundOrphanPayment({ Pg, appendLog }, orderId, paymentId) {
  const payment = await loadPayment(Pg, paymentId);
  if (payment?.order_id !== orderId) return skip();
  if (payment.status !== 'paid') return skip();

  const order = await loadOrder(Pg, orderId);
  // a pending order means this is the first, legitimate payment
  if (!SURPLUS_REFUNDABLE.has(order.status)) return skip();

  return Pg.withTx(async (client) => {
    const { rows: [row] } = await client.query(
      `SELECT amount, status FROM order_payments
        WHERE id = $1 FOR UPDATE`, [payment.id]);
    const used = await sumRefundedOrPending(client, payment.id);
    const remaining = row.amount - used;
    if (remaining <= 0.001) return skip(); // idempotent on replay

    await markRefunded(client, payment.id);
    await writeLedger(client, order, remaining, 'orphan_payment');
    return refundViaOriginalChannel(payment, remaining); // wechat | balance
  }).catch((err) => appendLog('orphan-refund-failed', { orderId, err }));
}

Also shipped

Customer Registration.

A stand-alone system for collecting customer records in offline sales scenarios across 20 countries — and quietly keeping the main platform in step with every submission.

May — Jul 2026 Sole developer, with AI agents Node.js · Express · SQLite · ECharts

3,423

districts, one picker.

A mobile-first form with 20-country selection, cascading document types, a full province / city / district three-level selector, ID photo upload and a product-feedback survey.

3 levels

of map drill-down.

An ECharts China map with national → province → city → district drill-down, volume-based colour gradients, right-click inspection and a clickable breadcrumb trail. Filters flow straight into the data table.

30 / min

and not one more.

Per-IP submission limits, login lockout after repeated failures, hardened session cookies, a trusted reverse-proxy chain and CSV export with region / time / free-text filters.

Sync pipeline to the main platform
  1. SubmitForm posts to SQLite; row committed first
  2. EnqueueSync job written in the same transaction
  3. PushHMAC-signed webhook, exponential back-off ×30
  4. MatchCountry + ID number, then phone
  5. ClaimPlaceholder member bound on first WeChat login

Stack

Chosen for the job. Learned to the bottom.

AI-native development

Claude Code (agentic coding, parallel sessions) and Cursor (agent mode, cloud agents); a prompt template, Cursor rules, AGENTS.md and persistent agent memory as shared context; spec-first prompts; tests and approval gates around AI-written code

Back end

Node.js, Express, RESTful API design, JWT + RBAC authorisation, layered middleware, rate limiting, audit logging, transactional integrity with PostgreSQL

Front end

HTML / CSS / JavaScript, WeChat native Mini Program (WXML / WXSS / WXS), ECharts data visualisation, a 9,000-line drag-and-drop page builder written from scratch

Payments & integrations

WeChat Pay v3 (JSAPI / H5), Alipay (PC / JSAPI), AdaPay, WeChat Login & Order Centre, WeCom SSO, Aliyun SMS / OSS / MTS, Hupun ERP, custom HMAC / MD5 request signing

Data

PostgreSQL schema design and 49-step incremental migrations, dual-track PG / JSON storage with fallback, SQLite, seed back-fill, PII masking, financial ledgers

Cloud, operations & quality

Alibaba Cloud ECS / OSS / DNS, Nginx reverse proxy & HTTPS, Let's Encrypt, PM2, hash-verified one-command deploys with automatic rollback; Jest & Supertest (760+ cases), GitHub Actions CI with Docker build, ESLint at zero errors, miniprogram-ci uploads

How I work

Own the whole lifecycle.

There was no hand-off. AI agents did the typing; every decision below was mine — and so was every consequence.

  1. 01

    Understand

    Translate a business owner's needs — dealers, tiers, commissions, traceability — into a system that can actually be built and operated.

  2. 02

    Design

    Schema first. 49 migrations, a payment abstraction and an RBAC model that survived nine months of changing requirements.

  3. 03

    Build

    140K lines across console, Mini Program and API, written by AI agents from my specs. Fragile modules documented and guarded with targeted tests.

  4. 04

    Verify

    760+ automated tests, CI on every push, production audits of every screen and endpoint, and a launch-readiness checklist.

  5. 05

    Ship

    One command diffs against the live commit, backs up, verifies every file and rolls back on failure. Mini Program builds uploaded by script. HTTPS, DNS and CDN configured end to end.

  6. 06

    Operate

    Health checks, inspection scripts, audit logs and runbooks. When something breaks at 11 pm, I am the on-call.

Contact

Let's build something that holds up.

Final-semester Master of IT at UNSW, graduating December 2026. Based in Canberra, open to AI-native full-stack, AI product engineering and forward deployed engineering roles. I reply to every message.