Modern static site built with Astro + Tailwind CSS, deployed to GitHub Pages.
# 1. Create the Astro project (run once)
npm create astro@latest . -- --template minimal
npm install
# 2. Add integrations
npx astro add tailwind
npx astro add sitemap
# 3. Start dev server
npm run dev
# → http://localhost:4321hutley-vansystems/
├── .github/
│ └── workflows/
│ └── deploy.yml # Auto-deploy to GitHub Pages on push to main
├── public/
│ ├── robots.txt
│ ├── favicon.png # TODO: Add favicon
│ └── images/ # Static images (logos, team photos, etc.)
├── src/
│ ├── components/
│ │ ├── SEO.astro # Meta tags, OG, JSON-LD — used in every layout
│ │ ├── Header.astro # Site header + nav
│ │ └── Footer.astro # Site footer
│ ├── content/
│ │ └── blog/ # Blog posts as .md files
│ ├── data/
│ │ ├── config.ts # Site-wide config (phone, address, nav links)
│ │ └── locations.ts # Location page data (10 FL cities)
│ ├── layouts/
│ │ └── BaseLayout.astro # HTML shell used by all pages
│ └── pages/
│ ├── index.astro # Homepage
│ ├── get-a-quote.astro # Quote form (Formspree)
│ ├── about.astro
│ ├── testimonials.astro
│ ├── gallery.astro
│ ├── locations/
│ │ ├── index.astro # Locations overview
│ │ └── [city].astro # Dynamic — generates 10 location pages
│ ├── services/
│ │ ├── local-moves.astro
│ │ ├── long-distance.astro
│ │ ├── corporate-relocation.astro
│ │ ├── storage.astro
│ │ ├── logistics.astro
│ │ └── auto-transport.astro
│ └── blog/
│ ├── index.astro # Blog listing
│ └── [...slug].astro # Dynamic blog post pages
├── astro.config.mjs
├── CLAUDE.md # Full project context for Claude AI sessions
└── README.md
| Command | Action |
|---|---|
npm run dev |
Start local dev server at localhost:4321 |
npm run build |
Build production site to ./dist/ |
npm run preview |
Preview production build locally |
Create a new .md file in src/content/blog/:
---
title: "Your Post Title"
description: "SEO meta description"
pubDate: 2024-06-01
author: "Hutley Van Systems Team"
tags: ["moving tips", "Orlando"]
---
Your content here in markdown...Add a new object to src/data/locations.ts — the [city].astro template handles the rest automatically.
Edit src/data/config.ts — changes propagate site-wide.
- Push repo to GitHub
- Go to Settings → Pages
- Set Source to GitHub Actions
- The
deploy.ymlworkflow handles everything on push tomain
Point your domain to GitHub Pages:
Type: CNAME
Name: www
Value: yourusername.github.io
Or for apex domain, add A records:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
Then add your domain in Settings → Pages → Custom domain.
- Submit sitemap to Google Search Console:
https://hutleyvansystems.com/sitemap-index.xml - Claim Google Business Profile at business.google.com
- Verify site in Google Search Console
- Add OG image to
/public/images/og-image.jpg(1200x630px) - Add favicon to
/public/favicon.png - Set
formspreeIdinsrc/data/config.ts
- Sign up free at formspree.io
- Create a new form
- Copy the form ID
- Set
formspreeIdinsrc/data/config.ts