<Ghayas/>

Writing

Notes from the build.

Notes from production builds: e-commerce, SaaS billing, headless WordPress, performance and the integrations that hold it all together.

Close-up of a circuit board with illuminated traces
WordPress//4 min read

Running headless WordPress without a database server

WordPress needs MySQL, a writable uploads folder and a server that never sleeps. I stopped paying for all three and the site got faster.

Read →
Analytics dashboard showing pricing and sales charts
E-commerce//3 min read

Tiered B2B pricing in WooCommerce without a rewrite

A trade supplier needed six customer tiers, VAT-exclusive display and per-account overrides. Here is what held up and what I would not do again.

Performance metrics displayed on a laptop screen
Performance//3 min read

What actually fixed LCP on a slow storefront

Six changes, ranked by how much they moved the number. Four of the popular ones did nothing measurable.

Financial data and charts on a dark screen
SaaS//3 min read

Stripe or Paddle for a small SaaS: the VAT question

The integration effort is nearly identical. The tax liability is not, and that is the only part of the decision that is hard to reverse.

Source code displayed on a monitor in a dark room
SaaS//3 min read

Multi-tenant Supabase: what row level security does not cover

RLS is the best tenant isolation primitive I have used. It also has four gaps that will leak data if you assume it covers everything.

Laptop showing website traffic analytics
E-commerce//3 min read

Moving WooCommerce to Shopify without losing rankings

Traffic dipped 9% for eleven days and recovered. Here is the redirect work that made the difference, and the one thing I nearly got wrong.

Lines of code on a screen with syntax highlighting
Integrations//3 min read

Webhooks will be delivered twice. Design for it.

A duplicate delivery once created 300 duplicate invoices in an accounting system. The fix is four lines of SQL and one decision made early.

Server room with racks of networking equipment
Performance//3 min read

Caching live sports scores when the data changes every ball

Traffic multiplies by forty during a match and the payload is stale in six seconds. Standard caching advice does not apply.

Developer working on code at a desk with a laptop
Mobile//3 min read

Offline-first React Native: the sync is the hard part

Storing data locally takes an afternoon. Deciding what happens when the same record was edited in two places takes considerably longer.

Colourful code editor showing markup on screen
E-commerce//3 min read

The three Klaviyo flows that actually earn their place

Most stores I audit have fourteen flows and three that matter. The other eleven are sending email to people who already bought.