Skip to content
L-04Journal / Field NotesEL +0.00 m

Blog

Backend engineering notes by Mohammed Mostafa on Node.js, TypeScript, Express.js, API architecture, message queues (BullMQ / Redis), authentication and payment-token security, and real-time systems (WebSockets, SSE, CRDTs) on AWS. Practical write-ups with code and diagrams from real projects like Lesoll, EgyStay, and SRVJ.

Cloud & DevOps

11 min read

GitHub Actions in Production, Part 1: The Build Gate That Wasn't Guarding Anything

A CI workflow that ran on every push to the production branch, went green for months, and protected nothing — because it fired at the same moment as the deploys it was supposed to gate. On the difference between reporting and enforcement, and why the trigger matters more than the steps.

GitHub ActionsCI/CDTypeScriptpnpmNode.jsDevOpsContinuous Integration
10 min read

GitHub Actions in Production, Part 2: Thirty-Two Lines That Replaced a Job Nobody Was Doing

The shortest workflow I have written returns more than pipelines I spent days on. Tag-triggered GitHub Releases with generated notes, why releasing and deploying are different events, and why I deliberately stopped short of full semantic-release automation.

GitHub ActionsCI/CDAutomationGitSemantic VersioningDevOpsRelease Management
13 min read

GitHub Actions in Production, Part 3: Docker Layer Caching and Graceful Degradation

A Docker publishing pipeline with my favourite design decision and my most instructive bug four lines apart: credential probing that keeps fork builds useful, BuildKit remote caching that turns multi-minute builds into seconds, and a nested expression that made the whole file invalid.

DockerGitHub ActionsBuildKitCI/CDDevOpsContainersSupply Chain Security
14 min read

GitHub Actions in Production, Part 4: The Line That Makes a Green Check Mean Something

Deploying to ECS Fargate from GitHub Actions. Why `aws ecs wait services-stable` is the line I would defend hardest, and why `--force-new-deployment` against a latest tag is a race condition that makes rollback impossible and your running version unknowable.

AWSAmazon ECSDockerGitHub ActionsCI/CDDevOpsOIDCFargate
14 min read

GitHub Actions in Production, Part 5: The Heredoc That Expands on the Wrong Machine

Deploying a Node service to a single EC2 box over SSH with pm2. Zero downtime comes down to one word, the runner is a control plane rather than a build host, and an unquoted heredoc delimiter means your shell variables resolve on entirely the wrong machine.

AWSEC2pm2Node.jsGitHub ActionsSSHDevOpsZero Downtime