
~/another-side-projectPortfolio
Oh fork. I built something again.
A collection of questionable ideas, happy accidents, and things that somehow work.It's 3 AM. Perfect time for a bad idea. Or, you know, sleep.PLACEHOLDERSoftware engineer building developer tools and products.
Current status: probably codingCurrent status: definitely coding
Scroll to investigateScroll down
Selected work
The DamageSelected projects
Things I've shipped. And things that shipped me.A selection of projects I have built, open source and otherwise.


OLIV
SHIPPEDShippedThai + English voice typing for Mac. Hold a key, speak, and the English words come out in English.
Tech stack: Swift · Rust · MLX · Whisper
IllustrationLangSwitch
WORKS ON MY MACHINEShippedA macOS menu-bar app: tap Caps Lock to switch input sources instantly, with a language indicator that's actually right. Built on CapsLangSwitcher by Gamezxz.
Tech stack: Swift · macOS

ohfork.dev
SOMEHOW WORKSShippedThe site you're currently on.
Tech stack: Next.js · TypeScript · Tailwind CSS · next-intl · Docker · Cloudflare Tunnel
- You're looking at it.This website
Products
Things people actually useProducts I have built
Products I've built. Code stays private, the results don't.What each product does. The source code is private.

Vera
IN PROGRESSIn progressA curated dating app: no more swiping, Vera picks one match for you.

Heelflick
IN PROGRESSIn progressA local-first AI studio for short ads and Thai vertical short-drama series.

Arsom POS
IN PROGRESSIn progressA point-of-sale web app for Arsom Spa, a massage shop: a fair staff queue, course cards, check-in and check-out, and reports.
- PLACEHOLDER

CalQuest
IN PROGRESSIn progressCalorie Quest: an 8-bit, gamified daily calorie tracker. Snap your food, level up your hero.
- PLACEHOLDER
Locked-in
IN PROGRESSIn progressA running and cycling training plan that adapts to what you actually did, with Garmin sync.
Lab notes
Bad Ideas LabExperiments
Not every idea deserves to exist. Here they are anyway.Small experiments and prototypes, labelled by how finished they are.
Nothing here. Suspicious.No experiments are listed at the moment.
No experiments to show right now. The ones that didn't make it are in the graveyard.Archived projects are listed separately.
Meanwhile, in the graveyardArchived projects
3 projects rest here, with dignity.3 projects I have stopped working on, and why.
RIP jarn2026–2026
Building inside the deepagents framework's constraints hurt more than it helped. I left and built Schway instead.Retired. The work continued as Schway, built without the framework's constraints.
RIP agents-irl2026–2026
A desk pet that reacts to AI coding agents. Less useful than I'd hoped; software turned out to be more convenient.Hardware prototype, retired. A software approach proved more practical.
RIP CleanCheck2026–2026
Photographing a label to scan its INS codes was no different from sending the photo straight to an agent.Food-additive scanner, retired. General-purpose AI assistants already cover the use case.
git logChangelog
Commit History of Bad DecisionsChangelog
Real milestones from real repos, in the voice they deserve. The jokes are labelled.Dated milestones from my projects: releases, launches and first commits.
Uncommitted changesJokes. Never committed, so no dates.
Joke, not a real event: feat: built another thing nobody asked for
Joke, not a real event: fix: fixed the fix that broke the fix
feat(ohfork): put the portfolio on a design system before it had a portfolio.
The design system, themes and typed content model landed on main, the same night as the scaffold and the brand identity.
ohfork.dev: The design system, themes and typed content model landed on main, the same night as the scaffold and the brand identity.
chore(langswitch): open-sourced, with the original author credited. Properly, this time.
LangSwitch became a public GitHub repository (MIT). Its latest commit credits CapsLangSwitcher by Gamezxz again.
LangSwitch: LangSwitch became a public GitHub repository (MIT). Its latest commit credits CapsLangSwitcher by Gamezxz again.
docs(ohfork): wrote the roadmap before writing the website. Classic.
First commit of ohfork.dev: the concept, the roadmap and the instructions for coding agents.
ohfork.dev: First commit of ohfork.dev: the concept, the roadmap and the instructions for coding agents.
feat(jit): jit now runs on schway. It's agents all the way down.
Jit gained a Schway bridge, pinned to a host release.
Jit: Jit gained a Schway bridge, pinned to a host release.
feat(jit): learned to read Telegram. Still ignores my messages.
Jit bound a Telegram owner identity, with a durable long-poll inbox.
Jit: Jit bound a Telegram owner identity, with a durable long-poll inbox.
docs(jit): started a project by writing specs for it. Growth.
First Jit commit: the discovery baseline and feature specifications. The MVP backlog followed the same night.
Jit: First Jit commit: the discovery baseline and feature specifications. The MVP backlog followed the same night.
See the full historySee the full changelog RSS — Subscribe to my bad decisionsRSS feed
Résumé
chayapats
PLACEHOLDERSoftware engineer building developer tools and products.
Summary
TODO(owner): two or three sentences: what you do, what you're good at, what you're looking for.
Experience
TODO(owner): role · TODO(owner): company
TODO(owner): 2020 – present
- TODO(owner): one or two highlights with real, checkable results.
Skills
- TypeScript
- Bun
- Next.js
- Swift
- Rust
- Python
- Docker
- PostgreSQL
- Cloudflare
Languages
- TODO(owner): languages and level, e.g. Thai (native).
About
The Human Behind the BugsAbout me
Professional overthinker. Amateur bug creator.Background, interests and where to find me.
TODO(owner): a short intro in your own words: who you are and what you do.
TODO(owner): one more paragraph: how you got here, or what you're into lately.
What I love building
- Coding agents and developer tools (Schway, Jit)
- Voice typing that understands Thai and English (Oliv)
- Small macOS utilities that fix one annoying thing (LangSwitch)
- Apps that turn a chore into a game (CalQuest)
- Software for real businesses, like a POS for a massage spa (Arsom POS)
Why side projects
TODO(owner): why you keep building side projects.
Toolbelt
- TypeScript
- Bun
- Next.js
- Swift
- Rust
- Python
- Docker
- PostgreSQL
- Cloudflare
Interests
- TODO(owner): a few interests or philosophies, one per line.
Contact
Got a questionable idea?Get in touch
Or a question, a bug report, or a side-project story. Send it over.Questions, collaborations or opportunities: email is the best way to reach me.