Frontend Engineer • Nuxt · Vue · Go
Frontend engineer since 2021 — Angular, React, and Next.js in earlier roles, Vue and Nuxt as my main stack today. Having worked across both ecosystems, picking either back up is rarely the hard part.
I take a feature the whole way — from the conversation that defines it, through the backend it needs, down to the interface people actually use.
- Frontend architecture — I set up new projects from scratch: structure, the libraries and plugins to commit to, and the conventions that keep a codebase consistent. Those decisions are what a team lives with for years, so I make them deliberately. I'm comfortable at both ends of the spectrum: keeping a legacy codebase healthy, or starting something new from an empty folder.
- Requirement discovery — I follow up directly with users rather than waiting for a finished spec. I map how they work today, find the manual steps that hurt, and propose what a web solution should actually replace.
- Feature delivery across the stack — I work both sides of a feature: the API endpoints and the data layer behind them, queries and schema changes included, plus the frontend that consumes them.
- AI integration — I build product features on top of LLM APIs: prompt design, API integration, and shaping non-deterministic output into something a business process can rely on.
- AI-assisted workflow — I use AI coding assistants to work across a wider surface area, while keeping the review and architectural decisions mine.
Frontend — where I'm strongest
Backend — where I build features
AI Integration — LLM APIs shipped into product features
Tooling & Environment — what I work within day to day
Tooth Atlas — personal project, live
An interactive 3D model of the human dentition across a whole lifetime, from bare gums at birth to the changes of old age. Age is the only input: drag one slider and baby teeth erupt in order, permanent teeth push them out from below, then gums recede and chewing surfaces wear down. The 3D scene, the side panels, the schedule tables, and the screen-reader text are all derived from the same pure function, so they cannot drift out of sync. Teeth are generated procedurally from six numbers each rather than loaded as a 3D asset, which keeps all 52 individually clickable and animatable with nothing to download. Bilingual, fully prerendered, and shipped with a complete text equivalent that works without WebGL.
Next.js · React · TypeScript · three.js · React Three Fiber · Tailwind
Legal Document Workflow — internal company system, code not public
A legal document process that used to run manually, rebuilt as a single digital lifecycle: request, collaborative editing in Collabora, AI-assisted risk analysis, submission, and approve/reject review. Uploaded documents get a risk breakdown the user can frame as balanced, protective, or client-favorable, then move through the approval chain in the same place. I mapped the existing manual flow directly with the people who run it, then built it end to end.
Nuxt · Go · MySQL · Collabora · OpenAI


