PM + Tech Consultant

Hi, I'm Tle

A PM who learned to code through vibe coding with Claude Code. 248 days in. 120+ products built.

The Journey

From PM to Product Builder

The Starting Point

I'm a PM and Tech Consultant who loves building tech products for clients. But I always depended on developers for every step. I had ideas, I had specs, I had wireframes — but I couldn't build anything myself.

Learning From Others

May Jaruwat taught me the basics of Terminal. I gave up — I didn't understand the fundamentals. Then Ton Preerasak and Aek Prasert showed me how to set up Claude Code. Everything clicked. Suddenly, I could talk to a computer and it would build what I described.

Today

In just 248 days with Claude Code, I've built over 120 products— from event ticketing systems to ride-hailing apps on LINE. Every single one was vibe coded. No traditional coding background. This page you're reading? Also vibe coded.

120+

Products Built

248d

of Vibe Coding

100%

Vibe Coded

Selected Projects

Things I've Built

Hand-picked from 120+ projects. Every one started as a conversation with Claude Code.

👵Community

Yenjai Care

Elder-care marketplace piloting in Korat — starts with an accompany-to-the-doctor service, booked with a deposit and confirmed by automatic bank-slip verification.

Next.js 16Neon PostgresEasySlipMapLibre
🧾AI

IT House Quotation Bot

LINE OA bot where sales staff type a request in plain Thai and get a PDF quotation back — an LLM parses the message against the customer and product database.

Next.js 16OpenRouterLINE Bot SDKNeon Postgres
💰Business

Happiness MLM Platform

thehappiness.co.th

Custom binary-MLM platform with its own marketplace, replacing an off-the-shelf system — a Cloudflare Pages site, a LIFF member app, and a restored legacy PHP engine.

Next.js 16SupabaseCloudflare PagesLINE LIFF
📚Business

Book House

bookhouse.co.th

Quote-request site for a Korat bookstore selling into government procurement — no cart, no checkout, and no prices on the public pages, by design.

Next.js 15Google Cloud RunCloud SQLGCS
📦Business

Choksima Staff Assistant

Staff dashboard that catches customer product questions from a LINE OA webhook, then searches inventory through Algolia so the reply comes back with real matches.

Next.js 15AlgoliaLINE Messaging APINeon Postgres
💬AI

LINE Message Recap

Exports years of LINE group chat through GUI automation and on-device OCR, then turns each conversation into a one-page recap — no LINE API access needed.

AppleScriptSwiftVision OCRPython
🤖AI

Live Vibe Coding

Public site where a visitor chats with an agent that edits the site's own code live — each visitor gets their own git branch and preview deployment.

Claude Agent SDKVercel SandboxNext.js 16Upstash Redis
💧AI

AquaSync

Water-intelligence platform pitched at BDI Hackathon 2026 — forecasts the gap between Phuket's tourist-season water demand and supply so hotels and government can act early.

AWS BedrockMapLibre GLNeon PostgresNext.js
🗺️Community

K-Map

Crowdsourced incident map for checkpoints and accidents — a pin gains visual weight as nearby users confirm it, and expires on a timer unless someone re-confirms.

Next.jsSupabase PostGISMapLibreClerk
🐾Business

Pet Vac

pets.madebytle.com

Mobile-first vaccination and health record book for pets, with email reminders before the next vet appointment falls due.

Next.js 15Neon PostgresClerkResend
📈Business

Business Report Microsites

Financial models for local ventures — a basketball court, a cafe-cowork-gym — published as single-page reports with passcode access, versioned changelogs, and permanent links.

Node.jsVercelSingle-file HTML
🏢Business

Application.in.th

application.in.th

Corporate website for a Thai software house, rebuilt on Next.js 16 and containerised onto Google Cloud Run.

Next.js 16DockerGoogle Cloud RunTailwind v4
🥩Business

PB Pattana

pbp.co.th

Corporate site for a Korat-based protein producer and exporter, built as a Vite single-page app.

ViteReact 19TypeScriptTailwind
🎬AI

HyperFrame Video Studio

A video pipeline where motion graphics are authored as HTML and rendered to MP4 — speech is transcribed, technical terms auto-corrected against project context, then captions and branded graphics are composited onto the cut.

HyperFramesffmpegScribe ASRClaude Skills
🕰️IoT

Smart Desk Clock

A USB-only ESP8266 desk clock with no Wi-Fi and no cloud by design — six screens including an animated face, BTC candles, and live coding-session usage bars, all fed over a single serial link from the Mac.

