详情

首页手游攻略 cloudtech-academy:实践指南

cloudtech-academy:实践指南

佚名 2026-10-06 14:20:01

团队讨论cloudtech-academy时,我会先把用途说清楚:CloudTech Academy 是一个实用、易于访问的学习平台。在数据与知识处理场景里,常见问题是数据结构、更新策略和可追溯性会决定结果是否可信,这正是评估时需要盯住的地方。更实际的做法是用一份规模可控且答案已知的数据集试跑,同时核对模式兼容、增量更新、查询结果和来源追踪,不要直接在关键项目上。我的判断是,它更适合需要保留数据来路与变更记录的使用者;若眼下没有这类需求,先保留观察即可。

CloudTechAnalytics/cloudtech-academy 项目截图 1

CloudTech学院

CloudTech Analytics 的学习平台。它提供数据、分析和技术方面的实用、自定进度的课程,以文本为先。

免费学习。免费赚取徽章。官方证书是可选的。

  • 每门课程、课程和评估都是免费的。
  • 短期课程由 15-40 分钟的模块组成。每个模块都有学习者执行和提交的任务(在执行过程中进行检查),并且只有在完成后才会解锁其检查。通过检查即可获得该模块的徽章。
  • 通过最终评估即可获得免费的课程结业徽章。
  • 每个徽章都是一个凭证,带有 ID (CTA-PROMPT-8F72K) 和 /credentials/:id 的公共页面。
  • 完成课程后,学习者可以选择购买官方 PDF 证书(3,000 ₦或 7 美元,由管理员设置)。它有一个证书编号(CTA-CERT-2026-000124)和一个打开/verify/:id的QR代码。

V1中有什么

短期课程 模块(每个模块都有支票和徽章)
AI 生产力基础知识 提示要点、使用 Claude、使用 ChatGPT、使用 AI 进行演示
设计和内容要点 使用 AI 进行社交媒体内容、使用 Canva 进行设计、使用 CapCut 进行视频编辑
职业必需品 使用 AI 构建 CV,专业的 LinkedIn 配置文件,快速 Excel 分析
ChatGPT 和 AI 学生版 AI 学生基础,用AI更聪明地学习,用AI研究,用AI诚实写作
学生的研究技能 像专业人士一样搜索、判断您的来源、引用和组织您的来源
建立你的学生档案 规划您的作品集、展示您的作品、构建您的作品集页面、在 LinkedIn 上分享您的作品
适合初学者的 Git 和 GitHub Git 和 GitHub 是什么,您的第一个存储库,在 GitHub 上展示您的项目
初学者网页开发 HTML、CSS、JavaScript,发布您的第一个网站
Python 初学者 Python 入门、决策列表和循环、函数和迷你项目
熊猫快速入门 加载和探索数据、清理过滤器和计算、分组连接和图表
学生的数字技能 文件和云存储、面向学生的 Google Workspace、专业电子邮件、保持在线安全
获得你的第一份实习 做好准备,寻找机会(包括远程),申请并脱颖而出,在面试中取得好成绩
初学者自由职业 选择您的技能和报价、寻找客户并获得报酬、价格和推介、交付并获得评论

每个短期课程都以至少 8 个问题的最终评估结束。模块检查是具有可能错误答案的场景问题。

学生入门 (/students) 列出了 25 项学生技能,按主题分组。每个链接到整个课程或单个模块(例如,AI 提示是 AI 生产力基础知识的第一个模块)。该列表位于 src/pages/Students.tsx 中。

| 完整课程 | 教训 | 练习 | 最终项目 |

--- --:

