B2B2C micro-frontend platform
28+ Vue apps living in single-spa, talking to each other in real time. GraphQL, REST and SignalR under one roof.
10+ years turning complex products into fast, typed, maintainable interfaces. Vue 3 · Nuxt · TypeScript. Tech lead by habit.
Performance is your money.
Every wasted request is a line on someone's invoice. I hunt them down.
Performance auditI never listen passively.
Refinements are for challenging ideas. Including mine.
Quality is automated, not negotiated.
Strict types, lint rules and git hooks. Standards that hold when nobody is watching.
I build interfaces I'd want to use myself.
I click through them like an end user. If something bothers me, I fix it before anyone else notices.
02 Services
Move a production Vue 2 app to Vue 3 with typed architecture and hard lint rules, so the new codebase doesn't inherit the old problems.
Find the request waterfalls, duplicate fetches and needless reactivity that slow a Vue or Nuxt app down and cost money, then fix them.
Boundaries between apps, typed contracts, a shared component library and per-feature environments, drawn from a platform of 28+ Vue apps.
03 Impact
10+
Years shipping production frontends
28+
Micro-frontends in one living platform
5+
Years with the same client — and counting
11+
Projects shipped to production
04 Selected files
Most of my projects live behind NDAs. So here are the case files — names redacted, results intact.
28+ Vue apps living in single-spa, talking to each other in real time. GraphQL, REST and SignalR under one roof.
A rewrite that was slow before it shipped. Hard lint rules, a centralised query layer and real-time invalidation made it as fast as it gets.
Every translation publish fanned out across all clusters, languages and apps. I traced it and reported it; the fix, shipped by another team, cut it to one shared cache and one request. Plus a script that merged per-feature i18n files and rewrote every key in code.
I proposed drag & drop everywhere. Planning a week of meals went from clicking through forms to rearranging the screen in seconds.
Designed and shipped a Vue component library in Storybook, standardising UI patterns and speeding up feature development.
Used Docker and Kubernetes to stand up isolated environments per feature, and worked on the micro-frontend ecosystem's Azure CI/CD pipelines.
Vue 2 + TypeScript with SSR and complex screen transitions. Service Worker caching for assets and data, IntersectionObserver-driven lazy loading, and canvas-based weather visualisations. My first big one — fitting, given my taste in films.
05 Stack
What I think in. Daily, for years.
Vue 2 → 3 migration1// one typed source of truth2export const orderKeys = {3 all: ['orders'] as const,4 detail: (id: string) => [...orderKeys.all, id] as const,5}6 7// real-time: invalidate exactly what changed8hub.on('OrderUpdated', ({ id }: OrderEvent) =>9 queryClient.invalidateQueries({10 queryKey: orderKeys.detail(id),11 }),12)AI-assisted workflow and LLM integrations — a multiplier, not a replacement for thinking.
Yes, I know how to exit. I just rarely want to.
:wq
06 Process
“He compiles code just by looking at it.”
01
I challenge the ticket before I write the code. The cheapest bug is the one never built.
02
Clear boundaries, typed contracts, no hidden coupling. Components built to be reused.
03
Strict linting, formatting, pre-commit and pre-push hooks. Reviews that notice what isn't obvious.
04
Fast for users, cheap to run for the client, readable for the next developer. Along the way: mentoring and technical interviews with candidates.
07 Contact
Available part-time, B2B, remote. Tell me what you're building — I reply within one business day.