calcom/cal.diy

Cal.diy

从开源排期平台学习时区、可用性计算与日历集成

难度
较难
适合
进阶
主要语言
TypeScript
GitHub
47.4k
许可证
MIT
快照日期
2026年8月9日

先判断要不要学

这个项目值得拆什么?

Cal.diy 是 Cal.com 的社区自托管分支,官方 README 明确说明已移除商业与 Enterprise 代码,整库采用 MIT 许可证。项目以 Next.js、tRPC、Prisma 和 PostgreSQL 构成大型排期产品,覆盖事件类型、空闲时间、预约、通知与第三方日历集成。它适合用一个真实预约切片学习时间领域建模,但官方也明确提示主要面向个人、非生产自托管,部署与安全责任需由使用者承担。

  1. 01

    可用性、时区、冲突检测和预约落库形成高价值的端到端领域案例。

  2. 02

    AGENTS.md 给出 apps/web、Prisma、tRPC、UI 与集成包的明确导航。

  3. 03

    移除 Enterprise 代码后的 MIT 社区版让许可证边界比旧开源核心更直接。

可以学什么

不只是看代码,而是找到产品的骨架

  • 学产品结构
  • 学数据库
  • 学用户登录
  • 学界面
  • 学部署
  • 学完整项目组织
01

预约领域的时间建模

从事件类型、可用时间和预约数据出发,理解时区转换、冲突判断与最终写入为何必须保持同一业务语义。

packages/prisma/schema.prisma · packages/features · apps/web
02

类型安全的纵向切片

沿页面、tRPC router、service/repository 到 Prisma 查询阅读一次预约变更,观察权限检查与最小字段选择如何贯穿各层。

apps/web/app · packages/trpc/server/routers · packages/prisma
03

集成作为可插拔能力

比较 App Store、凭证与共享 UI 包,学习如何把日历和会议服务隔离在核心预约模型之外。

packages/app-store · packages/app-store-cli · packages/ui

三段学习路径

从理解、修改到做出你的版本

0130 分钟先跑通

画出一次预约的最小数据链路

  1. 读 README 的 About、Built With 与风险提示
  2. 在 packages/prisma/schema.prisma 找事件类型、可用性和预约实体
  3. 对照 apps/web 与 packages/trpc 标出读写边界

完成标志:一张从访客选时到预约落库的领域与调用图。

022 小时动手改

实现一个单人预约冲突检查原型

  1. 定义用户、事件类型、可用区间和预约最小模型
  2. 统一将输入时间转换为 UTC
  3. 计算候选时段并拒绝重叠预约
  4. 用跨日与夏令时样例测试

完成标志:一个不依赖第三方日历、具备时区测试的最小预约服务。

031 天做变体

增加一个受控的日历同步边界

  1. 定义 provider 接口与加密凭证引用
  2. 实现本地假 provider 而非接入真实账号
  3. 为拉取失败、重复事件和撤销设计幂等键
  4. 补越权、时区与重试测试并记录部署需求

完成标志:一个将外部日历故障隔离于核心预约事务之外的可测试切片。

评分解释

每一分都要说清楚为什么

可复刻性14 / 25
14 / 25

可 Docker 自托管,但完整集成和时间语义使复刻成本较高。

文档与代码清晰度17 / 20
17 / 20

README 与 AGENTS.md 提供了较好的结构和安全导航。

新手学习价值10 / 20
10 / 20

适合进阶学习者,不适合第一次做全栈项目。

产品完整度15 / 15
15 / 15

预约、可用性、认证、通知与集成闭环成熟。

vibe coding 代表性5 / 10
5 / 10

适合从单一预约切片做受控改造,不适合整仓快速复制。

活跃度5 / 5
5 / 5

社区仓当前活跃且提交历史丰富。

新颖性3 / 5
3 / 5

时区、冲突与日历同步提供一般 CRUD 项目没有的领域挑战。