一条命令从 YAML 生成服务协议、NDA、范围问卷、启动文档和欢迎邮件五类文档
client-onboard-kit — HTML 企业官网模板
作者 waseemnasir2k26
一个基于 Python 的命令行工具,读取客户信息 YAML 后生成服务协议、NDA、需求问卷、启动文档和欢迎邮件,输出 Markdown 与可打印 HTML。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
每份文档同时输出 Markdown 与自带打印样式和 Save as PDF 按钮的独立 HTML
模板为带 Jinja2 占位符的普通 Markdown,可复制后通过 --templates 自定义
缺少必填字段时构建中止并指出字段名与模板名,避免输出带空缺的文档
支持 mutual 与 one_way 两种 NDA 模式,日期、货币与辖区通过配置切换
项目明确声明输出为模板而非法律建议,不构成任何辖区的合规认证
模板详细介绍
client-onboard-kit 把一份关于新客户的 YAML 简要信息转换为完整的客户入职文档包,包含服务协议、NDA、范围问卷、启动文档和欢迎邮件五类文档。每份文档同时输出 Markdown 和自带打印样式与“Save as PDF”按钮的独立 HTML 页面,并生成 index.html 作为入口。项目刻意不引入 PDF 库,依赖浏览器自身的打印功能导出 PDF。
配置通过 client-onboard-kit init 生成带注释的示例 YAML,涵盖 format、provider、client、engagement、commercial、legal、comms、onboarding、welcome 等区块。若模板引用了 YAML 中缺失的字段,构建会中止并指出缺失字段与对应模板,而不是输出带空缺的文档。日期字段支持 YAML 日期按 date_format 重排,也允许自由文本原样通过。
模板存放在 templates/ 目录,是带 Jinja2 占位符的普通 Markdown,可通过 --templates 指向自定义目录;还提供 money、date、pct、block、sentence 等过滤器以及 has()、opt() 辅助函数。Markdown 转 HTML 仅支持内置模板用到的子集,扩展语法需同步修改 markdown.py 并补测试。
项目明确声明这些是模板而非法律建议,未经过律师起草,也未针对任何司法辖区认证;责任上限、知识产权转让和逾期利息等条款在部分辖区可能无效。文档为英文、偏向普通法体系、面向 B2B 场景,不包含电子签名、发票、CRM 或提醒功能,也不输出 Word 或 Google Docs 格式。
适合你的项目吗?
适用场景
- 自由职业者或小型工作室在签约前批量准备客户入职文档
- 需要按不同客户快速调整服务范围、费用与付款条款的咨询类业务
- 希望先用模板起草、再交由律师审阅以降低起草成本的团队
- 需要同时保留可编辑 Markdown 与可打印 HTML 两种格式的文档流程
适合人群
- 与客户签订 B2B 服务协议的自由职业者和小型服务团队
- 希望用 YAML 集中管理客户与合同字段、避免手工复制粘贴的人
- 接受英文普通法风格模板、并计划交由律师复核的使用者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
需要 Python 3.11 及以上版本,依赖 Jinja2 与 PyYAML
- 2
可通过 pip install client-onboard-kit 安装,或在克隆仓库后执行 pip install -e .
- 3
先运行 client-onboard-kit init 生成示例 YAML,填写后再执行 build 输出到指定目录
- 4
导出 PDF 需在浏览器中打开生成的 HTML,使用页面上的 Save as PDF 按钮
- 5
自定义模板时复制 templates/ 目录并编辑,构建时用 --templates 指向新目录
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 生成的文档仅为模板,不构成法律建议,也非律师起草;使用前应由相关司法辖区的合格律师审阅。
- 文档未针对任何司法辖区认证;设置 legal.jurisdiction 只改变页面文字,并不代表在该地合规。
- 仅支持英文,不提供翻译或法律术语本地化。
- 起草风格与条款结构遵循英美普通法商业惯例,大陆法系辖区文档结构不同。
- 全程假设为 B2B 场景;面向消费者的业务涉及法定保护,本工具未予考虑。
- 不集成电子签名,需自行将 PDF 拿到已有签名服务处理。
- 不提供发票、CRM 或提醒功能,仅生成文档。
- 仅输出 Markdown 与可打印 HTML,不输出 Word 或 Google Docs 格式。
- Markdown 转 HTML 仅支持内置模板用到的子集,并非完整 CommonMark 实现。
- 部分条款在特定辖区可能无效或不可执行,尤其是责任上限、知识产权转让和逾期利息条款。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
**These are templates. They are not legal advice, and they were not drafted by a lawyer.**
README 原文
The documents are not certified for any jurisdiction.
README 原文
**English-language only.** No translations, no localisation of legal terminology.
README 原文
**Common-law flavoured.** The drafting style and clause structure follow English and US commercial practice.
README 原文
**Business-to-business assumptions throughout.** Consumer-facing engagements carry statutory protections that none of these documents account for.
README 原文
**No e-signature integration.**
README 原文
**No invoicing, no CRM, no reminders.** This produces documents. That is all it does.
README 原文
**No Word or Google Docs output.** Markdown and printable HTML only.
README 原文
**The Markdown-to-HTML converter is a subset**, not a full CommonMark implementation.
README 原文
https://github.com/waseemnasir2k26/client-onboard-kit/blob/main/LICENSEhttps://github.com/waseemnasir2k26/client-onboard-kit/blob/main/README.mdSome of these clauses will be void, unenforceable, or simply wrong in your jurisdiction, particularly the liability cap, the IP assignment and the late-payment interest rate
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-01。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 83 / 100
- 技术栈
- HTML
- 网站类型
- 企业官网
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-09-16
- 截图检查日期
- 2026-10-01
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 HTML。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
已完成服务器许可规则与 AI 来源核对;未经过人工编辑审核。
查看当时使用的来源资料
SHA-256: 9183a1e6e90809683d7f985c9a45aae61816de76d2f002a80a248f8428c44bf0
2026-10-01T04:27:25.111Z
来源文件 / 仓库# client-onboard-kit
One YAML brief about a new client turns into the whole first-week paperwork pack: service agreement, NDA, scoping questionnaire, kickoff doc and welcome email.
## Status
Last reviewed: September 2026 · release v2026.09
```console
$ client-onboard-kit init
Wrote client.example.yaml
Edit it, then run: client-onboard-kit build client.example.yaml --out ./pack
$ client-onboard-kit build client.yaml --out ./pack
Built 11 file(s) in pack
pack\service-agreement.md
pack\service-agreement.html
pack\nda.md
pack\nda.html
pack\intake-questionnaire.md
pack\intake-questionnaire.html
pack\kickoff.md
pack\kickoff.html
pack\welcome-email.md
pack\welcome-email.html
pack\index.html
Open pack\index.html and use the Save as PDF button in each document.
```




