内容按 patients 与 providers 两类受众拆分,转诊医生内容使用 /for-providers 前缀与独立导航
healthcare-sanity-starter — Next.js 企业官网模板
作者 dock90
面向医疗与生命科学营销站点的 Next.js + Sanity 起始模板,按患者与转诊医生两类受众组织内容,内置表单 PHI 提示、同意后加载的分析脚本与医疗审阅字段。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
表单提交到自控 webhook,不在模板内存储或记录;疑似健康数据字段键在 Studio 中触发警告
站内同意对话框控制 GA4 加载,track() 只接受封闭事件集合,避免自由字符串导致 PII 外泄
service 与 post 支持 reviewedBy / reviewedAt 医疗审阅字段,并输出医疗相关 JSON-LD
包含 10 种文档类型与 8 种区块,路由覆盖首页、服务、医生、地点、博客、法律页与 /studio
提供 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、聊天组件、地图嵌入、搜索、国际化、认证、患者门户)。
适合你的项目吗?
适用场景
- 为诊所或多专科团队搭建按患者与转诊医生分流的营销站点
- 需要医疗内容审阅署名与结构化数据的服务页、文章页建设
- 从旧站迁移时使用 import-redirects 与 check-url-parity 处理重定向与路径一致性
- 在表单与分析脚本上需要 PHI 提示与同意控制的项目
- 希望以固定内容模型和单一实现方式启动的代理机构项目
适合人群
- 面向诊所、医生团队及其代理机构的医疗营销站点
- 接受固定内容模型、愿意按文档扩展新类型的团队
- 需要按患者与转诊医生区分内容与导航的站点
- 使用 Sanity 作为内容源并接受 Next.js App Router 的项目
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
克隆仓库后复制 .env.example 为 .env.local 并执行 npm install、npm run dev;默认指向公开演示数据集
- 2
使用自有内容需创建 Sanity 项目,修改三个 NEXT_PUBLIC_SANITY_* 变量,并运行 npm run seed(需要 editor token)或从空数据集开始
- 3
也可通过 npx create-next-app -e https://github.com/dock90/healthcare-sanity-starter my-clinic 创建项目
- 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 原文
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)
README 原文
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. [](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`.
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

ai-website-cloner-template
Clone any website with one command using AI coding agents
Next.js · 启动器

Next.js SaaS Starter
Next.js SaaS Starter 是 Next.js 官方维护的 SaaS 起点模板,定位介于学习资源和可直接部署的脚手架之间。
Next.js · SaaS

Next.js Commerce
Next.js Commerce 是 Vercel 团队维护的电商启动模板,基于 Next.js App Router 构建,采用服务端渲染、React Server Components、Server Actions …
Next.js · 电商

Next-js-Boilerplate
Next-js-Boilerplate 是一个面向 Next.js 16、Tailwind CSS 4 和 TypeScript 的启动器,核心定位是开发者体验优先。
Next.js · 启动器

tailwind-nextjs-starter-blog
tailwind-nextjs-starter-blog 是一个面向个人技术博客的 Next.js 与 Tailwind CSS 启动模板,其 v2 版本基于 App Router 与 React Server Comp…
Next.js · 博客

next-forge
Production-grade Turborepo template for Next.js apps.
Next.js · 启动器
