things i've built


Never miss your stop. Pinwake rings a real alarm before your bus, train or car arrives, so you can scroll, play or watch without looking up. Real Bangkok bus lines and rail routes, timing that works underground, and a Live Activity in the Dynamic Island.


Internal companion app for Buildathon staff. Scan registration QR codes, write NFC badges, redeem meals, loan out equipment, and form teams on event day. Offline-first with SwiftData, queuing every action and syncing once Wi-Fi returns.



Present Keynote from your iPhone: slides, a teleprompter that follows your voice, hands-free clicks, speaker handoffs, and drawing on the projector. With a menu bar companion for Mac, built for iPhone Duo too.


Eye breaks for your Mac that never land in a meeting. Every 20 minutes Window Seat asks you to look out the window, waits while you're on a call, presenting or in a calendar event, and turns your screen into a view of the sky that matches the time of day.


คุ้มป้ะ? Is it worth it? Koompare finds the cheapest per unit from a scanned shelf tag, shows any price in hours of your working life, and freezes what you want until you've cooled off. Private by design: nothing leaves your iPhone.


Comprehensive exam preparation platform designed specifically for SIIT students. Browse past exams and solutions across dozens of courses.


Full-stack marketplace for SIIT students to buy and sell study cheat sheets. Built with React, Express, and MySQL with Google OAuth, PromptPay payments, and parameterized queries to prevent SQL injection.

An open-source LaTeX workspace for research groups: write, compile and review papers together. Live co-editing with cursors and suggested edits, sandboxed compiles with SyncTeX, a task board, and projects stored as git repos you own. Claude is built in as a teammate whose changes arrive as suggestions, and Claude Code or Codex can join over MCP. Built with React, TypeScript, Yjs and latexmk.


My entire Obsidian vault, my notes on life, work and everything I'm learning, published selectively. The public side includes my SIIT course notes in English and Thai with LaTeX math. Syncs from Obsidian on every git push, with an admin console that decides what's public, title-only, or private.


Full event platform for a one-day AI app-building workshop and hackathon by PEANUT x SIIT Innovation Club, part of Shipaton IRL 2026. Registration and staff applications, QR check-in, Apple Wallet passes, meal selections, judging and live leaderboard, project submissions, and auto-generated certificates. Built with Next.js and Supabase, in English and Thai.


Interactive personality quiz for TEDxThammasatU's Talk Day, reveals which flower represents you. Engaged 3,000+ participants with real-time response tracking. Built with Next.js and PostgreSQL.


Conceived and built a QR checkpoint system for LINE MAN's RUN & RHYTHM event. Participants scan QR codes at physical checkpoints to progressively unlock a redemption code for VIP prizes. Handled 200+ registrations with 100+ completions on event day, with atomic code assignment under concurrent load, tamper-proof server-side reveal logic, and offline-resilient session recovery.




Speeds up Groth16 zk-SNARK authentication for vehicle-to-vehicle communication by caching proof slots. With Lapitsala Chimpad, Pitinun Wiphumitsitsakul, and Somchart Fugkeaw.





Lets a security team run its SIEM in the cloud without handing over readable logs. Each detection step gets only the protection it needs: tokens for search and correlation, homomorphic encryption only for the numbers that must be added up. Retrieved evidence is checked for tampering before it's decrypted.

Markdown + LaTeX Formatter
Paste a note from Obsidian into a text layer and it comes out in the text styles you already use. Capture a heading or body style from your sheet once, then every note follows it. Handles tables, nested lists, tasks, callouts and wikilinks, and renders LaTeX with MathJax: inline math sits in the line where you wrote it, even inside table cells. Built with TypeScript.

The npm package that connects Claude Code, Codex, Cursor or any MCP client to a Margin project. Agents get the same tools as Margin's built-in assistant: read and search files, suggest edits, comment, compile, and claim board tasks. They show up live for the whole group, and their edits arrive as suggestions. It also adds a margin command that syncs a local folder without knowing git.