(function(){ var h=document.getElementById("cc-header"); if(!h) return; var b=h.querySelector(".cc-burger"); function set(open){h.classList.toggle("cc-open",open);b.setAttribute("aria-expanded",open?"true":"false");b.setAttribute("aria-label",open?"Close menu":"Open menu");} b.addEventListener("click",function(){set(!h.classList.contains("cc-open"));}); h.querySelectorAll(".cc-nav a").forEach(function(a){a.addEventListener("click",function(){set(false);});}); document.addEventListener("keydown",function(e){if(e.key==="Escape")set(false);}); })();
For founders and businesses planning custom software

Send me your idea. In 48 hours, click through it.

Answer a few questions about what you want to build. If it's a fit, I'll turn the core journey into a clickable prototype with your name on it, so you can see it before you spend anything on the build.

How it works

From five sentences to something you can click, in three steps.

01

Tell me your idea

A few short questions about what you want to build and who uses it. Under a minute.

02

I build the core journey

If it's a fit, I turn the main flow into 3–4 clickable screens with your name and colours, within 48 hours.

03

We walk through it

A 20-minute call to click through your prototype and talk honestly about what it would take to make it real.

What I've built

Platforms where people, workflows and money meet.

There's a good chance I've already solved something close to your problem.

Marketplace

My Matter

A regulated legal marketplace with multi-party Stripe Connect payments between clients, solicitors and the platform.

On-demand platform

Vehicle recovery dispatch

An Uber-style platform connecting stranded drivers with recovery operators.

Trading platform

Marine Trader

A platform bringing buyers and sellers together in one place.

Learning platform

Training provider LMS

A learning platform that helped a training provider take £32k in its first month.

3 years at Infosys delivering for FedEx, Virgin Media and Ralph Lauren
MSc Computer Science, Queen Mary University of London
The honest bit

I've learned the hard way what makes software projects fail.

Not every project I've delivered went smoothly. Every lesson is now part of how I run builds, so you don't pay for it on yours.

Read the full stories on LinkedIn
A portal planned for three months took seven.Now every build starts with a paid discovery and a signed scope.
A marketplace build was paid late and in pieces.Now each stage is paid before the next one begins.
A brilliant result still ended in endless revisions.Now design direction is agreed first, with two clear revision rounds.
The full path

The prototype is the first step, not the build.

It's a quick way to show you I understand your idea before you commit to anything. Here's exactly what comes after, so there are no surprises.

STEP 1 · NO COST

Prototype

3–4 clickable screens of your core journey within 48 hours, if your project is a fit.

STEP 2 · NO COST

Walkthrough call

20 minutes to click through it together and talk honestly about cost, timeline and risks.

STEP 3 · PAID

Discovery sprint

1–2 weeks: full scope, user flows and a fixed quote. Credited against the build if you go ahead.

STEP 4 · FIXED QUOTE

The build

Led by me, built by my team, paid in milestones with sign-off at every stage.

Not ready yet? You'll still get a rough price range and honest advice on your next step.

Get your prototype

Tell me about your idea.

This isn't a free build. It's a quick way for me to show you I understand your idea before you commit to anything. Under a minute to fill in.

What budget have you set aside for the build?
When would you like to start?
Your idea stays yours. I never share what you send me.

Questions

Is this a free build?

No. The prototype is a few clickable screens of your core journey, with no backend. It's there to show you I've understood your idea so you can decide whether to work together. The real work starts with a paid discovery sprint.

Do I keep ownership of my idea?

Yes. Your idea stays yours, and I never share what you send me.

Is the prototype the finished product?

No. It's the front of your core journey, with no backend, so you can see and feel it before committing to a build.

What happens after the call?

If you want to go further, the next step is a paid discovery sprint: full scope, user flows and a fixed quote, credited against the build. No pressure if you don't.

(function () { // ▼▼ EASIEST: get a free access key at web3forms.com (just enter your email) and paste it here ▼▼ var WEB3FORMS_KEY = "d9661c35-de03-4a35-b9f0-fb3f3f7a694f"; // ▼▼ OR: paste any other endpoint (Formspree, Make/Zapier webhook). Leave both empty to test without sending. ▼▼ var FORM_ENDPOINT = ""; var root = document.getElementById("cc-proto"); if (!root) return; var answers = {}; // Pill groups: one choice per group root.querySelectorAll(".cc-pills").forEach(function (group) { var key = group.getAttribute("data-group"); group.querySelectorAll(".cc-pill").forEach(function (pill) { pill.addEventListener("click", function () { group.querySelectorAll(".cc-pill").forEach(function (p) { p.setAttribute("aria-pressed", "false"); }); pill.setAttribute("aria-pressed", "true"); answers[key] = pill.textContent.trim(); }); }); }); function send(stage) { var payload = { stage: stage, name: root.querySelector("#cc-name").value.trim(), email: root.querySelector("#cc-email").value.trim(), idea: root.querySelector("#cc-what").value.trim(), budget: answers.budget || "", timing: answers.timing || "", decision: answers.decision || "", funding: answers.funding || "", page: window.location.href, sentAt: new Date().toISOString() }; var url = FORM_ENDPOINT; if (WEB3FORMS_KEY) { url = "https://api.web3forms.com/submit"; payload.access_key = WEB3FORMS_KEY; payload.subject = (stage === "step1" ? "New prototype request from " : "Extra details from ") + (payload.name || "website visitor"); payload.from_name = "Coding Chamber website"; } if (!url) { console.log("Coding Chamber form (no endpoint set):", payload); return Promise.resolve(); } return fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "Accept": "application/json" }, body: JSON.stringify(payload) }).catch(function (e) { console.warn("Form send failed", e); }); } function show(id) { ["cc-step1", "cc-step2", "cc-thanks"].forEach(function (s) { root.querySelector("#" + s).hidden = (s !== id); }); var el = root.querySelector("#" + id); el.scrollIntoView({ behavior: "smooth", block: "center" }); } // Step 1: validate, send, move on root.querySelector("#cc-step1").addEventListener("submit", function (e) { e.preventDefault(); var err = root.querySelector("#cc-err1"); var name = root.querySelector("#cc-name").value.trim(); var email = root.querySelector("#cc-email").value.trim(); var idea = root.querySelector("#cc-what").value.trim(); var missing = []; if (!name) missing.push("your name"); if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) missing.push("a valid email"); if (!idea) missing.push("what you want to build"); if (!answers.budget) missing.push("a budget"); if (!answers.timing) missing.push("when you'd like to start"); if (missing.length) { err.textContent = "Please add " + missing.join(", ") + "."; return; } err.textContent = ""; send("step1"); show("cc-step2"); }); // Step 2: optional extras function finish() { if (answers.decision || answers.funding) send("step2"); show("cc-thanks"); root.querySelector("#cc-thanks").focus(); } root.querySelector("#cc-finish").addEventListener("click", finish); root.querySelector("#cc-skip").addEventListener("click", finish); })();