PAKAWAT SMUTKUN System Engine Proof
live case study
Product experiment Expo · React Native Supabase

When?

A Thai super app where every feature works—except the outcome. I built the joke as a reusable product system: ordering, live tracking, dating, merch, vouchers, and partner campaigns all share real architecture underneath the absurdity.

live production build · interactive

4major product domains sharing one app
client + database test layers
1shared tracking / failure engine
Web + Nativefrom the same Expo codebase
00

Live product flow

One visual language from discovery to detail.

Captured from the production Vercel build at a 390×844 mobile viewport: main menu → food delivery → restaurant menu.

When? main menu
01 · Main menu
When? food delivery browse
02 · Food delivery
When? restaurant menu detail
03 · Restaurant detail
01

System shape

The comedy is a domain layer, not a pile of screens.

The central product decision was to make “things go wrong” reusable. Food orders, date bookings, and future services can enter the same deterministic route / incident / failure lifecycle while keeping their own feature logic isolated.

Presentation
Expo RouterDoodle UINative / Web mapsTabs + feature routes
Feature state
FoodDatingMerchAuthZustand
Domain core
RoutePathScript selectionFailure state
Data boundary
Typed API modulesSupabase clientResilient guest boot
Backend
PostgresAuthRPCsDeno Edge FunctionpgTAP
02

Reusable engine

One failure lifecycle. Multiple ridiculous products.

Instead of scripting each screen independently, the engine owns progression. A service creates an order-like event, the route progresses deterministically, incidents are selected, and the experience resolves into a shared failure finale.

Create

Food, ride, parcel, mart, or a date becomes an order-like lifecycle.

Route

Path and progress logic create a believable movement model.

Script

Seeded selection makes incidents repeatable and testable.

Track

Shared UI turns domain progress into the live parody experience.

Fail

The finale closes the loop and can feed rewards / follow-on features.

03

Engineering proof

Playful surface. Production-minded boundaries.

The project is intentionally unserious in tone, but the implementation keeps infrastructure, domain logic, state, UI, and persistence independently understandable.

A · Cross-platform

Expo as the delivery shell

Expo Router drives mobile and web from one TypeScript application, with platform-specific map and spot-picker components where the platforms genuinely differ.

B · Backend

Migration-driven Supabase

Postgres schema, seed data, RPCs, authentication, partner submissions, and sensitive state transitions live behind a structured backend rather than ad-hoc client persistence.

C · Tests

Rules tested at the right layer

Jest covers deterministic domain behavior and UI/API smoke paths; pgTAP verifies database behavior and security hardening close to Postgres.

Feature domains

  • Food browse, cart, orders, tracking
  • Dating deck, matches, chat, affection, date booking
  • Timed merch shop, vouchers, brand redemption
  • Partner campaign submission with Edge Function notification boundary

Portfolio takeaway

  • Product concept → real system architecture
  • Reusable domain modeling instead of screen-specific jokes
  • Hand-drawn component language without abandoning consistency
  • Client resilience when the backend is cold or unreachable