Blog
I love sharing what I've learned through experience, especially when it comes to web development.
Exporting a big report looks trivial until it meets production scale. This post covers heap-bounded pagination, producer-side progress throttling, and a fanout broadcast trick for pushing WebSocket updates across multiple Spring Boot instances.
This article shows how a simple event-driven approach can turn a slow, fragile order flow into one that is fast, scalable, and resilient—without overengineering.
In a Warehouse Management System, a key challenge is preventing data duplication when multiple users run batch imports concurrently, especially for strictly unique identifiers like box codes.
Generating outbound reports in a Warehouse Management System can become extremely heavy—especially when dealing with thousands to tens of thousands of serial numbers or phone numbers within a single week.
Password logins are the weakest part of a fresh server setup. How I set up SSH key authentication: generate a key pair, install the public key, fix the permissions, and connect.
Creating a new user on Ubuntu Server 24 with adduser, granting sudo only when it's actually needed, and verifying the account works — plus the user-management commands you'll reach for later.
Setting up a new PostgreSQL database on AWS RDS with a dedicated, least-privilege user: connect as the master user, create the database and user, and grant exactly the permissions the application needs.
Caching Yarn dependencies and Vite build output in GitHub Actions can cut minutes off every CI run. Here's the workflow I use, and how cache keys and restore keys actually behave.