Writing

Things I learned
the expensive way.

Every post here cost me something - time, sleep, a client call I didn't want to make. I write about what actually went wrong, what I did about it, and what I'd do differently. Not tutorials. Not theory. Things that happened.

Architecture10 Jul 20265 min 03 views

Architecting Tenant-Specific WhatsApp Reminders in a Multi‑Tenant SaaS

I'm building a multi-tenant SaaS platform where each tenant needs to send reminders to their own customers. The reminders had to go out over WhatsApp instead of email.

Email would have been straightforward. Every tenant gets a "from" address on a shared domain, or their own domain if they want it, and the sending infrastructure barely changes between tenants.
multi-tenant-saaswhatsapp-cloud-apiwhatsapp-businessnotification-architecturesaas-platform-design
Architecture3 Jul 20263 min 09 views

Why I Built oodoroland.com to Show More Than Skills.

oodoroland.com was built to communicate how I work: full-stack ownership, production systems, deployment thinking, and clarity over a simple list of skills.

Real work matters more than tool lists, so the portfolio points toward production systems and shipped outcomes.
#FullStackDevelopment#WebDevelopment#SoftwareEngineering#Portfolio
New posts, before it's public.

No schedule, no filler - I write when something goes wrong and I learn something worth sharing. That's the only reason a post gets published here.

Unsubscribe any time
Architecture26 Jun 20263 min 112 views

Why We Chose a PWA Instead of a Native App After Launch

We had just pushed a product to production and started getting feedback from real users. The app was web-based, but the request from users was familiar: they wanted it to feel more like an app they could keep on their phone, not something they had to reopen in a browser every time.

The first reaction was to consider building a native mobile app.
PWAWebDevelopmentFrontendDevelopmentProductDevelopmentUserExperience
Production incident19 Jun 20262 min 06 views

Production Breakage After RestCountries API Deprecation (v5 Migration and Caching Fix)

The application relies on the RestCountries API to populate country, state, and phone-related fields across multiple forms. This data feeds location-dependent workflows and validation logic in the frontend.

Historically, the integration used older public endpoints without authentication.
#API#SoftwareEngineering#WebDevelopment#Debugging#Production
Production incident9 Jun 20262 min 13 views

How Production Endpoint Probing Changed Our Backend Security Thinking

Production logs started showing requests to routes that did not exist in the app. The probes targeted common paths like /api/.env, /api/openapi.json, /api/graphql, and similar patterns, all returning 404.

It was a reminder that production traffic includes bots and scanners, and that endpoint design affects the exposed attack surface.
Node.jsExpress.jsAPI securityunauthorized requests
Production incident9 Jun 20263 min 110 views

Fix 413 Request Too Large in Nginx (Nodejs Uploads)

Saving blog drafts worked locally but failed in production with a vague “unable to reach the server” error. The actual issue was a 413 Request Entity Too Large response from Nginx, which blocked the request before it reached the Node.js app. Increasing Nginx’s body size limit resolved the issue.

This helps anyone handling large multipart requests (HTML + images) behind Nginx.
Nginxreverse proxyRequest Too Largeserver configurationNode.jsExpressfile upload