| 数据分析基础 | 10 | 在真实数据集上回答任务,一名 SQL 品尝者 | Kolanut 人评论(HR 数据) | | Excel 数据分析 | 11 | 回答任务:公式、XLOOKUP、清理、主元 | Kolanut 销售业绩回顾 | | SQL 用于数据分析 | 16 | SQL 在浏览器中检查的练习,以及可选的练习 | Harbourline 货运运营回顾 | | 高级 SQL | 11 | 在浏览器中检查的 SQL 练习:NULL 陷阱、日期、数据质量、窗口框架、队列、枢轴、递归 CTEs、查询计划 | Harbourline 商业健康检查 | | 电源 BI 基础知识 | 14 | 回答任务:Power Query、建模、DAX、视觉效果 | 阿什格罗夫钱伯斯练习仪表板 | | 电源 BI DAX | 11 | 根据销售、HR 和法律数据检查 SQL 的回答任务,以及根据规则检查的 DAX 编写任务 | Kolanut 商业仪表板 | | 数据建模 | 9 | SQL 检查并回答任务,围绕图表构建 | 阿什格罗夫钱伯斯数据模型 | | 数据分析统计 | 11 | 在 Excel 或 Sheets 中回答任务,对照 SQL 和 pandas 检查(包括中位数、百分位数和 p 值) | Harbourline 交付绩效审查 | | 业务分析基础知识 | 11 | 问题陈述、利益相关者登记册、访谈计划、流程图、要求、用户故事和根据规则检查的业务案例,以及法律数据的回答任务 | Harbourline 跟踪请求:业务分析包 | | 敏捷业务分析 | 10 | 回答 Scrum 团队实际待办事项(速度、周期时间、范围增长)的任务,以及愿景、故事地图、拆分、准备和完成的定义、WSJF 以及根据规则检查的试点计划 | Harbourline 延误通知:敏捷交付包 | | 通过 BPMN 和精益进行流程改进 | 10 | 回答港口清关事件日志上的任务(等待、流程效率、瓶颈、试点结果)以及 BPMN 模型、废物清单、五个原因、未来状态和对照规则检查的控制计划 | Harbourline 清理:下一个改进周期 | | 机器学习基础知识 | 11 | Colab 中的 Python 与 scikit-learn;通过运行课程检查的每个代码块和答案(租金回归、带宽违约分类) | 阶梯式小额信贷:负责任的信贷模式 | | 特征工程和模型评估 | 8 | Colab 中的 Python;来自 65,825 笔资产账户交易的时间点特征、基于时间的验证、校准、提升和漂移,所有这些都通过运行课程进行检查 | Paystream:保持诚实的保留模型 | | 实验和A/B测试 | 9 | Colab 中的 Python 与 scipy;样本大小、SRM、窥视模拟、z 测试、引导程序、分段、护栏评估和差异中的差异,所有这些都通过运行课程进行检查 | 支付流:实验回顾和下一次测试 | | 产品管理基础知识 | 10 | Colab 中的 Python 涉及资产账户的注册、活动、反馈、访谈、待办事项和有保留的发布:结果、渠道、群组、RICE、路线图、发布测量和规格,所有这些都通过运行课程进行检查 | Paystream 的下一季度 | | 项目管理基础知识 | 10 | Colab 中的 Python 介绍仓库启动任务、每周进度、风险和变更请求:PERT、关键路径、蒙特卡洛计划风险、挣值、预测、EMV 和变更控制,所有这些都通过运行课程进行检查 | 仓库的第 10 周回顾 | | 使用 JavaScript 进行 Web 开发 | 10 | 浏览器控制台和 HTML 文件:JavaScript 和精确货币、数组和 Intl、可访问的 HTML、响应式 CSS、DOM 事件、可访问的验证、获取每个结果和测试;每个 JavaScript 示例的输出均由 npm run test:js 检查 | Tallybook 的发票付款页面 | | 面向开发人员的数据库和 APIs | 10 | Colab 中的 Python 与 SQLite 和 Flask:模式设计、拒绝不良导出行的命名约束、参数化查询、事务、查询计划、迁移、REST 设计和 pytest 装置,关于 Tallybook 的发票数据;所有这些都通过运行课程来检查 | Tallybook的进销存数据库和API | | 使用 Python 进行软件工程 | 10 | Colab 中的 Python 和 %%bash 单元:函数、kobo 和 Decimal Money、pytest 测试和边界情况、调试、验证、Git、代码审查和 Flask API、Tallybook 的发票数据;由 npm run test:shell 检查的 pytest 和 git 输出(SHELL_TEST_PATH 指向具有 pytest 和 Flask 的 Python) | Tallybook 的发票服务 | | 可观测性和站点可靠性 | 10 | Colab 中的 Python 涉及每分钟指标、结构化日志、跟踪、每日 SLIs、警报历史记录和辛苦工作:信号、百分位数、燃烧率警报、警报清理、利特尔定律和错误预算,所有这些都通过运行课程进行检查 | Tallybook 的可靠性审查 | | CI/CD 和容器 | 10 | Colab 中的 Python 部署、管道运行、金丝雀检查、映像构建、Trivy 格式扫描、Dockerfile 和 GitHub 操作工作流程:DORA 测量、Dockerfile 和工作流程检查器、缓存、金丝雀分析和恢复,所有这些都通过运行课程进行检查 | Tallybook 的交付审核 | | 使用 Terraform 进行基础设施即代码 | 10 | Python in Colab on Terraform 1.9 状态、变量文件和六个拉取请求计划 JSON:云库存覆盖、状态秘密、危险变化、策略即代码、漂移和导入; HCL 示例通过 terraform fmt | Tallybook 的基础设施审查 | | Linux 和网络基础知识 | 10 | Web 服务器的访问和身份验证日志以及系统快照上的 Colab %%bash 单元格中的 Shell 命令:grep、awk、权限、进程、SSH、防火墙规则、DNS、HTTP、脚本和 cron;每个命令的输出均由 npm run test:shell 检查 | prod-web-01 上发生了什么 | | 云基础知识:成本、扩展性和可靠性 | 10 | Colab 中的 Python;计费分析、调整规模、闲置资源、计划和定价模型、自动扩展、可用性和 SLOs、SaaS 公司云帐户上的访问审核和成本管理,所有这些都通过运行课程进行检查 | Tallybook 的云评论 | | LLM 评价与安全生产 | 10 | Colab 中的 Python;带有间隔的回归套件、配对发布比较和门、红队、护栏阈值和公平性、控制限制警报、抽样分级和事后分析,所有这些都通过运行课程进行检查 | Paystream 的 AI 质量和安全计划 | | AI 代理及工具使用 | 10 | Colab 中的 Python;工具设计和范围界定、从记录的运行中重播的保护循环、代码中的规则、批准、结果和轨迹评估、通过工具结果注入、成本和坚控,所有这些都通过运行课程进行检查;实时通话可选 | Paystream 支持代理:v3 设计和评估 | | 生成 AI 工程 | 10 | Colab 中的 Python;提示、经过验证的输出、针对经典基线的 LLM 分类器评估、检索和 RAG、LLM 法官根据人类评分、隐私、注入和成本进行检查,所有这些都通过运行课程进行检查;实时通话可选 | 支付流支持助理:原型和评估 | | 时间序列预测 | 9 | Colab 中的 Python;基线、日历回归、促销和休息、回滚测试、间隔和四年每日仓库销售的安全库存,所有这些都通过运行课程进行检查 | Kolanut Lagos 仓库:预测和订购 | | 软件开发人员顶峰 | 8 | Flask 上的 Colab 中的 %%bash 单元和 SQLite 退款服务存在植入的错误:错误报告测试失败、小数钱、SQL 注入、幂等密钥和交易、API 验证、代码审查、Git 和 CI;通过 npm run test:shell 检查输出 | Kasuwa 的退款服务,固定并发货 | | 云和 DevOps 工程师顶点 | 8 | Colab 中的 Python 在线商店的云库存、中断指标和日志、Terraform 计划、部署、负载测试、警报和比赛日结果:事后分析、策略即代码、DORA、容量、消耗率警报、成本和 go/no-go,所有这些都通过运行课程进行检查 | Kasuwa:销售准备情况审查 | | AI 工程师顶点 | 8 | Colab 中的 Python 记录的 LLM 输出:验证和基础、代码中的规则、针对基线的检索、判断检查、红队和公平护栏、发布门和生产坚控,所有这些都通过运行课程进行检查;无需 API 密钥 | Shieldline 的 WhatsApp 理赔助理 | | 数据科学家顶峰 | 8 | Colab 中的 Python 处理在线商店的订单:泄漏审计、时间点功能、基于时间的验证、校准、随机试验的提升、基于成本的阈值、城市公平性和坚控,所有这些都通过运行课程进行检查 | Kasuwa:发货前该给谁打电话 | | 业务分析师顶点 | 8 | 回答有关汽车保鲜公司索赔、事件日志、续保和 UAT 结果的任务,并对照 SQL 进行检查;问题陈述、根本原因、试点结果、建议、用户故事和根据规则检查的决策文件 | Shieldline Insurance:解决慢车索赔问题 | | 数据分析师顶峰 | 7 | 回答有关原始零售出口的任务,对照 SQL 进行检查;根据规则检查书面计划、数据质量日志、执行摘要和组合任务 | Voltline 电子商业评论 | | 用于数据分析的 Python | 12 | 在真实数据集上回答任务,对照 SQL 和课程教授的 pandas 进行检查 | Kolanut 客户健康审查 |

