Summary

DRAFT Full-stack engineer with a bias toward things that stay maintainable. Comfortable owning an application end to end: PHP and Laravel with Vue on the application side, Go-templated static sites on the content side, and a reproducible toolchain, test suite and CI pipeline sitting under both.

Skills

Backend
PHP 8, Laravel 12, Eloquent, MySQL, REST APIs, PHPUnit
Frontend
Vue 3, Inertia.js, Vuetify, TypeScript, Vite, Vitest
Sites & content
Hugo, Go templates, Sveltia CMS, responsive image pipelines
Tooling & delivery
mise, GitLab CI, GitHub Actions, lefthook, Docker Compose, Git LFS
Quality
Playwright, pa11y (WCAG 2 AA), Unlighthouse, lychee, cspell, markdownlint

Experience

TODO: job title · TODO: employer

  • TODO: replace these placeholders with real work history.
  • TODO: lead with an outcome, not a responsibility (what changed, and by how much).
  • TODO: name the stack only where it is load-bearing to the story.

TODO: previous job title · TODO: previous employer

  • TODO: replace with real work history.

Selected projects

SWG Junkyard
A Star Wars Galaxies companion site I have run since October 2015. Three different applications in that time, and it has never once gone dark.
Northern Wörthersee
A Hugo site for an annual European car show, replacing a 2015 Adobe Muse build. The whole design brief was that the guy who runs the show, who is not a developer, has to be able to update it without me.
This Site
The portfolio you are reading. Same pinned toolchain and the same automated checks I put on everything else, because claiming to care about tooling is cheap.

Open source

Backstage
3 merged contributions: Add support for optional PyMdown blocks extension syntax; Added plugin config definition; Fixed changelog for fromConfig and moved config example into the README's config section.
OpenShift Jenkins Sync Plugin
3 merged contributions: Bug 2064139: Fix configmap update bug that constantly purges templates with no changes; Fixed improperly formatted logger statements; Config log warning.
cookiecutterassert
1 merged contribution: Update for proper cookiecutter function call.

Full details →

Education

  • TODO: degree or certification, TODO: institution (TODO: YYYY)