Chore: remove promotional copy and home-training wording

这个提交包含在:
cryptocommuniums-afk
2026-03-14 21:50:09 +08:00
父节点 914f015c30
当前提交 ba35e50528
修改 11 个文件,包含 50 行新增50 行删除

查看文件

@@ -67,7 +67,7 @@ export default function Dashboard() {
<div className="flex gap-2">
<Button data-testid="dashboard-training-button" onClick={() => setLocation("/training")} className="gap-2">
<Target className="h-4 w-4" />
</Button>
<Button variant="outline" onClick={() => setLocation("/analysis")} className="gap-2">
<Video className="h-4 w-4" />
@@ -220,7 +220,7 @@ export default function Dashboard() {
<div className="h-[200px] flex items-center justify-center text-muted-foreground text-sm">
<div className="text-center">
<Video className="h-8 w-8 mx-auto mb-2 opacity-30" />
<p>AI分析</p>
<p></p>
</div>
</div>
)}
@@ -231,7 +231,7 @@ export default function Dashboard() {
{/* Quick actions */}
<Card className="border-0 shadow-sm">
<CardHeader className="pb-2">
<CardTitle className="text-base font-semibold"></CardTitle>
<CardTitle className="text-base font-semibold"></CardTitle>
</CardHeader>
<CardContent>
<div className="grid grid-cols-1 sm:grid-cols-3 gap-3">
@@ -244,7 +244,7 @@ export default function Dashboard() {
</div>
<div>
<p className="font-medium text-sm"></p>
<p className="text-xs text-muted-foreground">AI定制个人训练方案</p>
<p className="text-xs text-muted-foreground"></p>
</div>
</button>
<button
@@ -256,7 +256,7 @@ export default function Dashboard() {
</div>
<div>
<p className="font-medium text-sm"></p>
<p className="text-xs text-muted-foreground">MediaPipe AI姿势识别</p>
<p className="text-xs text-muted-foreground">姿</p>
</div>
</button>
<button
@@ -268,7 +268,7 @@ export default function Dashboard() {
</div>
<div>
<p className="font-medium text-sm">NTRP评分</p>
<p className="text-xs text-muted-foreground"></p>
<p className="text-xs text-muted-foreground"></p>
</div>
</button>
</div>

查看文件

@@ -30,18 +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网球训练助手
</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姿势识别 · · ·
· 姿 · ·
</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>
@@ -50,43 +50,43 @@ export default function Home() {
{/* Features */}
<section className="container py-16">
<h2 className="text-2xl font-bold text-center mb-12"></h2>
<h2 className="text-2xl font-bold text-center mb-12"></h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 max-w-5xl mx-auto">
{[
{
icon: Video,
title: "AI姿势识别",
desc: "MediaPipe实时分析33个关键点,精准评估挥拍动作",
title: "姿势识别",
desc: "使用 MediaPipe 分析 33 个关键点并记录挥拍数据",
color: "bg-blue-50 text-blue-600",
},
{
icon: Target,
title: "智能训练计划",
desc: "根据水平和分析结果,AI自动生成和调整训练方案",
title: "训练计划",
desc: "根据水平和分析结果生成训练安排",
color: "bg-green-50 text-green-600",
},
{
icon: Award,
title: "NTRP自动评分",
desc: "USTA标准五维度评估,每次分析自动更新评分",
desc: "USTA 维度记录评分结果",
color: "bg-purple-50 text-purple-600",
},
{
icon: Zap,
title: "击球统计",
desc: "击球次数、挥拍速度一致性,量化训练效果",
desc: "记录击球次数、挥拍速度一致性",
color: "bg-orange-50 text-orange-600",
},
{
icon: Footprints,
title: "运动轨迹",
desc: "重心移动轨迹分析,优化脚步移动模式",
desc: "记录重心移动轨迹和脚步变化",
color: "bg-teal-50 text-teal-600",
},
{
icon: TrendingUp,
title: "进度追踪",
desc: "训练历史、能力趋势评分变化一目了然",
desc: "查看训练历史、趋势评分变化",
color: "bg-indigo-50 text-indigo-600",
},
].map((feature) => (
@@ -103,11 +103,11 @@ export default function Home() {
{/* How it works */}
<section className="container py-16">
<h2 className="text-2xl font-bold text-center mb-12">使</h2>
<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: "2", title: "生成计划", desc: "生成训练安排" },
{ step: "3", title: "上传视频", desc: "录制挥拍并分析" },
{ step: "4", title: "获取反馈", desc: "评分与矫正建议" },
].map((item) => (
@@ -125,10 +125,10 @@ 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" />
</Button>
</div>
@@ -141,7 +141,7 @@ export default function Home() {
<Target className="h-4 w-4" />
<span>Tennis Hub</span>
</div>
<span>AI网球训练助手</span>
<span></span>
</div>
</footer>
</div>

查看文件

@@ -285,7 +285,7 @@ export default function LiveCamera() {
</DialogTitle>
<DialogDescription>
</DialogDescription>
</DialogHeader>
<div className="space-y-4 py-2">
@@ -313,7 +313,7 @@ export default function LiveCamera() {
<Button onClick={() => setSetupStep(s => s + 1)}></Button>
) : (
<Button onClick={handleSetupComplete} className="gap-2">
<Camera className="h-4 w-4" />使
<Camera className="h-4 w-4" />
</Button>
)}
</DialogFooter>

查看文件

@@ -37,13 +37,13 @@ export default function Login() {
<Target className="w-8 h-8 text-primary" />
</div>
<h1 className="text-3xl font-bold tracking-tight">Tennis Hub</h1>
<p className="text-muted-foreground mt-2">AI网球训练助手</p>
<p className="text-muted-foreground mt-2"></p>
</div>
<Card className="border-0 shadow-xl">
<CardHeader className="text-center pb-2">
<CardTitle className="text-xl" data-testid="login-title"></CardTitle>
<CardDescription>使</CardDescription>
<CardTitle className="text-xl" data-testid="login-title"></CardTitle>
<CardDescription></CardDescription>
</CardHeader>
<CardContent>
<form onSubmit={handleLogin} className="space-y-4">
@@ -96,7 +96,7 @@ export default function Login() {
</Card>
<p className="text-center text-xs text-muted-foreground mt-6">
使
</p>
</div>
</div>

查看文件

@@ -96,7 +96,7 @@ export default function Training() {
<div className="flex items-center justify-between">
<div>
<h1 className="text-2xl font-bold tracking-tight" data-testid="training-title"></h1>
<p className="text-muted-foreground text-sm mt-1">AI个性化训练方案</p>
<p className="text-muted-foreground text-sm mt-1"></p>
</div>
</div>
@@ -109,7 +109,7 @@ export default function Training() {
</CardTitle>
<CardDescription>
AI生成个性化训练方案
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
@@ -149,7 +149,7 @@ export default function Training() {
className="w-full sm:w-auto gap-2"
>
{generateMutation.isPending ? (
<><Loader2 className="h-4 w-4 animate-spin" />AI生成...</>
<><Loader2 className="h-4 w-4 animate-spin" />...</>
) : (
<><Sparkles className="h-4 w-4" /></>
)}
@@ -186,7 +186,7 @@ export default function Training() {
) : (
<RefreshCw className="h-3 w-3" />
)}
</Button>
</div>
{activePlan.adjustmentNotes && (

查看文件

@@ -98,7 +98,7 @@ export default function Tutorials() {
<BookOpen className="w-6 h-6 text-primary" />
</h1>
<p className="text-muted-foreground mt-1"></p>
<p className="text-muted-foreground mt-1"></p>
</div>
{/* Progress Overview */}