Experience

Engagements and the work that came out of them, newest first.

PixeelFull-stack developer

Two products: Solarware, a multi-tenant CRM and ERP for German solar installers, then MPort, an integration platform that moves orders between POS systems, ERPs and messaging apps.

Two contracts back to back. Solarware was a 155-table Laravel and React platform already running when I joined, so most of my work there was new modules and the integrations connecting it to the accounting software its customers use. MPort was the opposite: an empty repo, two months, and a product with its own architecture decision log at the end.

  • Solarware magic-link authentication: token service, mail jobs, templates and HTTPS URL normalisation
  • Time tracking: start/stop timers, timesheets and summaries, with overlap prevention, timezone handling and role-gated access
  • Solar Sites: geo-located installation records with separate owner and billing addresses, and configurable site facts
  • Lexware ERP integration: two-way sync of contacts, articles and order confirmations, with sync logs, skipped-record reporting and partner type resolution
  • Credit notes and partial invoicing against contracts, with overpayment guards and overdue handling
  • Worked in a distributed team of six engineers across four countries, one ticket per branch and every change through a merge request
  • Second-highest contributor on the Solarware backend, and wrote most of its Pest test suite
  • MPort built end to end in FastAPI and React 19, working directly with the product owner from brief to deployment: routes orders between restaurant tills, supplier ERP systems and Telegram, splitting per-supplier views from a single order
  • Adding a system to MPort means one adapter class: adapters self-describe their config so the UI renders their forms from that, making a new provider a config change rather than new code
  • iiko stop-list webhooks trigger a resupply order automatically when a restaurant runs out of a product
ContractSep 2025 - Jul 2026 · 11 moLaravel 10PHP 8.1PythonFastAPIReact 19TypeScriptPostgreSQLRedisPestDockerTraefik

PrelineFrontend developer

Porting the Preline UI component set into eleven backend and frontend frameworks.

Ported one component library across eleven frameworks.

  • Wrote the integration guide for each framework, published as Preline's official docs
  • Each port has its own template engine and asset pipeline, and the components behave the same in all of them
  • ASP.NET, Blazor, CodeIgniter, Django, Ember.js, Express, Flask, Laravel Livewire, Rails, Phoenix, and Symfony
ContractSep 2025 - Dec 2025 · 4 moTailwind CSSPHPPythonRubyJavaScript

Keenthemes Inc.Senior Software Engineer

Own the platform, the component libraries and the release process behind the Keenthemes product line, from Metronic v5 to today.

Nine years on the same product line, starting on contract template work at Metronic v5 and staying through two full front-end rewrites: jQuery to React at v8, Bootstrap to Tailwind at v9. The architecture, the APIs and the deployment for everything Keenthemes ships, plus the support forum where the developers using it end up.

  • KTUI: lead maintainer and author of most of its source, at 2,600+ weekly npm downloads and 42 releases in 13 months. Own the release process, the Vitest suite and code review on every contribution
  • Wrote the datatable and select rewrites, the two heaviest components in the library: remote data, sorting, filtering, pagination, keyboard navigation and RTL
  • Added carousel, pin input, range slider, repeater, toast, rating and clipboard, plus four Agent Skills so AI coding tools compose the library correctly instead of inventing markup
  • The storefront back end and three production sites on Docker and Traefik since 2020. Laravel 12 REST APIs with Sanctum auth and Spatie permissions, Redis, Docker and Traefik, with Sentry and uptime alerting so failures surface before customers report them
  • Five major versions of Metronic since joining at v5: v6 and v7 on Bootstrap 4 and jQuery, the move to React and TypeScript at v8, and the Bootstrap to Tailwind rewrite at v9, cutting the public releases for each
  • Built Metronic Composer, the Python and Flask app that generates every Metronic template demo, plus the release tooling around it
  • Metronic starter kits owned end to end for Laravel, Rails, Symfony, Django and Flask, each a port of the theme engine into that framework
  • ReUI: contributor to the open-source shadcn/ui component library, plus the two Next.js 15 and React 19 app templates built on it, Summit and SaaSify, and its D3 charting layer
  • Support forum: the signed webhook pipeline that feeds question events to the Python MCP server behind the AI agent answering them
  • Set the coding standards and documentation practices the product line still follows, back when the work was contract template building
EmploymentAug 2017 - Present · 9 yrs 2 moLaravel 12PythonFlaskPHP 8.2TypeScriptReactNext.jsTailwind CSSshadcn/uiBootstrapSCSSDockerTraefikPostgreSQLRedisVitestSentry

Scnix StudioWeb Developer

Built client websites on WordPress at a web studio, working from designer mockups.

Agency work: a run of client sites, each with its own brief and deadline.

  • Client websites on WordPress, designer mockups turned into custom themes in PHP
  • Studio team work alongside designers and other developers, build scope only
EmploymentMar 2015 - Jul 2019 · 4 yrs 5 moWordPressPHPMySQLJavaScriptHTMLCSS

ME-Tech Solution Sdn BhdSenior Software Engineer

Senior software engineer at ME-Tech Solution Sdn Bhd, leading a small team building enterprise applications for administrative, web and Android systems.

Enterprise application development, and the first role where the work included leading other developers rather than only writing code.

  • Led a team of four programmers, including interns, through the full development life cycle
  • Administrative, web and Android mobile applications in Java
  • System requirement specifications, design specifications and test plans
  • System testing and debugging across multiple client projects
EmploymentMar 2012 - Feb 2015 · 3 yrsJavaAndroidPHPMySQLJavaScript