- 难度
- 较难
- 适合
- 进阶
- 主要语言
- TypeScript
- GitHub
- ★ 47.4k
- 许可证
- MIT
- 快照日期
- 2026年8月9日
先判断要不要学
这个项目值得拆什么?
Cal.diy 是 Cal.com 的社区自托管分支,官方 README 明确说明已移除商业与 Enterprise 代码,整库采用 MIT 许可证。项目以 Next.js、tRPC、Prisma 和 PostgreSQL 构成大型排期产品,覆盖事件类型、空闲时间、预约、通知与第三方日历集成。它适合用一个真实预约切片学习时间领域建模,但官方也明确提示主要面向个人、非生产自托管,部署与安全责任需由使用者承担。
- 01
可用性、时区、冲突检测和预约落库形成高价值的端到端领域案例。
- 02
AGENTS.md 给出 apps/web、Prisma、tRPC、UI 与集成包的明确导航。
- 03
移除 Enterprise 代码后的 MIT 社区版让许可证边界比旧开源核心更直接。
可以学什么
不只是看代码,而是找到产品的骨架
- 学产品结构
- 学数据库
- 学用户登录
- 学界面
- 学部署
- 学完整项目组织
预约领域的时间建模
从事件类型、可用时间和预约数据出发,理解时区转换、冲突判断与最终写入为何必须保持同一业务语义。
packages/prisma/schema.prisma · packages/features · apps/web类型安全的纵向切片
沿页面、tRPC router、service/repository 到 Prisma 查询阅读一次预约变更,观察权限检查与最小字段选择如何贯穿各层。
apps/web/app · packages/trpc/server/routers · packages/prisma集成作为可插拔能力
比较 App Store、凭证与共享 UI 包,学习如何把日历和会议服务隔离在核心预约模型之外。
packages/app-store · packages/app-store-cli · packages/ui三段学习路径
从理解、修改到做出你的版本
画出一次预约的最小数据链路
- 读 README 的 About、Built With 与风险提示
- 在 packages/prisma/schema.prisma 找事件类型、可用性和预约实体
- 对照 apps/web 与 packages/trpc 标出读写边界
完成标志:一张从访客选时到预约落库的领域与调用图。
实现一个单人预约冲突检查原型
- 定义用户、事件类型、可用区间和预约最小模型
- 统一将输入时间转换为 UTC
- 计算候选时段并拒绝重叠预约
- 用跨日与夏令时样例测试
完成标志:一个不依赖第三方日历、具备时区测试的最小预约服务。
增加一个受控的日历同步边界
- 定义 provider 接口与加密凭证引用
- 实现本地假 provider 而非接入真实账号
- 为拉取失败、重复事件和撤销设计幂等键
- 补越权、时区与重试测试并记录部署需求
完成标志:一个将外部日历故障隔离于核心预约事务之外的可测试切片。
评分解释
每一分都要说清楚为什么
可 Docker 自托管,但完整集成和时间语义使复刻成本较高。
README 与 AGENTS.md 提供了较好的结构和安全导航。
适合进阶学习者,不适合第一次做全栈项目。
预约、可用性、认证、通知与集成闭环成熟。
适合从单一预约切片做受控改造,不适合整仓快速复制。
社区仓当前活跃且提交历史丰富。
时区、冲突与日历同步提供一般 CRUD 项目没有的领域挑战。