We build production web applications end-to-end — from architecture through deployment, observability, and the on-call playbook.
What we deliver
Next.js (App Router, RSC) + React + TypeScript front-ends with type-safe API boundaries.
Backend choice fitted to the workload — NestJS for typed enterprise APIs, FastAPI for Python/ML-adjacent services, or Next.js Server Actions for tightly-coupled stacks.
Postgres with migration discipline, tested rollback paths, and row-level security (RLS) for multi-tenant SaaS where data isolation is non-negotiable.
Background work done right — BullMQ / Redis or Celery for queues, retries with idempotency keys, and dead-letter handling.
OpenAPI / contract-first APIs with generated typed clients — no hand-typed responses, no schema drift between frontend and backend.
CI/CD pipelines (GitHub Actions → Vercel / AWS) with preview environments and database-migration drills.
Structured logging, dashboards, and the first set of SLO alerts.
A maintenance runbook the next engineer can actually use.
When this fits
You need an MVP shipped in 6–12 weeks, not 12 months.
You have a Figma or product spec but no engineering team yet.
You're rewriting a legacy stack and want the new one production-shaped from day one.
Proven in practice
Reference builds from our own work that exercise this capability end to end.
Healthcare — hospital medical affairs
Clinical Education Operations Platform
The problem
Multi-institution clinical education ran on spreadsheets and email — manual tutor matching, untracked teaching hours, and sensitive trainee documents processed by hand. None of it was auditable, and student data crossed institutional boundaries it shouldn’t.
What we built
A unified platform for a hospital group’s clinical-education operations — managing students, tutors, and teaching-hour billing across multiple institutions, with AI-assisted document processing and matchmaking.
▸Three-tier LLM orchestration (Claude Haiku / Sonnet / Opus) routed per task class, with per-request and per-institution daily cost ceilings enforced in Redis.
▸Six-stage document pipeline that tokenises Singapore NRICs before any AI call, then routes by confidence — auto-commit above 0.90, human review between 0.70 and 0.90, blocked below.
▸AI-assisted matchmaking and a clinical-curriculum RAG that retrieves then LLM-re-ranks learning objectives, with every model output schema-validated.
▸Per-institution row-level security enforced in Postgres via a per-request session GUC, isolating tenants at the database layer.
▸PII-masked, append-only audit logging — every payload redacted and tenant-scoped before it is written.
NestJS 11
Next.js 15
PostgreSQL 16 + pgvector
Prisma
AWS Bedrock
BullMQ / Redis
Public sector — HR & recruitment
Multi-Tenant Recruitment Platform (Gov-Cloud)
The problem
Government hiring is slow, manual, and spread across disconnected tools — while strict data-isolation and in-country residency rules rule out most off-the-shelf recruitment platforms. Recruiters drown in resume screening that AI could triage.
What we built
A multi-tenant applicant-tracking SaaS for government agencies on government commercial cloud, with in-region AI for resume parsing and semantic candidate search.
▸Hard tenant isolation: a per-tenant database connection plus per-tenant KMS key aliases, with separate keys for general data, interview notes, and exports.
▸Enterprise SSO implemented end-to-end — SAML 2.0, OIDC (PKCE), SingPass NDI, and SCIM 2.0 directory sync — with SMS OTP and step-up MFA on sensitive actions.
▸In-region AI on Bedrock — resume parsing, semantic candidate search, and interview-note summarisation — each gated by a DLP scanner (NRIC / FIN / passport / contact patterns) before any model call.
▸Dual-control bulk export: a second approver and a step-up token are required, releasing a 15-minute presigned, tenant-key-encrypted download.
▸Fully Terraform-provisioned (17 modules) across multi-AZ, with a WORM audit bucket (S3 Object Lock, COMPLIANCE mode) and UUIDv7 time-ordered audit rows.
FastAPI
Next.js 15
PostgreSQL 16 + pgvector
Terraform
AWS GCC 2.0
AWS Bedrock
Consumer — communications & fintech
Cross-Platform Communications & Payments App
The problem
People juggle separate apps to chat, call, and pay — and the constant context-switching is friction, especially when a payment means leaving the conversation to open a banking app and copy details across.
What we built
A cross-platform mobile app unifying real-time messaging, peer-to-peer video calling, and QR-code payments in a single Capacitor-wrapped codebase.
▸WebRTC peer-to-peer audio / video with real-time MediaPipe segmentation — live background blur and virtual backgrounds composited on a canvas stream.
▸One Next.js codebase shipped two ways: an installable, service-worker-cached PWA and an Android build with a native Java plugin that detects and launches other apps.
▸SGQR / PayNow QR scanning that parses the EMVCo payload and launches the right native bank app via an Android intent.
▸Supabase Realtime messaging with optimistic send and an offline outbox — failed sends queue in local storage and flush on reconnect.
▸Emergency SOS that captures and reverse-geocodes the user’s location and pushes it to contacts.
Next.js 16
React 19
Capacitor 8
Supabase
WebRTC (simple-peer)
Education — school administration
School Operations & Timetabling SaaS
The problem
Building a school timetable by hand takes weeks and still produces clashes, and covering a sudden teacher absence means hours of frantic phone calls — with no guarantee the cover load is shared fairly.
What we built
A multi-tenant SaaS for school timetabling, relief-teacher planning, and mobile attendance, powered by a constraint-solving scheduling engine.
▸An OR-Tools CP-SAT solver generating clash-free timetables — enforcing teacher, room, and class non-overlap plus full curriculum coverage, while respecting teacher qualifications.
▸Automated relief-teacher allocation: approving a leave writes a transactional outbox event a worker drains within seconds to a solver that optimises for teaching continuity and fair workload balance.
▸Privacy-preserving mobile attendance (React Native / Expo): the on-campus check is computed on-device by haversine distance and only a boolean is sent — raw coordinates are never persisted.
▸Database-per-tenant isolation with per-tenant KMS keys; the scheduling engine connects read-only under a least-privilege, RLS-scoped role.
▸Transactional outbox (at-least-once, SELECT … FOR UPDATE SKIP LOCKED) and an append-only audit trail that HMACs the actor identity under a per-tenant key.