All templates

I built 480 websites for local businesses and sold zero. Here is exactly what I got wrong.

July 2026 · a build log, not a success story

Over a weekend we generated 480 personalized demo websites for real local businesses in Chile: dentists, lawyers, garages, vets, bakeries, gyms. Not mockups. Each one is a live URL with that business's name, city and phone number already in it, one click from a WhatsApp button.

Then we made zero dollars.

This post is the part nobody writes: what the build actually cost, why it did not convert, and the piece of the system we should have written first.

The setup

The premise was simple, and it is still correct: a local business with a phone number listed and no website at all is the cleanest possible prospect for a web project. You are not competing with an existing site. You are not asking them to switch. You are showing them the thing that does not exist yet.

So we pulled a list of businesses from open map data, filtered for has phone AND no website, matched each one to an industry template, and injected the real business name, city and phone into the HTML. One command, 480 sites, all published.

Cost itemActual
Templates (15 industries)Generated locally on our own GPU
Hosting for 480 sites$0 (static, edge CDN free tier)
Lead list$0 (open data)
Time to generate + publishOne command, a few minutes
Revenue$0

Mistake 1: we optimized the half that was already easy

Generating a site per business is a for loop. Once the generator existed, going from 41 to 480 businesses cost nothing — so we kept doing it, because it felt like progress and the number went up.

It was not progress. 480 published sites and 0 messages sent is worth exactly the same as 0 published sites. The asset only turns into money at the moment someone reads a message from you. We spent days on the part that scales for free and zero on the part that does not scale at all.

Mistake 2: one generic message for every industry

The first outreach draft said the same thing to a dentist and to a sandwich shop: "it looks good on mobile and it has a WhatsApp button."

Nobody buys a website because it is responsive. They buy it because of a specific fear. Once we wrote the message per industry, it stopped being about the site:

"Right now, when someone searches dentist in Maipú, you don't come up — and they end up booking with the practice down the street that does."

Same product, same price, completely different conversation. The dentist is not buying HTML, they are buying the patient they are currently losing every week. The lawyer is buying credibility before the first call. The garage is buying the guy who chose the other garage because he could not find a phone number.

Mistake 3: no answer to the four things they always say

Cold outreach does not fail at "hello". It fails at reply #2, and the reply is always one of the same handful:

  1. "How much?" — if you dodge this, you are done. Give the number, then the reason it is that number.
  2. "That's expensive." — it is one job. Never discount on demand; trade the discount for something (pay upfront, permission to use the work as a reference).
  3. "I already have Instagram." — Instagram is where people who already know you look you up. A site is where people who don't know you find you. They are not the same channel.
  4. "I'll think about it." — this is not a no, it is a "not now". It is also where 90% of freelancers quietly stop. Most of the deals we have seen close on the second or third touch, days apart.

We had none of these written down. We were going to improvise the exact conversation that decides whether money moves.

Mistake 4: we almost shipped things that would have burned the pitch

Things we caught only because we opened the live pages one by one instead of trusting the code:

Any one of those, in the first message to a real business, and the pitch is dead on arrival.

What we would do in a different order

Write the outreach before you write the generator. If you cannot say, in two sentences, why this specific kind of business is losing money today without a site — and what you will answer when they say "that's expensive" — then building 480 sites just gives you 480 ways to be ignored faster.

  1. Pick one industry with a real ticket (dental, legal, real estate — not a corner café).
  2. Write the first message, the three follow-ups, and the four objection answers. On paper. Before any code.
  3. Build ten demos. Send ten messages, by hand, one at a time.
  4. Only then automate — and only the part that ten messages proved was worth automating.

Sending one-by-one is not a limitation, it is the whole point: blasting the same text at 480 numbers gets your WhatsApp banned, and burns the list you spent the weekend building.

Honest scoreboard

Sites built: 480. Live and verified: 480. Messages sent: still ramping. Revenue so far: $0. We are not going to dress that up with a screenshot of someone else's Stripe dashboard.

The lesson is not "don't automate". It is that the generator is the cheap half, and we built the cheap half first because it was the fun one.

If you want the same setup without repeating the mistakes: we packaged both halves — the Node generator (leads CSV in, one finished site per business out, 15 industry templates included) and the outreach scripts (first message per industry, the 8 objections answered word for word, the 3-touch follow-up, pricing, delivery checklist).

They are sold together because separately they don't work: that is the entire point of this post.

Local Client System — $59

Or the halves alone: generator, $49 · outreach scripts, $19. Instant download, 14-day refund, no questions.

Live examples of the generated demos, so you can judge the output yourself: a garage, a restaurant. Each one carries a visible notice that it is a proposal, and noindex, so we never compete with the business we are pitching.