A calm, content-rich Astro template for an independent neighborhood dental practice.
Practice is a static multi-page website for Porchlight Family Dental, a fictional independent practice in Portland’s Maplewood neighborhood. It gives prospective patients a clear path from understanding available care to requesting an appointment or calling the team.
The homepage introduces three focused services, a four-step first-visit walkthrough, practice details, and honest frequently asked questions. Each service has a directly loadable detail route with local-search metadata, service context, safety-conscious copy, and a configurable booking handoff.
- Homepage plus direct-load routes for family dentistry, restorative care, and urgent visits
- Four-step first-visit walkthrough designed to reduce uncertainty and dental anxiety
- Centralized practice name, address, phone, email, hours, and booking URL
- Markdown content collection for service copy, metadata, and service-specific FAQs
Dentist,Service, andFAQPagestructured data- Honest appointment-request language with working
tel:andmailto:handoffs - Responsive layouts for desktop, tablet, 390px mobile, and 320px narrow screens
- Language: TypeScript
- Framework: Astro 7
- Build tool: Astro
- Styling: Custom responsive CSS
- Content: Astro content collections with Markdown
- Node.js 22.12 or newer
- npm
npm installnpm run devOpen the local URL printed by the development server.
npm run dev— start the local development servernpm run build— type-check and create a production buildnpm run lint— run ESLintnpm run preview— preview the production build locally
practice/
├── public/
│ └── favicon.svg
├── src/
│ ├── assets/images/
│ ├── components/
│ ├── content/services/
│ ├── data/site.json
│ ├── icons/
│ ├── layouts/
│ ├── pages/services/
│ ├── styles/
│ ├── types/
│ └── content.config.ts
├── preview/
├── astro.config.mjs
├── eslint.config.js
├── package.json
└── tsconfig.json
Edit src/data/site.json for the practice name, description, contact details, address, opening hours, social proof, and appointment-request URL. Edit the Markdown files in src/content/services/ for service copy, service metadata, and FAQs. Homepage-only copy and FAQs live in src/pages/index.astro.
Edit src/styles/global.css for the color tokens, typography stacks, spacing, layouts, rounded arch treatment, and responsive breakpoints.
Local images live in src/assets/images/ and are imported by src/pages/index.astro and src/pages/services/[service].astro. Portrait or vertical images at least 1200px wide work best with the arched crops.
Photography was downloaded from Pexels and stored locally:
- https://www.pexels.com/photo/3845983/
- https://www.pexels.com/photo/3845981/
- https://www.pexels.com/photo/3779705/
- https://www.pexels.com/photo/5355903/
- https://www.pexels.com/photo/6812556/
The homepage is composed in src/pages/index.astro. Service pages are generated by src/pages/services/[service].astro from Markdown entries in src/content/services/. Shared header, FAQ, first-visit, and booking UI live in src/components/. Collection validation lives in src/content.config.ts.
This project does not require environment variables.
npm run build
npm run previewProduction files are written to dist/.
- Thumbnail:
preview/practice-thumbnail.png - Full page:
preview/practice-homepage.png