Skip to content
shamimstack
01 Hero
Base
DHAKA, BANGLADESH
Exp
15 yrs

Open to full stack developer roles

Md Shamim Hossain

Full Stack Developer

I design and build web applications end to end — backends that stay fast and interfaces that stay clear — and I write about how.

  • Laravel
  • PostgreSQL
  • Redis
  • Horizon
  • MySQL
  • OpenTelemetry

Scroll

02 CI/CD & Laravel

Every commit earns its deploy

A Laravel release is a chain of small, provable steps: style, types, tests, assets — and then one atomic switch. This is the pipeline I run, and why each gate is where it is.

Queued 0s (queued)
Stages
08
Gates
03
Switch
atomic
  • GitHub Actions
  • ubuntu-latest
  • PHP 8.5
  • Node 22
  • Composer cache
  • npm cache
demo

shamimwhois/shamim Public

main · a1b2c3d4 · Laravel 13

Last push
2 mins ago
Workflow
Queued

01 Commit step

1s

A commit is a promise with a timestamp

Everything downstream is derived from one immutable identifier, so "what did we ship" is never a question about branches or a developer's laptop. The commit is the unit of work; the rest of the pipeline only reads it.

git push origin main

02 Prepare step

2s

One environment, one cache key

Composer and npm both key their caches on the lockfile, so a fresh runner is not a cold one. The step does two installs in parallel because they are independent dependency trees.

composer install --prefer-dist

03 Static analysis gate

blocking 4s

Style before logic

Pint runs first because it is cheap and loud; a formatting failure never reaches PHPStan. PHPStan then guards the types the next three stages will build on.

pint --test · phpstan analyse

04 Tests gate

blocking 5s

Behaviour, not implementation

03–05 run concurrently: Static analysis, Tests, and Build fan out from one trigger and rejoin at Release.

php artisan test --parallel

05 Build gate

blocking 4s

Artifacts are built, not copied

The asset build is a separate lane because it is the one stage that can legitimately fail on a frontend-only change. It produces the fingerprinted files the deploy will serve.

npm run build

06 Release step

3s

Build once, release many

The release is a directory, not a tarball on the way to production — it is the thing the deploy will point at. optimize runs here so the config and route caches belong to this release.

releases/<sha>/ · optimize

07 Deploy step

3s

The switch is a symlink

Deploy does two things that must happen in order: the schema moves forward, then the workers are told to pick up the new code. Nothing here re-copies the release — the symlink already did that.

migrate --force · queue:restart

08 Verify check

last word 2s

The deploy is not done until it answers

The health check is the first thing the verifier hits, because it is the cheapest proof that the new code is actually serving. A failing smoke test rolls the symlink back without re-running any other stage.

GET /up · smoke tests

Pipeline Progress

0%
  1. Commit pushed …
  2. Composer + npm cache warm —
  3. No formatting or type errors —
  4. All tests green —
  5. Build artifacts produced —
  6. Release directory ready —
  7. Release live, workers restarted —
  8. Health check green —

Build Logs

demo run
  1. 1 Triggering workflow on push to main …
  2. 2 concurrency: group: release, cancel-in-progress: true —
  3. 3 Running on ubuntu-latest —
  4. 4 $ composer install --prefer-dist —
  5. 5 Loading composer repositories with package information —
  6. 6 Installing dependencies (including require-dev) from lock file —
  7. 7 $ npm ci —
  8. 8 added 142 packages in 8s —
  9. 9 —
  10. 10 $ pint --test —
  11. 11 No errors detected! Nice work. —
  12. 12 $ phpstan analyse —
  13. 13 No errors! —
  14. 14 —
  15. 15 $ php artisan test --parallel —
  16. 16 PASS Tests\Feature\HomeCicdSectionTest —
  17. 17 ✔ the pipeline section sits between the hero and the writing section —
  18. 18 ✔ the rail lists all eight stages in pipeline order —
  19. 19 ✔ every stage carries the Laravel command a reader can go and run —
  20. 20 ✔ the gates are named as gates and the parallel lanes are declared —
  21. 21 ✔ the section is labelled by its heading for assistive technology —
  22. 22 PASS Tests\Unit\AuthorProfileTest —
  23. 23 ✔ builds the profile from configuration —
  24. 24 ✔ exposes an expert area by slug —
  25. 25 PASS 20 tests —
  26. 26 No tests failed. —
  27. 27 Deposit: 25 tests —
  28. 28 Duration: 2.42s —
  29. 29 —
  30. 30 $ npm run build —
  31. 31 vite v5.2.11 — 빌드 완료 in 2.12s —
  32. 32 ✓ 24 modules transformed. —
  33. 33 ✓ manifest.json 2.4kb —
  34. 34 ✓ favicon.svg 1.1kb —
  35. 35 ✓ assets/app.css 94kb —
  36. 36 ✓ assets/app.js 186kb —
  37. 37 —
  38. 38 Preparing release a1b2c3d4 —
  39. 39 $ php artisan optimize —
  40. 40 Config cache cleared! —
  41. 41 Config cache created successfully. —
  42. 42 Route cache cleared! —
  43. 43 Routes cached successfully. —
  44. 44 Compiled views cleared! —
  45. 45 Compiled views cache created successfully. —
  46. 46 Application compiled successfully. —
  47. 47 Release prepared: releases/a1b2c3d4/ —
  48. 48 —
  49. 49 $ ln -sfn releases/a1b2c3d4 current —
  50. 50 ✓ atomic switch · php-fpm reloaded —
  51. 51 $ php artisan queue:restart —
  52. 52 ✓ Horizon rolling restart · previous release kept for rollback —
  53. 53 —
  54. 54 Verifying deployment —
  55. 55 GET /up → 200 OK · 142ms —
  56. 56 Smoke tests passed · 4 assertions —
  57. 57 ✓ Verified · a1b2c3d4 live —
  1. Deprecations: 0
  2. Tests: 6 passed (8 assertions)
  3. Remote: 2 passed
  4. Everything OK
  1. ln -sfn releases/a1b2c3d4 current
  2. atomic switch · php-fpm reloaded
  3. php artisan queue:restart
  4. Horizon rolling restart · previous release kept for rollback
  • Production current → a1b2c3d4 Live
  • Staging current → a1b2c3d4 Live
  • PR previews 2 open · ephemeral Idle

