← Back home
Blog

Writing

Notes on backend systems, Laravel, and building things that hold up at scale.

How to Create a Custom Domain Email Without Running a Mail Server
DevOps Jul 26, 2026 · 4 min read

How to Create a Custom Domain Email Without Running a Mail Server

Set up incoming forwarding and authenticated outgoing SMTP using Cloudflare Email Routing, Gmail, and SMTP2GO — eliminating VPS mail server overhead.

Why We Chose Laravel Octane for a 1M-Connection OMS
Systems Jun 20, 2026 · 4 min read

Why We Chose Laravel Octane for a 1M-Connection OMS

PHP-FPM couldn't hold persistent connections at exchange scale. Octane's long-running worker model changed the math.

Building laravel-tagging: Polymorphic Tags Without the N+1
Laravel Jun 5, 2026 · 4 min read

Building laravel-tagging: Polymorphic Tags Without the N+1

How a general-purpose tagging package hits sub-100ms p99 latency at a million tags per model, and the indexing tricks that got it there.

Parsing FIX and ITCH in the Same Order Pipeline
Systems May 22, 2026 · 4 min read

Parsing FIX and ITCH in the Same Order Pipeline

FIX is session-based and human-readable; ITCH is a raw binary multicast feed. Here's how we normalized both into one order lifecycle.

Auto-Translating Laravel Language Files with Gemini
AI / ML May 8, 2026 · 4 min read

Auto-Translating Laravel Language Files with Gemini

Why I built laravel-ai-translator - generate missing translation strings once via the Gemini API, cache them to disk, and never call the API again.

pgvector in Production: Lessons from a Real Search Feature
Data Apr 24, 2026 · 4 min read

pgvector in Production: Lessons from a Real Search Feature

Adding embedding-based search to an existing PostgreSQL database instead of standing up a dedicated vector store.

Redis as a Message Bus vs RabbitMQ: When to Use Which
Backend Apr 10, 2026 · 4 min read

Redis as a Message Bus vs RabbitMQ: When to Use Which

Both can move messages between services. They fail very differently when something goes wrong.

Debugging a WebSocket Memory Leak in a Laravel Octane Worker
Backend Mar 27, 2026 · 4 min read

Debugging a WebSocket Memory Leak in a Laravel Octane Worker

Memory climbed steadily over 6 hours until the worker OOM'd. The culprit wasn't the sockets - it was an event listener.

Notes on MQTT for a Low-Bandwidth IoT Integration
Backend Mar 13, 2026 · 4 min read

Notes on MQTT for a Low-Bandwidth IoT Integration

Integrating field sensors over unreliable, metered cellular links meant designing for disconnection as the default state. Here is how we tuned MQTT QoS, keep-alive timers, and binary payloads.

What Building an XMPP Bridge Taught Me About Presence
Systems Feb 27, 2026 · 3 min read

What Building an XMPP Bridge Taught Me About Presence

"Online" and "offline" turned out to be a much fuzzier line than the protocol suggests once real networks get involved.

OCR Pipelines: Tesseract vs Cloud Vision for Bangla Text
AI / ML Feb 13, 2026 · 4 min read

OCR Pipelines: Tesseract vs Cloud Vision for Bangla Text

Open-source OCR is free and private but struggled with complex Bangla script in ways hosted models didn't. Here is how we built a hybrid fallback pipeline.

Zero-Downtime Deploys with GitHub Actions and Nginx
DevOps Jan 30, 2026 · 4 min read

Zero-Downtime Deploys with GitHub Actions and Nginx

A straightforward blue-green rollout on a single VPS, without needing Kubernetes to get there.

Queues at Scale: What Actually Breaks First
Backend Jan 16, 2026 · 4 min read

Queues at Scale: What Actually Breaks First

It's rarely throughput. It's almost always a slow job holding a worker hostage while the queue behind it backs up.

Docker Compose for Local Parity Across a Java, PHP, and Node Stack
DevOps Jan 2, 2026 · 6 min read

Docker Compose for Local Parity Across a Java, PHP, and Node Stack

Three services in three languages, one docker-compose.yml, and the small decisions that kept local dev matching production.