A fast, mobile-first, SEO-friendly static website for a residential home inspection business serving the Philadelphia suburbs (Bucks, Montgomery & Delaware Counties, PA).
Built with plain HTML, CSS, and vanilla JavaScript — no frameworks, no build step, no backend, no database. It deploys for free on Cloudflare Pages, GitHub Pages, or Netlify.
site/
├── index.html # Home
├── services.html # Services
├── pricing.html # Pricing
├── service-areas.html # Service Areas
├── about.html # About
├── faq.html # FAQ (with FAQ rich-result schema)
├── contact.html # Contact + quote/booking form
├── styles.css # All styling (one shared file)
├── script.js # All interactivity (one shared file)
├── robots.txt # Search-crawler rules + sitemap pointer
├── sitemap.xml # List of pages for search engines
├── README.md # This file
└── assets/
├── logo.svg # Logo (placeholder)
├── favicon.svg # Browser tab icon (placeholder)
└── og-image.svg # Social-share preview image (placeholder)
There is no build process. The files you see are exactly what gets served.
Just double-click index.html to open it in your browser. For a more accurate preview (so links and the form behave like they will live), run a tiny local server from inside the site/ folder:
# Python 3 (built in on macOS)
python3 -m http.server 8080
# then open http://localhost:8080Every spot you need to edit is marked in the code with an EDIT: comment. Use your editor's "Find in all files" for the placeholder strings below.
| What | Placeholder to find | Where |
|---|---|---|
| Phone number | +12155550123 (link) and (215) 555-0123 (text) |
All .html |
hello@hendrixhomechecks.com |
All .html + script.js (FALLBACK_EMAIL) |
|
| Live domain | https://hendrixhomechecks.com |
All .html (canonical/OG), robots.txt, sitemap.xml |
| Business address | 123 Main Street / Doylestown / 18901 |
index.html (JSON-LD schema) |
| Hours | Mon–Fri 8am–6pm etc. |
Footer of each page, contact.html, index.html schema |
| Contact form endpoint | REPLACE_FORMSPREE_ID |
contact.html (<form action=...>) |
| Logo | assets/logo.svg |
replace the file |
| Favicon | assets/favicon.svg |
replace the file |
| Social share image | assets/og-image.svg |
replace the file (see §6) |
| Photos | files in assets/img/ |
replace the files (keep the same names) or update each <img src> |
| Map embed | map-placeholder block |
service-areas.html, contact.html |
| Prices | $349 / $419 / $499 |
pricing.html (and the FAQ answer in faq.html) |
| Towns served | town-list lists |
service-areas.html |
| Credentials / standards | InterNACHI Trained / Standards of Practice / Code of Ethics / "Licensed & Insured" badges | index.html, about.html |
Tip: When you change the phone or email, update it everywhere — it appears in the header, footer, hero, CTA bands, and the schema. A find-and-replace across all files is the safest way.
The form on contact.html works in two modes:
-
Out of the box (zero setup): when you submit, your visitor's email app opens, pre-filled with their details addressed to your email. This is handled automatically by
script.js. -
Recommended — free Formspree: so submissions are emailed to you without the visitor needing an email app:
- Create a free account at https://formspree.io.
- Create a form and copy your endpoint — it looks like
https://formspree.io/f/abcdwxyz. - In
contact.html, findaction="https://formspree.io/f/REPLACE_FORMSPREE_ID"and replaceREPLACE_FORMSPREE_IDwith your real ID. - Done — the form now posts to Formspree. (Formspree's free tier requires account setup and may show a confirmation step on the first submission. Also update
FALLBACK_EMAILinscript.jsto keep the backup mailto correct.)
The homepage currently shows an honest "Reviews Coming Soon" block — there are no fake testimonials anywhere on the site. When you start collecting real reviews:
- Set up / claim your Google Business Profile and gather genuine reviews.
- In
index.html, find thereviews-soonblock and replace it with real review cards (you can re-introduce a star + quote + name layout), and/or add a "Read Our Google Reviews" button linking to your Google profile (looks likehttps://g.page/r/XXXXXXXX). - Only publish real, verifiable feedback — never invented names, quotes, or ratings.
assets/og-image.svg is a placeholder. Some platforms (Facebook, LinkedIn, iMessage) don't render SVG previews. For best results:
- Export a 1200 × 630 px PNG or JPG.
- Save it as
assets/og-image.png. - In each page's
<head>, updateog:imageandtwitter:imagetohttps://yourdomain.com/assets/og-image.png.
With a GitHub repo (auto-deploys on every push):
- Push this
site/folder to a GitHub repository. - Go to the Cloudflare dashboard → Workers & Pages → Create → Pages → Connect to Git.
- Pick your repo. Set:
- Framework preset:
None - Build command: (leave blank)
- Build output directory:
/(orsiteif the repo root contains this folder)
- Framework preset:
- Save and Deploy. You'll get a free
*.pages.devURL.
Without Git (drag-and-drop):
- Cloudflare dashboard → Workers & Pages → Create → Pages → Upload assets.
- Drag the contents of the
site/folder in and deploy.
Custom domain: in your Pages project → Custom domains → add your domain and follow the DNS steps.
- Create a GitHub repository and push the contents of
site/to it (the.htmlfiles should be at the repo root). - In the repo: Settings → Pages.
- Under Build and deployment, set Source: Deploy from a branch, choose your branch (e.g.
main) and folder/ (root). Save. - Your site publishes at
https://<username>.github.io/<repo>/. - Custom domain: Settings → Pages → Custom domain, enter your domain, save (this creates a
CNAMEfile), then point your DNS at GitHub Pages.
Note: if you use a project URL like
username.github.io/repo/, the relative links here still work because they don't start with/. If you later move pages into subfolders, keep links relative.
- Log in at https://app.netlify.com.
- Drag the
site/folder onto the Sites area ("deploy manually"), or connect your Git repo with build command empty and publish directory set to the folder containing these files. - Add a custom domain under Domain settings if you like.
- Replace every
https://hendrixhomechecks.comwith your real domain (pages,robots.txt,sitemap.xml). - Submit
sitemap.xmlin Google Search Console. - Create / claim your Google Business Profile (huge for local "home inspector near me" searches) and add the review links.
- Test rich results with the Rich Results Test (LocalBusiness + FAQ schema are included).
- The site ships with royalty-free stock photos in
assets/img/; swap them for your own photos when available (optional) and keep thealttext accurate. - Confirm your InterNACHI training, license, and insurance status before publishing those badges (the "Licensed & Insured" badge in particular).
The site loads Fraunces and Inter from Google Fonts (free). If you'd rather not depend on a CDN, you can self-host them or swap to system fonts: in styles.css, change the --font-head and --font-body variables in :root, and remove the Google Fonts <link> tags from each page's <head>. The layout is built to degrade gracefully to Georgia/system-sans.
The photos in assets/img/ are royalty-free images from Unsplash, which allows free commercial use without attribution. They're bundled (self-hosted) so the site loads fast with no external image dependencies. You're free to keep them or replace them with your own photography at any time — just keep the filenames the same, or update the <img src> references.
Built as a hand-coded static site — yours to edit freely.