ESP8266PlatformIOLittleFSPython serial
🤝Community

WeAble

Job board and talent-matching platform built specifically for people with disabilities — free for job seekers, while employers spend credits to unlock contact details on a CV.

Next.js 16React 19Neon PostgresDrizzle
🚗Business

Car Dealership Platform

Multi-branch car-dealership website (5 showroom locations) with an admin panel — dual-deployed from one codebase to a brand domain and a hosting subdomain.

Next.js 16Neon PostgresDrizzlePM2 + Apache
🌐AI

GhostPilot

Electron desktop browser with an embedded MCP server — Claude can control tabs, navigate, capture screenshots, and read console/network through 51 tools.

Electron 33React 18MCP SDKExpress
🎙️AI

ThaiDictate

macOS menu-bar app for Thai speech-to-text with on-device recognition and TH→EN translation via Apple Translation — triggered by double-tap Control.

Swift 6AppKitSpeechApple Translation
🤖AI

Facebook Auto Poster

Python automation that uses Claude Vision to write Thai captions from photos, then schedules Facebook posts through Playwright browser automation.

Python 3.11Claude VisionPlaywright
🎮Business

JoyMail

Landscape PWA for reading Gmail on an iPad with a PS5 DualSense controller — Square deletes, D-Pad archives or snoozes, Triangle assigns.

Next.js 16NextAuth v5googleapisGamepad API
👟Business

Deal Stores

dealstores.net

B2B stock manager for an authentic used football-studs business — each pair a unique SKU with brand, size, grade, and photos for partner catalog access.

Next.js 15Neon PostgresDrizzleVercel Blob
🚙Business

DriveMe

LINE LIFF platform for hiring drivers in Korat — Night Mode for safe rides home after drinking, Day Mode for long-distance day trips.

Next.js 15LINE LIFFNeon PostgresDrizzle
Business

Nimittarot Admin

Admin CMS for nimittarot.com — manages tarot cards, meanings, members, and payment logs against the existing Supabase backend (no schema migration).

Next.js 16React 19SupabaseTailwind v4
🌱Business

Durian Life

Mobile companion for durian farmers — combines the on-scale weighing counter with a month-grid garden-care calendar (water, fertilizer, pruning).

Next.js 15ClerkNeon PostgresDrizzle
📡Event

Telco Annual Event Hub

Mobile-first event hub for a Thai telco's annual ~400-attendee company gathering — agenda, session info, and on-the-day experience optimised for phones.

Next.js 15TypeScriptTailwindVercel
🟧Community

Digital Association Website

koratdigital.com

Public website + member back-office for a regional digital association — 5-tier membership registry, committee directory, and activity management.

Next.js 15HeroiconsNeon PostgresDrizzle
🫂Gov

Care Intelligence Platform

29M THB Thai government platform (พก./พม.) for monitoring and managing care of ~500 dependent persons with disabilities at pilot centers.

Gov PlatformCase MgmtSSO
🩺Business

Web Clinic by NDA

Autonomous website health audit service — analyses Performance, SEO, Security, DNS, and Tech Stack from a public URL only.

BashLighthousecurldig
🚙Game

Korat Drive

Mini driving game built on mapcn (React + MapLibre GL + shadcn/ui) exploring map-based interactions around Korat.

Next.jsReactMapLibre GLTailwind
🎤Event

POP & LOVE Check-in

kk-vibes-checkin.vercel.app

Mobile-first mockup for POP & LOVE Concert (@ZEERRANGSIT) with check-in, partner benefits, QR redemption, and login.

Vanilla HTMLCSSJavaScript
🌳Community

Family Tree Web App

Mobile family-tree builder for a Thai-Chinese clan — supports cross-family marriages, alternate-code overrides for in-laws, and photo uploads.

Next.js 15Neon PostgresVercel Blob
📊AI

VI-Sniper Reports

Daily SET100 stock reports produced by the VI-Sniper workflow — sorted by projected dividend per month of 1M THB invested.

PythonSET100Automation
📋AI

Trello CLI x Claude

.NET 10 global CLI that lets Claude Code manage Trello boards, lists, and cards through natural language.

.NET 10C#Trello API
🛠️Community

BNI Tools

Utility tools website for BNI chapter members — mobile-first PWA with Thai UI and a grid of single-purpose tools.

Next.js 15TypeScriptTailwind v4shadcn/ui
🧰Business

