🚪 About Step Out

Step Out, and why I built it

Step Out is a hackathon project, built solo in a bit over three hours. It sketches what's going on in a place you've just arrived in, including the things that never make it onto a website. What ran when the clock stopped is still up, unchanged, at /hackathon/; the live site is a tidied-up version of it.

What it does

Type in a place and Step Out draws the whole board for it: activities, volunteering, courses, stalls, somewhere you can turn up and use, small grants, and more. You browse it by distance and by type. If you'd rather say something about yourself in plain language, the same board gets re-ranked into a shortlist, or into a step-by-step path, with a reason attached to each entry.

It works on any UK place you type. On the example boards every listing traces back to a named source you can go and check; a fresh sketch is Claude's guess, marked unverified and given a search link until a local confirms it. The two examples are Somers Town, which sits in the frozen hackathon build, and a Market Harborough sample that doubles as what you get when the day's searches run out.

There's also Snap, which reads a photo or a PDF of a board and turns it into entries — keeping the roles and stripping names, phone numbers and email addresses. On the live site you can watch it read a real chalkboard from the day. You can't feed it your own photo yet.

No accounts, nothing to sign up for.

How it's built

Static HTML Cloudflare Pages Cloudflare Worker Claude Haiku 4.5 Cloudflare KV Brave Search web fetch

Every page is static HTML on Cloudflare Pages. No framework and no build step, so a page opens straight from disk and still works offline. Anything that talks to Claude goes through a Cloudflare Worker on the same edge, which is where the API key lives.

browsecallsAI jobs/enrich · card linkshit: free · 0.3smisscandidatescache writeAnyone on the webno account, just visitsCloudflare Pagesthe static siteWorker: step-out-proxyholds the API keypins Haiku · rate-limitsClaudematcher · sketcherextraction · verifyKV: RATEdaily caps, per visitor + siteMCP · bring-your-own-agentdesigned, not built yetKV: LINKS cachea place searched onceBrave Searchfinds the card's linkconfirm · 1 Haiku callloads and on topic
amber path: finding a card's link, the cheap way dashed: designed, not built yet
One Worker on Cloudflare's edge holds the key and routes every live request. The AI jobs go to Claude and finding a link goes to Brave, so the model is only paid where it does the judging. A shared cache means a place is searched once and then loads free for everyone after it.

The full source is public on GitHub: github.com/thekashifnazir/step-out. The Worker, the enrichment code, and the 40-check eval battery are all there.

A few decisions I'd call out

  • The key never leaves the server. On the day it ran on my laptop with the key sitting in a file, which is fine on a laptop and not on a public page. The Worker holds it now, pins the model to Haiku 4.5 and clamps the token limits, so nobody can point an open demo at a big model. A CORS allowlist decides which sites can call it at all.
  • Two spending limits, with a soft landing when you hit them. Anything that actually calls a model, a match, a sketch, a fresh set of links, counts against about ten a day for each visitor and a daily total for the site as a whole. Reach either and you get canned answers from earlier live runs behind a banner, rather than an error or a surprise bill.
  • AI does the judging, a search engine does the finding. On the day, Claude searched the web for the page behind each opportunity, which was quick to build and paid a fee on every card. Now an ordinary Brave search finds the candidates and a single Claude call only confirms the best one loads and is on topic. A fresh board went from about $0.15 to about $0.03. Keeping AI for the part that needs judgement and a plain search engine for the part that never did is what keeps live use cheap enough to leave on for everyone.
  • Search a place once, then it's free and instant for everyone. Every verified link is written to a cache on Cloudflare's edge that all visitors share, so the next time anyone opens a board for the same place it comes back in a fraction of a second with no search and no model call at all. It saves money on repeat visits and makes the common case feel immediate, using the same edge store that holds the daily counts.
  • Snap is a demo on purpose. Vision calls are the costliest thing here and the easiest to abuse, so public upload is off and what's on the site is a real extraction rather than a mock-up of one.

What's next

An MCP server, so you run searches with your own Claude and your own key. That puts the cost with whoever's asking, which is the only way to lift the caps without me paying for everyone. I'm working it out on Moveset first, since an open connector needs rate-limiting of its own, and nothing is live on Step Out yet. Uploading your own photo to Snap waits on the same thing.

Who made it

I'm Kash, a Senior Technical Architect based in London.

My day job is cloud, AI strategy and enterprise modernisation, where I set direction and prove out ideas far more often than I write the code myself.

Step Out inverts that: one idea, one person, built end to end. I lean on AI heavily to do it and say so plainly, because it is the reason this exists at all. I've never been a career developer, and AI assistance is what closes the distance between designing a product and shipping one. The architecture and the judgement calls are mine.

🏁 Where this came from

Read the hackathon story

The three-hour afternoon it came out of — the numbers, and the original build preserved exactly as it stood at the end of the day.

The story and the frozen build →