I work where correctness isn't negotiable. Over 7+ years I've gone from shipping features to owning architecture. Most recently I designed the architecture for a ground-up rebuild of a payments platform, consolidating four legacy codebases into one modular, type-safe system, and wrote roughly 75% of it (~1,815 commits across five repositories).
I care about the parts that compound: documented decisions (ADRs), an architecture that enforces itself in CI, a generated type-safe API client that kills front/back schema drift, and developer experience that turns a two-day setup into one command. (A recent favorite: tracing a 23-second page to a 32-join database view and making it ~10x faster.)
🟢 Open to remote Staff / Principal / Architect roles - or Senior where the scope is genuinely architectural.
- Backend: PHP 8.4 (Laminas / Mezzio, Slim), Doctrine, DDD, OpenAPI
- Frontend: TypeScript (strict), Vue 3, Nuxt 4, Vuetify, Tailwind CSS
- Quality & CI: PHPStan (level 5) + custom rules, Psalm, Deptrac, Rector, SonarQube, GitHub Actions
- Databases & infra: MariaDB / MySQL, Redis, Docker, DDEV, Ansible, Linux
- Also writing: Go, Shell
Client work is closed source, so these are the public evidence of how I build: typed, tested, documented, released through CI. Longer write-ups at goranninkovic.com/projects.
| Project | What it is | Evidence | Links |
|---|---|---|---|
| forge | Git hook runner that executes linters inside DDEV/Docker. One Go binary, no Node. | 297 Go test functions | docs · tap |
| gstack | Multi-tenant SaaS starter: Nuxt 4 + Supabase, tenancy enforced by Postgres RLS | 10 feature layers, RLS-gated | docs |
| moj·GO 🔒 | Multi-tenant HR leave management, in production. Private repo. | 71 test files, 81 migrations | product · write-up |
| php-booster | The PHP quality toolchain I bring to a team (PHPStan, Psalm, ECS, Rector, hooks), packaged | 1-command install, auto-fix in CI | docs |
| Griffin ⭐ | Provisions a full Linux/macOS workstation from bare metal | Tested on Ubuntu, WSL, macOS | docs |
| sudoku | A solver that explains itself - human techniques, not brute force | 6 unit-tested modules | play it |
Also: goranninkovic.com - my portfolio and writing: Nuxt 4, Tailwind, i18n, prerendered to Cloudflare.
- Designing and building a payments-platform rebuild (modular monolith + Slim middleware + Nuxt 4 SPA + generated TypeScript SDK), with an AI-augmented migration workflow that roughly halved the projected timeline
- Deepening Go (and tinkering with Rust)
- Open to the right remote team - let's talk





