// Case Studies

How I think.

Two projects, broken down the way I'd talk through them in an interview — the problem, my approach, the hard part, and the outcome.

Andrew Murley Plumbing Client Web Build +
The Problem

A local plumber serving Queensland's Pioneer Valley had no real online presence, while competitors were surfacing in local search. The site needed to win trust fast and turn visitors — mostly on mobile — into phone calls.

The Approach

I built a fast, framework-free multi-page site with a mobile-first layout and click-to-call actions throughout. I added dedicated landing pages for each town served (Eton, Marian, Mirani) to target local search, and an interactive Leaflet map that visually shades the coverage area.

The Hard Part

Getting genuinely strong local-SEO signals without a CMS or build step: hand-authored schema.org LocalBusiness and Service structured data, per-suburb pages that stay maintainable, and a custom Leaflet integration for the service-area map — all while keeping the page weight low for fast mobile loads.

The Outcome

A live, professional site the client can hand out and rank with. add result → e.g. "ranking page 1 for 'plumber Marian'" or "~X enquiries / month"

HTMLCSSJavaScriptLeaflet.jsSchema.orgLocal SEOResponsive
Echo Platform Stack Advanced All-in-One Platform +
The Problem

A gaming community ran a Discord server, a FiveM game server and a website that didn't talk to each other. Player identity, moderation and payments were fragmented — a ban in Discord meant nothing in-game, and staff had no unified view.

The Approach

I designed a three-part platform around one shared identity model: a Discord bot (Node/discord.js), a FiveM Lua resource exposing a secured HTTP API, and a Next.js/TypeScript web app. A player's Discord ID links to their in-game licence, so bans, lookups and payments flow across all three.

The Hard Part

Cross-runtime, cross-machine communication. The bot and game server live on separate VPSes and talk over authenticated HTTP (shared Bearer key). That meant designing endpoints that fail gracefully when one side is offline, keeping a consistent identity model across three languages (Lua, JavaScript, TypeScript), and making moderation actions propagate reliably without race conditions.

The Outcome

One coherent platform where Discord, game and web share state in real time. add scale → e.g. "serves X Discord members / Y concurrent players"

What I'd Improve

Move the inter-service calls behind a typed, versioned API contract and add automated integration tests across the three runtimes.

Next.jsTypeScriptNode.jsdiscord.jsLuaHTTP / Bearer AuthMySQLStripe

Want the full picture?

Browse every project, or grab my CV.