Private Practice Toolkit
Website

Building the practice website

A practice site has one job: turn a visitor who's already curious (from a referral, a directory, or a search) into a booked consultation. Plain, fast, and clear beats beautiful and slow.


What every practice site needs


Path A: Template builder (most people)

Squarespace, Wix, or your EHR's built-in website.

Path B: A fast custom static site

What I use for my own practice. It makes sense if you, or someone helping you (including an AI coding assistant), are comfortable with a code editor and GitHub.

Layer Choice Why
Framework Astro (static output) Pre-renders plain HTML; almost no JavaScript shipped to visitors
Styling Tailwind CSS Fast to write; consistent design tokens
Content Markdown and YAML files in the repo, no content management system (CMS) Edit a text file, push, done. Nothing to log into or keep patched.
Hosting Cloudflare Pages Free for a site this size; auto-deploys on every push to GitHub; global content delivery network (CDN)
DNS & email auth Cloudflare DNS (domain name system) Same dashboard as hosting; see email domain authentication
Quality checks TypeScript checks, ESLint and Prettier, Playwright tests with axe accessibility checks Catches broken pages and accessibility problems before they go live

Worth copying regardless of stack

Security headers. On Cloudflare Pages, a _headers file in the site root sets them for every page:

/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  Permissions-Policy: camera=(), microphone=(), geolocation=()
  Strict-Transport-Security: max-age=31536000; includeSubDomains
  Content-Security-Policy: default-src 'self'; img-src 'self' data:; frame-ancestors 'none'; base-uri 'self'

(Loosen the Content-Security-Policy if you embed a scheduler, video, or analytics; each needs its domain allowed.)

Structured data. A small JSON-LD block tells Google you're a local health practice, with name, address or service area, and phone. Search "schema.org MedicalBusiness JSON-LD example."

Images. Serve modern formats (WebP/AVIF) sized to each screen. Astro's image component does this automatically; on a template builder, resize photos to about 2,000px wide before uploading.

Accessibility. Real text rather than text in images, alt text on photos, sufficient color contrast, and full keyboard use. It also helps search engine optimization (SEO).

Old links. Replacing an old site? Redirect old URLs to their new equivalents so referral and directory links keep working.


Launch checklist