A real example pack, rendered for a completely fictional client, is committed at
[`examples/marlowe-and-finch/`](examples/marlowe-and-finch/).
## Quick start
```bash
pip install client-onboard-kit # or: pip install -e . from a clone
client-onboard-kit init # writes a commented client.example.yaml
cp client.example.yaml client.yaml # fill in your details and theirs
client-onboard-kit build client.yaml --out ./pack
open ./pack/index.html # then use the Save as PDF button
```
If a template needs a field your YAML does not have, the build stops and tells you
which field and which template, rather than shipping a document with a hole in it:
```console
$ client-onboard-kit build client.yaml --out ./pack
error: Missing required field 'legal.jurisdiction' in your config (needed by template
'service-agreement.md'). Run `client-onboard-kit init` to see a fully-populated example.
```
## What you get
| Document | What it is | What it prevents |
| --- | --- | --- |
| `service-agreement.md` | Scope, deliverables, timeline, fees, payment terms, late fees, revisions, change requests, IP assignment on final payment, confidentiality, termination, liability cap, governing law. | Scope creep with no price attached, and the argument about who owns the work. |
| `nda.md` | Mutual by default, one-way with a toggle. Purpose-limited, with carve-outs and a term. | Awkwardness about sharing real numbers and credentials before anything is signed. |
| `intake-questionnaire.md` | The scoping questions: decision-maker, success criteria, hard deadlines, out-of-scope confirmation, brand assets, access and credentials checklist, data handling. | Week-three change requests caused by a question nobody asked in week one. |
| `kickoff.md` | Agreed scope, milestone schedule, who approves what, channels and response times, and everything the client owes you with a date on it. | Unclear approvals, feedback arriving from four people at once, and credential chaos. |
| `welcome-email.md` | Short, warm, sets expectations, lists the next three actions. | The enthusiastic silence after signature where nothing actually happens. |
Every document is written to `./pack` twice: as Markdown, and as a self-contained HTML
page with a print stylesheet and a "Save as PDF" button. `index.html` links them all.
**There is no PDF library in this project, on purpose.** Every machine already has a
browser that prints to PDF correctly. Adding WeasyPrint or wkhtmltopdf would trade one
command for a system-library install that breaks differently on every OS, and would
render worse. Open the HTML, press the button, choose "Save as PDF".
## Configuration
`client-onboard-kit init` writes a fully-commented, fully-populated example. The blocks:
| Block | Holds |
| --- | --- |
| `format` | `date_format` (Python strftime), `currency_code`, `currency_symbol`, `currency_position` (`prefix` or `suffix`), `decimals`, `thousands_separator`. |
| `provider` | You: `legal_name`, `trading_name`, `company_number`, `contact_name`, `contact_title`, `email`, `phone`, `address`, `website`. |
| `client` | Them: `legal_name`, `short_name`, `contact_name`, `contact_title`, `email`, `address`, `website`. |
| `engagement` | `title`, `summary`, `start_date`, `end_date`, `revision_rounds`, and the lists `deliverables`, `milestones`, `out_of_scope`, `assumptions`. |
| `commercial` | `total_fee`, `deposit_percent`, `payment_terms_days`, `late_fee_percent_per_month`, `change_request_rate`, `change_request_unit`, `change_request_minimum_hours`, `expenses_policy`, `kill_fee_percent`. |
| `legal` | `jurisdiction`, `courts`, `termination_notice_days`, `confidentiality_term_years`, `ip_assignment_on_final_payment`, `liability_cap`, `portfolio_rights`, and the `nda` sub-block. |
| `legal.nda` | `include_in_pack`, `type` (`mutual` or `one_way`), `disclosing_party` (required only when `one_way`), `term_years`, `purpose`. |
| `comms` | `primary_channel`, `secondary_channel`, `response_time_hours`, `working_hours`, `timezone`, `weekly_checkin`, `approver_name`, `approver_title`, `approval_window_days`, `escalation_contact`. |
| `onboarding` | `questionnaire_due`, `client_owes`, `access_checklist`, `brand_assets`, `success_criteria`, `hard_deadlines`. |
| `welcome` | `signature_tool`, `next_actions`, `kickoff_call`. |
Three rules govern the file:
1. **Nothing is silently blanked.** If a template reaches for a field that is not there,
the build fails and names the field and the template.
2. **A branch you did not take costs you nothing.** `legal.nda.disclosing_party` is only
required when `legal.nda.type` is `one_way`, because validation happens as the
document renders, not by scanning the template for every name it mentions.
3. **Dates are flexible.** A YAML date (`2026-09-14`) is reformatted with your
`date_format`; free text (`on signature`) passes through untouched.
Switching jurisdiction, currency and date convention is a four-line edit:
```yaml
format:
date_format: "%B %d, %Y"
currency_code: USD
currency_symbol: "$"
legal:
jurisdiction: the State of Delaware, USA
courts: the state and federal courts located in Delaware
```
Useful flags:
```bash
client-onboard-kit build client.yaml --out ./pack --only welcome-email,kickoff
client-onboard-kit build client.yaml --out ./pack --format md
client-onboard-kit build client.yaml --out ./pack --templates ./my-templates
client-onboard-kit templates # what exists, and where it lives
```
## Customising the templates
The templates are data, not code. They live in [`templates/`](templates/) as plain
Markdown with Jinja2 placeholders:
```markdown
Invoices are payable within **{{ commercial.payment_terms_days }} days**.
{% if legal.portfolio_rights %}
The Provider may show the delivered work in its portfolio.
{% endif %}
{% for item in engagement.out_of_scope %}
- {{ item }}
{% endfor %}
```
Alongside the standard Jinja2 syntax there are these helpers:
| Helper | Does |
| --- | --- |
| `{{ amount \| money }}` | Formats using your `format` block: `£18,000.00`. |
| `{{ value \| date }}` | Formats a date, or passes free text through. |
| `{{ number \| pct }}` | `2` becomes `2%`. |
| `{{ text \| block }}` | Turns a multi-line YAML block (an address) into Markdown line breaks. |
| `{{ text \| sentence }}` | Upper-cases the first character only. |
| `{% if has('provider.phone') %}` | True when that dotted path exists and is not empty. |
| `{{ opt('client.website', 'n/a') }}` | Reads a dotted path with a fallback, for genuinely optional fields. |
To customise: copy `templates/` somewhere, edit, and pass `--templates ./my-templates`.
Adding a new document to the pack means adding a `Document(...)` entry in
`client_onboard_kit/render.py` next to the five that are already there.
The HTML converter supports the Markdown subset the shipped templates use: headings,
paragraphs, bold, italic, inline code, links, ordered and unordered lists, `- [ ]`
checkboxes, pipe tables, blockquotes, horizontal rules and HTML comments. If you extend
the templates past that, extend `client_onboard_kit/markdown.py` and add a test.
## Not legal advice
**These are templates. They are not legal advice, and they were not drafted by a lawyer.**
- Nobody here is your solicitor, attorney, or counsel, and using this tool does not
create any professional relationship.
- The documents are not certified for any jurisdiction. Setting `legal.jurisdiction` to
a place changes the words on the page; it does not make the document compliant there.
- No claim is made about enforceability, and no claim is made about compliance with any
statute, regulation or professional code, anywhere.
- Some of these clauses will be void, unenforceable, or simply wrong in your
jurisdiction, particularly the liability cap, the IP assignment and the late-payment
interest rate, which are the three most commonly regulated terms.
- Consumer contracts, employment-adjacent arrangements, regulated industries and
cross-border work all carry rules this tool knows nothing about.
**Have a qualified lawyer in the relevant jurisdiction review anything you intend to
sign or send.** A one-hour review of a document that is already 90% written is a great
deal cheaper than the same lawyer drafting from nothing, and that is the whole point of
this tool: it gets you to the review, not past it.
Every rendered document carries an HTML comment at the top saying the same thing. The
comment does not appear in the printed or PDF output, and the legal documents also show
a screen-only review banner in the HTML that is hidden when printed.
## Limitations
Being blunt about what this is not:
- **English-language only.** No translations, no localisation of legal terminology.
- **Common-law flavoured.** The drafting style and clause structure follow English and
US commercial practice. Civil-law jurisdictions structure these documents differently.
- **No jurisdiction certification.** `legal.jurisdiction` is a string that gets printed.
There is no rules engine behind it, and no per-country clause library.
- **Business-to-business assumptions throughout.** Consumer-facing engagements carry
statutory protections that none of these documents account for.
- **No e-signature integration.** The pack names your signing tool in the welcome email
and stops there. Take the PDF to whichever service you already use.
- **No invoicing, no CRM, no reminders.** This produces documents. That is all it does.
- **No Word or Google Docs output.** Markdown and printable HTML only. If a client
insists on `.docx`, paste the Markdown into their editor of choice.
- **The Markdown-to-HTML converter is a subset**, not a full CommonMark implementation.
It handles what the shipped templates use and nothing more, by design.
## Contributing
Issues and pull requests are welcome, especially:
- Clause improvements from people who have actually had these documents tested.
- Additional template packs (retainer agreement, statement of work, offboarding).
- Jurisdiction notes, clearly marked as notes rather than as certification.
Please do not send pull requests that claim a document is enforceable, compliant, or
lawyer-approved. That claim will not be merged.
Development:
```bash
python -m venv .venv && source .venv/bin/activate # on Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest
```
The test suite covers rendering of every template, the missing-variable failure, the
guarantee that an unrendered placeholder can never reach the output, the mutual and
one-way NDA toggle, currency, date and jurisdiction switching, the output file layout,
and a repository hygiene check that no real person or domain leaks into the examples.
---
Built by SkynetLabs (Waseem Nasir) - we onboard and automate client delivery for
agencies. https://skynetjoe.com - hire on Fiverr https://fiverr.com/agencies/skynetjoellc
## License
MIT. See [LICENSE](LICENSE). Copyright (c) 2026 Waseem Nasir / SkynetLabs.
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

mazer
Free and Open-source Bootstrap 5 Admin Dashboard Template and Landing Page
HTML · 后台

Freelancer
Freelancer 是 Start Bootstrap 出品的单页作品集模板,专为自由职业者、设计师和小型工作室设计。 页面结构清晰,包含多个内容区块、响应式作品集网格,每个作品项目配有模态窗口展示详情。
HTML · 作品集

Creative
Creative 是 Start Bootstrap 团队维护的一款单页营销模板,定位明确:为创意机构或产品服务提供一个以作品展示和行动号召为核心的落地页。
HTML · 企业官网

startbootstrap-agency
Agency 是 Start Bootstrap 维护的单页代理商作品集主题,基于 Bootstrap 构建,MIT 许可。
HTML · 企业官网

startbootstrap-landing-page
这是 Start Bootstrap 系列中一款通用型落地页模板,基于 Bootstrap 构建,定位是给产品或服务做单页推广。
HTML · 企业官网

Landing-Page
Tailwind CSS Starter Template - Landing Page
HTML · 企业官网
