Repository navigation
Releases: wowayou/wedding-carpool
Release list
v3.7.0
- 计算规则升到第 2 版(见 /guide/method 的「规则变更记录」):没搭上顺风车的人,默认改成尽量拼车省钱,去同一个站的人按时间切分成几辆车。对已有行程的影响:有人打车的方案,选站、打车组和总分钟可能和以前不一样(方案之间的排序规则没变,仍是搭车人数、总分钟、停车次数)。没人打车、也没填离场时间的行程,结果和第 1 版一样。想保持第 1 版的选站,在
[options]里写taxi_mode = "fast"。 - 拼车省钱:每个人最多比自己最快的走法多花
taxi_pool_extra_min(默认 30)分钟,先让打车费(车数 × 车程)最少,再让总分钟最少;到站(返程是离场)时间相差不超过taxi_wait_min(默认 30)分钟的才拼一辆,一辆最多 4 人,同行的一组不拆开;没填车次的人当作可以和任何人拼,报告里写明「没填车次,按同一时间算」。打车费只用来选站,不参与方案之间的排序。每个方案的「排序依据」下面多一行「打车:几辆,粗估多少元」,方案卡片显示打车几辆,方案页的打车卡片写明和谁拼一辆、在哪汇合、几点。组合数不超过 20,000 时逐个比,超过用贪心;打车安排按「哪些人没搭上车」缓存,4 车 6 乘客 10 站的计算没有变慢。 - 去程和返程解耦:表单顶部的「规划哪几段」有去程、返程两个独立开关,至少选一段。可以只规划返程(
[options]的outbound = false,要填[return]的date):不算去程,也不用去程的车次、出发日期和时间,行车时间只查返程用到的方向;报告里没有去程的内容,候选站对比换成「目的地 → 站」的口径;方案页只有返程一节;「推荐车站」沿车主「目的地 → 家」的路线找。去程方案和返程方案本来就分开选,现在界面和方案页写明了:方案页顶部写出选的组合,如「去程方案 2 + 返程方案 1」。 - 个人离场时间:成员可以填
leave_time(返程几点离开目的地),不填就是散场时间。车主几点走,车就几点走;乘客能上车要满足车主的离场时间不早于自己,并且最多晚max_wait_min([return]里,默认 30)分钟;送到站要赶在发车前的时刻从车主的离场时间起算;打车的人从自己的离场时间出发。等待时间只当约束,不计入总分钟。报告、方案页写每辆车自己的出发时刻和乘客要等多久。 - 编辑页:选项里加「没搭上车的人怎么打车」「拼车最多多花」「拼一辆的时间差」;成员卡片加离场时间,返程一节加「乘客最多等车主」。
- 试玩:示例里小陈的离场时间是 20:15,可以切换只规划返程、切换打车方式。
- 修复:本地版保存配置时会丢掉
[return],现在会写回。 - 示例页(
/demo)页脚的规则版本同步成第 2 版;示例内容是第 1 版算的,没有重新生成(要调用高德)。 - 自部署:不算不兼容,新增的配置字段都可以不写。
线上:https://carpool.eigentime.org · 规则说明:https://carpool.eigentime.org/guide/method · 自部署升级见 README 的「自部署升级」一节。本版没有不兼容的改动;计算规则升到第 2 版,有人打车的方案结果可能变化,见第一条。
v3.6.0
- 页脚改版(参考 Funner 的页脚):左边是品牌、介绍和「先试玩一下,不用邀请码」引导行,右边分产品、指南、场景、关于四列;与页面同底色,用细线分隔;底部小字(高德说明、版本号、LINUX DO 致谢)保留。最下面新增单线描出的 carpool 大字标:两个 o 是带小圆点的彩色圆盘,一条路线贯穿所有字母,起点和终点有小圆点,颜色只用设计变量,深色模式自动适配;手机上分两行排,每行一条路线。编辑页、试玩页、管理页的工具栏不变,方案页页脚不变。
- 页眉:右侧操作改成「试玩」和「新建行程」,GitHub 入口只留在页脚;导航文字与页脚链接样式一致,当前页用强调色下划线标出。手机菜单的交互不变。
- 试玩页:修复「看示例方案页」按钮没对齐的问题(按模式显示的类用了
display: revert,链接被退回成行内元素)。 - 构建测试新增:大字标 SVG 不占读屏、不写死颜色,页眉操作区有
/try和/#create。 - 首页常见问题和使用指南写明「没有人开车、大家都坐高铁」也能用:程序会算每个人坐到哪个站、到站后怎么打车,开了返程也算散场后打车去哪个站。功能本来就支持,这次只是写出来。
线上:https://carpool.eigentime.org · 自部署升级见 README 的「自部署升级」一节。本版没有不兼容的改动。
v3.5.0
- 试玩模式:新增
/try,没有邀请码、也没有高德 Key 的人可以用一个虚构的行程(宏村示例酒店)点一遍。能改谁开车、空座、最多绕路、同行人数、车次和分钟数,能删成员和候选站,能开关返程,「恢复示例」回到初始;不能搜索和改地点、加成员和车站、保存、发布方案页。 - 试玩的计算在浏览器里完成,不调用高德 Web 服务:行车时间按直线距离估算(直线公里数 × 1.3 ÷ 75 km/h,再加 10 分钟进出城),路线画成直线;报告顶部写明「试玩」,「说明」不说数据来自高德。正式行程的报告不变。地图底图仍用高德瓦片,和示例页一样。
- 首页新建表单下、使用指南、隐私页、README 加了试玩的入口和说明。
/try计入页面访问。 - 不算不兼容:
wrangler.jsonc的run_worker_first加了/try,只是为了给/try计数。自部署的人不加也能用,/try就是静态的try.html,只是不计数。
线上:https://carpool.eigentime.org/try · 自部署升级见 README 的「自部署升级」一节。本版没有不兼容的改动。
v3.4.1
- 隐私页:如实说明 Cloudflare 的网页统计(Web Analytics)会自动往页面里加统计脚本,本站的 CSP 不放行它,浏览器会直接拦下,不下载、不运行、不发数据;原来「网页里没有统计脚本」的说法改为「本站不用统计脚本」。
- 构建时检查每个页面的
script-src:只能放行本站、cdnjs 和内嵌脚本的哈希,多出别的来源构建就报错;方案页的 CSP(在web/worker.js里)由测试固定。
线上:https://carpool.eigentime.org · 自部署升级见 README 的「自部署升级」一节。本版没有不兼容的改动;自己改过 CSP、加了别的脚本来源的,构建会报错,见上面第二条。
v3.4.0
- 公开计算规则:新增规则说明页
/guide/method,写明用到的数据、硬性条件、排序方式、默认值和目前没考虑的地方,带版本号(现在是第 1 版);方案页页脚和报告都标明用哪一版算的。首页常见问题加了一条,选站页的「程序怎么比」缩成摘要并链到这一页。 - 每个方案(去程和返程)下面显示「排序依据」:搭车人数,以及总分钟由车主多绕、乘客到上车点、打车组三项相加;备选方案再列出和推荐方案的差别。排序和成本口径没有变,只是把分项显示出来。
- 防止说明和代码对不上:默认值集中到
carpool.DEFAULTS,说明页的默认值表由测试和它逐项核对;新增规则快照测试,固定几个场景的方案顺序和各项数字,改了规则会失败。 - 地图角标加上审图号
GS(2025)5996号(编辑页、方案页、示例页)。 - 隐私:首页新建表单下写明行程数据存放在中国大陆以外的 Cloudflare 服务器上;隐私页同步写明;编辑页成员的出发地下面提示「填小区、地标或附近路口就够了」,方案页不显示精确出发地。
- 措辞:站点上的「公益性质」改为「非商业的个人项目」。
- 仓库:新增
SECURITY.md(GitHub 私密报告)和.github/FUNDING.yml;README 加「支持作者」一节,站点上没有赞助入口。
线上:https://carpool.eigentime.org · 自部署升级见 README 的「自部署升级」一节。本版没有不兼容的改动。
v3.3.0
-
编辑页:修复在日期、成员名、车站名等输入框里改完内容、紧接着点别的输入框或按钮时,那一下点击和输入被吞掉的问题。原因是失焦时整张表单被重建;现在只原地更新 12306 链接、「默认 N」等占位文字、步骤条和校验提示,加删成员或车站、开车、返程开关、导入、恢复历史、远端合并才整体重绘。
-
编辑页:取名、编辑口令、额度、打不开、已删除这几个整页遮罩,打开时焦点进入遮罩、背景设为 inert、Tab 键只在遮罩里循环,关闭后焦点还给原来的元素;额度遮罩支持 Esc。页内弹窗的 Tab 也限制在弹窗里。
-
自部署:构建时可用环境变量
SITE_ORIGIN指定站点地址,SITE_INDEXABLE=1允许收录。换了域名又没设SITE_INDEXABLE时,所有页面加noindex,robots.txt全禁,不生成sitemap.xml和llms*.txt。官方构建不变。见 README 的「自己部署」。 -
安全(费用与数据安全交叉审计,两位审计员分别做静态审计和本地动态攻击,结果由主代理逐条核对):
- 修复(P0,已于 2026-10-08 先行上线):行程实例的内部接口能从外面访问,可以不经邀请码自建行程并绕过公共额度护栏、读出自带的高德 Key 和邀请码、用 GET 删行程。现在只有白名单路径能转发,内部接口要带 Worker 的内部标记;不是自带 Key 的行程一律经过公共额度护栏。
- 管理登录限次改为原子操作(并发试错不会多放行),口令对了退还那次尝试;全站登录被锁时,可用环境变量
FORCE_PUBLIC_PAUSED、FORCE_CREATION_PAUSED直接暂停,不需要登录。 - 「改用自己的 Key」先鉴权再对外验 Key;自带 Key 新建先过新建限速再验 Key;Key 或邀请码不对时退还全站新建名额。
- 保存的大小按实际内容计算(分块上传也拦得住),配置只能是对象。
- 同一个行程的请求逐个处理,避免并发时用旧数据覆盖新数据(比如重置编辑链接的新密钥被并发的改名盖掉)。
- 公共额度被拒的部分退回行程当天的计数。
- 来源 IP 的哈希加盐并按天轮换;方案页访问口令至少 4 位,按来源和按页分别限次;编辑口令按最近一小时滑动计数,提示还要等几分钟。
- 高德配额标记自动过期;删除和到期的行程从管理页名单里去掉;删除行程只接受 POST,方案页在行程实例里就删。
- 批量接口:每一项单独校验,查询里自带
key(任何大小写)直接拒绝,去掉callback、output、sig。 - 单个高德查询改用 POST,地点文字不再出现在网址和访问日志里。
- 地图提示框里的成员名字当纯文本显示(编辑页和方案页)。
- 每个行程的保存(每分钟 60 次)、发布(每小时 30 次)、实时连接(30 个、单条消息 2 KB)有上限;出行日期再远,保留期最多到最后编辑后 2 年。
- 关掉
*.workers.dev子域名和预览地址。 - 不兼容:方案页访问口令最短 4 位(已设的短口令仍然有效);批量接口查询里带
key参数会被拒绝。
-
隐私页按审计核对表更新:访问日志、IP 哈希、配额标记、删除后站点侧剩下的记录。
线上:https://carpool.eigentime.org · 自部署升级见 README 的「自部署升级」一节。本版有两处不兼容,见上面标「不兼容」的条目。
v3.2.0
- 服务端汇总统计:按北京时间按天统计页面访问、爬虫、来源域名和
?from=参数、新建行程(邀请码、自带 Key、管理页)、当天有计算的行程数、发布方案页次数、方案页打开次数;只记次数,不记 IP 和完整地址,不用 Cookie,保留 35 天;/api/admin/stats返回近 30 天。 - 编辑页的计算环境(Pyodide)、地图(Leaflet)和 Markdown 渲染(marked)改为随站点自己托管(
/vendor/),构建时下载固定版本并校验 sha256,不再依赖 jsDelivr 和 cdnjs;编辑页的内容安全策略相应收紧。 - 不兼容:构建(
npm run build、npm run deploy)第一次需要联网下载约 13 MB 的依赖,缓存在.cache/;下载失败或校验不对会让构建报错。 - 不兼容:
wrangler.jsonc的assets增加了not_found_handling: "404-page"和更多的run_worker_first路径;自部署的人要同步这两处,否则页面访问不会计数,不存在的地址也没有站内 404 页。 - 方案页不存在、已停止分享或已删除时,返回说明原因的 404 页面,并给出首页入口;访问口令页也改用统一样式。
- 编辑链接对应的行程已经删除或到期时,接口返回
TRIP_GONE(状态码 404),和密钥不对(UNAUTHORIZED,401)区分开。 /api/env返回版本号。- 新增本更新记录和 GitHub Releases 升级说明。
- 设计系统:统一颜色、深色模式(跟随系统)和组件;编辑页、方案页、示例页、管理页都套用;新增
/design样式指南。 - 编辑页:手机上底部分页签「填写 / 地图 / 方案」,算完自动切到「方案」;车次表格每个车站一行竖排;所有原生 alert / confirm / prompt 换成页内弹窗和轻提示,删除行程要输入行程名称确认;每个方案一张卡片,关键数字(搭车人数、车主多绕、打车人数)放前面;方案过期提示带「重新计算」;还没有方案时有空状态说明。
- 编辑页加载失败不再整页报错:计算环境没加载出来时说明原因并可以重试,地图或 Markdown 渲染没加载出来时仍能填写。
- 行程已经删除或到期时,编辑页显示专门的页面状态,并把它从这台设备的「最近的行程」里去掉。
- 逻辑加固:成员重名会在保存和计算前拦住,并定位到输入框(计算内核
carpool.py也加了校验);车次、时间、日期、空座、同行人数、绕路分钟数的格式和范围校验,计算按钮给出可点击的错误列表;编辑页的日期统一按北京时间显示。 - 方案页模板内嵌同一套设计变量,支持深色,打印时强制浅色;页面图标内嵌,不再引用站点上的图片。
- 管理页新增流量统计面板(近 30 天页面访问、使用漏斗、来源和爬虫排行,突出 AI 爬虫)。
- 隐私页补上服务端汇总统计的口径,第三方一节更新。
- 本地版(
ui.py)也提供设计系统的样式和图标文件。
线上:https://carpool.eigentime.org · 自部署升级见 README 的「自部署升级」一节。