01Pipeline02Architecture03Services04Status05Incidents06Log07HireHire me →
Open for projects & remote roles

Jabed Hossain ·

Push to live. Sleep at night.

I set up deploy pipelines, lock down servers and keep watch on the alerts. Your team pushes code, it goes live, and nobody has to hold their breath. Dozens of sites run on setups I built. I also write the apps when needed, in Laravel, React, Next.js and TypeScript.

Press ⌘K or / to search · 1–7 to jump · ` for the terminal

01 / pipeline

The deploy flow behind every project I run. Press ▶ run to watch it ship, or click any stage to see what it does.

auto-deploy.yml · every repoready
stage/push

push · git

$ git push origin live
→ workflow: Auto Deployment
branches: stage → live (main on smaller repos)
# press ▶ run to deploy live

And when a release is bad?

Every deploy builds in its own folder and goes live by flipping one symlink. If the health check fails, the link flips back. Try the broken release.

release.sh · what happens on the server
ready
  1. stagingdevelop branch
  2. approvemerge + sign-off
  3. backupdb dump · keep 5
  4. buildnew release folder
  5. switchcurrent → new (atomic)
  6. healthcurl -f /health ≤ 10s
  7. liverolling to every node
web-1:/var/www/app
releases/
  • 20261011-1822live
  • 20261010-1105kept
  • 20261009-1640kept
  • 20261008-0912kept
  • 20261007-1530kept
shared/ .env · storage/ · uploads/

Shared files survive every deploy. Each release is linked to them, never copied.

nginx · load balancer
web-11011-1822200 OK
web-21011-1822200 OK
web-31011-1822200 OK

One node at a time. A bad release stops at the first server, so the rest keep serving the old one.

# pick a release, then press ▶ deploy
Deploy a healthy release and watch it roll across the nodes.

Note: rollback switches code, not the database. Migrations stay backward compatible, and every deploy starts with a fresh dump.

02 / architecture

Not a one-off. It’s how PIF World, NLinBD, Shokkhom, Suniti, UIU and the rest all ship.

running in production

Every Laravel, React and Next.js project I work on ships the same way: push a branch, GitHub Actions takes over, deploys over SSH with a deploy script, and reports to Discord. I built this template and run it across RedOrange's projects.

19+repos on my CI/CD
8products shipping this way
2environments: stage · live
projects
PIF WorldNLinBDShokkhomSunitiUIU × IDSSShare-Net BDinternal tools
ci/cd
GitHub Actionstests · PR checks · deploy
SSH deploykey auth · deploy script
environments
live
stage
Discorddeploys · PRs
Sentryerrors (PIF)
what the template does
  • Branch-based auto-deploys: push to stage / live → GitHub Actions → SSH → deploy script
  • Secrets live in GitHub, servers accept key auth only
  • PR bot on every repo: merge-conflict checks + Discord alerts; unmerged PRs flagged automatically
  • Every deploy reports status, author, commit and run link to Discord
  • PHPUnit in CI where a repo has tests (SQLite, throwaway DB)
  • Docker Compose dev stacks (PHP-FPM, MySQL with health checks, Nginx)
biggest project on it

PIF World · the big one · playitforward.nl

My biggest project: a Dutch social-impact platform where nonprofits, companies and individuals run fundraisers, events, projects and petitions, and take donations through Mollie (iDEAL). I'm the main developer across its three codebases.

3,000+of my commits
3repos: api · front · admin
  • api: Laravel 12 · PHP 8.3 · MySQL. Sanctum auth, Google login, Mollie payments, roles & permissions, translations, PDF receipts
  • front: React · Vite · TanStack Query. i18n, charts, Google OAuth, Sentry
  • admin: React · Vite · Tailwind. content, donations and reporting for the team
Visit playitforward.nl ↗
03 / services

Pick one or run all four. Click a unit for its systemctl status.

Ship

From git push to production. No FTP, no prayers, no “works on my machine”.

● ship.service - Ship
   Loaded: loaded (/etc/systemd/system/ship.service; enabled)
   Active: active (running)
  ExecStart=GitHub Actions pipelines: build, test, deploy
  ExecStart=Linux server setup on AWS, Hetzner or cPanel/WHM
  ExecStart=Nginx, PM2, queues, cron, SSL
  ExecStart=Repeatable, scripted deploys and checklists

Good for Teams that still deploy by hand and hope

GitHub ActionsLinuxNginxAWS

Guard

Got hacked? Worried you will? I clean it up, then lock the doors.

SSHUFWNginxdpkg

Operate

Backups, watchdogs and alerts, so the site stays up while you sleep.

BashcronrcloneDiscord

Build

I write the app too. Laravel on the back end, React and Next.js on the front, TypeScript throughout.

LaravelNext.jsReactTypeScript
04 / status

05 / incidents

Real incidents, written like postmortems. Clients anonymised, lessons kept. Click one to open it.

A production box hosting client sites had been quietly taken over. Even the ls command was in on it.

  1. detectUnrecognised root logins and an SSH key nobody had issued.
  2. investigate/usr/bin/ls replaced by a rootkit binary; a malicious cron file kept the door open.
  3. eradicateRemoved backdoors, the rogue key and cron; reinstalled coreutils; verified packages with dpkg.
  4. hardenPassword auth off, SSH hardened, UFW on, authorised IPs confirmed, audits automated.
root causeWeak SSH posture let an attacker in and persist.
lessonAssume the binaries can lie. Verify packages, not just processes.
$ ls -l /opt/opswhat runs on servers I look after
  • -rwxr-x---backup.shDatabases + files zipped, synced to Google Drive with rclone, 15-day retention
  • -rwxr-x---security.shPackage integrity (dpkg), SSH key and login audits, suspicious-account checks
  • -rwxr-x---server_maintenance.shUpdates, cleanup and service health
  • -rwxr-x---server_watchdog.shRuns every 5 minutes, restarts what falls over and alerts if it can't
  • -rwxr-x---domain_health.shUptime + SSL expiry across 13 domains
  • -rwxr-x---notifyDiscord and email alerts with attachments
06 / log

2024-10 → now

Full Stack Web Developer @ RedOrange Technologies

  • Runs and secures the company's multi-site Linux servers (Laravel, Next.js, React and CMS sites)
  • Automated backups, watchdog, security audits and alerting
  • Main developer on PIF World (playitforward.nl): API, front-end, admin and the CI/CD behind them
  • Built NLinBD, BMMDP, Suniti, Shokkhom
2024-05 → 2024-09

PHP & Laravel Developer @ IT Bangla Limited

  • PGCL (government), Notre Dame College applications
  • Pharmacy (BPDB) & school management systems
2023-06 → 2024-04

Junior PHP & Laravel Developer @ Leotech

  • Coastal & Marine Fisheries (Dept. of Fisheries), Hydrology (BWDB)
  • Schobee EMS; hospital software maintenance
2025 → now

MSc Software Engineering @ Northeastern University

  • Shenyang, China
2019 → 2023

BSc Software Engineering @ Daffodil International University

  • Dhaka
$ apt list --installed
ops/
linuxnginxdockergithub-actionsci/cdsentrypm2cronrcloneufwssh
cloud/
awshetznercpanel/whm
languages/
typescriptjavascriptphpbashsql
frontend/
reactnext.jstailwindtanstack-queryvitei18next
backend/
laravelsanctumrest apisqueues
data/
mysqloraclemongodbsqlite
certs/
  • i2i Virtual Internship: PHP with Laravel
  • Certificate in Software Development (PHP with Laravel)
07 / hire

$ hire --project

Need it built, shipped or rescued?

A CI/CD pipeline, a server setup or migration, a clean-up after a hack, or someone to keep your sites alive every month.

Start a project →
$ hire --full-time

Hiring a DevOps engineer?

Pipelines, Linux and security are home turf, and I write Laravel, React, Next.js and TypeScript too. Based in Shenyang, happy to work remote.

$ mail jabed→ jabed.inbox@…
Jabed Hossainpress ` for the console