MAXCOURSE 校园工具集

角色一人全栈 · 设计 + 前后端 + 部署运维

时间2025–26 · 在线运行中

项目BNBU 校园工具集 · 自有服务器

“把选课、赶 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 · 一人持续迭代、上线运行至今。

01
iSpace 登录
带 token 鉴权
02
DDL 爬取
时间线抓取
03
同步待办
去重入库
04
邮件提醒
到期前推送
05
凑学分优化
搜最优组合
06
空教室 / 评价
课表反查 · 众包

界面一览

真实运行 · 左右滑动
主页 / Home
主页 — 报纸式目录,一眼看全所有工具(要查的 / 要交的 / 要用的 / 要吃的)
智能排课 / Scheduler
智能排课 — 选课组合自动优化、避开时间冲突
课程检索 / Courses
课程检索 — 按开课单位、学分、时间筛选目标课程
空教室查询 / Free classrooms
空教室查询 — 按时间段与教学楼查当前可用教室
教师评价 / Teacher ratings
教师评价 — 学生众包的教师评分与评论
工具箱 / Toolbox
工具箱 — 吃什么 / 无水印下载 / 打印配置等校园小工具

成果

1,600+ 真实用户 · 在线运行
1,615
独立访客
570
收录课程
510
众包教师评价
6 模块
DDL/凑学分/空教室/教师/排课/工具箱

一个人把设计、前后端、爬虫、算法到服务器运维全做下来,把散在各处的校园琐事收成一个真正用得上的工具集——上线后累计 1,600+ 名学生在用、收录 570 门课与 510 条教师评价,线上可访问 bnbscheduler.top


一个人,把校园里零散又恼人的事,收进一个安静的工作台

这个项目最有意思的,是“工程上偷懒、产品上较真”:前端故意不上构建工具,浏览器内 Babel 直接跑 React,改完刷新就有,迭代飞快;真正花功夫的是把 iSpace 那套登录与页面啃下来稳定同步 DDL、把凑学分变成可搜索的最优解、把它在自己的服务器上稳稳跑起来还配上自动部署。它现在每天都在线被同学用着。

想了解更多细节,欢迎直接找我聊