Work / Perrone Pest & Green
Perrone Pest & Green
A one-person business with a paper card and nothing online gets a site built to be found on Google and to be called from in one tap.
In short
- Problem
- A pest-control and tree-care business in Gaeta had no website, no Google profile, no social page. For its searches, Google’s first page was almost all aggregator portals.
- Decision
- No WordPress, no forms, no prices. A static site with one page per service and one per town, where every page ends in a phone call or a WhatsApp message.
- Result
- Live after about five weeks of spare time. Lighthouse 100 / 100 / 100 / 100 on mobile and desktop. The only running cost is the domain names, about €11 a year each.
At a glance
- For
- A pest-control and tree-care business in Gaeta
- What changed
- From no online presence to a live site people can call from
- My part
- Everything: research, brand audit, specification, build with Claude Code, QA
- Stack
-
- Astro
- CSS
- Cloudflare Pages
- Git
No client-side JavaScript
- When
- August–September 2026 · about five weeks, in spare time
- Links
Context
A one-person business with two branches, pest control and tree care, run by a graduate in animal production and food safety. The owner wanted one path: Google search, then a call or a WhatsApp message, then a deal. The budget was the minimum possible. I did everything, working with Claude.
- Domain and email
- Google Business Profile
- Business card and offline channels
- Gathering materials
- Building the site
- Going live and technical SEO
- Ongoing growth
Problem
There was nothing to redesign: a paper business card and no website, Google profile or social page. Searching “disinfestazioni” plus Gaeta, Formia, Fondi or Itri returned almost only aggregator portals; the one established local competitor showed no reviews, no prices and no WhatsApp. Fondi, Itri, Sperlonga and Terracina had no strong local business online at all. Whoever arrived first with a real site would take the area.
- The email belongs to another business
- No website, no WhatsApp
- Two services missing: rodent control and sanitising
- No call to action
Exploration
Three domain names, written down with reasons. The keyword-first one was the easiest to say on the phone. The owner did not want to be known only for pest control, so we tried an acronym, which nobody could read aloud. The third kept the brand and stayed pronounceable. The domain name barely matters for ranking today, so this was his branding decision, with one rule kept: a single canonical domain, never changed. Two keyword domains were registered as well and redirect to it. The positioning came from the research: the graduate technician from your area, open where competitors show nothing.
-
perronedisinfestazioni.it
keyword-first
- for
- The easiest to say on the phone
- against
- Known only for pest control
-
perronepgs.it
brand-first, acronym
- for
- Not only pest control
- against
- Nobody can read it aloud
-
perronepestgreen.it Chosen
brand-first, spelled out
- for
- Kept the brand and stayed pronounceable
He chose perronepestgreen.it: brand-first, but you can say it on the phone. Keyword-first tied him to one branch; the acronym was unreadable.
Solution
The key decision
Every page ends in a call.
Principle: Don’t make me think — one obvious next step on every page (Steve Krug, Don’t Make Me Think).
No prices and no forms: the people who need this service are between 35 and 70, often in an emergency, and they call. So every page ends in “free inspection and quote”, a phone number and WhatsApp, and on a phone the call bar is always on screen. Real opening hours instead of a “24/7” promise. One page per service and one per town, each written for that town so that no two read alike.
Build
The palette comes from the business card and was checked against WCAG with a script before any page existed. Gold on white came out at 2.4:1, so gold is decoration only. The usual white text on WhatsApp green came out at 1.98:1, so the button uses dark text at 8.0:1. Type is the system font stack: no font files, no extra requests, no layout shift, and body text never below 17 px because many customers are older. Four documents were written before the code: operating rules, specification, content, deployment. Claude Code built from those. The main branch is production, so every change goes through a branch, a pull request and a preview, and a hook blocks direct pushes.
| Pair | Ratio | Use |
|---|---|---|
| white / cream on forest green | 12.2 / 11.3:1 | text on dark sections |
| ink on cream / white | 14.7:1 | body text |
| gold on forest green | 5.1:1 | details and headings on a dark ground |
| white on mid green | 5.05:1 | the call button |
| forest green on WhatsApp green | 6.2:1 | the WhatsApp button: dark text and icon, not white |
| white on WhatsApp green | rejected | |
| gold on white / cream | rejected for text: borders and decoration only |
What the AI did
- The whole site, from scratch. Static Astro, about twenty pages: home, services, town pages, contacts and privacy. Every page has its own data for Google (title, description, schema.org) and the Call and WhatsApp buttons with the message already written. The town pages have different content for each place, so as not to be penalised as copy-paste pages. In production Lighthouse gives 100 on mobile on all four scores.
- Going live. The deploy on Cloudflare Pages and the main domain,
perronepestgreen.it. The www and the two secondary domains redirect there with a 301. Previews are kept out of Google, and the logo was rebuilt in SVG from the business cards. - The safeguards and the documentation. Two independent locks stop a push to main from publishing by mistake: Claude’s hook and git’s pre-push. Then
STATO.mdandDEPLOY.md, so that every session picks up without having to rebuild the story.
What I decided
- Nothing goes online until I have seen it. Since 9 September the work is always on a branch, a pull request and a preview, and I do the merge. The safeguards in the AI’s third point turn this rule of mine into code.
- The rules for photos:
- two photos side by side always have the same height;
- a single photo stays whole, like Fulvio pruning;
- a photo never fills the screen: the full width on a phone, half on a tablet, a third on wide screens.
- Gaps are designed, not suffered. That is where option B for the grids comes from: the last row widens instead of leaving a card on its own. So does the rule that I am shown a comparison whenever a human eye is needed.
The AI built the site and made it safe. I decided how it goes online and how it should look.
Measured: WhatsApp button 8.0:1 · touch targets 44 px · Lighthouse accessibility 100
Result
The specification asked for Lighthouse 95 or more on mobile, on all four scores. The live site measures 100 on all four, on mobile and desktop. Before launch, a scripted audit of every page built at the time found 18 of 18 compliant: unique title and description, canonical, one H1, valid structured data, call and WhatsApp links everywhere. No two town pages are more than 75% alike. The only running cost is three domain names on OVH, about €11 a year each; hosting, DNS and analytics are free.
| Measure | Target | Measured |
|---|---|---|
| Performance | ≥ 95 | 100 |
| Accessibility | ≥ 95 | 100 |
| Best practices | ≥ 95 | 100 |
| SEO | ≥ 95 | 100 |
| LCP on mobile | — | 1.8 s |
| CLS | — | 0 |
| blocking time | — | 0 ms |
What comes next
search queries, clicks and the first calls from the site, after the first weeks of Search Console data
What I would do differently
- Measure the clicks on the Call and WhatsApp buttons.
- Fewer pages, truer ones.
- Bet on recurring B2B work.
- Register
perronedisinfestazioni.ittoo, as a redirect, because “pest green” is hard to spell out over the phone.