codee-sh/payload-training-app

GitHub: codee-sh/payload-training-app

基于 Payload CMS 和 Next.js 构建的开源健身教练管理应用,让教练在管理后台制定训练计划并分配给客户,客户通过移动端 Web 界面逐组记录训练数据。

Stars: 5 | Forks: 0

# 训练应用 一个面向教练的管理后台和面向客户的训练追踪应用,使用 Payload CMS 和 Next.js 构建。教练可以在管理面板中制定训练计划;客户则通过移动端友好的 Web 界面记录他们的训练组数。 ## 功能介绍 **教练(管理面板)** — 创建计划,将其分配给客户,详细定义训练结构,直至包含目标组数和追踪参数的单个训练动作行。 **客户(Web 应用)** — 登录后查看他们的当前计划,按单次训练逐步完成锻炼,并记录每一组的数据(次数、重量、RIR、时间等)。 ## 导航 - [数据模型](#data-model) - [技术栈](#tech-stack) - [入门指南](#getting-started) - [项目结构](#project-structure) - [核心脚本](#key-scripts) - [开发指南](#development) - [截图](#screenshots) ## 数据模型 ``` Plan └── Microcycle └── Workout └── WorkoutGroup (e.g. "A1/A2 superset") └── WorkoutExerciseRow (exercise + tracking config) ├── SetLog (per-set: reps, weight, RIR…) └── RoundLog (per-round: time, distance…) ``` 训练记录通过 `WorkoutLog` 按单次会话进行追踪,它会将客户与特定日期的特定训练关联起来。 ## 技术栈 | 层级 | 技术 | |---|---| | 框架 | Next.js 15 (App Router) | | CMS / 身份验证 | Payload CMS 3 | | 数据库 | PostgreSQL (`@payloadcms/db-postgres`) | | 样式 | Tailwind CSS | | 国际化 (i18n) | next-intl (波兰语 / 英语) | | 表单 | react-hook-form | | 图标 | lucide-react | ## 入门指南 ### 环境要求 - Node.js ≥ 24 - Yarn 4 (`corepack enable`) - PostgreSQL 数据库 ### 初始设置 ``` git clone cd training-app yarn install cp .env.example .env ``` 编辑 `.env`: ``` DATABASE_URL=postgresql://user:password@localhost:5432/training_app PAYLOAD_SECRET=your-long-random-secret-here ``` 运行数据库迁移: ``` yarn payload migrate ``` ### 运行 ``` yarn dev ``` - 应用端:`http://localhost:3000/pl` - 管理面板:`http://localhost:3000/admin` ### 首次配置 1. 打开 `/admin` 并创建首个用户账户——该账户将成为超级管理员 2. (可选)填充演示数据:`yarn seed` 3. 为每位运动员创建一个 **Client**(客户)记录 4. 构建 **Plan**(计划),依次关联 microcycle(微周期)→ workouts(训练)→ exercise rows(动作行) 5. 客户使用在管理面板中设置的邮箱和密码,在 `/pl` 路径下登录 ## 项目结构 ``` src/ ├── access/ # Shared access control functions (isAdmin, isAuthenticated…) ├── app/ │ ├── [locale]/(frontend)/ # Client-facing app (login, workout tracker) │ └── (payload)/ # Payload admin routes and API ├── collections/ # Payload collection configs (one folder per collection) │ ├── clients/ │ ├── exercises/ │ ├── plans/ │ ├── microcycles/ │ ├── workouts/ │ ├── workout-groups/ │ ├── workout-exercise-rows/ │ ├── workout-logs/ │ ├── set-logs/ │ ├── round-logs/ │ ├── media/ │ └── users/ ├── components/ │ ├── common/ # App-wide UI (logout button…) │ ├── ui/ # Primitive components (button, input, surface…) │ └── workout/ # Workout tracker components ├── data/ # Static/seed data ├── i18n/ # next-intl routing and request config ├── lib/ # Shared utilities and SDK client ├── loaders/ # Server-side data fetching functions ├── migrations/ # Payload database migrations ├── scripts/ # One-off CLI scripts (seed, import-plan…) ├── types/ # Shared TypeScript types ├── middleware.ts ├── payload-types.ts # Auto-generated — do not edit manually └── payload.config.ts .ai/ └── skills/ # AI assistant skill definitions ``` ## 核心脚本 | 脚本 | 描述 | |---|---| | `yarn dev` | 启动开发服务器 | | `yarn build` | 生产环境构建 | | `yarn start` | 启动生产服务器 | | `yarn payload migrate` | 执行待处理的数据库迁移 | | `yarn generate:types` | 根据集合配置重新生成 `payload-types.ts` | | `yarn generate:importmap` | 重新生成 Payload 管理面板的 import map(添加自定义视图后运行) | | `yarn seed` | 为数据库填充演示数据 | | `yarn seed:export` | 将当前数据库状态导出为 seed 文件 | | `yarn lint` | 运行 ESLint | | `yarn install-skills` | 将 `.ai/skills/` 链接到 `.claude/` 和 `.codex/` | ## 开发指南 ### 添加集合 请遵循 `.ai/skills/payload-build-collections` 的规范——每个集合都存放在 `src/collections/{kebab-case}/index.ts` 中,并在 `src/collections/index.ts` 中进行注册。 更改集合配置后,请重新生成类型: ``` yarn generate:types ``` ### 添加管理面板视图或自定义字段 UI 请遵循 `.ai/skills/payload-build-modules`。注册新的组件路径后,请运行: ``` yarn generate:importmap ``` ### AI 技能 本项目使用技能文件来进行 AI 辅助开发。若要将它们安装到 Claude Code 和 Codex 中: ``` yarn install-skills ``` 技能文件位于 `.ai/skills/` 目录下,涵盖:Payload 模式、集合脚手架、管理模块结构、UI 文案以及规范文档编写。 ## 截图

Training App mockup

标签:IPv6支持, Payload CMS, PostgreSQL, 健身管理, 内容管理系统, 测试用例, 移动端适配, 自动化攻击