Workflow Details

View on GitHub
Repository
shamimwhois/shamim
Branch
main
Commit
a1b2c3d4
Workflow
Laravel CI/CD
Trigger
Push / Pull Request
Started at
Oct 23, 2026, 10:42 AM
Duration
0s (queued)
Environment
Production

01 — No maintenance page

The switch is a symlink

The release is assembled beside the live one and switched in a single rename, so the site is never serving a half-copied tree. The down page is reserved for schema work that cannot be done in place.

02 — No stale caches

Caches are built, not warmed

optimize runs inside the deploy, after the code lands and before traffic moves. A config cache built against the previous release is a bug wearing a speed-up's clothes.

03 — No orphaned workers

Workers are told, not killed

queue:restart lets Horizon finish the job in hand and then pick up the new code, so a queue worker never serves a release that no longer exists on disk.

03 Writing

Notes on building systems that last

All 11 posts
04 Expertise

What I am actually good at

Backend architecture

Service boundaries, transactional integrity, and domain modelling that survives its second year of feature requests.

  • Laravel
  • PHP 8.5
  • DDD-lite
  • REST

Database performance

Index design, query plans, and eliminating N+1s before they reach production rather than after the pager goes off.

  • PostgreSQL
  • MySQL
  • Redis
  • EXPLAIN

Reactive interfaces

Server-driven UI with Livewire where a SPA would be over-engineering, and knowing which is which.

  • Livewire 4
  • Alpine.js
  • Tailwind 4
  • Flux

Testing & quality

Test suites that catch regressions rather than assert implementation details, backed by static analysis that runs in CI.

  • Pest
  • PHPStan
  • Pint
  • CI/CD

Observability

Structured logging, tracing, and metrics that answer "what is slow" without a debugging session.

  • OpenTelemetry
  • Horizon
  • Sentry

Technical writing

Documentation and architecture decision records that make the reasoning recoverable a year later.

  • ADRs
  • API design
  • Mentoring
05 Selected work

Systems I have built and shipped

01

Atlas Ledger

Lead engineer

Double-entry accounting engine handling multi-currency settlement for a payments platform.

Cut month-end reconciliation from 6 hours to 11 minutes by replacing a cron-driven batch with an event-sourced projection built on database-backed queues.

  • Laravel
  • PostgreSQL
  • Redis
  • Horizon

02

Meridian API

Architect

Public REST API serving 40M requests a month across three product teams.

Reduced p95 latency from 840ms to 190ms and eliminated a recurring incident class by introducing a query-budget layer that fails builds, not requests.

  • Laravel
  • MySQL
  • OpenTelemetry
  • Kubernetes

03

Forge CLI

Author

Internal developer CLI that scaffolds services with migrations, CI, and observability pre-wired.

Brought new-service bootstrap time from two weeks of copy-paste to under an hour, and made the platform team's conventions the path of least resistance.

  • PHP
  • Symfony Console
  • Docker
  • GitHub Actions

04

QueueLens

Maintainer

Open-source metrics exporter that turns Horizon queue telemetry into Prometheus dashboards.

Gave platform teams a queue-depth SLO out of the box; adopted by four internal teams in its first quarter and now shipped with the default platform image.

  • PHP
  • Prometheus
  • Redis Streams
  • Grafana
06 Contact

Let us talk about the hard part

I am most useful when a system has outgrown its first design and nobody agrees on what to do next.

Currently

Open to full stack developer roles

Enter your credentials to continue to your workspace.
Email address
Remember me
Don't have an account? Sign up
Enter your details below to create your account
Name
Email address
Password
Confirm password
Already have an account? Log in
Enter your email and we will send you a reset link
Email address
Or, return to log in