我如何使用 React、Supabase 和 M-Pesa 为肯尼亚学生构建免费 KCSE 课程检查工具
Source: Dev.to
请提供您希望翻译的具体内容,我将为您翻译成简体中文。
概述
每年,成千上万的肯尼亚四年级毕业生焦急地等待 KUCCPS 的分配——他们并不知道自己实际上符合哪些大学课程的资格。我开发了一个免费的网络应用,允许学生输入他们的 KCSE 成绩,并立即查看他们有资格的课程。
Live demo:
Source code:
问题陈述
在 KCSE 成绩公布后,学生面临两个主要难题:
- 计算集群分数 – KUCCPS 用于确定特定课程资格的分数。
- 寻找符合条件的课程 – 共有 393 个学位和文凭课程,而官方 KUCCPS 网站仅列出分数线,没有自动资格检查工具。
解决方案:KCSE 课程检查器
- 输入他们的 KCSE 科目成绩。
- 即时查看所有六个 KUCCPS 集群的 计算后集群分数。
- 查看他们符合资格的所有 学位 和 文凭 项目(基于 2024 年 KUCCPS 分数线)。
- 可以按兴趣领域(工程、医学、商业、法律等)筛选结果。
- 下载官方 2024 年 KUCCPS 分数线 PDF 以供验证。
技术栈
| 层 | 技术 |
|---|---|
| 前端 | React 18 + TypeScript |
| 样式 | Tailwind CSS + shadcn/ui |
| 数据库 | Supabase (PostgreSQL) |
| 认证 | Supabase Google OAuth |
| 支付 | IntaSend M‑Pesa STK Push |
| 无服务器 | Supabase Edge Functions (Deno) |
| PWA | vite-plugin-pwa |
| 托管 | Vercel |
集群评分公式
KUCCPS 将课程分为六个集群,每个集群使用特定的 KCSE 科目组合。分析 2024 年的分配数据后,我得出了以下校准公式:
C = \sqrt{\frac{r}{48} \times \frac{t}{84}} \times 48 \times 0.957
r– 原始集群科目得分(4 门科目满分 48 分)t– KCSE 综合得分(7 门科目满分 84 分)0.957– 校准系数,使计算得分与实际 2024 年 KUCCPS 分配相匹配。
得到的集群得分与官方数据非常接近,能够为学生提供可靠的指导。
安全的 M‑Pesa 支付流程
- 用户输入他们的手机号码。
- 前端调用
intasend-stkEdge Function。 - Edge Function 通过 IntaSend API 触发 STK Push。
- IntaSend 在用户手机上提示输入 M‑Pesa PIN。
- 用户在设备上输入 PIN。
- IntaSend 调用
mpesa-callbackEdge Function(webhook)。 - webhook 验证交易并将 payments 表更新为
confirmed。 - 前端每 3 秒轮询一次 payments 表。
- 当
status = 'confirmed'时,结果被解锁。
安全原则: 前端从不直接写入数据;它只能读取数据库的内容。所有更新均由服务器端 Edge Function 在 webhook 确认付款后执行,防止任何绕过付款步骤的尝试。
Database Schema (RLS‑protected)
users– 学生档案user_results– KCSE 科目成绩user_cluster_results– 计算的聚类分数payments– M‑Pesa 支付记录courses– 393 门课程及其分数线degree_programme_cutoffs_exact_2024– 703 条 2024 年 KUCCPS 精确分数线reviews– 学生评论(管理员批准)
所有表均已启用 Row Level Security,因此每个用户只能访问自己的数据。
用户流程
已有用户
已付费的学生可以通过提供姓名和电话号码来检索他们的成绩;使用 Google OAuth 的用户会自动获取。
仅文凭模式
如果学生的总分低于 C+(46/84 分),应用会自动切换到仅文凭模式,隐藏学位成绩,并显示解释性信息。
兴趣筛选
学生可以按兴趣领域筛选结果,避免滚动浏览数百个专业。
渐进式网页应用
该应用可在 Android 和 iOS 设备上直接安装,无需通过 Play 商店或 App Store。
经验教训
- IntaSend + Supabase Edge Functions – 在肯尼亚文档稀缺的情况下,仍然是 M‑Pesa 集成的顺畅组合。
- SEO for React SPAs – 需要添加 JSON‑LD 结构化数据、适当的 meta 标签、站点地图,并手动提交至 Google Search Console。
- Calibrating the cluster formula – 最耗时的部分;官方公式未公开披露,因此必须针对 2024 年的投放数据进行大量测试。
未来改进
- 自定义
.co.ke域名,以实现更广泛的采用。 - 管理员仪表板,用于监控付款和用户统计。
- 针对 KUCCPS 分配结果的推送通知。
- 纳入职业技术教育(TVET)项目及其他课程。
参与方式
- Live app:
- GitHub repository:
如果您认识任何肯尼亚四年级毕业生或他们的父母,请将此工具分享给他们。对肯尼亚教育技术或 M‑Pesa 集成感兴趣的开发者欢迎探索代码。
Tags: kenya react supabase mpesa edtech webdev typescript pwa