PM + Tech Consultant

Hi, I'm Tle

A PM who learned to code through vibe coding with Claude Code. 147 days in. 90+ 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 147 days with Claude Code, I've built over 90 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.

90+

Products Built

147d

of Vibe Coding

100%

Vibe Coded

Selected Projects

Things I've Built

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

🚗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

MBT Studs Store

mbt-store.vercel.app

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

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

events.makebytle.com

Ticketing system for events — public storefront, checkout with slip upload, e-tickets with QR, and admin dashboard for events and check-in.

Next.js 15TypeScriptDrizzle ORMNeon PostgresTailwind v4
🚕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

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.

🌐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
💬

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 90+ 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
🗄️

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

MBT Studs Store, Family Tree
🚀

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
📊

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
🗺️

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

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