Web 应用或 MVP 项目包含哪些内容
我们会根据实际需求来制定合作方案。方案中会列明包含哪些交付内容、由谁提供所需素材,以及每一项如何验收。
- 第一版范围:核心工作流、角色,以及暂缓的内容
- 关键页面设计,包含空状态、加载状态和错误状态
- 数据模型、服务器端访问规则,以及专门尝试突破这些规则的测试
- 账户、角色和团队邀请
- 通过经验证的支付服务商回调确认的支付或订阅
- 管理后台、产品分析事件和错误监控
- 部署、文档,以及代码仓库和账户的交接
应该先做 Web 应用、网站还是产品设计?
如果客户或员工需要登录后在产品中完成工作,例如购买、预订、提交、审批或管理某些事项,就选这项服务。如果您需要的是介绍并销售产品或服务的网站,网站开发更合适。如果工作流程还没有确定,建议先做产品设计,等关键页面经过用户测试后再开发。
第一个版本是如何构建的
我们从范围界定阶段开始:明确用户和角色、第一版必须完成的那个工作流、每一步产生的数据,以及会影响成本的决策,比如支付、集成和权限。产出包括书面的范围说明、可点击的关键页面,以及列明暂缓事项的发布计划。
随后我们以短周期在您可以使用的预发布环境中开发。第一个里程碑是让核心工作流的精简版本端到端跑通,具备真实的登录和真实的数据规则,然后再补全其余页面。上线时包括生产环境监控、回滚方案,并将代码仓库、托管、数据库、支付和分析账户以您的名义交接给您。
MVP 的第一个版本应该包含什么?
第一个版本需要具备让真实用户完成一个工作流所需的一切,而不包含只有在您尚未达到的规模下才有意义的功能。实际上包括五项:带有工作流所需角色的账户、核心工作流本身、让团队无需开发人员就能查看和修正记录的管理后台、商业模式从第一天起就收费时所需的支付,以及显示用户在哪里流失的分析事件。
可以人工完成或日后再购买的功能则暂缓:原生移动应用、面向企业客户的单点登录、可配置的权限矩阵、第二个集成、应用内聊天,以及没有人要求过的报表。每个暂缓的事项仍会在范围说明中列出一行,让数据模型为它预留空间。
大多数产品都由常见模块组合而成。其中有两个值得一提:预订与排期,以及面向目前仍靠手工跟踪咨询的小企业的销售线索管道。两者看起来简单,却隐藏着关于时区、状态和归属的决策,在纸面上先定下来成本更低。
| 模块 | 需要什么 | 开发前需要确定 |
|---|---|---|
| 账户与角色 | 注册、登录、找回账户,以及对每个服务器请求进行角色检查 | 有哪些角色?一个人可以属于多个组织吗? |
| 团队邀请 | 会过期的邀请链接、席位数量、所有权转移,以及移除后立即撤销访问权限 | 谁可以发出邀请?被移除成员的记录如何处理? |
| 计费与套餐 | 托管结账或订阅、经验证的回调,以及在服务器端强制执行的套餐限制 | 每个套餐包含什么?支付失败时会怎样? |
| 预订与排期 | 可用时间规则、时区、缓冲时间、防重复预订机制、提醒和改期 | 谁来设置可用时间?客户付款期间是否保留时段? |
| 咨询与销售线索管道 | 带垃圾信息防护的表单、从新建到成交或丢失的状态、分配、来源和授权同意记录 | 团队实际会用到哪些状态?线索下一步流向哪里? |
| 管理与报表 | 搜索、记录历史、手动修正和导出 | 团队每周查看哪些数据?谁可以编辑记录? |
| 自定义域名 | 主机名接入、DNS 验证、证书状态和套餐检查 | 哪些套餐包含域名?适用哪些主机限制? |
| 审计日志 | 只增不改的记录,说明谁在何时更改了什么 | 客户或审计人员必须能够追溯哪些操作? |
| 通知 | 电子邮件和应用内消息、模板、发送日志和用户偏好设置 | 哪些事件通知谁?哪些可以关闭? |
Dardo 使用什么技术栈?什么时候会选择其他方案?
我们的默认方案是全程使用 TypeScript:用 Astro 实现服务器端渲染的页面和交互式组件,用 Cloudflare Workers 提供托管和 API,用 Cloudflare D1 或 Postgres 存储数据,用 PostHog 做分析和实验。Superame 运行在 Astro 上,排名数据存储在 Neon Postgres 中。一种语言、一个部署目标,让小型产品易于运行,也易于交接。
当产品有需要时,我们会选择其他方案。需要整天保持打开的高密度界面,可以采用客户端 React 应用,Shiimain 原型就是这样。长时间运行的任务、大量数据处理,或者内部团队已经在使用其他框架,也会改变答案。如果上线后由您的开发人员接手代码,通常以他们的技术栈为准。
访问控制是我们首先测试的内容。OWASP 的 Top 10:2025 仍将失效的访问控制列为第一位,并指出所测试的每个应用都存在某种形式的此类问题。我们对每个请求都在服务器端强制执行权限,默认拒绝,将每次查询限定在已登录用户所属的组织范围内,并编写自动化测试,尝试读取其他客户的记录。
网页应用中的支付应该如何运作?
支付是否成功,由支付服务商在服务器端确认;从结账页返回的浏览器永远不负责确认。Dardo 已发布作品中的公开项目排行榜 Superame 就体现了这一模式。买家在 Dodo Payments 的托管结账页完成付款,因此银行卡信息不会经过应用。随后,服务商会发送带签名的回调,服务器先验证签名并核对支付详情,再增加额度。
退款和争议也遵循同样的流程。服务商的每个事件只会被处理一次,因此即使回调重复、延迟或乱序到达,也不会重复增加或扣减额度。Superame 不公布用户采用量或收入数据;它证明的是支付逻辑的构建方式,而不是销售业绩。
- 买家在跳转前关闭了标签页,回调到达后仍会正常入账。
- 重放或伪造的回调会被拒绝。
- 退款或争议会准确撤销原始支付所授予的内容。
- 套餐限制在服务器端校验,而不只是在界面中隐藏。
- 测试密钥和正式密钥是各自独立的机密信息,绝不存放在代码仓库中。
让客户使用自己的域名
B2B SaaS 客户通常希望产品使用他们自己的网址,例如 portal.theircompany.com。Cloudflare for SaaS 通过自定义主机名来实现:Free、Pro 和 Business 套餐包含 100 个,每增加一个主机名收费 $0.10,上限为 50,000 个。通配符自定义主机名仅限 Enterprise 套餐。
客户添加一条指向你的目标地址的 CNAME 记录。根域名需要用 A 记录指向该目标,但默认不支持这种方式,而且顶级域名代理是 Enterprise 的附加功能,因此大多数客户应使用子域名。证书可通过 HTTP、TXT 或电子邮件验证,也可使用 Delegated DCV,即一条一次性记录,让 Cloudflare 自动续期证书。证书由 Let's Encrypt、Google Trust Services 或 SSL.com 签发。
围绕它的产品设计同样重要:只有付费套餐才能绑定域名,引导页面会显示需要添加的确切记录,验证状态用通俗的语言解释“等待中”和“失败”的情况,而当客户更改了 DNS 导致证书无法续期时,监控会提醒你的团队。其他托管平台的限制各不相同:Vercel 的 Hobby 套餐每个项目允许 50 个域名,Pro 和 Enterprise 不限数量,软限制分别为 100,000 和 1,000,000;Netlify 建议每个站点的域名别名不超过 50 个。
选择之前的常见疑问
网页应用或 MVP 的成本由什么决定?
成本取决于角色数量、核心工作流程的复杂程度、支付、集成,以及需要迁移多少现有数据。权限和状态比界面数量更重要:一个包含五种角色和审批环节的界面,比五个只读界面的工作量更大。我们在完成范围界定阶段后,根据书面范围报价,而不是按功能逐项计价。
开发第一个版本需要多长时间?
这取决于工作流程的明确程度、决策和内容提供的速度,以及支付服务商或客户 IT 团队等第三方是否需要批准访问权限。方案会设定里程碑,首个里程碑是核心工作流程的可运行切片。该切片验收后,再确定完整发布的日期。
Dardo 可以接手现有的代码库吗?
可以,但需要先做审查。我们会检查代码仓库、依赖项、数据模型、访问校验、部署方式以及各账户由谁控制,然后报告哪些可以保留、哪些必须先修复,以及修复还是重写更合理。在阅读代码之前,我们不会承诺保留或替换代码库。
你们开发原生 iOS 和 Android 应用吗?
不开发。Dardo 专注于网页开发,包括可以从主屏幕图标打开的可安装网页应用。如果产品依赖浏览器无法调用的设备功能、需要应用商店分发或大量离线使用,原生应用会更合适,我们也会如实告知。网页应用及其 API 仍可作为原生开发团队的后端。
代码和账户归谁所有?
归你所有。代码仓库、托管、数据库、域名、支付服务商和分析账户都以你的名义创建,或在交接时转移给你;方案中会列出无法转移的授权依赖项。Dardo 只保留你为支持工作授予的访问权限。
你们需要我们提供什么?
需要一位能在几天内回答范围问题的决策人、产品需要对接的系统的访问权限,以及工作流程所用数据和文档的真实示例。请尽早以贵公司名义开通支付服务商账户,因为服务商在启用正式支付前会审核企业资质。
上线之后会怎样?
方案中可以包含一段支持期,用于在真实用户陆续进入时处理缺陷、监控和小改动。之后的后续开发,可按月度范围约定,或作为新项目另行商定。安全更新和依赖升级并非可选项,因此无论采用哪种方式,都需要明确指定负责人。
来自博客
- SaaS 自定义域名:用 Cloudflare for SaaS 让客户使用自己的域名
用 Cloudflare for SaaS 让客户把自己的域名指向你的 SaaS:验证如何运作、截至 2026 年 10 月的费用,以及哪些地方容易出问题。
资料来源与延伸阅读
本页内容的资料来源,并附有原出版方提供的更多详情。
- OWASP Top 10:2025,A01 失效的访问控制(Broken Access Control)top10.owasp.org
- Cloudflare for SaaS:套餐与自定义主机名限制developers.cloudflare.com
- Cloudflare for SaaS:快速入门(CNAME 目标与 A 记录)developers.cloudflare.com
- Cloudflare for SaaS:证书验证方法developers.cloudflare.com
- Cloudflare:证书颁发机构developers.cloudflare.com
- Vercel:限制(每个项目的域名数量)vercel.com
- Netlify:添加域名别名docs.netlify.com

