Skip to content

Skills & Technical Stack

Grouped by where they sit in the stack. Testing tools get their own row on purpose — they're not an afterthought in how I work.

Backend

Where most of my work lives. Laravel for CRM, telemedicine, and scraping platforms; NestJS with Drizzle and PostgreSQL for a marketplace API with CQRS and OAuth. MySQL schemas tuned on production datasets rather than in a seed file.

  • LaravelPHP framework for web artisans
  • NestJSProgressive Node.js framework for scalable server-side apps
  • Node.jsJavaScript runtime for building backend services
  • MySQLRelational database management system

Frontend

Next.js and Nuxt for product surfaces, Vue and React where a team already had one. Inertia when a project wanted SPA feel without standing up a separate API. TypeScript throughout — the type errors are cheaper than the bug reports.

  • Next.jsReact framework for production
  • Nuxt.jsVue.js framework for production
  • Vue.jsProgressive JavaScript framework for UIs
  • TypeScriptTyped superset of JavaScript
  • Inertia.jsBuild SPAs without an API using server-side routing
  • ReduxPredictable state container with RTK Query
  • Tailwind CSSUtility-first CSS framework
  • VuetifyMaterial Design component framework for Vue
  • QuasarVue.js based framework for cross-platform apps

Testing

Not a separate phase. Pest and PHPUnit cover API behaviour, Playwright and Cypress cover the flows a user would actually break, and Jest handles the JavaScript packages I publish. Test suites are the reason I can refactor a scraper without holding my breath.

  • PestPHP testing framework with an expressive API
  • PHPUnitThe PHP unit testing standard
  • PlaywrightCross-browser end-to-end automation
  • CypressBrowser automation for end-to-end tests
  • JestJavaScript testing framework

Platform

Linux servers, queue workers, and the deploy pipelines around them — the part that decides whether the code above ever runs reliably.

  • LinuxOpen-source operating system