← About
Author

Alastair Murdoch

Lead developer, 63Digital

Alastair leads development at 63Digital, the Scottish software studio behind bespoke platforms, integrations and websites for UK businesses since 2014.

He works across the stack: .NET and ASP.NET Core platforms, Umbraco and WordPress sites, WooCommerce and Shopify stores, payment integrations on Stripe Connect, and the Azure infrastructure they run on. The guides on this site come from that work: jobs he has done, problems he has hit, and the fixes that held.

Writing

Guides by Alastair Murdoch

WooCommerce

How to update a customised WooCommerce theme without losing your changes

Before you update, find every change made to the theme and its companion plugin, and move them where updates can't overwrite them, such as a child theme or a small plugin. If you can't yet, record which files were changed so you can re-apply them. Then update the theme and WooCommerce together on staging and check for outdated templates.

WordPress

How to reduce the size of a WordPress media library (safely)

The weight is usually in a small number of oversized original photos, not the thumbnails. Shrink those outside WordPress in a logged batch, capping the longest side at 2,560 pixels, saving JPGs at quality 82 and stripping hidden metadata, then swap them in and rebuild thumbnails. On one site that took 626 originals from 3 GB to under 700 MB.

WordPress

How to take back your WordPress site when your developer has gone

If you can still log in to wp-admin as an administrator, you can recover the site without the old developer or host. Copy it to hosting in your own name with a migration plugin, find your domain's registrar with a WHOIS lookup and recover that account, then re-license only the premium plugins the site really uses, in the business's name.

Umbraco

How to upgrade Umbraco 13 to 17

You can upgrade Umbraco 13 straight to 17 in one jump: update to the latest 13, confirm every package has a version for 17, move to .NET 10, update Umbraco and let it upgrade the database on first start. That part is quick. The time goes on packages without a 17 release and on custom code relying on removed features.

AI-built apps

How to audit an AI-built app before launch

Before an AI-built app meets real users, check eight things: passwords and keys left in the code or its history, whether the live site still thinks it's in development, every way in, whether multi-step saves succeed or fail together, two people acting at once, database load on busy pages, automated safety checks, and a second review.

AI-built apps

Why AI-generated code breaks under real traffic (and how to fix it)

AI-generated code usually works for one user and fails when two arrive at once. It checks, then acts, with nothing stopping a second user between, trusts a quick look-up to prevent duplicates, and queries the database inside loops. The fix: re-check under a lock, claim each job in one step, lock in a consistent order and batch queries.

Stripe

How to build a Stripe Connect marketplace in .NET

Let Stripe host merchant sign-up, and treat a merchant as ready only when Stripe confirms payments and payouts are both switched on with nothing outstanding. Your platform creates each payment, passes the merchant their share and keeps its fee as the money moves. Refunds come back out of the merchant's share, while your fee stays with you.

Stripe

How to keep Stripe keys off mobile apps and plugins with a reverse proxy

Put a gateway between your apps and Stripe so the apps never hold your platform's Stripe secret key. Each app or plugin gets its own key that you can withdraw. The gateway works out which merchant it belongs to, adds the merchant's account and your fee on the server, and only passes on the Stripe requests you've approved.

Stripe

How to recover Stripe interchange fees from connected accounts automatically

Stripe reports the card network costs behind every payment on your merchants' accounts. Import that report daily, count each fee once, and total what each merchant owes. Then collect it from their Stripe balance on a schedule, labelling each bill by merchant and period so that a retry can never bill anyone twice.

Stripe

How to take payments with Tap to Pay on iPhone using Stripe Terminal

Tap to Pay turns a merchant's iPhone, or an NFC Android phone, into a contactless card reader through Stripe Terminal. Your app needs Apple's approval, each merchant needs their own Stripe location so payments land with the right business, and payments are created on your server with your fee. Most of the work is handling phones that can't tap.

Square

How to build a ticketing marketplace on Stripe Connect and Square

Make the promoter the merchant of record: connect their own Stripe or Square account, take payments on it, and take your cut as a platform fee. Cap that fee to fit both providers' limits, set up Apple Pay and Google Pay on every promoter's account, record the real processing fee, and fix every bug on both providers together.

Apple & Google Wallet

How to add Apple Wallet and Google Wallet tickets to your platform

Add an Apple Wallet pass and a Google Wallet save link to each ticket, both signed with credentials Apple and Google issue to you. Keep the QR code exactly as it is so door scanners still work, serve passes from unguessable links that need no login, and switch wallets on per organiser once each has been verified.

Microsoft Access

How to extract forms, reports, queries and VBA from a Microsoft Access database

Before replacing an Access database, we take a copy and read everything out of it: tables, saved queries, forms, reports and the VBA code behind them. That gives a searchable record of how the system really works, which becomes the specification for its replacement and shows where the business rules actually live.

Microsoft Access

How to migrate data out of Microsoft Access into SQL Server

Move Access data with a repeatable process you can rehearse, not a one-off import. Load it in a sensible order, split all-in-one rows into proper records, merge duplicate customers carefully, keep a link from every new record to its original, protect real email addresses until cutover, and let validation decide when you're ready.

Microsoft Access

How to prove your new system matches the old one

Treat the old system's behaviour as the specification and check the new one against it. Put the same orders through both and compare every total, check what the old code actually does before trusting a stored value, reproduce reports in their old layout, match every automated email, and re-check the old system just before switching over.

Microsoft Access

How to run old and new systems side by side, and cut over safely

Let staff enter real work in the new system while the old one stays the official record, but make sure the new one can't contact customers until you decide. Keep the paperwork and spreadsheets people rely on, decide how order numbers continue, move people over in stages, and switch over from a fresh copy that passes validation.

Spreadsheets

How to replace a business spreadsheet with a web app

Start by reviewing how the spreadsheets are really used, and adapt the approach to what you find. Most replacements turn tabs into proper tables, build in per-person access and an audit trail from the start, move the data across with checks, and let staff settle in before any customer sees it.