top of page

Projects: Websites, Systems & Custom Builds

These projects show how I design and build the digital setup behind a business, not just the website you see on the surface.

Each one is built around how the business actually runs, combining the website, the systems behind it, and where needed, custom tools to replace manual work or disconnected processes.

The goal is always the same: a setup that generates leads, reduces admin, and supports growth without workarounds or things breaking behind the scenes.

Click through to explore the live projects.

Looking for the detail behind how these were built?
View full case studies →

Disclaimer

 

Clients sometimes make changes after handover, so some details may have evolved since the original build

bottom of page
(function() { if (typeof document === 'undefined' || typeof window === 'undefined') return; function init() { if (document.getElementById('wa_float_btn')) return; var PHONE = '447944275939'; var MESSAGE = 'Hello!%20I'd%20like%20to%20get%20some%20help.'; var COLOR = '#25D366'; var AGENT = 'Orbi'; var TITLE = 'Customer Support'; var AVAIL = 'Typically replies in minutes'; var GREET = 'Talk to us on WhatsApp '; var LABEL = 'Start Chat'; var INITS = 'O'; var PATH = 'M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z'; var style = document.createElement('style'); style.textContent = [ '#wa_float{position:fixed;bottom:24px;left:24px;z-index:2147483647;font-family:Arial,sans-serif}', '#wa_float_btn{width:60px;height:60px;border-radius:50%;background:'+COLOR+';border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px rgba(0,0,0,.3)}', '#wa_float_popup{display:none;position:absolute;bottom:72px;left:0;width:300px;border-radius:16px;overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,.2);background:#fff}', '#wa_popup_head{background:'+COLOR+';padding:16px;color:#fff;display:flex;align-items:center;gap:12px}', '#wa_popup_av{width:44px;height:44px;border-radius:50%;background:rgba(0,0,0,.2);display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:14px;flex-shrink:0}', '#wa_popup_body{padding:16px;background:#f0f4f8}', '#wa_popup_bubble{background:#fff;border-radius:12px 12px 12px 4px;padding:12px 14px;font-size:14px;color:#333;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,.1)}', '#wa_popup_cta{width:100%;margin-top:12px;padding:13px;background:'+COLOR+';color:#fff;border:none;border-radius:10px;font-size:14px;font-weight:bold;cursor:pointer}', '#wa_popup_close{background:rgba(255,255,255,.2);border:none;color:#fff;width:28px;height:28px;border-radius:50%;cursor:pointer;font-size:18px;margin-left:auto;flex-shrink:0}' ].join(''); document.head.appendChild(style); var wrap = document.createElement('div'); wrap.id = 'wa_float'; var popup = document.createElement('div'); popup.id = 'wa_float_popup'; var head = document.createElement('div'); head.id = 'wa_popup_head'; var av = document.createElement('div'); av.id = 'wa_popup_av'; av.textContent = INITS; var info = document.createElement('div'); info.style.flex = '1'; info.innerHTML = '
'+AGENT+'
'+TITLE+'
'+AVAIL+'
'; var closeBtn = document.createElement('button'); closeBtn.id = 'wa_popup_close'; closeBtn.textContent = '×'; head.appendChild(av); head.appendChild(info); head.appendChild(closeBtn); var body = document.createElement('div'); body.id = 'wa_popup_body'; var bubble = document.createElement('div'); bubble.id = 'wa_popup_bubble'; bubble.textContent = GREET; var cta = document.createElement('button'); cta.id = 'wa_popup_cta'; cta.textContent = LABEL; body.appendChild(bubble); body.appendChild(cta); popup.appendChild(head); popup.appendChild(body); var mainBtn = document.createElement('button'); mainBtn.id = 'wa_float_btn'; mainBtn.innerHTML = ''; wrap.appendChild(popup); wrap.appendChild(mainBtn); document.body.appendChild(wrap); mainBtn.addEventListener('click', function() { popup.style.display = popup.style.display === 'block' ? 'none' : 'block'; }); closeBtn.addEventListener('click', function() { popup.style.display = 'none'; }); cta.addEventListener('click', function() { window.open('https://wa.me/' + PHONE + '?text=' + MESSAGE, '_blank'); popup.style.display = 'none'; }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();