AstroCorporate Website

astro-chalet — Astro Business Template

By M4xKey

An Astro static website template for local businesses, with all copy and business information centralized in a single configuration file. It includes built-in LocalBusiness and FAQPage structured data, a sitemap, and robots.txt, and by default loads no cookies or third-party requests.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-02View source

What stands out

A quick read of the recorded project description.

01

All copy, contact details, opening hours, services, reviews, FAQ, and legal information are centralized in the single configuration file src/config/site.ts; components contain no hardcoded text

02

Generates LocalBusiness and FAQPage JSON-LD from the configuration, and outputs canonical, Open Graph, Twitter cards, sitemap, and robots.txt

03

By default sets no cookies, makes no third-party requests, uses no web font CDN, and embeds no maps; includes privacy policy and legal notice pages

04

The homepage consists of nine independently addable or removable sections: Hero, Services, About, Gallery, Reviews, CtaBanner, Faq, PracticalInfo, Contact

05

The contact form supports a mailto fallback, external endpoints such as Formspree/Basin, or a self-hosted backend, and includes a honeypot anti-spam field with a configurable field name

06

Colors and typography are controlled uniformly through CSS variables in src/styles/tokens.css; components do not use raw color values directly

Template Details

Chalet is an Astro website template for local businesses such as bakeries, restaurants, guesthouses, hair salons, and workshops. Its core design centralizes all copy and business data in a single file, src/config/site.ts: identity information, contact details, opening hours, services, reviews, FAQ, hero copy, legal information, and UI strings all live here, with no hardcoded text inside components. The homepage consists of nine independently addable or removable sections, including hero, service cards, about, gallery, reviews, CTA banner, FAQ accordion, practical information (opening hours table, address, map navigation link), and contact form. For SEO, the template generates schema.org/LocalBusiness and FAQPage JSON-LD from the configuration, and outputs canonical, Open Graph, Twitter cards, sitemap, and robots.txt. For privacy, it sets no cookies by default, makes no third-party requests, uses no web font CDN, and embeds no maps, and it includes privacy policy and legal notice pages. Styling is controlled through CSS variables in src/styles/tokens.css for palette and typography; components do not use raw color values directly. The contact form behavior is determined by SITE.contact.endpoint: when left empty, it shows a mailto button; when filled with an address such as Formspree or Basin, it can submit directly, or it can point to a self-hosted backend. The form includes a honeypot field to block bots. For language, each site supports one language, set via SITE.lang, and the repository includes a complete French example. The build output is static HTML, using system fonts and inline SVG icons, with the mobile menu driven by a very short script.

AstroCorporate Website

Is it right for your project?

Use Cases

  • Building a showcase website for a local business such as a bakery, restaurant, guesthouse, hair salon, or workshop
  • A single-page site where Google should read structured data for opening hours, address, and FAQ
  • A static site with EU privacy compliance requirements that wants to avoid cookie banners and third-party requests
  • Projects driven by a single configuration file, making it easy for non-developers to later edit copy and business information
  • Single-language sites such as French, using the example in examples/french-bakery/ as a reference

Suitable For

  • Owners of small local service businesses or developers building sites for them
  • Technical choices that prefer static output and low-maintenance websites
  • Projects that need built-in local SEO structured data and privacy-compliant defaults
  • Teams that accept one language per site and deploy multiple sites for multilingual needs

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Use the repository as a template or clone it, then run npm install. Development requires Node >= 22.12. npm run dev starts by default at http://localhost:4321, and npm run build generates a static site into dist/

  2. 2

    Edit src/config/site.ts to fill in identity, contact details, opening hours, services, reviews, FAQ, hero copy, legal information, and UI strings

  3. 3

    Adjust colors and typography in src/styles/tokens.css; after changing colors, verify contrast yourself. A set of alpine color examples is included in the comments

  4. 4

    Replace the SVG placeholders under public/images/ with real photos (AVIF/WebP recommended, no more than 200 KB each), and update the sitemap address in public/robots.txt to the real domain

  5. 5

    For the contact form, enter a Formspree/Basin address or a self-hosted backend endpoint in SITE.contact.endpoint; if left empty, a mailto button is shown. After deploying to Vercel, Netlify, or any static host, it is recommended to validate structured data with the Rich Results Test and submit /sitemap-index.xml in Google Search Console

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version in the public repository under the MIT license; the free scope is the code of that version and does not mean external services or third-party assets are free.

