I started in CRUD apps — the kind of work where the hard part is naming things and the easy part is the framework. The pattern got familiar fast. When LLMs started actually working in production, I went chasing what wasn't familiar yet, and I haven't stopped — retrieval, streaming, agents, vibe-coding workflows, the messy second half of an AI feature where the demo ends and the user shows up.
RAG was the first thing I picked to go deep on, because it's the part that decides whether an LLM product feels smart or stupid, and almost no one writes about it honestly. DocuMind is my running notebook on the topic — I rebuild the same pieces (chunking, eval sets, hybrid search) until I can say why each one is the size and shape it is. Agents and vibe-coding are next.
Mostly I care about shipping. A demo I can't put in front of a real user is a research project with better lighting. The work I'm proud of is on the App Store, on Vercel, and now in production as the internal payroll system for Shangxue Tutoring (Mar – Jun 2026) — getting hit by traffic from people who don't know me.
I keep picking up new ways of working — the stack moves, you move with it. Right now I'm vibe-coding AI Chrome extensions with Claude Code. EchoReply is the first one out the door — an AI sidebar for Gmail that decodes what the sender actually wants and drafts replies in three tones, now live on the Chrome Web Store. Proof I'm not just reading about this stuff, I'm shipping with it.
Stack
AI / LLMOpenAI APILangChainClaude APIPrompt Eng.RAGAI Agents
FrontendReactNext.jsTypeScriptTailwind CSSShadcn/UIFramer Motion
MobileReact NativeExpo
BackendNode.jsExpressPythonPrismaREST API
Cloud & DBAWSMongoDBVercelSupabaseClerkStripe