Next.jsReact企业官网启动器

healthcare-sanity-starter — Next.js 企业官网模板

作者 dock90

面向医疗与生命科学营销站点的 Next.js + Sanity 起始模板,按患者与转诊医生两类受众组织内容,内置表单 PHI 提示、同意后加载的分析脚本与医疗审阅字段。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

3 个预览视图
桌面端首页1 / 3
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 3

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-14查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

内容按 patients 与 providers 两类受众拆分,转诊医生内容使用 /for-providers 前缀与独立导航

02

表单提交到自控 webhook,不在模板内存储或记录;疑似健康数据字段键在 Studio 中触发警告

03

站内同意对话框控制 GA4 加载,track() 只接受封闭事件集合,避免自由字符串导致 PII 外泄

04

service 与 post 支持 reviewedBy / reviewedAt 医疗审阅字段,并输出医疗相关 JSON-LD

05

包含 10 种文档类型与 8 种区块,路由覆盖首页、服务、医生、地点、博客、法律页与 /studio

06

提供 seed、typegen、redirect 导入、URL 一致性检查、Vitest、Playwright + axe、Lighthouse CI 等脚本

模板详细介绍

这是一个面向诊所、医生团队及其代理机构的 Next.js + Sanity 起始模板,演示站点为虚构的多专科诊所 Wrenfield Health。README 说明其内容模型包含 10 种文档类型(page、service、provider、location、post、person、faq、legalPage、redirect、settings)和 8 种区块(hero、richText、cta、cards、faqs、providers、locations、form),页面按 patients 与 providers 两类受众划分,转诊医生内容位于 /for-providers 前缀下并使用独立导航。表单提交到使用者自控的 webhook,不在本模板中存储或记录;字段键若疑似健康数据会在 Studio 中给出警告。分析脚本需经站内同意对话框授权后才加载 GA4,track() 仅接受封闭事件集合。服务与文章带有 reviewedBy / reviewedAt 字段,并以署名和结构化数据(Physician、MedicalClinic、FAQPage、BreadcrumbList)输出。README 同时列出路由、脚本命令、编辑工作流、文档清单以及明确不包含的功能(如页面构建器、保险/招聘/新闻/活动类型、主题切换、第三方同意工具、GTM、聊天组件、地图嵌入、搜索、国际化、认证、患者门户)。

Next.js企业官网启动器

适合你的项目吗?

适用场景

  • 为诊所或多专科团队搭建按患者与转诊医生分流的营销站点
  • 需要医疗内容审阅署名与结构化数据的服务页、文章页建设
  • 从旧站迁移时使用 import-redirects 与 check-url-parity 处理重定向与路径一致性
  • 在表单与分析脚本上需要 PHI 提示与同意控制的项目
  • 希望以固定内容模型和单一实现方式启动的代理机构项目

适合人群

  • 面向诊所、医生团队及其代理机构的医疗营销站点
  • 接受固定内容模型、愿意按文档扩展新类型的团队
  • 需要按患者与转诊医生区分内容与导航的站点
  • 使用 Sanity 作为内容源并接受 Next.js App Router 的项目

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    克隆仓库后复制 .env.example 为 .env.local 并执行 npm install、npm run dev;默认指向公开演示数据集

  2. 2

    使用自有内容需创建 Sanity 项目,修改三个 NEXT_PUBLIC_SANITY_* 变量,并运行 npm run seed(需要 editor token)或从空数据集开始

  3. 3

    也可通过 npx create-next-app -e https://github.com/dock90/healthcare-sanity-starter my-clinic 创建项目

  4. 4

    README 未提供生产部署的具体步骤,仅列出 Vercel 作为技术栈的一部分,并指向 docs/DEPLOY.md

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 使用自有内容需创建 Sanity 项目并修改三个 NEXT_PUBLIC_SANITY_* 环境变量;运行 npm run seed 需要 editor token。
  • 表单提交到使用者自控的 webhook,模板本身不存储或记录表单数据,需自行提供接收端点。
  • GA4 仅在用户通过站内同意对话框授权后才加载,分析事件只能使用封闭事件集合。
  • 技术栈依赖 Cloudflare Turnstile 与 Vercel 等外部服务,使用前需自行确认其账号与费用。
  • 如需 Dock90 代为搭建或迁移,属于付费服务(固定价格评估,$12k 起)。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

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`.

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.

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.

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.

README 原文

Dock90 builds and migrates healthcare marketing sites on this stack. Fixed-price assessment, $12k → [dock90.io/assessment](https://dock90.io/assessment)

README 原文
https://github.com/dock90/healthcare-sanity-starter/blob/main/LICENSEhttps://github.com/dock90/healthcare-sanity-starter/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-14。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 85 / 100
技术栈
Next.js · React
网站类型
企业官网 · 启动器
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-08-29
截图检查日期
2026-10-14

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: codex-user-requested-batch-review-20261017 · 2026-10-16

查看当时使用的来源资料

SHA-256: a35e78525b176669986c5adb625f7e55e761fc4486631734bf679bd59a91b77d

2026-10-14T23:58:15.116Z

来源文件 / 仓库
# 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.

[![CI](https://github.com/dock90/healthcare-sanity-starter/actions/workflows/ci.yml/badge.svg)](https://github.com/dock90/healthcare-sanity-starter/actions/workflows/ci.yml)
![Next.js 16](https://img.shields.io/badge/Next.js-16-black) ![Sanity 6](https://img.shields.io/badge/Sanity-6-f03e2f) ![MIT](https://img.shields.io/badge/license-MIT-green)

[![Wrenfield Health demo home page](docs/screenshot.png)](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`.
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。