
Schedule Share
已上线网页应用技术栈: TypeScript · Next.js 15 · Expo + React Native · Drizzle ORM · Postgres (Neon) · Firebase (optional) · Vercel · pnpm monorepo · Vitest · GitHub Actions
不用任何人注册账号,也能为一群人找到合适的时间。 Schedule Share 跨日期、跨时区对比大家的空闲时间,再帮整个小组确定一个时间。组织者建好日程、发出链接,其他人在浏览器或手机 App 里回应即可。
核心特点
两种问法
开放网格(每个人涂选自己有空的时间格),或候选时间投票(方便、也许、不方便,还可以按偏好排序)。
预填,不用重输
粘贴忙碌时间文字、上传 CSV 课表或 .ics 日历,或套用每周模板。所有导入都只是把网格预填成草稿,你仍然可以修改。
时区只算一次
数据库统一存 UTC,日期和每日时间窗口按日程时区解释;所有时间格和交集逻辑集中在一个有测试的 core 包里。
网页和手机,一个服务
网页端和 Expo 手机端调用同一套 API,同一个日程在两边看到的是同一份结果。
创建日程
组织者给日程起名、选时区,再选择回应方式:在网格里涂选有空的时间,或对几个候选时间投票。选网格时,可以设日期范围、星期、每天的时间窗口,以及 15、30 或 60 分钟的时间粒度。创建完成后得到两条链接:发给大家的参与链接,和只属于自己的管理链接。

涂选你有空的时间
参与者打开链接、填个名字,点按或拖拽涂选自己有空的时间格。如果不想一格一格选,可以先用粘贴文字、日历文件、CSV 或每周模板预填网格。下方的实时热力图显示每个时间格有几个人有空,并把人数最多的时间格标出来。


候选时间投票
组织者提出具体的候选时间后,每个人对每个选项回答方便、也许或不方便,还可以把最想要的排在前面。选项按加权支持度排序(方便算 1,也许算 0.5),分数相同时依次比较可用人数、首选人数和平均偏好顺位。结果会显示每个选项谁方便、和最佳选项差多少、与最佳选项相比有什么变化。

确定时间并收尾
管理页最先给出推荐时间:所有人都有空的最长连续时间段,以及谁能参加。从这里可以直接确认、导出、停止回应或归档日程。CSV 和 .ics 日历文件既能导出全员空闲时间段,也能导出已确认的那一个时间。管理链接是唯一的钥匙,复制出来的结果摘要里不会包含它。

手机端
原生的 Expo 应用覆盖了完整流程:参与者用日程码或粘贴的链接加入,涂选时间或投票,并查看共享结果;组织者还能创建日程、停止回应、归档和确认最终时间。应用有中英文切换,草稿保存在设备上,组织者密钥和编辑密钥放在设备的安全存储里。Firebase 同步是可选的:通过匿名登录和 Firestore,只同步个人自己的资料和最近日程列表,共享日程不会存到那里。Firebase 项目现已配置完成,安全规则也用真实项目验证过:只能读写自己的记录,读不到别人的,也不能写入未列出的集合。应用已在 Android 模拟器和真机上验收。普通网页链接暂时不能直接唤起 App,所以需要粘贴链接或日程码。



工作原理
两个客户端调用同一个 Next.js API。每个请求先校验输入,再校验管理密钥或参与者的编辑密钥;时间格生成、交集统计和排序都在不含数据库和界面代码的 core 包里完成,API 再把共享结果返回。每天有一个定时任务把过期日程归档,之后再清理。图片识别导入已经写好,但被成本、额度和发布闸门关着,在准备好之前不会产生费用。
工程细节
- 决策有记录: 十份架构决策记录,覆盖技术栈、时区策略、基于密钥的访问模型、包管理器、时间库、ORM、托管方案和手机端;产品、领域模型、API 和部署文档都放在一起。
- 边界清晰:
core只放纯逻辑,db负责表结构和迁移,api-client给两个客户端共享类型,网页端只做页面和交互;共享的 API 契约让网页和手机保持一致。 - 不用账号也有权限: 每次修改都由服务端校验管理密钥或参与者的编辑密钥;已锁定和已归档的日程会拒绝修改。
- 测试放在关键处: 500 多个测试覆盖时间格生成、时区、交集、排序、密钥权限、导入解析(包括日历里的重复事件)和手机端自己的逻辑;CI 在每次推送时跑 lint、类型检查和构建。
- 成本有意识: AI 图片识别在生产环境关着,受发布模式、每日请求和成本上限以及额度账本控制;广告位已接入但默认关闭,披露页面已备好。
- 容易跑起来:
docker compose一条命令起本地 Postgres,几个脚本负责配置环境、检查数据库,并对任意部署跑一遍端到端 API 冒烟测试。
当前状态
已上线:schedule.tonimakes.com,源码在 GitHub。网页端默认英文,中文版在 /zh 下。手机端已于 2026 年 10 月 8 日完成真机验收。接下来:找几位朋友做内测、让普通链接直接打开 App,以及把两种语言的文案整理成统一的词典。本页所有截图都取自本地搭建、填入示例日程和虚构参与者的副本,所以上面没有任何真实数据。