每门完整课程还有一个可选练习的“更多练习”部分(通常在与课程不同的数据集上),这不计入证书。

每门完整课程都有至少 10 个问题(最多 15 个问题)的最终评估。每个评估的及格分数为 60%,选项经过重新排列,并在服务器上评分。

平台 状态
账户、仪表板、进度跟踪 ✓
带有公共证书页面和共享的模块徽章和课程完成徽章(LinkedIn、WhatsApp、Meta 社交平台、X、复制链接、图像) ✓
可选官方证书:订单、付款(在演示模式下模拟;银彳 + 管理授权,直到连接提供商)、PDF 和 QR 代码、/verify/:id ✓
练习项目(/projects,/projects/:id 各一页):简介、问题、包含列类型和预览的数据字典、入门代码、ZIP 下载;五个数据集(物流、销售、混乱客户导出、HR、法律) ✓
项目徽章:学习者提交其作品的链接、摘要和 4-5 个关键数字,并在服务器上评分;所有权利都可以通过其证书页面和个人资料上链接的工作获得项目徽章。管理员可以将作品标记为“由 CloudTech 审阅”(/admin/practice) ✓
管理员 (/admin):课程、模块和模块徽章、课程、模块检查和最终评估、学生、提交、证书(搜索、撤销)、证书购买(授予、电子邮件、CSV)、每种货币的定价 ✓
公共技能档案(/learners/:slug):默认关闭;学习者在他们的个人资料中选择地址和标题,页面会列出他们的有效徽章和证书,而不是他们的电子邮件 ✓
SEO:每个公共页面预渲染、站点地图、结构化数据 ✓

