All blog posts

List of all tags

Mutual TLS (mTLS) from Scratch with OpenSSL and Nginx

Aug 20, 2026 ·8 min read

Build a private Certificate Authority, issue client certificates, and enforce cryptographic two-way authentication at the Nginx reverse proxy layer.

#security #tls #nginx

Private Site-to-Site Mesh with WireGuard and Self-Hosted Headscale

Aug 20, 2026 ·9 min read

Build a self-hosted WireGuard mesh network using Headscale as an open-source control plane for Tailscale clients. Connect VPS instances, homelabs, and local machines without public IPs.

#wireguard #vpn #networking

Injecting hardware cameras into the iOS simulator using IOSurface

Jul 25, 2026 ·5 min read

Handling Network Requests Gracefully

Jul 08, 2026 ·5 min read

Network calls fail. Clients retry. Here is how to handle duplicate requests without charging your users twice.

#system-design #backend #api

Configuring Nginx for Reverse Proxy

Jul 07, 2026 ·5 min read

A quick guide on how to set up Nginx as a reverse proxy for your backend applications.

#nginx #devops #server

Let's Talk About gRPC

Jul 07, 2026 ·11 min read

gRPC is not a replacement for REST. It's a different tool with different tradeoffs. Here's what it actually does, where it fits, and where it doesn't.

#grpc #architecture #backend

Creating Your First Kubernetes Cluster

Jul 06, 2026 ·14 min read

A complete walkthrough for spinning up your first Kubernetes cluster, deploying something real, and understanding what's actually happening.

#kubernetes #devops #system-engineering

Message Queues: When to Use Kafka, RabbitMQ, or SQS

May 09, 2026 ·10 min read

A direct comparison of three message queue systems: Kafka, RabbitMQ, and Amazon SQS. What each one actually does, where each one breaks, and how to pick without second-guessing yourself six months later.

#architecture #kafka #rabbitmq

Securing My Ubuntu Server — Part 3: Zero Trust with Cloudflare Tunnel

May 08, 2026 ·9 min read

Closing port 22 for good. Using Cloudflare Tunnel to route SSH and web traffic through Cloudflare's network with zero publicly exposed ports, then locking it down further with Cloudflare Access.

#linux #ubuntu #security

Securing My Ubuntu Server — Part 2: Firewalls, Fail2Ban, and Zero Open Ports

May 07, 2026 ·8 min read

Defense in depth for your VPS: configuring UFW, layering DigitalOcean's cloud firewall on top, and using Fail2Ban to automatically ban malicious IPs before they get a second chance.

#linux #ubuntu #security

Securing My Ubuntu Server — Part 1: Initial Setup, User Management, and System Hardening

May 06, 2026 ·8 min read

The absolute must-have steps I personally took to lock down a brand-new DigitalOcean Droplet: sudo users, SSH key auth, application-specific users, sudoers, and a basic firewall.

#linux #ubuntu #security

VIPER Was a Cage. Now It Is a Ruin.

May 06, 2026 ·19 min read

VIPER promised clean iOS architecture. What it delivered was bureaucracy. SwiftUI made the case worse: the pattern is now structurally incompatible with how Apple wants you to build apps.

#ios #architecture #viper

Tools, Not Religions

May 05, 2026 ·9 min read

The endless debates about which framework is best, which language wins, and which library is the GOAT all share one thing: they're asking the wrong question.

#software-engineering #career #architecture

Is TCA Really That Good?

May 04, 2026 ·11 min read

An honest look at The Composable Architecture. What it solves, what it costs, and when you actually need it.

#ios #swiftui #architecture

MVVM in SwiftUI

May 03, 2026 ·9 min read

The debate over MVVM in SwiftUI misses the point. We should be asking what a ViewModel is actually supposed to do inside a framework like SwiftUI.

#ios #swiftui #architecture