Skip to content

Repository files navigation

CourseDeck

四门课,七个来源。为了确认作业、截止时间和课程通知,我每天都要在几个平台之间来回切换,于是做了 CourseDeck。

这是一个围绕我在 NYU Tandon CS 的课程日常开发的小项目:把分散的作业、邮件和课程资料集中在一个本地页面里,也能随手添加自己的待办。目前已经接入我这套课程组合使用的主要平台,适合有类似课程安排的同学尝试。

项目仍处于早期。 适配主要基于个人 NYU 账号和实际课程,其他学校、课程组合、页面语言与内容类型尚未充分验证。已接入平台也有未覆盖的信息,具体见下方范围说明。

可以做什么

  • 汇总作业:集中查看截止时间、来源和可读取的提交状态,打开原始页面,添加本地笔记、置顶或隐藏任务。
  • 查看变化与依据:Changes 记录截止时间、要求和来源状态的变化;任务详情可关联邮件、资料和其他来源任务,候选关联需人工确认,各来源状态保持独立。
  • 管理课程:一个来源可以包含多门课程,同一门课程也可以关联多个来源。支持手动合并课程、颜色、别名、禁用和可恢复的本地删除;合并课程不会合并作业。
  • 查看邮件:右侧 Inbox 展示邮件列表与正文,用课程颜色标识关联;从邮件详情直接添加待办。
  • 添加自己的待办:可填写截止时间,关联课程或邮件,也可以独立存在。
  • 规则分类:按发件人、课程名称和关键词分类邮件,变更规则先预览再应用。可标记需关注邮件;列表默认仍按时间排列,自动忽略和本地删除均可查看、恢复。
  • 查阅资料:同步时自动收集支持范围内的课程目录、正文、讲义和公告,在 Chat → Materials 按课程、来源、类型、读取时间及完整性检索,无需配置 AI。
  • 可选 Chat:检索本地资料,在证据不足时按需浏览课程页面和附件;也可按明确指令修改本地截止时间、状态和笔记并撤销。支持并行会话、改名、删除、流式回答与可展开的执行记录,切换应用页面后已发送的问题继续生成。在 Settings 配置兼容 OpenAI 的接口、模型与密钥后使用。

默认深色界面。同步、待办、邮箱和资料库不需要 AI、CourseDeck 账号或云端部署。 本地服务运行时通过浏览器使用,数据存入本机 SQLite,登录会话使用各平台的专用浏览器配置。只有主动发送 Chat 消息时才调用配置的模型接口;相关课程上下文会发送到该接口。

已接入的平台与范围

平台 当前读取范围 已知限制
Google Classroom 当前及归档课程扫描、Classwork 作业、正文、截止时间和可见状态/分数;另收集材料、Stream 公告及可访问的 Google Docs 正文 Question、其他附件与语言尚未完整适配;归档、折叠项、权限及读取预算可能限制资料覆盖;不可见分数保持未知
Gradescope 学生课程页面、作业列表及可读取的截止时间和状态 已在个人账号实测,其他实例与页面结构尚未充分验证
WebAssign All Assignments 列表、截止时间及普通作业的逐小题提交记录 受限/计时作业不自动进入;无法核实全部小题时保持未知;多课程选择器与其他语言仍需验证
Rephactor 当前及非活跃课程中已发布的学生作业、说明、截止时间和可读取分数 完成状态保持未知;不将未发布项目、考勤或 Easter Egg 汇总变成待办,不自动进入答题流程
NYU Brightspace 作业提交区、有明确结构化截止的课程内容、独立测验及明确截止的讨论主题;另收集课程 TOC、可访问正文/PDF 文本和 News 公告 未开放、权限受限、不支持或超出读取预算的资料保留异常与旧缓存;不从公告或正文推断截止时间
Gmail 一个邮箱的 Inbox 列表、邮件正文与本地分类 最新页持续刷新,历史页自动轮转;正文分批读取,不覆盖附件或归档邮件

这些连接已使用个人 NYU 账号测试,但不代表所有 NYU Tandon CS 课程都已完整覆盖。浏览器页面或学校登录流程变化时,连接器可能需要更新。详细记录见 验证范围

不漏信息是本项目的核心目标,当前还不能保证全量覆盖。 同步失败或只读到部分内容时会显示异常并保留缓存;未知状态不会被当作完成,未读到的内容不会因一次失败而被删除。仍需在原平台查看尚未适配的内容。

任务与资料分别管理:有明确任务或结构化截止的项目继续进入 Todo,普通讲义、公告进入 Materials,不会仅因正文包含日期而新增任务。Chat 的修改只覆盖本地显示,保留平台原始事实,不向平台提交作业。工具范围和按需读取限制见 Chat 工具。资料采集和 Chat 已有本地/模拟测试;具体模型的兼容性与回答质量仍需单独验证。

本地运行

需要 Python 3.12+、uv,以及 Node.js 20.19+ 或 22.12+。当前主要在 Windows 上开发和验证。

首次安装并启动:

.\setup.cmd
.\start-tray.vbs

以后双击 start-tray.vbs 即可打开界面并保留后台同步。托盘菜单支持打开界面、立即同步和退出; Settings → Preferences 可设置登录 Windows 后自动启动到托盘,默认关闭。 命令行方式仍可使用 start.cmd,浏览器地址为 **http://127.0.0.1:48321**。

首次打开后,在 Sources 连接课程平台,在 Inbox → Connect Gmail 连接邮箱。登录在各平台的专用浏览器窗口中完成,支持学校登录跳转;默认浏览器连接方式无需自己创建 OAuth 项目。

手动安装、各平台配置与恢复步骤见 使用文档,邮件规则见 Inbox 文档

数据与操作边界

  • 课程、任务、邮件缓存和笔记保存在 data/coursedeck.sqlite3;资料、Chat 配置与对话历史保存在 data/knowledge.sqlite3。凭据和 Chat API key 使用系统凭据库,不写入数据库或 API 读取结果。
  • CourseDeck 不提交作业,也不向课程平台写回完成状态;待办勾选、课程别名和隐藏操作只影响本地。
  • Inbox 的删除、忽略和星标只影响本地。Chat 还可以生成 Gmail 垃圾箱操作清单,需用户点击确认后才移动所选整段邮件会话;不永久删除或发送邮件。浏览器同步或核对邮件正文时,Gmail 可能将邮件标为已读。
  • Settings → Backup & restore 创建带校验清单的双库备份;恢复前检查兼容性并备份当前数据,失败时尝试双库回滚。旧版成对文件可检查导入,缺件或不兼容 schema 会明确拒绝。备份不包含浏览器登录会话和系统凭据。
  • data/、浏览器配置、备份和常见凭据文件已列入 .gitignore,分享项目时请勿包含个人数据。

开发

这是个人项目,我很难提供全面的适配和技术支持,目前只能在自己课程和账号可验证的范围内改进,也无法接手其他人的账号进行测试。欢迎提交 Issue 和 PR,反馈问题或补充适配。

后端使用 Python / FastAPI / SQLite,前端使用 React / TypeScript / Vite。连接器与任务聚合逻辑分开,便于逐步增加来源。

uv run pytest
uv run ruff check
uv run ruff format --check
cd frontend
npm run typecheck
npm test
npm run format:check
npm run build

更多说明:架构 · 连接器 · 第三方声明

内置 Chat 的使用边界及本地 agent 的浏览器排查流程见 AI 与来源复核。普通同步保持无 AI;模型回答不取代来源事实或完整性核对。

About

A local-first assignment and inbox aggregator, built around a NYU Tandon CS course workflow.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages