Blog
Technical writing, experiences, and guides.
Stop Building on the Server: Docker Deploys from CI
Building images on the box costs you OOM-killed deploys, long downtime and no way back. Build in GitHub Actions, tag by commit SHA, let the server only pull.
Self-Hosting Next.js: What Changes When You Leave Vercel
Every Next.js feature works on your own server. What you take over: nginx buffering, the ISR cache, the rsc header your CDN strips, sharp, and graceful shutdown.
Vercel Free Tier Limits: What the Hobby Plan Really Allows
The real numbers behind Vercel's Hobby plan: 100 GB transfer, 200 projects, 100 deploys a day — plus custom domains, preview SEO and cron-free scheduling.
Core Web Vitals: Raising Lighthouse Scores on a Next.js Site
What LCP, CLS and INP actually measure, the font and image fixes that move them, and how to read the difference between lab scores and real-user field data.
Form Validation with Next.js Server Actions: Zod, Rate Limiting and Spam Protection
Handling forms without an API route — server-side validation with Zod, honeypot bot filtering, and the field-prefix gotcha that makes FormData reads return null.
Filtering Thousands of Records: PostgreSQL and Django ORM Performance
Why multi-criteria listing pages slow down — N+1 queries, missing indexes, the wrong text search method and OFFSET pagination — and how to fix each one.
AWS Lightsail Django Deploy: From Nothing to Live
Step-by-step Django deployment on AWS Lightsail: Docker, nginx, Let's Encrypt HTTPS, SSH hardening, firewall rules and a backup routine that actually works.
A Production Docker Compose Setup for Next.js + Django
Packaging a Next.js frontend, Django backend, PostgreSQL and nginx into one Compose file — multi-stage builds, healthchecks, network isolation and the secrets you must not bake into images.
Django, Celery and Redis: Background Tasks Done Right
Celery and Redis setup for Django: moving slow work out of the request cycle, retry strategy, idempotent tasks, and the mistakes that bite in production.
How Next.js ISR and On-Demand Revalidation Work
How Next.js ISR works, how to pick a revalidate window, and how on-demand revalidation updates content in seconds — with App Router code examples.
Turning Django Admin Into a CMS Your Client Can Actually Use
Making the built-in Django admin genuinely usable for non-technical editors with list_display, inlines, fieldsets and model-level validation — instead of building a custom panel.
Getting hreflang and Multilingual SEO Right in Next.js
Generating per-page canonical and hreflang tags in the App Router, building a sitemap with localized paths, and avoiding the mistakes that quietly break multilingual indexing.
Building Admin-Managed SEO Landing Pages in 15 Languages
Using next-intl and the Django admin to make location-based SEO landing pages manageable without a developer, across 15 languages.
Next.js + Django on a Single Origin, No CORS Headaches
How an nginx reverse proxy puts a Next.js frontend and Django backend on one origin, eliminating CORS config, cookie SameSite issues, and dual SSL certs.