Hidden Acres RV Park
A fast, accessible, SEO-optimized marketing site for Hidden Acres RV Park — a quiet RV park on Lake Lavon in Princeton, TX.
This is a showcase rebuild. The site was previously a Gatsby app carrying a deep npm dependency tree and dozens of security advisories. It's now a Hugo static site — a single Go binary with zero npm dependency tree — that compiles to plain HTML/CSS and is built to stay fast, secure, and nearly maintenance-free for years.
- Zero-dependency static architecture — no Node or npm tree to patch; almost nothing to keep secure
- Performance-first — ships ~no JavaScript (one tiny click-to-load map script), self-hosted fonts, and build-time responsive WebP images
- SEO & AI discovery — JSON-LD
Campground/RVPark+FAQPageschema, accurate geo, sitemap, robots, Open Graph, and a generated/llms.txtso AI assistants can recommend the park accurately - Accessibility — semantic landmarks, a single
<h1>, real alt text, keyboard support, and visible focus styles - Content/layout separation — every word lives in plain config/data files, so the owner updates text without touching templates
- CI/CD + testing — every push is built, link-checked, and SEO-asserted, then deployed to GitHub Pages
Everything you need to pick this back up, at a glance:
| To… | Do this |
|---|---|
| Change text (phone, rates, FAQs, photos…) | Edit a file in hugo.toml, content/, or data/ — see docs/EDITING.md |
| Preview your changes live | hugo server, then open http://localhost:1313 |
| Check nothing broke | ./test.sh |
| Publish | git commit + git push — GitHub rebuilds & redeploys automatically |
Routine updates never require touching the design or any code. On a new computer? See Getting started.
You almost never need to touch the design. Day-to-day content (phone number, rates, amenities, FAQs, photos, etc.) lives in a handful of plain text files.
👉 See docs/EDITING.md — a simple "I want to change X →
edit this file" guide with copy-paste examples. Start there.
You need the extended edition (it processes images). Pick your platform:
| Platform | Command |
|---|---|
| macOS (Homebrew) | brew install hugo |
| Windows (winget) | winget install Hugo.Hugo.Extended |
| Windows (Chocolatey) | choco install hugo-extended |
| Linux / other | https://gohugo.io/installation/ |
Confirm it worked (you should see +extended in the version):
hugo versionFrom the project folder:
hugo serverThen open http://localhost:1313 in your browser. The page reloads automatically as you edit files — great for checking text changes live.
Press Ctrl+C to stop.
hugo.toml Site settings — phone, address, links, etc. (edit me)
content/_index.md Hero headline + the "About" paragraphs (edit me)
data/ Lists: amenities, attractions, FAQs, gallery (edit me)
assets/ Photos, fonts, and the stylesheet (main.css)
static/ Files served as-is (PDF rules, favicon, redirects)
layouts/ The HTML templates (the design — rarely touched)
A fuller tour is in docs/ARCHITECTURE.md.
One command builds the site and validates it. Run it before you publish — and it runs automatically on every push and pull request:
./test.shIt does a strict build, validates HTML & links with
htmltest, then asserts the things a visitor
relies on — the Reserve / Waitlist / phone / email links, that every menu
item lands on a real section, the FAQ / mobile menu / map, alt text on
every image, safe new-tab links, and the SEO essentials. See
docs/TESTING.md for the full list and why each one matters.
The whole suite is zero-dependency (Hugo plus an optional Go binary — no Node). Install the optional link checker once:
go install github.com/wjdp/htmltest@latest⏳ Currently in Pages-preview mode. The site is live for stakeholder review at https://vijitsingh97.github.io/HiddenAcresRV/ (the GitHub Pages project URL), not yet on the real domain.
relativeURLsis on andstatic/CNAMEis removed so that URL renders correctly with no redirect. To cut over towww.hiddenacresrv.com:git revertthe "Pages-preview mode" commit (restoresCNAME+ absolute URLs), then set the custom domain in Settings → Pages and point DNS (below).
Pushing to the master branch triggers
.github/workflows/ci.yml, which builds the site,
validates it, and publishes it to GitHub Pages.
One-time setup: in the GitHub repo, go to Settings → Pages and set
Source = GitHub Actions. The custom domain is handled by
static/CNAME; point your DNS at GitHub Pages per
GitHub's custom-domain guide.
hugo --gc --minifyThe finished site is written to public/. Serve that folder with any static
host or web server.
Both auto-build Hugo from this repo with zero extra config:
- Build command:
hugo --gc --minify - Publish directory:
public - Environment variable:
HUGO_VERSION = 0.162.1(andHUGO_EXTENDED = trueon Netlify)
They also honor static/_redirects for the legacy URL
redirect and give you preview deploys on every pull request.
- Upgrade locally:
brew upgrade hugo(or your platform's equivalent). - Update the pinned version in
.github/workflows/ci.yml(HUGO_VERSION) so CI matches. - Run
./test.shto confirm everything still builds.
MIT. Originally a Gatsby site adapted from gatsby-absurd; rebuilt on Hugo in 2026.
