A mobile-first exam score tracker for long-term progress, ranking and goal analysis. Record targets, raw/final scores, rankings and exam context, then turn a growing exam history into trend, position, goal and statistical analysis.
一个面向长期考试记录的成绩轨迹工具:不只保存“这次考了多少分”,还把目标分、原始分 / 最终分、年级 / 班级 / 市区排名、位比、参考人数、科目组合和长期目标放进同一条时间轴,再用趋势、雷达、排名与深度分析去回答“我到底在怎么变化”。
Score Tracker 最初只是一个“目标成绩 vs. 真实成绩”的手机端折线图工具,现在已经扩展成完整的考试记录与分析系统:
建立账号 → 配置科目 / 组合 → 记录考试 → 补录真实成绩与排名 → 查看趋势 / 雷达 / 位比 → 统计与深度分析 → 校准长期目标 → 导出 / 反馈 → 持续迭代
它面向真实的高中考试场景:不同考试可能满分不同、可能有赋分与原始分、参考人数可能变化、部分考试只覆盖某些科目,也可能需要同时关注总分、单科、四科 / 六科组合、班排、年排甚至市区排名。因此系统尽量保留这些“考试语境”,而不是把所有数据压成一条简单分数曲线。
以下为 2026-08-29 从生产 Supabase 项目 database0 读取的聚合快照(只统计数量,不包含任何个人内容):
| 指标 | 当前规模 |
|---|---|
| 普通用户账号记录 | 9,600+ |
| 已记录考试 | 8,800+ |
| 已创建考试的用户 | 2,800+ |
| 单科成绩记录 | 62,000+ |
| 长期目标档案 | 500+ |
| 行为分析独立 Visitor | 13,000+ |
| 行为分析 Session | 24,000+ |
| 产品行为事件 | 240,000+ |
| 反馈主题 / 双向回复 | 98 / 159 |
行为分析日志从 2026-08-20 起形成当前这一代完整口径,因此 Visitor / Session / Event 与账号总量不是同一个时间范围,也不应直接互相换算。
这些数字会随着真实使用继续变化;这里保留带日期的快照,用来说明当前项目已经从个人原型进入了有真实数据、反馈和持续迭代闭环的阶段。
每场考试可以保存:
- 考试名称、日期与自定义分类;
- 单科 目标分、原始分、最终 / 赋分、满分;
- 单科 年级排名 / 参考人数、班级排名 / 参考人数、年级位比、班级位比;
- 总分 年排、班排、市排名、区排名 及对应参考人数;
- 总原始分、总最终分;
- 某科是否排除在总分统计之外;
- 一场考试属于哪些自定义“科目组合 / Module”;
- 组合自己的年排 / 班排数据;
- 是否暂时隐藏某场考试,避免它影响当前分析视图。
这使 Score Tracker 可以处理不同考试口径,而不是假设“每次考试都是相同六科、相同满分、相同参考人数”。
系统默认提供语文、数学、英语、物理、化学、生物、历史、地理、政治等常见科目,并允许用户调整自己的科目列表与默认满分。
在单科之外,还可以维护 Module / 科目组合。系统会为新账号建立常用组合,例如语数外、语数外 + 物理 / 历史(四科)、语数外 + 所选科(六科)。考试可以显式关联组合,也可以保存组合自己的排名口径,从而让后续统计不必“猜”组合排名。
期中、期末或阶段考试可以先填写目标,考后再补真实数据。
系统把 目标 / 实际 同时放进趋势图,支持总分和不同科目 / 组合之间切换。长期使用时,可以直观看到分数是否持续接近目标、哪些科目在稳定进步、哪些只是单次波动,以及同样的分数变化在排名和参考人数变化后是否仍然有意义。
图例支持显隐与自定义颜色;移动端图表支持横向浏览,长考试名称会按真实考试顺序展示。
总分、单科和科目组合可以在同一条时间轴上切换;图中以得分率展示多场考试的长期变化。
只看“第 120 名 → 第 90 名”可能会误判,因为两次考试的参考人数可能不同。
Score Tracker 因此同时保存名次、参考人数、位比 / position percent、班级与年级两个层级,并支持可选的市 / 区排名和科目组合排名。雷达对比可以在最终分、原始分、目标、年排和班排等口径之间切换,并比较不同考试的六科结构。
统计页会尽量在口径一致时比较,在参考人数明显变化时给出提醒,避免把不同样本规模下的名次直接当作同一尺度。
同两场考试可以切换最终分、原始分、目标、年排 / 班排以及名次 / 百分位口径,观察六科学科结构的变化。
除了“下一次考试目标”,还可以维护更长期的目标档案:
- 各科目标分;
- 总分目标;
- 理想学校;
- 目标考试 / 日期;
- 倒计时名称。
首页会把最近成绩与目标逐科对照,显示当前差距;趋势与统计页也会联动目标线和目标状态。目标只是一种比较基准,不会自动篡改历史成绩或为了“更好看”而调整数据。
在普通折线图之外,统计页继续从多个角度整理历史考试:
- 智能提醒:识别总分个人新高、异常分数 / 排名背离、目标长期未达到、最佳成绩后的正常回落等,并允许查看判断依据;
- 全量统计矩阵:把历次考试 × 科目 / 总分放进统一矩阵,以位比和颜色同时查看相对表现,并总结常见区间与个人记录;
- 学科结构:比较当前排名、近期进步速度和“比六科典型水平强 / 弱多少”,用定位图观察优势、上升、预警与补弱方向;
- 强弱项与个人最佳:记录连续进步、单场最大进步、单科最高分和单场最大退步;
- 口径提醒:当参考人数变化、考试难度或数据条件不适合直接横比时,给出对应提示。
这些结论都尽量保留“为什么这样判断”的入口,而不是只给一句标签。
历次考试 × 六科 / 总分的统一矩阵同时呈现位比、表现颜色、常见水平与个人记录,适合快速发现长期模式。
v6.0 加入实验性的深度分析模块。它不是简单做一条趋势线,而是把排名 / 位比序列交给一套浏览器端统计内核进行分析。
第一层先给可以直接理解的结论:
- 下一场参考位置;
- 可能波动范围;
- 达到指定目标的参考把握;
- 基于近期数据的本期提醒。
继续展开后可以查看:
- 下场名次预测 + 95% 区间;
- 历次“当时预测区间”与实际落点的对照;
- 趋势与变点检验;
- 异常变化提醒;
- 状态 / 分布分析;
- 三种分布视图:名次段、发挥标尺、累计概率;
- 名次段与发挥标尺细度可调;
- 计算过程、统计检验与参数说明;
- 总览、科目和组合之间联动。
这部分定位为 Beta / exploratory analytics:它帮助发现模式和风险,不把统计推断包装成确定性的“成绩预测”。样本少、考试口径不一致或参考人数变化过大时,结果应结合原始考试记录理解。
首次访问
→ 自动创建可恢复的账号凭据
→ 配置科目 / 分类 / 科目组合
→ 设置长期目标(可选)
考试前
→ 创建考试
→ 录入目标分 / 目标口径
考试后
→ 补录原始分 / 最终分
→ 年排 / 班排 / 位比 / 参考人数
→ 可选市区排名、组合排名
历史积累
→ 总分 / 单科 / 组合趋势
→ 雷达与对比
→ 排名 / 位比分析
→ 统计分析
→ 深度分析 Beta
→ 目标校准
持续使用
→ 导出数据 / 报告
→ 提交反馈与附件
→ 查看反馈状态并继续复盘
为了避免数据只能“困在网页里”,当前版本支持多种导出方式:
- Excel — 适合继续整理与计算;
- TXT 成绩单 — 适合快速保存 / 分享纯文本记录;
- JSON 备份 — 保留结构化数据,便于迁移与恢复;
- PDF / 打印报告 — 生成适合阶段复盘和归档的完整成绩报告。
打印报告会把考试数量、时间跨度、最近总分、得分率趋势、各科 / 组合历史和逐场明细整理到适合纸张 / PDF 的布局中,而不是简单截图网页。
Score Tracker 内置反馈系统,而不是只留一个外部 Issues 链接。
游客和登录用户都可以提交问题、建议和体验反馈;登录用户可以继续查看历史反馈与维护者回复。反馈支持截图 / 图片附件、双向回复、未读提醒、处理状态,以及提交时的产品上下文与使用深度快照。
处理状态与 Study Planner 保持一致:
已收到 → 处理中 → 已计划 → 已解决 → 已关闭
Mobile / Desktop Browser
│
▼
Static HTML + CSS + JavaScript
(app-bundle.js, PWA-capable UI)
│
├── Vercel static hosting
│
▼
Supabase Edge Functions
│
├── account / session / data API
├── subjects / modules / goals
└── telemetry / feedback / attachments
│
▼
Supabase Postgres + Private Storage
前端运行时是纯静态 HTML / CSS / JavaScript,不依赖前端框架运行。开发阶段把多个 app-vN.js 功能层打包成 app-bundle.js,部署仍然是静态资源。
后端使用 Supabase Postgres、Edge Functions 与 Storage。需要服务端权限的操作由 Edge Function 执行,浏览器不会拿到 service_role 密钥。
| 表 | 作用 |
|---|---|
score_tracker_users |
账号、密码摘要、会话、分类设置与使用深度 |
score_tracker_exams |
考试主记录、总分、总排名、位比、市区排名、隐藏状态 |
score_tracker_scores |
每场考试的单科目标 / 原始 / 最终成绩、满分、排名与位比 |
score_tracker_subjects |
每个用户自己的科目配置与默认满分 |
score_tracker_modules |
科目组合 / Module 定义 |
score_tracker_exam_modules |
考试与组合的关联,以及组合级排名 |
score_tracker_user_goals |
各科 / 总分长期目标、理想学校、目标日期 |
score_tracker_visit_logs |
Visitor / Session / 页面与产品行为事件 |
score_tracker_feedback_submissions |
反馈主体、状态和提交时上下文 / 深度快照 |
score_tracker_feedback_replies |
用户与维护者双向回复 |
score_tracker_feedback_attachments |
反馈 / 回复附件元数据 |
反馈图片存放在私有 Storage bucket score-tracker-feedback。
score_tracker_*当前所有生产表均启用 Row Level Security (RLS);- 核心数据请求经 Edge Function 做会话校验,并在查询 / 更新时绑定当前
user_id; - 当前数据 API 使用 PBKDF2-SHA256 保存密码摘要(随机盐,100,000 次迭代),不保存明文密码;
- 会话令牌在数据库中只保存 SHA-256 摘要,并设置过期时间;
service_role只存在于服务端 Edge Function 环境,不发送到公开前端;- 反馈附件使用私有 Storage。
这不是一个通用身份平台;账号系统是为 Score Tracker 自己的低摩擦使用场景设计的。涉及真正敏感身份数据的应用应使用更标准的身份提供商和完整的安全审计流程。
- HTML / CSS / Vanilla JavaScript;
- 移动端优先,兼容桌面;
- PWA 使用场景与安装状态纳入产品分析;
- SVG / Canvas 风格的交互图表与统计视图;
- 图例颜色可自定义并支持显隐;
- 多套本地主题,外观设置保存在当前设备;
- 版本检测与前端更新提示;
- Vercel 静态部署;
- Supabase Edge Functions + Postgres + Storage 作为后端。
Study Planner 解决的是“未来应该怎么安排学习”;Score Tracker 更关注“已经发生的考试结果说明了什么”。
两者的产品方向可以看成互补:
- Study Planner:目标 → 任务 → 排期 → 执行 → 复盘 → 计划修复;
- Score Tracker:目标 → 考试 → 成绩 / 排名 → 趋势 → 分析 → 目标校准。
目前两个项目也共享一部分产品设计习惯,例如:移动端优先、状态清晰、先保留原始数据、反馈闭环以及尽量解释分析口径。
Score Tracker 仍在持续迭代。当前重点已经从“把成绩画成折线图”转向:
- 提高多考试口径下的分析可信度;
- 继续完善深度分析 Beta 的解释性与样本门槛;
- 优化科目 / 组合 / 排名体系;
- 把真实使用数据、反馈与产品迭代连接得更紧;
- 在保持手机端低摩擦录入的同时,让长期历史数据更有价值。
欢迎通过仓库 Issues 或应用内反馈继续提出问题和建议。