Blog
Write-ups from real projects: what I built, the decisions behind it, and what I'd do again.
· 5 min read
How to hire a web or software developer in Oman: a practical guide for businesses
A guide for businesses in Muscat and across Oman hiring a website or software developer: freelancer vs agency, what to ask, what you should own, bilingual needs, timelines and red flags.
Read· 4 min read
Building bilingual Arabic and English websites for businesses in Oman
How to build an Arabic and English website that works properly: right-to-left layout, fonts, numbers, forms, and bilingual SEO with hreflang, for businesses in Muscat and across Oman.
Read· 5 min read
WhatsApp, Odoo and a fast website: a digital setup that works for SMEs in Oman
How small and medium businesses in Oman can connect a fast website, WhatsApp enquiry automation and Odoo ERP into one reliable setup, based on real work for a Muscat company.
Read· 6 min read
Moving a WordPress site from shared hosting to a Dockerised Ubuntu VPS
A practical, step-by-step guide to moving WordPress sites and business apps like Odoo ERP from shared hosting to an Ubuntu VPS with Docker, without losing data, email or rankings.
Read· 4 min read
Bulk CSV imports with validation and duplicate detection for a 7M-record catalogue
How to design bulk CSV imports that are safe with large datasets: validate before writing, detect duplicates, import in batches, and report every rejected row, with Laravel examples.
Read· 3 min read
Making users acknowledge before they proceed: an acknowledgement gate in Next.js and Supabase
How to lock a dashboard until users acknowledge important notices, with automatic expiry, server-side checks and Supabase row-level security, inspired by NOTAMs in an airline portal.
Read· 5 min read
The programming languages I enjoy working with, and why
TypeScript, PHP with Laravel, Dart with Flutter, and Python: what each language is good at, where I've used it in production, and how I choose between them for a project.
Read· 3 min read
A simple Git workflow for small teams and solo developers
A lightweight Git workflow that keeps main deployable: short-lived branches, pull requests, clear commit messages, rebasing, and preview deploys, without heavy process.
Read· 2 min read
WebSockets, polling or server-sent events for live updates
Three ways to push live updates to a web or mobile app: short polling, server-sent events and WebSockets. How each one works, what it costs, and when I use each.
Read· 2 min read
Flutter state management: setState, Provider and Riverpod
A practical comparison of Flutter state management: when setState is enough, when to reach for Provider, and why Riverpod suits apps with shared state and API data.
Read· 2 min read
MySQL indexing for fast search on millions of rows
How MySQL indexes work, how to read EXPLAIN, and how composite, covering and prefix indexes keep search queries fast on tables with millions of records.
Read· 2 min read
Environment variables and secrets in Next.js without leaking them
How Next.js decides which environment variables reach the browser, why NEXT_PUBLIC_ is a one-way door, and how to validate and keep API keys on the server.
Read· 2 min read
Supabase row-level security, explained with real policies
A practical guide to Postgres row-level security in Supabase: why the anon key is safe with RLS, how to write policies for owners and roles, and how to test them.
Read· 3 min read
Rate limiting APIs and contact forms, with Next.js and Laravel examples
Why every public endpoint needs a rate limit, how fixed window, sliding window and token bucket algorithms differ, and how to add limits in Next.js and Laravel.
Read· 3 min read
Server Actions or API routes in Next.js: how I decide
Server Actions and route handlers both run code on the server in Next.js. Here is when each one fits, with examples for forms, webhooks, mobile clients and validation.
Read· 2 min read
Preventing SQL injection in PHP, WordPress and Laravel
How SQL injection works and how to stop it in PHP: prepared statements with PDO, $wpdb->prepare in WordPress, Laravel's query builder, and the places they don't protect you.
Read· 2 min read
Dockerising a Laravel app with Docker Compose
A practical Docker Compose setup for Laravel: PHP-FPM, Nginx, MySQL and a queue worker in separate containers, with persistent data, environment files and a production checklist.
Read