Must comply with when using

  • You may use, modify, commercialize, and distribute the code of this version for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the complete MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • For the contact form to actually submit, you need to enter the address of a third-party form service such as Formspree or Basin in SITE.contact.endpoint, which is an external service dependency; if left empty, only a mailto button is shown.
  • You can also point the form to a self-hosted backend endpoint, but you must provide a service that can receive traditional form POSTs; the template itself contains no backend.
  • Each site supports only one language; multilingual sites require two separate configurations and deployments. Native i18n routing is not yet implemented and is only on the roadmap.
  • The images in the repository are SVG placeholders and must be replaced with real photos, keeping file sizes in mind; the template does not provide directly commercially usable image assets.
  • The privacy policy and legal notice pages are generic text and must be adjusted for your jurisdiction; they do not constitute a legal compliance guarantee.
  • The README mentions the Formspree form service; real submissions require configuring a service endpoint, and its usage quotas and fees must be checked separately.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domain, hosting, database, payment, or AI may incur additional charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

A **Formspree/Basin URL** — the form works immediately, no backend.

Original README

**Your own backend** — any endpoint accepting a classic form POST.

Original README

One language per site (set `SITE.lang`). For a bilingual site, the simplest route today is two deployments with two config files; native i18n routing is on the roadmap.

Original README

replace the SVG placeholders with real photos (keep the same file names or update the paths in `site.ts`). Recommended: AVIF/WebP, ≤ 200 KB each.

Original README

adapt the prose to your jurisdiction (French versions in `examples/french-bakery/`).

Original README
https://github.com/M4xKey/astro-chalet/blob/master/LICENSEhttps://github.com/M4xKey/astro-chalet/blob/master/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 83 / 100
Technologies
Astro
Website type
Corporate Website
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-07-16
Screenshot last checked
2026-10-02

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Astro as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: a456568fb30f27703ad1b5cd4f8586badf339b8c615202957f3d15176a0fdd00

2026-10-02T16:52:04.309Z

Source file / repository
# Chalet 🏔️

**The Astro theme for local businesses.**

Built in the Chamonix valley and battle-tested on real small-business sites,
Chalet gets a bakery, restaurant, guesthouse, salon or workshop online in a
day — with the local SEO and privacy boxes already ticked.

> **One config file. Local SEO built in. GDPR-ready. No cookies, no trackers,
> (almost) no JavaScript.**

