“把选课、赶 DDL、找教室、查老师,收进一个安静的工作台。”
校园里恼人的事,往往散落在好几个又慢又难用的系统里:DDL 在 iSpace、选课在另一个后台、空教室靠碰运气、选老师靠口口相传。MAXCOURSE 把这些收进一个工作台:从 iSpace 同步截止日期生成待办并邮件提醒、用凑学分算法搜最优选课组合、按时间与教学楼查空教室、看学生众包的教师评分,外加吃什么 / 无水印下载 / 打印配置等小工具。一人全栈(Flask + React),跑在我自己的服务器上,GitHub Actions 持续部署。
设计、前端、后端、部署运维一个人全包:用 React(不打包、浏览器内 Babel + Tailwind)写出编辑风 + 新粗野混搭的界面;Flask + SQLite 后端做用户系统与 iSpace SSO 登录;写爬虫把 iSpace 的 DDL 拉成个人待办;实现凑学分优化与空教室检索;搭邮件提醒管线;最后用宝塔 + nginx 把它部署上线、配 GitHub Actions 一推代码就自动发布。
校园信息天然是碎的:DDL 锁在 iSpace、课表与选课在另一套系统、空教室没人统一查、教师口碑全靠学长学姐。官方工具又慢又难用。要把它们拼成一个顺手的工作台,得解决三件事:怎么可靠地从 iSpace 同步 DDL 而不被它的登录与页面结构卡住、怎么让选课从“能选上”变成真正按学分优化、以及怎么让一个学生自费的服务跑得稳又免费。
前端用 React(不打包)——浏览器内 Babel 直接转译 JSX、Tailwind 上样式,做出编辑风首页 + 新粗野功能页,零构建步骤、改完即上。后端 Flask + SQLite:用户系统、iSpace SSO 登录、教师评价、待办与通知都在这。一个爬虫带 token 抓 iSpace 时间线里的 DDL,去重后同步成个人待办,到期前发邮件提醒。凑学分按培养方案与已修学分搜课程组合、求最优解;空教室在全校课表上按时间段与教学楼反查可用教室;教师评分由学生众包打分评论。部署在自有服务器(宝塔 + nginx 反代到 Flask),GitHub Actions 一推 main 就 SSH 上服务器自动发布。
Flask + SQLite 后端 · React(浏览器内 Babel,无构建)+ Tailwind 前端 · iSpace 爬虫(requests / BeautifulSoup)· 凑学分优化 · SMTP / SendCloud 邮件 · nginx + 宝塔面板 · GitHub Actions 持续部署
2025–26 · 一人持续迭代、上线运行至今。






一个人把设计、前后端、爬虫、算法到服务器运维全做下来,把散在各处的校园琐事收成一个真正用得上的工具集——上线后累计 1,600+ 名学生在用、收录 570 门课与 510 条教师评价,线上可访问 bnbscheduler.top。
一个人,把校园里零散又恼人的事,收进一个安静的工作台。
这个项目最有意思的,是“工程上偷懒、产品上较真”:前端故意不上构建工具,浏览器内 Babel 直接跑 React,改完刷新就有,迭代飞快;真正花功夫的是把 iSpace 那套登录与页面啃下来稳定同步 DDL、把凑学分变成可搜索的最优解、把它在自己的服务器上稳稳跑起来还配上自动部署。它现在每天都在线被同学用着。
想了解更多细节,欢迎直接找我聊。