Content is split by two audiences, patients and providers; referring physician content uses the /for-providers prefix and separate navigation
healthcare-sanity-starter — Next.js Business Template
By dock90
A Next.js + Sanity starter template for healthcare and life-sciences marketing sites, organizing content by two audiences—patients and referring physicians—with built-in form PHI notices, consent-gated analytics scripts, and medical review fields.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Form submissions go to a self-controlled webhook and are not stored or logged within the template; field keys that appear to be health data trigger a warning in Studio
An on-site consent dialog controls GA4 loading; track() accepts only a closed set of events, avoiding PII leakage from free-form strings
service and post support reviewedBy / reviewedAt medical review fields and output medical-related JSON-LD
Includes 10 document types and 8 blocks; routes cover home, services, providers, locations, blog, legal pages, and /studio
Provides scripts for seed, typegen, redirect import, URL parity checks, Vitest, Playwright + axe, Lighthouse CI, and more
Template Details
This is a Next.js + Sanity starter template for clinics, physician teams, and their agencies; the demo site is a fictional multi-specialty clinic, Wrenfield Health. The README states that its content model includes 10 document types (page, service, provider, location, post, person, faq, legalPage, redirect, settings) and 8 blocks (hero, richText, cta, cards, faqs, providers, locations, form). Pages are divided by two audiences, patients and providers; referring physician content lives under the /for-providers prefix and uses separate navigation. Form submissions go to a user-controlled webhook and are not stored or logged in this template; field keys that appear to be health data trigger a warning in Studio. Analytics scripts load GA4 only after authorization via an on-site consent dialog, and track() accepts only a closed set of events. Services and posts carry reviewedBy / reviewedAt fields and output them as bylines and structured data (Physician, MedicalClinic, FAQPage, BreadcrumbList). The README also lists routes, script commands, editing workflows, a document inventory, and explicitly excluded features (such as a page builder, insurance/jobs/news/events types, theme switching, third-party consent tools, GTM, chat widgets, map embeds, search, internationalization, authentication, and patient portal).
Is it right for your project?
Use Cases
- Building a marketing site for a clinic or multi-specialty team that routes content by patients and referring physicians
- Building service pages and article pages that require medical content review bylines and structured data
- Handling redirects and path consistency with import-redirects and check-url-parity when migrating from an old site
- Projects that need PHI notices and consent controls on forms and analytics scripts
- Agency projects that want to start with a fixed content model and a single implementation approach
Suitable For
- Healthcare marketing sites for clinics, physician teams, and their agencies
- Teams that accept a fixed content model and are willing to extend new types per the documentation
- Sites that need to distinguish content and navigation for patients and referring physicians
- Projects that use Sanity as the content source and accept the Next.js App Router
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, copy .env.example to .env.local and run npm install and npm run dev; by default it points to the public demo dataset
- 2
To use your own content, create a Sanity project, change the three NEXT_PUBLIC_SANITY_* variables, and run npm run seed (requires an editor token) or start from an empty dataset
- 3
You can also create the project with npx create-next-app -e https://github.com/dock90/healthcare-sanity-starter my-clinic
- 4
The README does not provide specific production deployment steps; it only lists Vercel as part of the stack and points to docs/DEPLOY.md
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; 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 full 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
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; you cannot judge based solely on the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur separate charges.
- Using your own content requires creating a Sanity project and changing the three NEXT_PUBLIC_SANITY_* environment variables; running npm run seed requires an editor token.
- Form submissions go to a user-controlled webhook; the template itself does not store or log form data, so you must provide your own receiving endpoint.
- GA4 loads only after the user authorizes via the on-site consent dialog, and analytics events can only use the closed event set.
- The stack depends on external services such as Cloudflare Turnstile and Vercel; you must confirm their accounts and costs before use.
- If Dock90 builds or migrates on your behalf, that is a paid service (fixed-price assessment, starting at $12k).
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
That's it. `.env.example` points at the public demo dataset, so the site renders Wrenfield Health immediately. To use your own content, create a Sanity project, change the three `NEXT_PUBLIC_SANITY_*` values, and run `npm run seed` (needs an editor token), or start from an empty dataset and open `/studio`.
Original README
- **PHI-safe forms.** Forms post to a webhook you control and are never stored or logged here. Field keys that look like health data (`dob`, `diagnosis`, `mrn`…) get a warning in the Studio that explains why. Turnstile, honeypot, accessible error states.
Original README
- **Consent-gated analytics.** An in-house consent dialog (necessary / analytics / marketing), no third-party CMP. GA4 loads only after consent. `track()` takes a closed union of events, there is no way to send a free-form string, so PII can't leak into analytics by accident.
Original README
Next.js 16 (App Router, TypeScript strict, React Compiler) · Sanity 6 with embedded Studio and TypeGen · `next-sanity` Live Content API · Tailwind 4 · Cloudflare Turnstile · Vitest · Playwright + axe · Lighthouse CI · Vercel.
Original README
https://github.com/dock90/healthcare-sanity-starter/blob/main/LICENSEhttps://github.com/dock90/healthcare-sanity-starter/blob/main/README.mdDock90 builds and migrates healthcare marketing sites on this stack. Fixed-price assessment, $12k → [dock90.io/assessment](https://dock90.io/assessment)
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-14. 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 · 85 / 100
- Technologies
- Next.js · React
- Website type
- Corporate Website · Starter
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-08-29
- Screenshot last checked
- 2026-10-14
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 Next.js 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.
Review declaration: codex-user-requested-batch-review-20261017 · 2026-10-16
Inspect the recorded source material
SHA-256: a35e78525b176669986c5adb625f7e55e761fc4486631734bf679bd59a91b77d
2026-10-14T23:58:15.116Z
Source file / repository# Healthcare Sanity Starter A small, opinionated Next.js + Sanity starter for healthcare and life-sciences marketing sites, for clinics, practices, and the agencies that build for them. [](https://github.com/dock90/healthcare-sanity-starter/actions/workflows/ci.yml)    [](https://starter.dock90.io) **Live demo:** [starter.dock90.io](https://starter.dock90.io), a fictional multi-specialty clinic, Wrenfield Health. The Studio is at [/studio](https://starter.dock90.io/studio). ## Why a healthcare starter Generic starters make you decide the same four things on every healthcare build. This one has decided them. - **Audience split.** Every page belongs to `patients` or `providers`. One dataset, one app, a `/for-providers` prefix, separate navigation. Referring physicians and patients stop getting each other's content. - **PHI-safe forms.** Forms post to a webhook you control and are never stored or logged here. Field keys that look like health data (`dob`, `diagnosis`, `mrn`…) get a warning in the Studio that explains why. Turnstile, honeypot, accessible error states. - **Consent-gated analytics.** An in-house consent dialog (necessary / analytics / marketing), no third-party CMP. GA4 loads only after consent. `track()` takes a closed union of events, there is no way to send a free-form string, so PII can't leak into analytics by accident. - **Medical review + medical JSON-LD.** `reviewedBy` / `reviewedAt` are first-class fields on services and posts, rendered as bylines and emitted as structured data alongside `Physician`, `MedicalClinic`, `FAQPage` and `BreadcrumbList`. Plus the things every site should have and most don't: WCAG 2.2 AA checked by axe in CI, Lighthouse budgets on every PR, a seeded accessibility statement, 44px targets, visible focus, reduced-motion respected. ## Quickstart ```bash git clone https://github.com/dock90/healthcare-sanity-starter && cd healthcare-sanity-starter cp .env.example .env.local && npm install npm run dev ``` That's it. `.env.example` points at the public demo dataset, so the site renders Wrenfield Health immediately. To use your own content, create a Sanity project, change the three `NEXT_PUBLIC_SANITY_*` values, and run `npm run seed` (needs an editor token), or start from an empty dataset and open `/studio`. `npx create-next-app -e https://github.com/dock90/healthcare-sanity-starter my-clinic` also works. ## What's in the box **10 document types.** That's the whole content model. | Type | What it is | |---|---| | `page` | Title, slug, audience, an ordered list of sections, SEO | | `service` | Service line or condition; body, FAQs, related providers, medical review | | `provider` | Clinician: credentials, headshot, specialties, accepting patients, locations | | `location` | Address, map point, phone, structured hours, providers | | `post` | Article with author, medical reviewer and review date | | `person` | Author / reviewer | | `faq` | Question, answer, category | | `legalPage` | Privacy, terms, accessibility statement, notice of privacy practices | | `redirect` | Old path → new path, compiled into the build | | `settings` | Singleton: org, contact, nav per audience, default SEO, GA4 ID, consent copy | **8 sections.** `hero` · `richText` · `cta` · `cards` · `faqs` · `providers` · `locations` · `form`. One renderer, keyed by `_type`, exhaustive. **Routes.** `/` and `/for-providers` (pages by audience) · `/providers/[slug]` · `/locations/[slug]` · `/services/[slug]` · `/blog/[slug]` · `/legal/[slug]` · index pages for each · `/studio` · `/sitemap.xml` · `/robots.txt`. **Scripts.** | Command | Does | |---|---| | `npm run seed` | Loads the Wrenfield Health demo (idempotent) | | `npm run typegen` | Extracts the schema and regenerates `sanity/types.ts` | | `npm run import-redirects -- file.csv` | CSV → `redirect` documents | | `npm run check-url-parity -- --old https://old --new https://new` | Old sitemap vs. new host; exit 1 on any broken path | | `npm test` · `npm run e2e` · `npm run lhci` | Vitest · Playwright smoke + axe · Lighthouse budgets | **Editorial.** Draft/publish, live preview from the Studio's Presentation tool (Vercel Draft Mode), on-publish revalidation, Studio grouped as *Pages by audience · Clinical · Content · Site*. **Docs.** [`docs/DESIGN.md`](docs/DESIGN.md) (tokens + contrast table) · [`docs/COMPLIANCE.md`](docs/COMPLIANCE.md) (what this does and doesn't do about PHI, in plain language) · [`docs/MIGRATION.md`](docs/MIGRATION.md) (launch checklist) · [`docs/ADDING-A-TYPE.md`](docs/ADDING-A-TYPE.md) (a new document type in 20 minutes) · [`docs/DEPLOY.md`](docs/DEPLOY.md) · [`docs/DECISIONS.md`](docs/DECISIONS.md). ## What's deliberately not in it No page builder with forty modules. No insurers, jobs, press or events types (each is a 20-minute add; the doc shows how). No theme switcher, dark mode, icon library or component library. No third-party consent tool, no GTM, no chat widget, no map embed. No search, no i18n, no authentication, no patient portal. There is one way to do each thing. If you disagree, fork it; that's the point: the starter encodes a method, not options. ## Stack Next.js 16 (App Router, TypeScript strict, React Compiler) · Sanity 6 with embedded Studio and TypeGen · `next-sanity` Live Content API · Tailwind 4 · Cloudflare Turnstile · Vitest · Playwright + axe · Lighthouse CI · Vercel. ## Further reading The [healthcare website migration playbook](https://www.dock90.io/playbook) explains the method this starter encodes, one question per chapter. The chapters behind the starter's pieces: - [Should you migrate at all?](https://www.dock90.io/playbook/should-you-migrate): the scorecard to run before starting. - [What are you actually migrating?](https://www.dock90.io/playbook/what-you-are-actually-migrating): the inventory behind `docs/MIGRATION.md` "four weeks out". - [How do you model content for a multi-audience healthcare site?](https://www.dock90.io/playbook/content-modeling-for-healthcare-sites): the schema in `sanity/schema/`, and `docs/ADDING-A-TYPE.md`. - [How do you migrate a healthcare site without losing its search traffic?](https://www.dock90.io/playbook/redirects-and-seo-preservation): `import-redirects` and `check-url-parity`. - [What is a healthcare marketing site allowed to collect?](https://www.dock90.io/playbook/forms-phi-consent-analytics): `docs/COMPLIANCE.md`, `lib/consent.ts`, `lib/track.ts`. Or [every chapter on one page](https://www.dock90.io/playbook/all). ## Need it built for you? Dock90 builds and migrates healthcare marketing sites on this stack. Fixed-price assessment, $12k → [dock90.io/assessment](https://dock90.io/assessment) ## License MIT © [Dock90](https://dock90.io). The "Built with" footer link is optional; it's one line in `components/layout/Footer.tsx`.
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
