Skip to main content

naumche@senior-dev:~$ whoami
→ Full Stack PHP/Laravel Developer

About this page, specifically

This is a landing page built to double as a CV — a small, real Laravel application, deployed the way a real one would be, not a static template. A few things worth pointing out:

Application

  • → The animated chart on the ISG Macedonia entry is a React component, dropped in alongside the Laravel backend to show some frontend work too.
  • → The visit counter below and the app's cache both run on Redis — and degrade gracefully instead of crashing the page if Redis is ever unreachable.
  • → Submitting the contact form dispatches a queued job (Redis-backed) that sends a real email over SMTP — protected by Cloudflare Turnstile so it isn't just a bot magnet — and posts to Slack over a plain Incoming Webhook, so a new message doesn't just sit in an inbox.
  • → Page views are tracked server-side, straight from Laravel to GA4's Measurement Protocol — no analytics JavaScript ships to the browser at all.
  • → Genuinely unexpected exceptions — not the already-handled Redis/S3 hiccups above, which just log a warning — raise a separate Slack alert, so a real bug surfaces immediately instead of waiting on a bug report.
  • → The dark/light toggle in the nav is a real preference, persisted in the browser — light by default regardless of your system setting.
  • → A Pest feature test suite — real HTTP requests against real routes, covering all of the above — fully isolated (in-memory SQLite, faked mail/queue/HTTP), so it needs no real Redis, mail server, or Turnstile account to run.

Infrastructure

↓ ↓ SSH deploy deploy status Hetzner VPS
Browser
Cloudflare DNS · TLS · Turnstile · cache
web nginx + PHP-FPM
(supervisord)
worker queue worker
(Redis-backed jobs)
MySQL
Redis
S3 (LocalStack)
GitHub Actions tests · PHPStan · Pint · audits · gitleaks
Slack leads · alerts · CI/CD status
— request path    —•• CI/CD & Slack notifications
  • → Fully Dockerized — nginx and PHP-FPM in one container (via supervisord), plus MySQL, Redis, and LocalStack as separate services, for local dev and production alike.
  • → The CV download button streams the PDF straight from S3 (LocalStack-backed), with the bucket and object provisioned by Terraform rather than uploaded by hand.
  • → Runs on a Hetzner VPS behind Cloudflare, terminating TLS twice — once at Cloudflare's edge, once again at the origin via a Cloudflare Origin CA certificate.

Performance & accessibility

  • → Lighthouse scores 0.3s LCP, 0 CLS, 0ms blocking time — critical CSS is inlined and everything else deferred, below-the-fold sections use content-visibility: auto so the browser skips laying them out until scrolled into view, and fonts have metric-matched fallbacks so nothing shifts when they load.
  • → Checked against WCAG with axe-core (the same engine behind Lighthouse's own accessibility audit) — real landmarks, a skip-to-content link, and color contrast that actually passes, not just a clean score.
  • → Structured data (JSON-LD), a real sitemap, and Open Graph tags — so search engines and link previews see something more useful than a bare title.

Delivery

  • → Static analysis with PHPStan/Larastan at max strictness (level 9, zero errors) and Laravel Pint for style, plus a custom check that fails the build over a stray dd(), dump(), or console.log anywhere in the codebase.
  • → composer audit and npm audit scan every dependency for known vulnerabilities, and gitleaks scans the full git history for accidentally-committed secrets — on every push, not just once.
  • → GitHub Actions runs all of the above on every push to main, then deploys straight to the server over SSH only if every one of them is green — with a Slack notification either way, so I know a deploy landed (or failed) without checking the Actions tab. This page updates itself.

Visit #16,236, tracked in Redis. Yes, you can refresh.