运行它

npm install
npm run dev          # http://localhost:5173
npm run build        # typecheck, build, then prerender public pages into dist/
npm run test:content # checks every lesson; recomputes every answer from the CSV files
npm run test:python  # runs every Python example and checks the outputs and answers (needs Python 3 with pandas and matplotlib)

如果没有 Supabase 密钥,学院将以演示模式运行:

  • 每个页面上的横幅都这么说。
  • 帐户和进度仅保存在当前浏览器中。
  • 在本地运行时(npm run dev),创建的第一个帐户将成为管理员,因此可以试用管理区域。在实时网站上,没有人可以通过这种方式成为管理员。

连接苏帕基地

  1. 在 supabase.com 创建一个项目。

  2. 在SQL编辑器中,运行supabase/migrations/0001_academy.sql,然后运行0002_public_profiles.sql、0003_module_tasks.sql、0004_inactivity_and_remove.sql 和 0005_tracks_and_levels.sql,则0006_project_badges.sql。

  3. 然后运行supabase/seed.sql。它加载课程、课程、评估和项目。

  4. 在身份验证 → URL 配置中:

    • 将站点 URL 设置为学院的地址。
    • 将 <address>/update-password 添加到重定向 URLs。密码重置链接使用它。
  5. 将.env.example复制到.env.local并填写:

    • 项目设置 → API 中的 VITE_SUPABASE_URL 和 VITE_SUPABASE_ANON_KEY。
    • VITE_SITE_URL:公共地址。它用于证书验证链接。
  6. 在网站上注册,然后在 SQL 编辑器中让自己成为管理员:

    update public.profiles set role = 'admin' where email = '[email protected]';
    

在 Vercel 上,在“项目设置”→“环境变量”下添加相同的变量并重新部署。

安全模型

  • 每个表都启用行级安全性。
  • 学习者只能读写自己的进度。
  • 评估答案仅供管理员阅读。 submit_assessment() 对服务器上的尝试进行评分。
  • 学习者可以使用 remove_course() 从“我的学习”中删除课程,这会清除其课程、任务和评估尝试(除非课程已完成)。 14 天没有活动的未完成课程以相同的方式开始:apply_inactivity_resets() 在学习者下次打开仪表板或课程时运行。获得的徽章和证书绝不会被触及。活动(开始课程、完成某些内容、进行评估)由触发器记录在 enrollments.last_active_at 中。
  • 模块徽章仅在模块中的每个必需任务完成并通过模块检查后由 claim_module_badge() 创建。
  • 课程完成凭证仅由 issue_course_credential() 创建。它会重新检查课程设置的每项要求:模块徽章、课程、所需练习、通过的最终评估、项目以及个人资料上的全名。
  • 学习者只能以 certificate_prices 中存储的价格为其已完成的课程开始订单 (start_certificate_order())。
  • 官方证书仅针对已支付或授予的订单颁发:由 complete_certificate_order()(只有支付服务器(服务角色)可以调用)或由具有 admin_grant_certificate() 的管理员调用。
  • verify_credential() 和 verify_certificate() 仅返回徽章或证书上打印的内容,而不返回电子邮件。
  • SQL 练习在学习者的浏览器中运行,因此练习完成情况会根据信任进行记录。服务器分级评估才是证书的真正大门。