Madebytle Kit

Personal collection of everyday utility tools (client-side first) with Supabase auth. Add a new tool by dropping a route folder.

Next.js 16TypeScriptTailwind v4Supabase
🔍Business

DOSX Vibecheck

dosx-vibecheck.vercel.app

Report hosting hub for /vibecheck website audits — one subpath per audited site (poolvillath, foundy, nimittarot, etc.).

Static siteVercelHTMLLighthouse
📸AI

Face me Now

Face search system that lets event attendees find their photos in online galleries using facial recognition on GCP-stored images.

Next.jsPython FastAPISupabaseGCP Storage
📈AI

VI-Sniper

AI work team that analyzes Thai stocks using Value Investing principles. 7 specialized agents handle everything from fundamental to technical analysis.

AI AgentsSET DataPortfolio Mgmt
🎫Event

Event Ticketing

kevents.club

Ticketing system for events — public storefront, checkout with slip verification, e-tickets with QR, and an admin dashboard for events and check-in. Rebranded and re-platformed from Vercel onto containers behind a CDN.

Next.js 16Cloud RunNeon PostgresDrizzleClerk
🚕Business

RideConnect

LINE LIFF ride-hailing platform where drivers receive job announcements as Thai TTS audio through Zello Work radio channels.

Next.jsTailwindSupabaseGoogle TTSZello Work
🔧Business

Handio

White-label service matching platform pairing customers with electricians, AC techs, and cleaners via LINE OA + LIFF (per-agent OA).

Next.jsshadcn/uiNode.jsNeon Postgres
🏞️Community

Khao Yai Hub

LINE LIFF super-platform for Khao Yai — B2B e-procurement, on-demand urgent services, verified accommodation, and local food delivery.

LINE LIFFGCPPromptPay QR
🏗️AI

ArchiFlow

AI digital concierge for home construction and interior design businesses — 24/7 multi-channel chatbot with auto-quote PDFs and booking.

AI ChatbotMulti-channelPDF Generator
🎪Community

Regional Unconference

First-of-its-kind community unconference in northeastern Thailand — 200-300 attendees, community-funded budget with tiered sponsorship.

Event MgmtCommunity Building
🎯Business

Kuekan

LINE-first loyalty and rewards platform with gamification, geofenced missions, and multi-tenant support for cities, orgs, and merchants.

LaravelPostgreSQLMongoDBRedisGCP
💼Business

BNI Power Store

m.bni-power.com

Mobile web app for BNI Power Chapter Korat — member store directory with affiliate links, personalization, and JU member sync.

Cloudflare WorkersHonoD1R2
AI

PICK-ME-UP

AI-powered coffee pick-up platform with AI work-team agents for orders, inventory, queue optimization, and customer recommendations.

FlutterNode.jsFirebaseGCP
📱Business

QR Payment Speed Study

PromptPay QR usability research campaign — 100 users pay at food courts using a custom iOS app (target: <3s transactions).

SwiftiOS 18.5+AVFoundationWidgetKit
📅Business

Cal Share

cal.madebytle.com

Chrome extension + Next.js web app that turns a Google Calendar event into a shareable, beautiful page with 'Add to Calendar' buttons.

Chrome Ext (MV3)Next.js 16TypeScriptTailwind v4
🎵Community

City Festival + Tourism Sites

visitkorat.com

Monorepo of two city-themed sites — an international hip-hop festival event site and an official regional tourism site sharing components and DB.

Next.js 16Tailwind v4Neon PostgresDrizzle
Event

TCB Outing Check-in

event-checkin-oa.vercel.app

LINE LIFF app for Thai Credit Bank's ~1,400-employee outing — 8 activities, QR scan check-in/out, leaderboard by person and department.

Next.js 15LINE LIFFTailwind
🥭Business

Durian Counter

Mobile web app for weighing durian on scales and saving readings to the database — Clerk-gated, numeric keypad, Neon Postgres.

Next.js 15ClerkNeon PostgresDrizzle
🗳️Gov

DIPROM Election

Mobile-first voting mini-site for a government entrepreneurship training program — candidate profiles, 28-voter ballot, and buddy lucky-draw for DIPROM คพอ. 430.

Next.js 16TypeScriptTailwindVercel
🏛️Community

Tech Association Member Portal

Public site + member back-office for a provincial tech association — 5-tier membership registry, committee directory, and activity management.

Next.js 15TypeScriptNeon PostgresDrizzleVercel
🏭Business

