Fifteen Sites, One Summer
A progress report on building and deploying fifteen live websites in under two months — what got built, why it went fast, and what I'd tell anyone trying to do the same.
The scoreboard
Since mid-June, fifteen sites have gone from empty folder to live domain. Every one of them is deployed on Netlify, every one has its own custom domain, and every one was verified live before it made the index. They break down into five categories:
- Four B2B sales & marketing tools — sales-team auditing (AuditSales), automated SEO and Google Ads audits (AuditDemand), pipeline automation (AutomateSales), and a social agency site (Sold on Social).
- Three marketplaces — a dual-intent car marketplace where one listing can sell or rent (List Your Car), a private film-location index where homes are listed by code name (List Your Space), and a free curbside-giveaway board (We Pay for Junk).
- Three directories — bilingual steel-roofing contractors across Canada (Eco Steel Roofing), takeout filtered by values like halal, vegan and zero-waste (Guilt Free Takeout), and Prince Edward County wineries (County Wine Tour).
- Three consumer apps — delivery tracking and warranty filing (Love Your Package), market news scored by revenue impact (Quiplee), and photo-pinned travel maps (Ritual Rollers).
- Two services & guides — a counselling practice (Hope & Love) and an interactive SEO field guide for rental companies (SEO for Rentals).
This site — the index you're reading it on — is the sixteenth deploy.
Why it went fast
The honest answer is ruthless sameness. Almost every decision that could be made once, for all sites, was made once:
- Static first, no build step. Most of the sites are plain HTML, CSS and vanilla JavaScript published straight from the repo root. No bundler, no framework, no build pipeline to babysit. When a site genuinely needed app behaviour — the audit tools, the takeout directory, the travel maps — it got Next.js. Not before.
- One deploy target. Everything ships to Netlify with
the same
netlify.tomlshape: publish from root, security headers on every route,must-revalidatecaching on assets so fixes go live instantly, serverless functions only where a feature demands them. - Prototype with what's in the browser. List Your Car
runs its entire dual-intent flow — listing, browsing, bidding inquiries, a
dashboard inbox — on
localStoragestanding in for a backend. That's a full end-to-end product validation without a server bill. - SEO plumbing from day one. Every site launches with a sitemap, a robots.txt, canonical URLs and real meta descriptions. It's boring, it takes ten minutes, and it means nothing has to be retrofitted when a prototype becomes a product.
Lessons from the trenches
Three things I'd flag for anyone shipping at this pace:
- Launch dark, flip the switch later. We Pay for Junk
went live with sample data behind a
noindexheader and a disallow-all robots.txt. It stayed invisible to search until this week, when the switch was flipped deliberately. Shipping early doesn't have to mean indexing early. - Know exactly what your deploy uploads. CLI deploys
don't care about your
.gitignore— if a file is in the publish directory, it ships. Internal strategy docs belong outside the publish tree, and forced 404 rules are worth adding as a backstop. Netlify splats only match at the end of a path, so a rule like/*.mdquietly does nothing. - Verify live, not local. Every claim on the index — fifteen sites, all returning 200 — comes from actually requesting every domain, not from assuming a deploy worked. The one time that check was skipped mid-process, it caught something worth catching.
What's next
The prototypes with sample data get real data. The sites with waitlists get their first users. And the index gets updated as new builds go live — it's a build log now, not a museum.
If you want the running list, it lives at b2bhighlights.com. If you want to talk about how any of it was built — or want something like it built for you — that's what Click Shift Marketing does.