Quang Do
writes code
(allegedly).

Super Ultra Instinct Prompt Engineer. Fullstack by trade, frontend by reputation, DB-migrations by night. I turn vague Slack messages into worse Slack messages, then ship something. Currently translating "make it pop" into TypeScript and "why is it slow" into EXPLAIN ANALYZE for a living.

Status Open to chaos
Located Ho Chi Minh City localhost
Local time --:--:-- ICT
Claude Code Co-author
01 /

About (ish)

A small autobiography, lightly redacted

I started programming because I wanted to make a Pokémon game and never finished. Eight years later I'm still starting projects and not finishing them - only now somebody pays me for it.

I'm what the kids call a vibe coder: I type the energy I want the code to have, the LLM types something close enough, and we meet somewhere in the middle. I tell people I "architect" software, which mostly means I name files well, draw boxes on Excalidraw, and feel guilty about both later.

I care a lot about small things - the cursor that lands on the right line, the empty state that actually says something, the API that returns the right error code, the migration that doesn't quietly rollback at 3am. I'm allergic to dashboards with four KPIs and one charity-case bar chart.

Off-hours I draw mediocre pixel art, lose chess to my eight-year-old cousin, and pretend to read books about systems thinking.

02 /

Selected work

Things I built before getting bored
P/01 SHIPPED

Loopy - a habit tracker that argues back

A habit app that gently roasts you for skipping leg day. SwiftUI + a Rust core for the local-first sync. The roasts use a tiny fine-tuned model so your shame stays on-device.

SwiftRustlocal-firstpassive aggression
P/02 SHIPPED

Notably - meeting notes that don't pretend to listen

A meeting-notes tool that admits when it didn't catch something instead of hallucinating action items. Whisper + a homemade "is-this-a-decision?" classifier. Saved 3 marriages, broke 1 standup.

Next.jsWhisperPostgresrealtime
P/03 EXPERIMENT

rubr - a CLI rubber duck

rubr "why is my regex eating tomorrow's lunch" a duck responds in plain English, then asks one annoying follow-up question that fixes everything. 1.2k stars, 0 issues closed.

GoCLILLMopen source
P/04 WIP

Mì - a recipe app for one specific person (me)

Recipes for instant noodles ranked by ✨vibe✨ and Saigon street proximity. The killer feature is the "no, you can't add chicken" button. Will probably never ship. Don't ask.

SwiftUISQLiteiCloud syncbroth
P/05 RETIRED

tab.fm - a Spotify for unfinished side projects

You upload your unfinished repo, it autoplays the README and a guilt soundtrack. Killed by AWS bill. Eulogy available on request.

SvelteKitStriperegret
P/06 CLIENT

Banh Mi POS for a 2-stool family shop

My aunt's banh mi stand needed a tablet POS. I built one. She still uses a calculator. The tablet plays YouTube. Both of us consider this a win.

React NativeBluetooth printerfamily
03 /

Where I've been

A.k.a. the LinkedIn version, slightly more honest
2024 now
Senior Fullstack Engineer @ a series-B startup you've heard of, allegedly

Own a vertical slice end-to-end: Postgres schema, Node/TS API, React app, on-call rotation. Mostly turn Figma into TypeScript and Figma comments into bug tickets.

Shipped onboarding v3,
fought v4 in the parking lot
2022 - 2024
Product Engineer @ a YC company (RIP)

Built the whole web app from the ground up - Next.js, Postgres, a Redis I shouldn't have used. Used "we'll refactor later" as a load-bearing comment.

Acquired for parts,
founders bought a boat
2020 - 2022
Software Engineer @ a bank-but-cooler thing

Compliance dashboards on top of a Java monolith I learned to fear and respect. I never learned what 90% of the acronyms meant. It was fine.

Quarterly bonus
mechanical keyboard #4
2018 - 2020
Junior Engineer @ a digital agency

Six WordPress sites a quarter, plus the PHP plumbing nobody else wanted. Met jQuery. Forgave jQuery. Eventually left jQuery.

Built websites for
at least 3 dentists
2017
Intern @ that one local startup that pivoted twice

Sticker count: 8. Lines of code in production: ~12. Free pho every Friday.