[Live demo](https://astro-chalet.vercel.app) · [Changelog](CHANGELOG.md) · MIT license

![Chalet theme screenshot](docs/screenshot.png)

## Why Chalet?

Most themes are built for startups and portfolios. Local businesses have
different needs: show up on Google Maps, publish opening hours that Google can
read, collect quote requests, and stay on the right side of EU privacy rules —
all without a maintenance burden.

- **Everything is one file.** All copy, contact details, opening hours,
  services, reviews, FAQ and legal info live in `src/config/site.ts`.
  Components contain zero hard-coded text.
- **Local SEO that actually works.** `schema.org/LocalBusiness` and `FAQPage`
  JSON-LD generated from your config, canonical URLs, Open Graph, Twitter
  cards, sitemap and robots.txt.
- **GDPR-friendly by default.** No cookies, no third-party requests, no web
  font CDN, no embedded maps. Privacy policy and legal notice pages included.
  For most brochure sites this means **no cookie banner needed**.
- **Fast by design.** Static HTML, system fonts, inline SVG icons, one ~10-line
  script for the mobile menu. Built to score ~100 across Lighthouse.
- **Designed to sell.** Dramatic dark hero with trust badges, aggregate
  review score computed from your reviews, hover micro-interactions and
  pure-CSS scroll reveals (zero JavaScript, reduced-motion friendly).
- **Any language.** Every UI string is in the config too — translate one file
  to ship the site in French, German, Italian... A complete French example is
  included in [`examples/french-bakery/`](examples/french-bakery/).
- **Accessible.** Skip link, visible focus states, reduced-motion support,
  WCAG AA color contrast, semantic markup.

## Quick start

```bash
# Use this repo as a template (or clone it), then:
npm install     # Node >= 22.12
npm run dev     # http://localhost:4321
npm run build   # generates the static site in dist/
```

## Make it yours — checklist

1. **`src/config/site.ts`** — the ONE file. Identity, contact details,
   opening hours, services, reviews (copied from your Google profile), FAQ,
   hero copy, legal info, UI strings.
2. **`src/styles/tokens.css`** — the palette and typography. Colors are named
   by role; an alternative "alpine" palette ships in a comment so you can see
   how re-theming works. Check contrast if you change colors
   ([WebAIM checker](https://webaim.org/resources/contrastchecker/)).
3. **`public/images/`** — replace the SVG placeholders with real photos (keep
   the same file names or update the paths in `site.ts`). Recommended:
   AVIF/WebP, ≤ 200 KB each.
4. **`public/robots.txt`** — set the sitemap URL to your real domain.
5. **`src/pages/index.astro`** — reorder or remove sections (one line each).
6. **`src/pages/legal-notice.astro` / `privacy-policy.astro`** — adapt the
   prose to your jurisdiction (French versions in `examples/french-bakery/`).
7. **Deploy** — Vercel, Netlify or any static host: import the repo, the
   framework is auto-detected. Then plug in your domain.

## Sections

Nine modular sections, assembled in `src/pages/index.astro`:

| Section | What it does |
|---|---|
| `Hero` | First screen: eyebrow, headline, two CTAs, LCP-optimized image |
| `Services` | 3–6 cards with inline SVG icons (see `Icon.astro` to add your own) |
| `About` | The story of the business — text + photo |
| `Gallery` | Lazy-loaded image grid with a gentle hover zoom |
| `Reviews` | Google reviews with SVG star ratings + link to the profile |
| `CtaBanner` | Accent-colored banner with one clear call to action |
| `Faq` | Native `<details>` accordion + FAQPage JSON-LD for rich results |
| `PracticalInfo` | Opening hours table + address + Google Maps directions link |
| `Contact` | Form with honeypot anti-spam, or mailto fallback |

## The contact form

`SITE.contact.endpoint` controls the behavior:

- `""` (default) — no broken form: a prominent **mailto button** is shown.
- A **Formspree/Basin URL** — the form works immediately, no backend.
- **Your own backend** — any endpoint accepting a classic form POST. The
  hidden honeypot field (name configurable via `contact.honeypotField`) lets
  your backend silently reject bots that fill it in.

## SEO after launch

- Validate the structured data with the
  [Rich Results Test](https://search.google.com/test/rich-results) —
  LocalBusiness and FAQPage should both be detected.
- Declare the site in Google Search Console and submit `/sitemap-index.xml`.
- Add the site URL to the business's Google Business Profile.

## FAQ

**Why system fonts instead of a nice web font?**
Zero download = faster first paint, and no Google Fonts CDN request (which EU
courts have ruled a GDPR issue). To use a brand font, self-host it with
`@font-face` + `font-display: swap` and update `--font-heading`/`--font-body`
in `tokens.css`.

**Where do I change the colors?**
`src/styles/tokens.css` — ten CSS variables re-theme the whole site.
Components never use raw color values.

**Can I use it for a client project?**
Yes — MIT license. Attribution appreciated, never required.

**Does it support multiple languages on one site?**
One language per site (set `SITE.lang`). For a bilingual site, the simplest
route today is two deployments with two config files; native i18n routing is
on the roadmap.

## License

[MIT](LICENSE) © 2026 Antoine Grange.
Built in Chamonix-Mont-Blanc, at the foot of the mountain. 🥖
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.