内容

课程内容位于src/content/:

  • tracks.ts:职业轨迹(课程阶段、推荐实践项目和课程仍为upcoming)和四个级别:1基础、2实践技能、3专业、4职业项目。完成赛道中的所有必修课程即可获得由 issue_track_credential() 颁发的赛道徽章。页面:/tracks 和 /tracks/:slug。
  • catalog.ts:课程、模块和完成规则。每门课程都有一个 level (1-4)。短期课程有format: "short";它的每个模块都有一个 badge 名称、badgeCode(在凭证 IDs 中使用)和 skills(在凭证页面上显示)。
  • <course>/NN-slug.md:教训。前面的内容包含 title、minutes 和 summary,以及可选的 handsOn(请参见下面的诚实计时)。全课程有六个部分(问题......检查你的理解);短期课程有一些 ## 步骤,包括 ## Try it。
  • <course>/assessment.ts:最终评估,以及对于短期课程,每个徽章模块的模块检查(kind: "module"、moduleId)。 <course>/project.ts:完整课程的项目,带有 rubric:向学习者显示的标准,并由 /admin 中的审阅者勾选。

Lesson Markdown 支持这些自定义代码围栏:

  • sql run:一个可运行的示例。
  • exercise: JSON with id, prompt, starter, solution, hint, required and orderMatters. An answer counts as correct when its result matches the result of solution.
  • answer: a task done in Excel, Sheets or Power BI, checked by its result. JSON with id, prompt, answer (number or text), optional accept, tolerance, format (naira, percent, number, text), hint, explanation, required, and dataset + files for download links. Tasks that use a dataset must include verify, a SQL query over the CSV files that reproduces the answer; npm run test:content 运行它。
  • 任务: written work the learner types or pastes (a CV bullet, a prompt, an email, some HTML), checked against 规则 and then compared with a model answer. JSON with ID, 迅速的, 分钟, 规则, 样本 (the model answer, which must pass its own rules), optional 笔记 (commentary shown under the model answer), 占位符, 暗示, 行 and 必需的. Each rule has a 标签 and a 图案 (a regular expression, case-insensitive and line by line) with optional 分钟 (matches needed), 缺席的 (must not match) or perLine (every line must match), or a length limit: minWords, maxWords, minLines.
  • 在 Python 课程中,answer 还可以有 pyVerify:课程代码运行后计算的 Python 表达式; npm run test:python 检查它是否等于答案。
  • dataset: a download card, { "dataset": "sales", "files": ["orders"] }.
  • quiz:JSON 问题。

标注使用 > [!TIP]、[!NOTE]、[!WARNING] 或 [!BUSINESS]。

诚实的计时。 课程的 minutes 必须与实际需要的内容匹配,如果不匹配,npm run test:content 就会失败。估计的阅读速度为每分钟 200 个单词,每个可运行示例和每个编号演练步骤一分钟,每个所需任务的时间(任务自己的 minutes;SQL 练习为 4,回答任务为 3)以及每个测验问题半分钟。可选工作不计算在内。内容无法显示的实践工作,例如在演练之外构建幻灯片或页面,在前面的内容中声明为 handsOn: <minutes>。 node scripts/fix-lesson-minutes.mjs <course> 为您设置分钟。

短期课程规则。 每节短期课程都需要一个 ## Try it 步骤和至少两个必修任务,并且没有课程测验(模块检查在 assessment.ts 中)。

Python 课程。 npm run test:python 运行每个python block. A text block straight after a Python block is the output the learner should see, and must match what the code prints (fence it text nocheck if it's only an illustration; fence code python norun if it's meant to fail). py scripts/test-python.py --fix <course>将真实输出写入课程中。

