terminus 是一个免费、独立的学生项目。它只保留告诉你该搭哪班巴士所需的信息,你随时可以自己删除所有信息。
保存什么
- 你的账户:创建和最后使用的时间,以及它是在应用里还是在网站上开始的。
- 你的邮箱(如果你提供了),用于发送登录验证码和链接,并在你的账户添加设备时通知你。绝不保存任何密码。
- 你的课表:每节课的星期、时间、地点和最近的巴士站、你自己添加的课,以及你导入的 NUSMods 分享链接。
- 你的设置:家附近的车站(只有车站名称,绝不保存你的地址或坐标)、你走到那里需要的分钟数、你的步速、收藏、你保存的地点和你给它们起的名称、常去的时间(例如每周二晚上去健身房)、一次性行程、空档和一天时段的偏好、是否包括公共巴士、时钟格式和语言,以及你看过哪些一次性设置页面。
- 巴士有多挤(总体统计):当一班巴士快到有人查询的车站时,terminus 会在一个计数上加一,记录这条线路在那个车站有多常很挤,按日子类型和每半小时划分。这个计数和你或你的请求没有任何关联;巴士的车牌号只保留两天,以免同一班车被重复计算。
- 今天的行程:今天每次行程是为哪节课、要搭哪班巴士(线路、车站和时间),以及发生了什么:你不去了,或者在应用发送的位置显示你已在目的地时,你已到达。terminus 不会问你。它保留到当天结束,让你的其他设备显示同样的信息,然后在午夜删除;如果你删除账户,则立即删除。只保留你已到达这一点,绝不保留位置本身。当你说你已上车时,巴士的车牌号会和当天的其他内容一起保留,以便从 NUS 的数据(公共巴士则是 LTA 的数据)中读取它到达你那一站的时间。
- 每次行程的情况:保留 35 天,每次行程每天只记一个词:在车上、错过了、不去了或已到达。它和所属的行程(那节课的星期、时间和车站,或回家的行程)以及日期一起保存,绝不记录发生的时刻或位置。它用来建议你为经常错过的课提早一班出发,或停止提醒你经常不去的课。你在那里做的选择会连同课的名称一直保留,直到你修改。
- 你发送的报告:当你告诉 terminus 某个答案不对,或发送反馈时,你的说明和你当时看到的答案(其中可能有离你最近的车站)会和你的账户一起保存一年,用来和巴士的实际情况对照。说明也会通过电子邮件发给运营 terminus 的人,不包含你的邮箱和答案。
- 你的设备:每台已配对设备报告的名称(它的型号,例如“Google Pixel 8”或“MacBook Pro”;用 2.5.0 之前的版本设置的 Mac 发送的是电脑自己的名称,会一直保留,直到你移除那台设备或删除账户)、它运行的应用和版本、添加时间和最后使用时间;对于接收通知的设备,还有它的推送地址:Android 应用的 Firebase 地址,或网页应用中你的浏览器推送服务(Apple、Google、Microsoft 或 Mozilla)给它的地址以及用于加密的密钥。登录和设备令牌只以单向哈希的形式保存。配对码在有效的 10 分钟内按原样保存。
- 你创建的 API 密钥:每个密钥的名称、最后四个字符,以及创建和最后使用的时间。密钥本身只以单向哈希的形式保存。
不用邮箱使用 terminus
Android 应用、Mac 应用和网站不需要邮箱也能使用。当你不用邮箱开始时,terminus 会创建一个没有邮箱的账户,只有那部手机、那台 Mac 或那个浏览器知道,并为它保存和上面相同的内容:你的课表、设置、设备名称和最后使用时间。除非你之后添加邮箱,否则没有任何东西能识别你;添加邮箱可以保留你的设置,并让你在其他设备上登录。在网站上,这个账户靠那个浏览器的登录 Cookie 进入:如果浏览器数据被清除,或 30 天没有使用,就再也无法进入它。
没有邮箱的账户会在最后一次使用的 60 天后被删除,连同里面的所有内容。你也可以在应用的设置或账户页面里立即删除它。卸载应用不会删除账户;账户从此不再使用,60 天后被删除。
当你从应用登录时,terminus 会保留一个短暂的请求(你的邮箱、设备名称和平台,以及请求时间),直到你在邮件中批准,最多 15 分钟。
不保存什么
- 你的位置。当应用发送你的位置来找最近的车站时,无论是哪个应用或脚本发送的,terminus 都会把它取整到约 11 米,只用于那一次答案,不会保存。同一个答案也会检查你是否在你家附近车站所服务的校内宿舍里,以免你已经在那里时还叫你回家;具体是哪个宿舍从不保存。位置放在请求的地址里,而 terminus 自己的请求日志是关闭的;传送每个请求的 Cloudflare 只为送达而处理它。根据位置算出的今天的安排会在 Cloudflare 的缓存中保留最多一分钟,让你再看时更快;即使删除账户,也无法提前移除它。
- 你在地图上的位置。校园地图上的圆点由你的设备根据它自己的位置画出,而且只在你已经允许位置权限时显示。它不会发送给 terminus。
- 没有广告,除了让你保持登录的 Cookie 和记住你在网站上选择的语言的 Cookie(保留一年,或直到你重新选择)之外没有其他 Cookie,也没有任何东西在不同网站之间跟踪你。网站还会把你的主题、时钟格式和卡片样式,以及你在网页应用中搜索过的地点,只保存在你的浏览器里;退出登录或删除账户会清除这些地点。网站用 Cloudflare Web Analytics 统计页面访问量(见下文),它不设置 Cookie,也不识别你的身份。
为了改进估计,terminus 会记录关于答案的匿名统计:哪个车站(应用发送了你的位置时,是离你最近的那个)、行程要去哪里、走到车站的步行时间、哪条线路和哪班车(车牌号),以及多久后到达。这些不包含账户、邮箱或坐标,但加上时间,可以大致看出某人在哪里、要去哪里。Cloudflare 会保留它们三个月。
服务器出错时,会记录哪个页面或请求失败,不包含你的位置或你发送的任何内容;Cloudflare 会把这些日志保留几天。
terminus 会记录 NUS 校园巴士一整天的位置(每辆巴士的车牌和位置,每 30 秒一次),以便在地图上回放某一天。它不包含任何关于你的信息,会一直保留。
如果你要求不再收到邮件,那个地址会被加入屏蔽名单,从此不会再向它发送登录邮件。屏蔽名单不与账户关联,删除账户后仍会保留,这样那个地址仍然不会收到邮件。
谁处理这些信息
所有内容都运行在 Cloudflare 上(托管、数据库、邮件发送),数据中心可能在新加坡以外。巴士时间来自 NUS 的校园巴士数据,如果你开启了公共巴士,还来自 LTA 的 DataMall;它们只会被问到车站,不会收到任何关于你的信息。报告会通过电子邮件发到运营 terminus 的人自己的邮箱。你的数据绝不出售或分享。
有些页面会从其他服务加载内容,它们会像你访问的任何网站一样看到你的 IP 地址:
- Cloudflare Turnstile:在登录表单上,用来确认你是真人。terminus 也会为同样的检查把你的 IP 地址传给它。
- cdnjs(Cloudflare):账户页面上的二维码库。
- unpkg:仅用于 API 文档页面。
- Cloudflare Web Analytics:在网站上统计访问量:哪个页面、加载用了多久,以及浏览器、设备类型和国家或地区。它不使用 Cookie 或其他保存的标识,也不把访问和你或你的账户联系起来。应用不使用它。
在装有 Google Play 服务的 Android 手机上,terminus 使用 Firebase Cloud Messaging(Google)通知应用你的行程有变化,这样应用就不必一直查询。为了接收消息,应用在有了账户(无论有没有邮箱)之后会向 Firebase 注册,Google 因此会得到这部手机上应用的安装 ID 和推送令牌。消息只说明行程有变化以及处于哪个阶段(例如“该出发了”),或者有新学期的提醒;然后应用会自己向 terminus 询问详情。(2.5.0 之前的版本会收到新学期提醒的文字,每个人收到的都一样。)
如果你在网页应用中开启通知,同样的消息会经过你的浏览器自己的推送服务(Safari 用 Apple 的,Chrome 用 Google 的,Edge 用 Microsoft 的,Firefox 用 Mozilla 的),并经过加密,只有你的浏览器能读取。然后你的浏览器会向 terminus 询问详情并显示通知。在网页应用中关闭通知或在那里退出登录,会删除这个地址。
当你导入课表时,terminus 会向 NUSMods 查询你链接中各模块的课表。它只发送模块代码,不发送任何关于你的信息。
步行时间按照 OpenStreetMap 的步行道路计算(地图数据 © OpenStreetMap 贡献者),教室位置来自 NUSMods。两者都只下载过一次用来计算距离;任何关于你的信息都不会发送给它们。
校园地图的街道来自 Protomaps 基于 OpenStreetMap 制作的地图,巴士路线沿着 OpenStreetMap 的道路画出。terminus 保存自己的一份并从本网站提供,所以没有地图公司能看到你在看哪里。在车站上点步行路线时,苹果设备上会打开 Apple 地图,其他设备上会打开 Google 地图,并带上那个车站的位置,只在你点的时候;之后适用它们自己的隐私条款。
保留多久
- 直到你删除账户,删除会立即移除账户和上面随它保存的所有内容。与你的账户无关的内容会保留:计数和统计、屏蔽名单、运营者邮箱里报告的说明,以及 Cloudflare 缓存中最多一分钟的今天的安排。
- 登录链接和请求 15 分钟后失效,配对码 10 分钟后失效。浏览器会话在最后一次使用的 30 天后结束;有邮箱的账户最多在登录 180 天后结束。已配对的设备 90 天不使用后会被退出登录。
- 没有邮箱的账户在最后一次使用 60 天后删除。
- 报告在一年后删除。
- 每次行程的情况保留 35 天。清除行程记录(在应用的设置里,或在账户页面)可以更早删除它,而不影响账户的其他部分;今天的行程仍在午夜删除。
你可以做什么
在账户页面上,你可以查看和编辑上面的所有内容、把它们全部下载为文件(包括今天的行程)、在所有设备上退出登录,或删除你的账户。应用也可以查看和移除你的设备。有邮箱的账户在账户页面删除。没有邮箱的账户由它的应用管理,在网站上则由那个浏览器里的账户页面管理;两者都可以导出或删除它。
联系方式
关于你的数据在新加坡《个人数据保护法》下的问题或请求:privacy@rcn.sh。