Ten years building production frontends. Right now I'm at Sigma Technology Group consulting for Axis Communications, where on week one I patched a CSRF vulnerability and have since rolled out a permissions/websocket framework, a Playwright + Vitest test pyramid, and the React 19.2 upgrade.
Before that I ran Smakosh LLC full-time for five years, shipping web apps for Parafin, Diagonal, The Landing, Goldfinch, Heron Finance, LinksDAO, Cosmic, June, Formspree and a long tail of seed-to-Series-B startups. At Diagonal I owned the frontend architecture for a unified crypto-payments API: tech-stack decisions, SSR-vs-CSR benchmarks, the testing pyramid, and a landing page + demo app shipped in under a week.
I also build the products I write about. LLM Gateway — my open-source OpenRouter alternative — has crossed $798K in Stripe-verified revenue, $70K MRR and 1,540 GitHub stars, plus a SOC 2 Type II attestation, since launching in May 2025. Starlink Prices and Roll Your Own Auth run on the same playbook.
The default stack: Next.js, React 19, TypeScript, the TanStack suite (Query / Router / Start), Tailwind, shadcn/ui, Drizzle, Hono, Vitest, Playwright. I'm fluent in Gatsby and Remix when the brief asks for them, and I've contributed PRs to both Gatsby and Next.js — so when the framework gets in the way, I know where to look.
#How the work actually gets done now
I build with coding agents daily — 499 merged pull requests on LLM Gateway and counting. The interesting part was never the prompting. It's the scaffolding that makes an agent's output trustworthy enough to merge, and on that repo the scaffolding is version-controlled next to the code:
- Repo-local skills encode the conventions an agent would otherwise guess at — nine of them, covering how to add a model provider, write a migration, open a pull request, audit Core Web Vitals, and cut a changelog entry. They get reviewed like code, and they turn "read the whole codebase and hope" into a procedure that runs the same way twice.
- A skill whose job is auditing the other skills. It checks that every path, command and cross-reference a skill mentions still exists in the current codebase — because agent instructions fail silently by going stale, not loudly by breaking.
- Scheduled routines run recurring work unattended. The SEO audit and a weekly React best-practices pass both run on a schedule and open PRs with the fixes rather than a report nobody reads.
- An isolated stack per worktree — offset ports, its own Postgres and Redis — so several agents work in parallel without colliding, plus a session hook that provisions a cloud sandbox from nothing.
- Deliberate context hygiene. Deny-lists keep build output and generated files out of the context window. This does more for output quality than switching models does.
I build for the agents too. DevPass gives one key and a flat price across every model in Claude Code, OpenCode, Cursor and Copilot, and DevPass Code is our own terminal coding agent on top of it. The @llmgateway/ai-sdk-provider package — the Vercel AI SDK provider for the gateway — does 37K downloads a month across 27 published versions, there's an open PR adding an LLM Gateway adapter to TanStack AI, and the docs ship llms.txt so assistants can read them properly.
Worth saying plainly: none of this replaces knowing what good looks like. Agents are fast at producing plausible code, and plausible is exactly the failure mode that costs you a quarter. The scaffolding above exists to catch that, and I still read every diff.
#What you typically hire me for
- Greenfield Next.js / React product builds, including the boring scaffolding most teams skip: lint, format, pre-commit, CI/CD, testing pyramid, deployment to Vercel.
- Rescuing a frontend that has outgrown its initial architecture — usually a state-management or rendering-strategy problem in disguise.
- Performance and Core Web Vitals work, backed by real Lighthouse / WebPageTest numbers rather than vibes.
- Setting up frontend testing (unit + integration with RTL/Vitest, E2E with Playwright or Cypress) on codebases that have shipped for years without it.
- Code review, hiring loops, and writing the documentation a new engineer can actually onboard from.
- Setting up the agent scaffolding above on your repo — skills, routines, review gates and sandboxes — so a team shipping with Claude Code or Cursor gets consistent output instead of a lottery.
If that lines up with what you're working on, send me a note — happy to talk through scope on a first call.