Industrial Sales Dashboard

LINE OA-connected staff dashboard for an industrial packaging company — webhook intake from customers, Algolia product search, and reply dispatch via LINE.

Next.js 15LINE APIAlgoliaNeon Postgres
🎊Event

Enterprise Annual Event

Mobile-first event hub for a major Thai enterprise's annual gathering — agenda, session guide, and on-the-day information optimised for 400 attendees.

Next.js 15TypeScriptTailwindVercel
🏢Business

TH Companies

th-companies.vercel.app

Web app to search and filter 200K+ registered Thai companies — sector groups, annual registrations by year, and factory data from government sources.

Next.js 16Neon PostgresTypeScriptTailwind

Mistakes & Lessons

What I Learned the Hard Way

Every rule in my projects exists because I broke something first. Here are the stories behind the rules.

📧Email

The API Key That Cancelled Real Orders

The email key in the environment belonged to an unverified account. Every send came back 403, but the script still exited zero and carried on, so three paying customers had their orders cancelled and nobody was told.

Rule:Send one real email before the script is allowed to touch the database — an exit code is not delivery

Database

A 5-Minute Cron Kept the Database Awake

Tightening a cron job to run every five minutes meant the serverless Postgres compute never got to auto-suspend. It burned through the compute quota and took the whole site down with a 500.

Rule:Never poll a scale-to-zero database more often than its suspend window — the schedule is the bill

🏗️Deploy

The Build Command That Lies

`gcloud builds submit` returned exit code 0 on a build that had actually failed. The deploy script read that as success and moved on, so a broken image looked like a clean release.

Rule:Query the build status explicitly after submitting — never trust the CLI's exit code alone

↪️HTTP

302 Silently Ate the Form Submission

An old deployment URL was redirected to the primary domain with a 302. That downgrades POST to GET, so quote-request forms submitted against the stale URL arrived empty instead of failing loudly.

Rule:Use 308, not 302, on any redirect that sits in front of a route accepting POST

⌨️Automation

The Thai Keyboard Ate the File Path

AppleScript's keystroke sends characters through whatever keyboard layout is active. With Thai selected, typing a file path produced garbled Thai characters and no error at all — hours went into tracing a bug that was never in the code.

Rule:Inject Unicode straight into the key event instead of typing through the active layout

🪣Security

Public Bucket, Public File List

A media bucket was made publicly readable with objectViewer, which grants list permission too. Anyone could enumerate every file in it, not just open the URLs they already knew.

Rule:Grant legacyObjectReader for public-read buckets — objectViewer hands out the directory as well

🚚Deploy

Moving Hosts Moves More Than the App

Re-platforming the ticketing system off Vercel looked like a container build and a DNS switch. It wasn't — blob storage, cron jobs, and auth were all platform features that had no equivalent on the new host, so each one had to be swapped out mid-migration.

Rule:Keep storage, cron, and auth behind your own interfaces — otherwise a host move becomes a rewrite

🗺️Architecture

Demo Servers Are Not Infrastructure

Distance-based pricing was wired straight to the public demo routing and geocoding endpoints. Great for a prototype, but they carry no SLA and throttle without warning — a quiet single point of failure sitting in the pricing path.

Rule:Treat any public demo API as prototype-only, and keep the provider swappable through env

🌐Deploy

Two Domains, One Codebase

A dealership site had to live at both a brand domain (root path) and a hosting subdomain (with basePath) from the same codebase. Hardcoding the prefix broke navigation the moment we deployed to the wrong target. Now BASE_PATH is an env var and we build two outputs side-by-side.

Rule:Drive basePath from an env var — never hardcode the URL prefix

💀API

The /v1 Disaster

Deployed Handio to production and every single API call returned 404. Spent hours debugging. The cause? Missing /v1 suffix in the API URL. Now every project has an auto-append safety net in the API client.

Rule:Always append /v1 to API base URLs

🔥Security

The .env Commit

Almost pushed database credentials to a public repo. Now every project starts with .gitignore before writing a single line of code. Multiple projects have this as rule #1.

Rule:Never commit .env files — ever

💉Security

Raw SQL? Never Again

Wrote raw SQL queries in the Event Ticketing system. Realized it opened the door to SQL injection. Switched to Drizzle ORM exclusively — type-safe, no injection possible.

Rule:Use an ORM, never write raw SQL in production

📊Data

The Wrong Data Source