编辑内容后:

  • 运行npm run test:content。
  • 然后运行npm run seed重新生成supabase/seed.sql,并在Supabase中再次运行。重新运行是安全的,因为每个语句都是更新插入。

在/admin中编辑的课程存储在数据库中。下一次种子运行将覆盖两个位置都存在的课程,因此请选择一个位置来编辑每个课程。

图像。课程使用 Excel、SQL Server Management Studio 和 Power BI Desktop 的真实屏幕截图(在 public/images/courses/ 中,用编号标注进行注释,帐户名称模糊)以及由 python scripts/diagrams.py (SVG) 生成的图表。将图像放在自己的行上,``,它会呈现为带标题的图形。添加或更改图像后,运行 npm run images 更新其大小;如果图像丢失、缺少替代文本或未调整大小,npm run test:content 会失败。

练习数据集是虚构的,由 npm run datasets 使用固定种子生成。每个数据集都有自己的种子,因此更改一个数据集永远不会改变另一个数据集。使用 node scripts/sql.mjs --data sales "SELECT ..." 探索它们。

添加练习项目

项目位于 src/content/projects.ts。 PRACTICE_PROJECTS 中的每个条目都成为 /projects/<id> 中的一个页面,具有自己的封面图案和颜色。

  • 现有数据集上的新项目: 添加一个条目,其中包含业务背景、简介、问题、可交付成果、方法、起始代码、badge 和 3-5 checks(有一个正确答案的问题)。将每张支票的答案和一个 verify SQL 查询放入 src/content/project-answers.ts 中;页面从不导入该文件,并且数据库对提交进行评分。 npm run test:content 针对 CSV 文件运行每个 SQL 启动程序和每个 verify 查询,因此无法发送错误的答案。然后 npm run seed 并运行 supabase/seed.sql 以便数据库具有新的答案键。
  • 新数据集:将其CSV文件放入public/datasets/<id>/中,将其添加到DATASETS中,描述DATA_DICTIONARY中的每个文件和列,然后运行npm run datasets:meta。这会将行、列类型、缺失值和预览写入 src/content/dataset-meta.json 并构建 public/datasets/<id>.zip。如果未描述列或元数据已过期,npm run test:content 将失败。

付款(Paystack)

证书通过 Paystack 通过卡、银彳或 USSD 支付。 supabase/functions/ 中的三个 Supabase Edge 函数可以处理它:

  • certificate-checkout:对于已登录学员自己的挂单,使用数据库中的金额和币种启动 Paystack 交易,并返回支付页面。返回地址仅限于学院。
  • certificate-verify:学习者回来后,询问Paystack是否支付成功,检查金额和币种是否与订单相符,并调用complete_certificate_order()颁发证书。
  • paystack-webhook:相同,由 Paystack 本身触发(因此关闭的选项卡不会丢失付款)。仅接受有效 x-paystack-signature 的请求,并通过 Paystack 重新检查交易。

设置:

  1. 秘密:Supabase 中的 PAYSTACK_SECRET_KEY → 边缘功能 → 秘密(测试时为 sk_test_…,实际支付时为 sk_live_…)。它永远不会出现在网站的代码中。
  2. 部署:supabase functions deploy certificate-checkout certificate-verify 和 supabase functions deploy paystack-webhook --no-verify-jwt。
  3. Paystack 中的 Webhook URL → 设置 → API 密钥和 Webhooks:https://<project>.supabase.co/functions/v1/paystack-webhook。
  4. 仅当 Paystack 为企业启用了货币(USD 需要批准)时,才可以在线支付货币。否则,学习者将通过卡或银彳获得奈拉价格并获得管理补助。

在演示模式下,模拟付款。

结构

src/
  content/        courses, lessons, assessment, project, datasets
  lib/backend/    Backend interface with Supabase and demo (localStorage) implementations
  lib/sql/        sql.js worker, sandbox, and result comparison for exercises
  pages/          public pages, learner pages, auth/, admin/
  components/     layout, lesson renderer, SQL editor parts, certificate artwork
scripts/          prerender, seed builder, content tests, dataset and brand asset generators
supabase/         migrations, Edge Functions and generated seed

公共页面预呈现为静态 HTML。登录页面(仪表板、管理、评估、证书、验证、登录)通过 vercel.json 中的重写从 app.html 提供。

点击查看更多
推荐专题
热门阅读