Checkpoint: v3.0 - 新增训练视频教程库(分类浏览、自评系统)、训练提醒通知(多类型提醒、浏览器推送)、通知记录管理、去除冗余文字。65个测试全部通过。

这个提交包含在:
Manus
2026-03-14 08:28:57 -04:00
父节点 2c418b482e
当前提交 27083d5af9
修改 19 个文件,包含 2856 行新增32 行删除

查看文件

@@ -19,7 +19,7 @@ export default function Home() {
<header className="container py-6 flex items-center justify-between">
<div className="flex items-center gap-2">
<Target className="h-6 w-6 text-primary" />
<span className="font-bold text-lg tracking-tight">Tennis Training Hub</span>
<span className="font-bold text-lg tracking-tight">Tennis Hub</span>
</div>
<Button onClick={() => setLocation("/login")} variant="default" size="sm">
使
@@ -30,19 +30,18 @@ export default function Home() {
<div className="max-w-3xl mx-auto text-center">
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-primary/10 text-primary text-sm font-medium mb-6">
<Zap className="h-3.5 w-3.5" />
AI驱动的网球训练助手
AI网球训练助手
</div>
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight leading-tight">
<span className="text-primary block mt-1"></span>
<span className="text-primary block mt-1"></span>
</h1>
<p className="text-lg text-muted-foreground mt-6 max-w-xl mx-auto leading-relaxed">
AI姿势识别和智能训练计划
AI姿势识别 · · ·
</p>
<div className="flex items-center justify-center gap-3 mt-8">
<Button onClick={() => setLocation("/login")} size="lg" className="gap-2 h-12 px-6">
<ChevronRight className="h-4 w-4" />
</Button>
</div>
@@ -57,37 +56,37 @@ export default function Home() {
{
icon: Video,
title: "AI姿势识别",
desc: "基于MediaPipe的浏览器端实时姿势分析,识别33个身体关键点,精准评估挥拍动作",
desc: "MediaPipe实时分析33个关键点,精准评估挥拍动作",
color: "bg-blue-50 text-blue-600",
},
{
icon: Target,
title: "智能训练计划",
desc: "根据您的水平和分析结果,AI自动生成和调整个性化训练方案,只需球拍即可在家训练",
desc: "根据水平和分析结果,AI自动生成和调整训练方案",
color: "bg-green-50 text-green-600",
},
{
icon: Award,
title: "NTRP自动评分",
desc: "基于美国网球协会标准,从5个维度综合评估您的技术水平,自动更新评分",
desc: "USTA标准五维度评估,每次分析自动更新评分",
color: "bg-purple-50 text-purple-600",
},
{
icon: Zap,
title: "击球统计分析",
desc: "自动检测击球次数、挥拍速度、击球一致性,量化每次训练效果",
title: "击球统计",
desc: "击球次数、挥拍速度、一致性,量化训练效果",
color: "bg-orange-50 text-orange-600",
},
{
icon: Footprints,
title: "运动轨迹追踪",
desc: "记录身体重心移动轨迹分析脚步移动模式,提升步法灵活性",
title: "运动轨迹",
desc: "重心移动轨迹分析,优化脚步移动模式",
color: "bg-teal-50 text-teal-600",
},
{
icon: TrendingUp,
title: "进度可视化",
desc: "直观展示训练历史、能力提升趋势评分变化,激励持续进步",
title: "进度追踪",
desc: "训练历史、能力趋势评分变化一目了然",
color: "bg-indigo-50 text-indigo-600",
},
].map((feature) => (
@@ -107,10 +106,10 @@ export default function Home() {
<h2 className="text-2xl font-bold text-center mb-12">使</h2>
<div className="grid grid-cols-1 md:grid-cols-4 gap-6 max-w-4xl mx-auto">
{[
{ step: "1", title: "输入用户名", desc: "无需注册,输入用户名即可开始" },
{ step: "2", title: "生成训练计划", desc: "选择水平,AI生成个性化方案" },
{ step: "3", title: "上传训练视频", desc: "录制挥拍视频并上传分析" },
{ step: "4", title: "获取评分建议", desc: "查看分析结果和矫正建议" },
{ step: "1", title: "输入用户名", desc: "用户名登录即可" },
{ step: "2", title: "生成计划", desc: "AI个性化训练方案" },
{ step: "3", title: "上传视频", desc: "录制挥拍分析" },
{ step: "4", title: "获取反馈", desc: "评分与矫正建议" },
].map((item) => (
<div key={item.step} className="text-center">
<div className="h-12 w-12 rounded-full bg-primary text-primary-foreground flex items-center justify-center text-lg font-bold mx-auto mb-3">
@@ -126,8 +125,8 @@ export default function Home() {
{/* CTA */}
<section className="container py-16">
<div className="max-w-2xl mx-auto text-center p-8 rounded-2xl bg-primary/5">
<h2 className="text-2xl font-bold mb-3"></h2>
<p className="text-muted-foreground mb-6"></p>
<h2 className="text-2xl font-bold mb-3"></h2>
<p className="text-muted-foreground mb-6">使</p>
<Button onClick={() => setLocation("/login")} size="lg" className="gap-2">
<ChevronRight className="h-4 w-4" />
@@ -140,9 +139,9 @@ export default function Home() {
<div className="flex items-center justify-between text-xs text-muted-foreground">
<div className="flex items-center gap-2">
<Target className="h-4 w-4" />
<span>Tennis Training Hub</span>
<span>Tennis Hub</span>
</div>
<span>AI驱动的在家网球训练助手</span>
<span>AI网球训练助手</span>
</div>
</footer>
</div>