Built VI Sniper's stock analysis using a global data provider. Turns out the AI pulled surface-level data when we needed deeper Thai-market specifics like BVPS and dividend details. The data wasn't wrong — we just needed a more specialized source.

Rule:Match your data source depth to your analysis depth

🔄Architecture

The Timer That Vanished

Handio's auto-dispatch used in-memory timers. Server restart = all pending dispatches lost. Learned that anything critical must be persisted to a database, not held in memory.

Rule:Never rely on in-memory state for critical features

📝Docs

Notion Hates ASCII Art

Wrote beautiful folder trees with ├── and └── characters for an IoT laundry project's docs. Imported to Notion — completely mangled. Now all docs use plain indentation only.

Rule:No ASCII art or table alignment in docs bound for Notion

🖼️Performance

Layout Shift Nightmare

BNI Power's product images loaded without width/height — the entire page jumped around as images rendered. Fixed by enforcing dimensions on every image and using lazy-fade loading.

Rule:Always set width & height on images to prevent CLS

📱Architecture

One LIFF, Many Agents

Almost created separate LINE Login channels for each Handio agent. Discovered you only need a Messaging API channel per agent — the customer app deploys once and uses URL params to switch.

Rule:Reuse infrastructure — deploy once, configure per-instance

IoT

The SMS That Came Too Early

An IoT laundry project's maintenance alerts fired before the actual task completed — using augmented time instead of real program time. Users got confused. Timing in IoT is harder than you think.

Rule:Use actual completion events, not predicted timestamps

🔒Compliance

Privacy Can't Be an Afterthought

Working on projects with sensitive user data taught me the hard way — PDPA compliance and data protection need to be baked into the architecture from day one, not bolted on after launch.

Rule:Design for compliance from the start

📉Data

Ban Yahoo Finance for Thai Stocks

Yahoo Finance's data for Thai stock BVPS, EPS, and dividends was consistently wrong during VI-Sniper research. After burning hours on bad numbers, we banned it outright from the pipeline.

Rule:For Thai stock data, pull from aio.panphol.com or Settrade — never Yahoo Finance

📱Mobile UX

Custom Keypad Beats Native Keyboard

On the Durian Counter scale, the native iOS/Android keyboard kept hiding the submit button and slowed entry for users with dirty hands. A read-only input with a custom on-screen keypad fixed it instantly.

Rule:For mobile numeric entry, use a read-only input + custom on-screen keypad

🔐Security

Zero-Credentials Audits

Web Clinic by NDA is designed to never request server access — all findings come from public data (HTML, headers, DNS, CLI tools) so it can be offered as a safe autonomous service with no client trust barrier.

Rule:Never ask for SSH, DB, or login during a site audit — public data only

🛡️Security

Patch Legacy WordPress Before It Bites

The DOSX corporate WordPress site was hit with a casino spam injection and had to be cleaned and patched. Unattended legacy installs are sitting ducks for drive-by injections.

Rule:Legacy WordPress must be patched, hardened, and monitored — or it gets injected

3rd-Party Ecosystem

Tools & Services I Use

The ecosystem of tools, APIs, and platforms that power my projects — discovered and integrated through vibe coding.

💳

Payment & Fintech

Thunder Slip API

Auto-verify Thai bank transfer slips — no manual checking

Event Ticketing

Stripe

International card payments & subscription billing

Pick-me-up, The Trophy, GTR

OPN (Omise)

PromptPay & mobile wallet payments for Thai market

Laundry IoT, The Trophy

2C2P

Thai-focused card & QR payment gateway for enterprise apps

Pick-me-up, The Trophy

PromptPay QR

National QR payment standard — Thailand's default checkout

QR Payment Study, Mobile Wallet, Khao Yai Hub

EasySlip

Reads a transfer slip and confirms the deposit without a human checking

Yenjai Care
💬

LINE Ecosystem

LINE Messaging API

Push notifications, rich menus, chatbot interactions

Kuekan, Handio, RideConnect +5

LINE LIFF

Full web apps running inside LINE — no separate app needed

RideConnect, Handio, Khao Yai Hub

LINE Login

One-tap authentication using existing LINE accounts

BNI Power, Kuekan
🧠

AI & Machine Learning

Claude AI

The engine behind everything — vibe coding all 120+ projects

Every single project

DeepFace

Python facial recognition for event photo matching

Face me Now

Google Cloud TTS

Text-to-speech for driver dispatch announcements

RideConnect

Gemini

Google's generative AI — used for grant-writing workshops

