Internal
0
Unworked leads
0
Demos built
0
Demos sent
0
Active deals
0
Closed / sold

Top prospects

Highest-priority leads right now

Pipeline

Full sales funnel
Prospect0
Demo sent0
Negotiating0
Closed0

All leads

Business Category City Phone Status Demo URL Notes

Unworked leads

0
Business Category City Phone Address Quality Maps

How this works

Quick reference

The workflow

Find a local business with no website → build a tailored demo in 24h → deploy it live → contact the owner with a link → sell it.

Step 1 — Find leads

Use the clientsearch tool to find businesses in a city and category that have no website.

python3 /Users/martingest/WebDesign/clientsearch/main.py --category "barbershop" --city stockholm

Results are saved as CSV in clientsearch/results/{country}/{city}/{category}/

Step 2 — Build a demo

Create the demo folder from the CSV. The script picks the right template and fills in tokens automatically.

python3 /Users/martingest/WebDesign/demos/manage.py new --from-csv ../clientsearch/results/sweden/stockholm/barbershop/2026-04-10.csv --row 0

Then open the generated index.html and customise the copy, services, and colours for the specific business. Translate to Swedish for Stockholm leads.

Step 3 — Deploy

python3 /Users/martingest/WebDesign/demos/manage.py deploy sweden/stockholm/barbershop/my-slug

Gets a live URL at https://{slug}.pages.dev — completely free on Cloudflare.

Step 4 — Contact

Reach out with the link. Keep it short and personal.

Email — EN

Subject: I built [Business Name] a website

Hi, my name is Martin — I run a small web design studio in Stockholm. I noticed [Business Name] doesn't have a website, so I went ahead and built one for you. It's live right now at [URL]. Take a look — no obligation.

Martin · Gest Studio · [email protected]

Email — SV

Ämne: Jag har byggt en hemsida till [Företagsnamn]

Hej, jag heter Martin och driver en liten webbyrå i Stockholm. Jag såg att [Företagsnamn] inte har någon hemsida, så jag byggde en åt er. Den är live just nu på [URL]. Ta en titt när du har en stund.

Martin · Gest Studio · [email protected]

Phone — EN

"Hi, is this [Business Name]? My name is Martin, I run a web design studio. I noticed you don't have a website so I went ahead and built one for you — it's already live. Can I send you the link? No cost to look, no obligation."

If hesitant → "I'll just text you the link, you can check it whenever."

Phone — SV

"Hej, är det [Företagsnamn]? Jag heter Martin och driver en webbyrå i Stockholm. Jag såg att ni inte har någon hemsida så jag byggde en åt er — den är redan live. Kan jag skicka länken? Det kostar ingenting att titta."

Om tveksam → "Jag skickar länken som ett SMS, ni kan kolla när ni har en stund."
python3 /Users/martingest/WebDesign/demos/manage.py status sweden/stockholm/barbershop/my-slug contacted

Step 5 — Follow up

If interested, negotiate. If sold, mark it and record the price.

python3 /Users/martingest/WebDesign/demos/manage.py sold sweden/stockholm/barbershop/my-slug 499

Pipeline stages

demo_built — site built, not yet contacted
contacted — sent the link
interested — they replied positively
negotiating — discussing price
sold — closed ✓
rejected / no_answer — move on

Client domains

The $350 price includes a domain. Buy it yourself through Cloudflare Registrar — it's at cost (~$10/year for .com). Then attach it to their Cloudflare Pages project:

~/.npm-global/bin/wrangler pages domain add <project-name> <domain.com>

Cloudflare handles SSL automatically. The domain shows up in their project within a few minutes.

Buying the domain

Go to dash.cloudflare.com → Domain Registration → Register Domains. Search for the business name. Avoid hyphens if possible. Prefer .com for US clients, .se for Swedish (buy .se through Loopia instead — Cloudflare doesn't support it).

Pointing a Loopia domain at Cloudflare Pages

For Swedish clients with a .se domain bought on Loopia: in Loopia DNS, add a CNAME record pointing to {slug}.pages.dev. Then run the wrangler command above. SSL still auto-provisions.

When the client is sold

If they want to take over the domain themselves, initiate a transfer out from Cloudflare Registrar (or Loopia). Takes ~10 minutes. For most clients this never comes up — they're happy to let you renew it annually as part of a maintenance arrangement.

Refresh this dashboard

After adding or updating demos, regenerate the data file and redeploy.

python3 /Users/martingest/WebDesign/portfolio/generate-admin-data.py && source ~/.zshrc && ~/.npm-global/bin/wrangler pages deploy /Users/martingest/WebDesign/portfolio --project-name gest-studio

Outreach scripts

Select a category and language — copy the script before you call.

Subject
Body