一个只有我看得到的仪表板:Cloudflare Worker+Apple Reminders+调度 AI

Joe NG
1447 字
4 分钟
–

一个只有我看得到的仪表板:Cloudflare Worker+Apple Reminders+调度 AI

发布于

大学生的事情散在太多地方:死线、学校邮件、交换进度、学会工作,各有各的地方。我想要的是早上打开手机,一个画面就知道接下来 30 日要做什么。

于是我做了 dash.joenyc.net:一个跑在 Cloudflare Worker 上的私人仪表板,前面加一层 Cloudflare Access,只有我自己登录得到。这篇讲三件事——数据从哪里来、怎样做到几乎不用手动更新、以及几个设计上的取舍。

仪表板上有什么

区块内容数据源
未来 30 日所有死线按日期排Apple Reminders
学业可按科目筛选;本周/未完成/全部Apple Reminders
学校邮件摘要每个平日早上的重点邮件Claude 调度任务 → Notion
投资每周损益与成本IBKR Flex 自动导出
LiU 交换交换流程的待办与倒数—
Campus YMCA内阁工作—
个人其他杂项Apple Reminders

学校邮件摘要原本的位置是「实习申请」区块,后来申请季过了,换成每天真正会看的邮件摘要。

仪表板版面示意图:页眉是 LiU 交换倒数,下面七个区块
仪表板版面示意图:页眉是 LiU 交换倒数,下面七个区块

版面示意图,不是实际截屏——内容和投资数字都刻意留空。

架构:Worker+KV,从 Mac 部署

整个站是一个 Cloudflare Worker,数据存在 Workers KV,项目放在我 Mac 上,用 wrangler 部署。

整条数据流画出来是这样:

flowchart LR
  R[Apple Reminders] <-->|launchd 每小時<br/>雙向同步| W
  C[Claude 排程任務<br/>平日 9:00] -->|寫摘要| N[Notion<br/>「郵件總結」]
  N -->|讀取| W
  I[IBKR Flex 報表] -->|平日早上自動拉| W
  W[Cloudflare Worker<br/>+ KV] --> A{Cloudflare Access<br/>只限本人}
  A --> P[iPhone PWA/瀏覽器]
  W -.每日備份 · 保留 30 日.-> B[(備份)]

用 Cloudflare Access 锁门,而不是自己写登录

仪表板上有学业、邮件和投资数据,绝对不能公开。我没有自己写登录系统,而是在 Worker 前面放 Cloudflare Access:只有我的帐号能通过,其他人连页面都看不到。

在 iPhone 上我把它加到主画面当 PWA 用,打开就像一个 App。

让它自己更新:三条自动化管道

仪表板最怕的是变成「又一个要手动维护的东西」。所以我定了一条原则:我只在原本就会用的地方输入,仪表板只负责显示。

1. Apple Reminders ⇄ 仪表板:每小时双向同步

待办我主要在 Apple Reminders 加和剔,因为 iPhone、Mac、Siri 都能直接用。Mac 上有一个 launchd 调度,每小时把 Reminders 同步到仪表板;完成状态是双向的——在仪表板剔了,Reminders 也会剔。

2. 学校邮件:Claude 调度任务 → Notion → 仪表板

每个平日早上 9 点,一个 Claude 调度任务会读学校邮件、写一份摘要到 Notion 一个叫「邮件总结」的页面,仪表板再去读那一页。

有趣的是,我自己从来不打开那个 Notion 页面——Notion 在这里纯粹是中转站,让 AI 有一个写得进去、Worker 又读得出来的地方。

3. 投资:IBKR Flex 每个平日早上自动拉

投资区块只看三样:每周损益、成本、总损益。数据用 IBKR 的 Flex 报表在平日早上自动拉回来,不用手动抄。

Last updated on