Grant Workshop

Playwright

Headless browser automation — schedules Facebook posts end-to-end

Facebook Auto Poster

MCP SDK

Embed an MCP server in any app so Claude can call its tools directly

GhostPilot

Apple Translation

On-device TH→EN translation framework (macOS 14.4+) — no network call

ThaiDictate

OpenRouter

One API across many LLM providers — parses plain-Thai quote requests

IT House Quotation Bot

Claude Agent SDK

Runs a coding agent server-side, on a branch, per visitor

Live Vibe Coding

AWS Bedrock

Managed foundation models on AWS — forecasting water demand

AquaSync

Vision OCR

Apple's on-device text recognition — reads Thai chat screenshots for free

LINE Message Recap
🗄️

Database & Backend

Neon Postgres

Serverless PostgreSQL — scales to zero, branches like git

Event Ticketing, Handio, Face me Now

Supabase

Postgres + auth + realtime — backend in a box

Face me Now, RideConnect, Book House

Drizzle ORM

Type-safe SQL queries — no raw SQL, no injection risks

Event Ticketing, Handio

Cloudflare D1

SQLite at the edge — perfect for low-latency reads

BNI Power Store

Cloudflare R2

Zero-egress object storage — pairs with Workers and D1

BNI Power Store

Clerk

Drop-in authentication with managed sign-in, sign-up, and session handling

Durian Counter, Durian Life

NextAuth.js v5

Auth.js for Next.js — Google OAuth with Gmail readonly + modify scopes

JoyMail

Vercel Blob

Object storage right next to your Vercel app — perfect for product photos

Deal Stores, Family Tree

Google Cloud SQL

Managed Postgres sitting in the same region as Cloud Run

Book House, Visit Korat

Resend

Transactional email — order confirmations and appointment reminders

Event Ticketing, Pet Vac

PartyKit

Realtime multiplayer state — the layer the whiteboard actually lives in

Madebytle Kit
🚀

Deployment & Infra

Vercel

One-click Next.js deployments with edge functions

Event Ticketing, BNI Tools +10

Cloudflare Workers

Serverless functions on the edge — sub-50ms cold starts

BNI Power Store

Google Cloud Run

Containerized deployments for heavier workloads

Handio, Book House, Event Ticketing

Cloudflare Pages

Static hosting on Cloudflare's edge — check DNS before assuming the host

Happiness MLM
📊

Analytics & Monitoring

Mixpanel

Product analytics with event tracking & user funnels

Retail Analytics Pilot

Sentry

Error tracking — catch bugs before users report them

Kuekan

Lighthouse

Automated web audits for Performance, SEO, and Accessibility

Web Clinic, Vibecheck audits

OneSignal

Push notifications across iOS, Android, and web

Pick-me-up, Debenture App, Laundry IoT

UXCam

Session replay for mobile — watch where testers actually got stuck

QR Payment Study
🗺️

Maps & Location

Google Maps API

Geocoding, distance calculation, and store locators

Kuekan, True Leasing, Handio

MapLibre GL

Open-source vector maps — no Google dependency

Korat Drive (mapcn)
🔍

Search & Content

Algolia

Lightning-fast full-text search with typo tolerance

Pick-me-up, The Trophy, CDS, Choksima

OFM API

Product catalog sync for office furniture and supplies

Book House
📲

Mobile & Browser

Swift (iOS 18.5+)

Native iOS app with Control Center widget — VIP pattern + state machines

QR Payment Study

Chrome Extension (MV3)

Manifest V3 extension with content script + service worker architecture

Cal Share

Flutter

Cross-platform mobile app with native-feel UI

Pick-me-up

WidgetKit

iOS home-screen and Control Center widgets — sub-3s QR launch

QR Payment Study

Zello Work API

Radio-style push-to-talk channels for driver broadcasts

RideConnect

Electron

Cross-platform desktop apps with a real Chromium engine + Node.js

GhostPilot

Gamepad API

Browser-native PS5 / Xbox controller input — D-Pad, sticks, buttons

JoyMail

Speech Framework

Apple's on-device speech recognition — locked to th-TH locale

ThaiDictate

Thank You

People Who Made This Possible

I didn't figure this out alone. These people gave me the push I needed.

🌱

May Jaruwat

Terminal foundations

Planted the seed

🚀

Ton Preerasak

Claude Code setup

Lit the fuse

🛠️

Aek Prasert

Claude Code setup

Built the launchpad