7 write-ups
Projects
Work Projects
Full builds and outcomes I have shipped for clients and employers.

【Foxconn】 A Telehealth Platform Built to Make Medical Care Faster and More Convenient
A remote-care platform built for Foxconn (Hon Hai) — a patient app for online registration and remote consultations, an NHI-compliant reporting system for physicians, and a bedside tablet that streams vitals in real time.

【Rybit】 Building the CMS Behind a 40,000-Device E-Bike Fleet Platform
At Rybit, I build the web CMS and maintain the app behind a fleet management platform running 2M+ riders and 40,000+ e-bikes — from a B2B service-ticket system to code-quality tooling across the codebase.

【Pandago】 A Responsive Vendor Landing Page Built to Convert Merchants
A look at the frontend patterns behind foodpanda’s pandago vendor landing page — anchor navigation, a hero carousel, a logo marquee, and full responsive design.
Side Projects
Independent builds I designed, built, and shipped on my own.

【Left Side Escalator】An AI Matchmaking Bot That Turns One Sentence into a Community Match
A production Discord bot that helps members of community find people with shared interests through natural-language queries, built with Discord.js, OpenAI GPT-4o, Node.js, and Express.

【QR Digital Pass】 A Cross-Platform Check-In App for Events and Conferences
A cross-platform React Native app that streamlines attendee registration and check-in for exhibitions, conferences, and events using QR code scanning and image recognition.
Debugging Notes
Deep technical dives into specific bugs, and how I found and fixed them.

【Debugging Notes】 How to Get a Cookie Sent on a Cross-Origin Request
Debugging notes on why a manually inserted cookie wouldn’t attach to a cross-origin API call — the Domain/Secure/SameSite rules browsers actually enforce, reproduced step-by-step in DevTools.

【Development Journey in Rybit】 How Changing an Asset Quota Was Quietly Overloading Our Server
A small quota-field edit in Rybit’s B2B order management was silently firing a redundant API call on every change — how unstable Antd Form initialValues caused it, and how useWatch fixed it.