I build practical full-stack applications and am developing deeper expertise in backend systems, concurrency, databases, and software architecture.
My current work combines Next.js, React, TypeScript, Prisma, PostgreSQL, and SQL with focused exploration of Go, real-time systems, and reliable backend design.
- Go services with worker pools, bounded job queues, graceful shutdown, cancellation, and backpressure
- Database internals: tokenization, parsing, ASTs, semantic binding, logical planning, and iterator execution
- Storage fundamentals: row encoding, disk pages, indexes, transactions, idempotency, and failure handling
- Building the simplest correct system first, then adding concurrency and operational complexity when requirements justify it
Understand → Simplify → Reuse → Build → Integrate → Verify → Operate → Evolve
A small SQL database in Go with an in-memory execution path and interactive REPL. Demonstrates tokenization, parsing, binding, catalog updates, logical planning, and testable incremental systems design.
A Figma/Miro-style collaborative whiteboard with a Next.js web app, Bun + Elysia real-time server, shared contracts, and PostgreSQL persistence. Demonstrates WebSockets, room-based collaboration, presence, buffered persistence, and end-to-end verification.
A shell utility for cloning one GitHub subfolder without cloning the full working tree. Demonstrates sparse checkout, deterministic CLI behavior, destination handling, and smoke testing across Bash and Zsh.
A practical guide to using repository-aware coding agents across planning, implementation, testing, debugging, reliability, observability, and review. Demonstrates documentation-first engineering and incremental, verifiable delivery.
Application development: Next.js · React · TypeScript · Prisma · PostgreSQL · SQL
Systems direction: Go · concurrency · worker pools · bounded queues · WebSockets · real-time services
Engineering concerns: API and data boundaries · transactions · idempotency · cancellation · backpressure · failure handling · testing
- Make behavior and boundaries explicit.
- Prefer the smallest correct implementation.
- Keep state, side effects, and failure paths visible.
- Verify observable behavior with focused tests.
- Add scale and concurrency only when the requirements call for them.
I publish practical engineering walkthroughs on systems, software architecture, and AI-assisted development.
