Portfolio Manifest — Updated 2026-08-15

Terrence Daniels

Senior Full-Stack Engineer

A working fork of Coolify, a self-hosted PaaS, used as a real engineering sample: a live Laravel + React application modernized page by page, reviewed with real Pull Requests, and tested against real servers — not a toy demo.

1,042commits
1,488Pest tests
1,420Vitest tests
1,306→55PHPStan baseline
84/84pages migrated
104merged PRs

Why this project

The harder problem, on purpose

Rewriting a UI from scratch is easy when nothing has to keep working. This fork tackles the more common real job: modernizing a live, actively-used Laravel application's frontend without a big-bang rewrite — one page converted and verified at a time, with an audit trail a reviewer can actually check against the commit history, not just a claim to take on faith.

Laravel 12 Inertia.js React 19 Tailwind v4 Pest 4 Vitest PHPStan / Larastan Docker + SSH orchestration

Migration, not rewrite

Livewire 3 + Alpine → Inertia + React, complete 2026‑07‑14

84 of 84 Livewire pages moved to React through Inertia — each page stayed a normal Laravel route/controller returning props, so migrated and not-yet-migrated pages coexisted under the same app the whole way through. No parallel API had to be designed up front, and Laravel's routing, auth, CSRF, and sessions kept working unchanged. livewire/livewire and Alpine.js were only removed from the dependency tree once the very last page was converted.

Why Inertia over a decoupled SPA

A plain React SPA needs its API surface designed and versioned before page one ships. Inertia sidesteps that — the migration could run one route at a time, in production, without a big-bang cutover.

What "verified" means here

Every converted page picked up a Vitest suite exercising its real conditional logic, gates, and event wiring — not snapshot tests. 145 suites, 1,420 tests, zero skipped.

Code review, for real

Findings are logged, fixed on a branch, and merged through an actual GitHub PR

Every finding below is a real, line-anchored review comment on a real commit, fixed on its own branch, and landed through a real Pull Request — reviewable end to end in docs/code-review.md and issue #70.

01
ApplicationDeploymentJob.php:2011
health_check() was a complete no-op for Docker Swarm deployments — inherited dead code, traced through every read site of the resulting flag before ruling out an active failure. Fixed by polling docker stack services / docker service ps for real replica convergence.
high · reliability PR #75
02
ServiceExtraFieldsResolver.php:389–413
A Kong dashboard-fields case was mislabeled "Supabase" and missing its break;, silently falling through into MinIO's field block on every affected service.
high · reliability PR #73
03
Environment.php:97–102
A cascade-delete hook looped over a relation called with parens — a query builder, not a collection — so it silently ran zero iterations. Writing the regression test for the fix surfaced a bigger, separate finding: the test schema dump had zero foreign keys anywhere, filed on its own as its own issue rather than folded in.
medium · maintainability PR #76 → issue #77

Disclosed, not hidden: the Swarm health-check fix above ships with no automated test coverage and no live Swarm cluster to verify against — said plainly in the PR itself, rather than presented with confidence it hasn't earned.

Verifying it actually works

Tests, live smoke checks, and a sandbox built to make destructive testing safe

Bug fixes follow TDD — a failing test first, then the fix. But some of this app's real behavior (server provisioning, Docker cleanup, package upgrades) can only be honestly checked against a real daemon, not a mock. Rather than skip that class of test, a genuinely isolated Docker-in-Docker host was built and registered as a real Coolify-managed server, so destructive operations — container pruning, OS package upgrades that can bounce the Docker daemon — could run for real without touching this session's own dev containers.

1,488 Pest + 1,420 Vitest

Feature and unit coverage on the backend, component-behavior coverage on every migrated React page — gates, event wiring, conditional rendering, not markup snapshots.

Live-verified, not assumed

Server management, Cloudflare Tunnel, and database backup flows were exercised end-to-end against real running infrastructure before being marked done — logged with what was and wasn't independently confirmed.

Judgment calls

Where the interesting decisions actually happened

A regression test for the Environment.php fix above initially failed for reasons that turned out to have nothing to do with the fix itself — the test database's schema dump was stale and enforced no foreign keys at all. Rather than patch around the failing assertion, the two findings were separated: the dead code fix shipped as its own reviewed PR, and the schema gap was filed as its own tracked issue with the evidence attached. Confident-sounding code and an actually correct fix aren't always the same thing — worth telling apart, and worth writing down when they diverge.