Peak career, honestly
04 /

Skills, with footnotes

Bars are vibes-based, not measurements
TypeScript
8 years. The any keyword still counts as TypeScript, fight me.
88% - citation needed
React / Next.js
useEffect dependency-war veteran. Honorary discharge.
90%
Node.js / Bun
Mostly googling "why does node hate me today." Bun is faster at the hating.
82%
Postgres
Strong opinions about indexes. Weaker opinions about CTEs.
78%
API design
REST when boring, GraphQL when feeling fancy, tRPC when feeling lucky.
80%
CSS
display: flex; pray;
74%
Python
For data scripts, scraping, and the occasional "why is this in pandas".
68%
Go
For when TypeScript feels like a fashion choice.
60%
Docker / Devops
If it builds locally it builds nowhere else, on principle.
55%
AWS / Vercel
I deploy to Vercel and tell people it's "serverless," which it is, until the bill arrives.
65%
Redis / queues
Used Redis as a database once. I've apologized to my therapist.
62%
Testing
Vitest for units, Playwright for everything that should have been a unit.
70%
Git
Comfortable with rebase. Survivor of git push --force.
78%
Prompt engineering
Gaslighting LLMs since 2022. Patent pending.
999% (calibration broken)
Reading docs
Strictly after trying it twice and crying.
35% - working on it
Design
I move things 1 pixel at a time until someone stops me.
65%
Public speaking
Will do it, will sweat about it for 6 weeks first.
50%
Naming things
Worst skill on this list. Source: utils2_final_v3.ts.
18%
05 /

Writing (occasionally)

I publish about as often as Mercury retrograde
06 /

Right now,
roughly

Updated whenever I remember. Last touched: this morning.
/now
  • Building Loopy v2 - adding a "don't roast me today" button because feedback was unanimous.
  • Reading A Philosophy of Software Design, slowly. The book is short. I am slow.
  • Trying to ship one essay a month. Currently 3 essays behind schedule, on purpose.
  • Learning Rust again. This time with feelings.
  • Cooking through every variant of cơm tấm in Saigon. Research.
  • Saying no to side projects. Failing.
/uses - my dependencies, basically

Machines

  • MacBook Pro 14"M3 Pro · 36GB
  • Studio Displaynano-texture, debt
  • Keychron Q1halo true · way too loud
  • MX Master 3Ssilent, polite

Editor & tools

  • VS Codewith vim mode, hypocrite
  • Cursorfor the agentic chaos
  • Raycast50 unread shortcuts
  • Ghosttyterminal, currently
  • Lineartickets I close late

The medium

  • Coffeev60 · single origin · daily
  • Teaat 4pm, decisively
  • Soundany LoFi station, no shame
  • Snacksbanh mi, twice
07 /

FAQ I made up

No one has asked these. I am asking them.
Q.01

Are you actually a real engineer?

Define "real." I commit code that runs in production and bills get paid. The bar is on the floor and I am clearing it daily.

Q.02

Isn't "vibe coding" just bad engineering with marketing?

Yes. Next question.

Q.03

What's your favorite editor?

Whichever one didn't crash today. The honest answer is: VS Code with vim keybindings, which makes both the vim crowd and the VS Code crowd hate me equally. It's a balanced lifestyle.

Q.04

Will AI replace you?

It already replaces my typing. It hasn't yet figured out how to attend the standup, write the slightly-passive-aggressive Slack reply, or convince the PM that the thing they want is, in fact, the thing they don't want. So: not yet.

Q.05

Tabs or spaces?

Prettier. I outsourced this conviction in 2019 and I sleep better for it.

Q.06

Why is this site brutalist?

Because I tried to design a "tasteful" version four times and gave up. Black lines, big type, no apologies. If you hate it, that's part of the vibe. If you like it, congratulations on your taste.

Q.07

Are you available for work?

For the right kind of weird, yes. Email me. Tell me what's broken and why three other engineers said it couldn't be done. I'll probably believe them, then try anyway.

Q.08

Is there an easter egg on this page?

There are at least three. Try the Konami code. Try clicking the logo five times. Try typing help in the terminal. Touch grass first.

08 / Contact