优化阅读页跳转逻辑,优先传递章节中间ID(mid),以提升分享功能的一致性。更新相关页面以支持新逻辑,并在多个页面中添加mid数据绑定,确保数据传递的完整性。

This commit is contained in:
Alex-larget
2026-02-28 11:10:39 +08:00
parent 8af2d808f9
commit 244fe98591
106 changed files with 3379 additions and 239 deletions

View File

@@ -1,6 +1,6 @@
# Soul 创业派对 - .cursor 配置说明
本目录rulesskills 为**开发团队**服务,用于约束开发、防止互窜、经验升级。
本目录**cursor标准模板** 重构,rulesskills、agent 为**开发团队**服务,用于约束开发、防止互窜、经验升级。
---
@@ -9,33 +9,42 @@
```
.cursor/
├── README.md # 本说明(入口)
├── rules/ # 规则boundary、checklist、助理、会议
├── config/ # 配置paths.py、workspace.txt、model_switch.json
├── rules/ # 规则boundary、checklist、助理、会议、老板分身-索引)
├── skills/ # Skills按角色分配
├── agent/ # 智能体(标准开发团队结构)
│ ├── 老板分身/ # 最高权限,协调所有角色
│ ├── 开发助理/ # 规则进化、通用经验、项目索引、bat 入口
│ │ ├── evolution/ # 通用经验池
│ │ ├── script/ # 一键-列出经验池.bat、一键-添加经验.bat 等
│ │ └── 项目索引/ # 各角色开发进度(小程序.md、管理端.md 等)
│ ├── 小程序开发工程师/
│ ├── 管理端开发工程师/
│ ├── 后端工程师/
│ ├── 产品经理/
│ ├── 软件测试/
│ └── 团队/ # 跨角色共享经验
├── scripts/ # 共享脚本evolution.py、经验模板.md、db-exec
├── docs/ # 文档(职责定义、边界、分析)
├── 经验库/ # 经验沉淀,用于自动升级 Skills
│ ├── README.md
│ ├── 经验清单.md
│ └── {小程序/管理端/后端/产品/测试/助理橙子/团队}/
└── 会议记录/ # 多角色会议纪要(橙子生成)
├── README.md
├── _模板.md
└── YYYY-MM-DD_主题.md
├── process/ # 工作流
├── meeting/ # 会议纪要(橙子生成)
└── archive/ # 历史归档
```
---
## 开发团队
| 角色 | 负责 | 主 Skill |
|------|------|----------|
| 小程序开发工程师 | miniprogram/ | SKILL-小程序开发.md |
| 管理端开发工程师 | soul-admin/ | SKILL-管理端开发.md |
| 后端开发 | soul-api/ | SKILL-API开发.md说「后端」「API」也可触发 |
| 产品经理 | 开发文档/1、需求/、临时需求池/ | SKILL-产品经理.md |
| 测试人员 | miniprogram、soul-admin、soul-api | SKILL-测试.md说「测试」「QA」也可触发 |
| 助理橙子 | 讨论后记录、经验升级 | SKILL-助理橙子-文档同步.md |
| 角色 | 负责 | 主 Skill | Agent 目录 |
|------|------|----------|------------|
| 小程序开发工程师 | miniprogram/ | SKILL-小程序开发.md | agent/小程序开发工程师/ |
| 管理端开发工程师 | soul-admin/ | SKILL-管理端开发.md | agent/管理端开发工程师/ |
| 后端开发 | soul-api/ | SKILL-API开发.md | agent/后端工程师/ |
| 产品经理 | 开发文档/1、需求/、临时需求池/ | SKILL-产品经理.md | agent/产品经理/ |
| 测试人员 | miniprogram、soul-admin、soul-api | SKILL-测试.md | agent/软件测试/ |
| 助理橙子 | 讨论后记录、经验升级 | SKILL-助理橙子-文档同步.md | agent/开发助理/ |
**经验**:每角色独立文件夹 + 团队(跨角色共享)。用户说「吸收经验」「升级 skills」→ 入库 + 升级 Skill说「保存开发进度」「任务完成」「搞定了」→ 更新项目索引。详见 [经验库 README](./经验库/README.md)
**经验**:每角色 `agent/{角色}/evolution/`,团队共享 `agent/团队/evolution/`。用户说「吸收经验」「升级 skills」→ 入库 + 升级 Skill说「保存开发进度」「任务完成」→ 更新 `agent/开发助理/项目索引/{角色}.md`
---
@@ -62,6 +71,7 @@
| 规则 | 生效范围 | 用途 |
|------|----------|------|
| soul-project-boundary | `**`alwaysApply | 项目组成、核心原则、会话自检 |
| 老板分身-索引 | `**`alwaysApply | 经验自动收集、Soul 角色推断、编码习惯 |
| soul-change-checklist | miniprogram、soul-admin、soul-api | 变更后必过 |
| assistant-xiaofeng | 触发词 | 小橙触发器 → SKILL-助理橙子-文档同步 |
| soul-miniprogram-boundary | miniprogram/** | 只调 /api/miniprogram/* |
@@ -98,14 +108,17 @@
---
## 文档索引
## 文档与脚本
| 文档 | 说明 |
|------|------|
| [开发团队职责定义](./docs/开发团队职责定义.md) | 六角色职责、Skills 分配 |
| [三角色边界定义](./docs/三角色边界定义.md) | 开发三角色源码与业务边界 |
| [角色驱动Skills分析](./docs/角色驱动Skills分析.md) | Skills 组织方式 |
| [经验库 README](./经验库/README.md) | 经验入库、Skills 升级流程 |
| [config/目录地图](./config/目录地图.md) | paths.py 路径别名 |
| [meeting/](./meeting/) | 会议纪要(橙子生成) |
| [经验清单](./agent/开发助理/经验清单.md) | 跨角色经验索引 |
| evolution 脚本 | `python .cursor/scripts/evolution.py list` 列出经验池;`add --stdin` 添加经验 |
| 一键 bat | `agent/开发助理/script/一键-列出经验池.bat` 等 |
---

View File

@@ -0,0 +1,7 @@
# 产品经理 经验记录 - 2026-02-28
## stitch_soul 需求评审会议
- **stitch_soul 串联「内容→会员→导师」变现路径**:临时需求池 10 个稿子覆盖目录、导师、会员、首页、资料编辑,需在正式需求文档中明确 73 章、导师、案例库、会员的业务定义与验收标准。
- **待澄清项**73 章与现有内容库是否同一套;导师与内容作者是否同一人;「案例库」是独立内容池还是章节分类;会员权益与价格策略。
- **优先级建议**:首页/目录/会员 > 导师列表/详情 > 资料编辑。

View File

@@ -0,0 +1,4 @@
# 产品经理 经验索引
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

@@ -0,0 +1,7 @@
# 后端开发 经验记录 - 2026-02-28
## stitch_soul 需求评审会议
- **现有基础**soul-api 已有 chapter、book、vip 模型;导师能力需新建或扩展现有 match 体系(现有 mentor 为 match 类型,非独立导师实体)。
- **待设计**:导师列表/详情/搜索筛选、预约单、会员权益与预约支付打通;接口挂 `/api/miniprogram/*`
- **协同**:与产品核对 chapter/book/vip 现状后,给出导师/预约/会员权益的模型与接口方案。

View File

@@ -0,0 +1,4 @@
# 后端工程师 经验索引
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

View File

@@ -0,0 +1,11 @@
# 团队共享 经验记录 - 2026-02-28
## stitch_soul 需求评审会议
- **stitch_soul 定位** stitch 产品线在 Soul 创业派对上的扩展,串联「内容阅读 + 导师咨询」变现路径。
- **架构协同**:需与现有 soul-api/soul-admin/miniprogram 架构协同;严禁混用 admin/miniprogram 路由;接口按使用方挂载。
- **开发顺序**:产品补充需求文档 → 后端给出模型与接口方案 → 管理端/小程序按优先级分阶段实现。
## 会议规则升级
- **问题与作答区**:开完会后必须将待确认/待澄清问题列出,在会议纪要中增加「问题与作答区」节,问题表含:序号、问题、责任角色、作答(留空供后续填写);便于追溯闭环。

View File

@@ -0,0 +1,6 @@
# 团队 经验索引(跨角色共享)
> 架构决策、业务规则、路由约定等跨角色共享内容。
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

@@ -0,0 +1,7 @@
# 小程序开发工程师 经验记录 - 2026-02-28
## stitch_soul 需求评审会议
- **页面范围**:首页、目录、导师列表/详情、会员落地页、个人资料/编辑;全部接口走 `/api/miniprogram/*`
- **支付**:会员购买、导师预约支付需按微信支付规范实现。
- **时机**:待需求与接口确定后按优先级分阶段排期(建议:内容→会员→导师→资料编辑)。

View File

@@ -0,0 +1,4 @@
# 小程序开发工程师 经验索引
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

@@ -0,0 +1,12 @@
# 开发助理(橙子)
> 规则进化执行、通用经验池、项目索引。经验:`.cursor/agent/开发助理/evolution/`
## 目录结构
| 目录 | 说明 |
|------|------|
| evolution/ | 通用经验池 |
| archived/ | 已归档经验 |
| script/ | 规则进化 bat 入口 |
| 项目索引/ | 各角色开发进度索引 |

View File

@@ -0,0 +1,6 @@
# 开发助理 经验索引(通用)
> 无明确角色归属的通用经验。助理橙子执行时可按需参考。
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

@@ -0,0 +1,46 @@
@echo off
chcp 65001 >nul
set PYTHONUTF8=1
set PYTHONIOENCODING=utf-8
cd /d "%~dp0..\..\..\.."
:menu
cls
echo ========================================
echo 开发助理 - 规则进化 一键操作
echo ========================================
echo.
echo 1. 添加经验(从 stdin 粘贴 JSON
echo 2. 列出经验池
echo 3. 执行进化(归档 + 可选应用新规则)
echo 4. 退出
echo.
set /p choice=请选择 (1-4):
if "%choice%"=="1" goto add
if "%choice%"=="2" goto list
if "%choice%"=="3" goto evolve
if "%choice%"=="4" exit
goto menu
:add
echo.
echo 请粘贴 AI 输出的 JSON按 Ctrl+Z 回车结束:
python .cursor\scripts\evolution.py add --stdin
pause
goto menu
:list
echo.
python .cursor\scripts\evolution.py list
pause
goto menu
:evolve
echo.
set /p RULE_FILE=新规则文件路径(留空则仅归档):
if "%RULE_FILE%"=="" (
python .cursor\scripts\evolution.py evolve --archive
) else (
python .cursor\scripts\evolution.py evolve --archive --rule "%RULE_FILE%"
)
pause
goto menu

View File

@@ -0,0 +1,6 @@
@echo off
chcp 65001 >nul
cd /d "%~dp0..\..\..\.."
echo 开发助理 - 列出经验池
python .cursor\scripts\evolution.py list
pause

View File

@@ -0,0 +1,6 @@
@echo off
chcp 65001 >nul
cd /d "%~dp0..\..\..\.."
echo 开发助理 - 执行进化(归档经验池)
python .cursor\scripts\evolution.py evolve --archive
pause

View File

@@ -0,0 +1,12 @@
@echo off
chcp 65001 >nul
set PYTHONUTF8=1
set PYTHONIOENCODING=utf-8
cd /d "%~dp0..\..\..\.."
echo 开发助理 - 添加经验
echo.
echo 请将 AI 输出的 JSON 粘贴到下方,按 Ctrl+Z 回车结束:
echo.
python .cursor\scripts\evolution.py add --stdin
echo.
pause

View File

@@ -0,0 +1,36 @@
# 开发团队经验清单
> 跨角色经验索引。经验在 `agent/*/evolution/`,项目索引在 `agent/开发助理/项目索引/`。
---
## 各角色经验库
| 角色 | 项目索引 | 按日经验 |
|------|----------|----------|
| 小程序 | [agent/开发助理/项目索引/小程序.md](./项目索引/小程序.md) | agent/小程序开发工程师/evolution/ |
| 管理端 | [agent/开发助理/项目索引/管理端.md](./项目索引/管理端.md) | agent/管理端开发工程师/evolution/ |
| 后端 | [agent/开发助理/项目索引/后端.md](./项目索引/后端.md) | agent/后端工程师/evolution/ |
| 产品 | [agent/开发助理/项目索引/产品.md](./项目索引/产品.md) | agent/产品经理/evolution/ |
| 测试 | [agent/开发助理/项目索引/测试.md](./项目索引/测试.md) | agent/软件测试/evolution/ |
| 助理橙子 | [agent/开发助理/项目索引/助理橙子.md](./项目索引/助理橙子.md) | agent/开发助理/evolution/ |
| 团队(跨角色共享) | [agent/开发助理/项目索引/团队.md](./项目索引/团队.md) | agent/团队/evolution/ |
---
## 索引表
| 日期 | 角色 | 类型 | 升级 Skill | 摘要 |
|------|------|------|------------|------|
| 2026-02-27 | 小程序、团队 | 最佳实践 | SKILL-小程序开发 §6、SKILL-管理端开发 §4.1 | 输入框 padding 用 view/div 包裹 |
---
## 已吸收经验(历史)
- **SetVipModal**SKILL-管理端开发 4.1 表单弹窗
- **vip_roles**SKILL-API开发 3.2、SKILL-MySQL直接操作 8
---
**最后更新**2026-02-27

View File

@@ -0,0 +1,3 @@
# 项目索引
存放各角色子项目开发进度、状态。每角色对应一份索引。

View File

@@ -16,9 +16,10 @@ Soul 创业派对产品定位:面向创业者的社区/工具型小程序。
|------|------|------|
| 2026-02-26 | 项目索引初始化,.cursor 规则优化完成 | 已完成 |
| 2026-02-27 | 开发进度同步会议汇报进度待办「资料不解锁」补充、≥3 章弹窗明确 | 已完成 |
| 2026-02-28 | stitch_soul 需求评审:内容→会员→导师变现路径,待产品补充正式需求文档 | 待续 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-02-27
**最后更新**2026-02-28

View File

@@ -6,7 +6,7 @@
## 项目总结
助理橙子负责开发团队文档同步与经验升级。触发词:小橙/橙子/橙橙/🍊。核心流程文件:`SKILL-助理橙子-文档同步.md`。经验结构:每角色独立文件夹 + 按日文件 + 项目索引。
助理橙子负责开发团队文档同步与经验升级。触发词:小橙/橙子/橙橙/🍊。核心流程文件:`SKILL-助理橙子-文档同步.md`。经验结构:agent/*/evolution 按角色 + 按日/按条存储 + 项目索引。
---
@@ -15,9 +15,10 @@
| 日期 | 摘要 | 状态 |
|------|------|------|
| 2026-02-26 | 项目索引初始化经验库五角色目录结构搭建SKILL 补充角色映射表与跨端写入规则 | 已完成 |
| 2026-02-28 | .cursor 按 cursor标准模板 重构agent 目录、config、evolution.py、meeting | 已完成 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-02-26
**最后更新**2026-02-28

View File

@@ -17,9 +17,10 @@ soul-apiGo + Gin + GORM + MySQL提供三组路由`/api/miniprogram/*`
| 2026-02-26 | 项目索引初始化,.cursor 规则优化完成 | 已完成 |
| 2026-02-27 | 开发进度汇报computeOrderCommission 会员分润差异化20%/10%已实现vip_roles、vip_activated_at、referral_config 扩展已完成miniprogram/admin/db 三组路由就绪 | 已完成 |
| 2026-02-27 | 开发进度同步会议:进度已同步至开发文档,待办资料完善校验 | 已完成 |
| 2026-02-28 | stitch_soul 需求评审:需梳理 chapter/book/vip设计导师/预约/会员权益模型与接口 | 待续 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-02-27
**最后更新**2026-02-28

View File

@@ -15,9 +15,10 @@ Soul 创业派对全项目架构与约定路由隔离miniprogram/admin/db
| 日期 | 摘要 | 状态 |
|------|------|------|
| 2026-02-27 | 项目索引初始化;团队经验库目录建立 | 已完成 |
| 2026-02-28 | stitch_soul 需求评审:内容→会员→导师变现路径,需与现有三端架构协同 | 已完成 |
> **格式说明**:每次架构级讨论后在此追加一行,日期格式 YYYY-MM-DD
---
**最后更新**2026-02-27
**最后更新**2026-02-28

View File

@@ -18,9 +18,10 @@
| 2026-02-27 | 开发进度汇报:永平落地已完成(海报 scene、我的收益、推广中心、VIP 相关);找伙伴、提现、阅读、分销核心功能已上线 | 已完成 |
| 2026-02-27 | 开发进度同步会议进度已同步至开发文档待办资料完善弹窗、≥3 章弹窗 | 已完成 |
| 2026-02-27 | 吸收经验:输入框 padding 用 view 包裹,已升级 SKILL-小程序开发 §6 | 已完成 |
| 2026-02-28 | stitch_soul 需求评审:首页/目录/导师/会员/资料五类页面,待需求与接口确定后分阶段实现 | 待续 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-02-27
**最后更新**2026-02-28

View File

@@ -16,7 +16,8 @@
|------|----------|------|
| 2026-02-27 | 测试人员角色与 Skill 初始化 | 已完成 |
| 2026-02-27 | 小程序静态审查API 路径、页面接口、手工验证建议) | 已完成 |
| 2026-02-28 | stitch_soul 需求评审:关键场景为阅读/付费/会员/导师预约/资料;待需求确定后补充联调用例 | 待续 |
---
**最后更新**2026-02-27
**最后更新**2026-02-28

View File

@@ -17,9 +17,10 @@
| 2026-02-26 | 项目索引初始化,.cursor 规则优化完成 | 已完成 |
| 2026-02-27 | 开发进度汇报:内容管理仅 API 按钮、推广中心、SetVipModal、VIP 角色管理、推广设置会员分润配置、VIP 排序等均已落地 | 已完成 |
| 2026-02-27 | 开发进度同步会议:进度已同步至运营与变更 | 已完成 |
| 2026-02-28 | stitch_soul 需求评审:待后端方案确定后规划章节/导师/会员/预约管理页面 | 待续 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-02-27
**最后更新**2026-02-28

View File

@@ -0,0 +1,7 @@
# 管理端开发工程师 经验记录 - 2026-02-28
## stitch_soul 需求评审会议
- **待支撑能力**:章节管理(增删改、排序、免费/付费/NEW、导师管理审核、标签、价格、展示、会员配置权益、价格、有效期、预约管理列表、状态
- **接口依赖**`/api/admin/*``/api/db/*`;字段需与 miniprogram 端统一。
- **时机**:待后端方案确定后规划管理端页面与接口对接。

View File

@@ -0,0 +1,4 @@
# 管理端开发工程师 经验索引
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

@@ -0,0 +1,4 @@
# 老板分身 经验索引
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

@@ -0,0 +1,7 @@
# 测试人员 经验记录 - 2026-02-28
## stitch_soul 需求评审会议
- **关键联调场景**:阅读进度、免费/付费解锁、会员权益、导师预约与支付、资料完善与提现限制。
- **三端**miniprogram ↔ soul-api、soul-admin ↔ soul-api变更后需回归支付、登录、提现等现有流程。
- **待办**:需求确定后补充三端联调用例与回归清单。

View File

@@ -0,0 +1,4 @@
# 软件测试 经验索引
| 日期 | 摘要 | 文件 |
|------|------|------|

View File

@@ -0,0 +1,3 @@
# 历史归档
存放已归档的文档、分析报告等。

Binary file not shown.

View File

@@ -0,0 +1,13 @@
{
"default": "cursor",
"roles": [
{"role": "老板分身", "model": "cursor"},
{"role": "开发助理", "model": "cursor"},
{"role": "小程序开发工程师", "model": "cursor"},
{"role": "管理端开发工程师", "model": "cursor"},
{"role": "后端工程师", "model": "cursor"},
{"role": "产品经理", "model": "cursor"},
{"role": "软件测试", "model": "cursor"},
{"role": "团队", "model": "cursor"}
]
}

97
.cursor/config/paths.py Normal file
View File

@@ -0,0 +1,97 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Soul 创业派对 - 路径别名
以项目根为工作区,脚本统一引用。迁移到其他电脑时只需修改 workspace.txt。
"""
from pathlib import Path
# ========== 工作区根目录 ==========
_THIS_FILE = Path(__file__).resolve()
_CURSOR_DIR = _THIS_FILE.parent.parent
ROOT = _CURSOR_DIR.parent
_WORKSPACE_OVERRIDE = _THIS_FILE.parent / "workspace.txt"
if _WORKSPACE_OVERRIDE.exists():
for line in _WORKSPACE_OVERRIDE.read_text(encoding="utf-8").strip().splitlines():
line = line.strip()
if line and not line.startswith("#"):
ROOT = Path(line).resolve()
break
# ========== 核心目录别名 ==========
CURSOR = ROOT / ".cursor"
RULES = CURSOR / "rules"
SKILLS = CURSOR / "skills"
SCRIPTS = CURSOR / "scripts"
PROCESS = CURSOR / "process"
MEETING = CURSOR / "meeting"
ARCHIVE = CURSOR / "archive"
CONFIG = CURSOR / "config"
MODEL_SWITCH = CONFIG / "model_switch.json"
DOCS = CURSOR / "docs"
# ========== Agent 目录Soul 开发团队结构) ==========
AGENT = CURSOR / "agent"
# 管理层
AGENT_LEAD = AGENT / "老板分身"
EVOLUTION_LEAD = AGENT_LEAD / "evolution"
# 支撑层
AGENT_ASSISTANT = AGENT / "开发助理"
EVOLUTION_ORANGE = AGENT_ASSISTANT / "evolution"
ARCHIVED_ORANGE = AGENT_ASSISTANT / "archived"
PROJECT_INDEX = AGENT_ASSISTANT / "项目索引"
SCRIPT_ORANGE = AGENT_ASSISTANT / "script"
# Soul 开发角色
AGENT_MINIPROGRAM = AGENT / "小程序开发工程师"
AGENT_ADMIN = AGENT / "管理端开发工程师"
AGENT_BACKEND = AGENT / "后端工程师"
AGENT_PRODUCT = AGENT / "产品经理"
AGENT_TEST = AGENT / "软件测试"
AGENT_TEAM = AGENT / "团队"
# ========== 常用文件 ==========
RULE_MAIN = RULES / "老板分身-索引.mdc"
LOG_EVOLUTION = SCRIPTS / "进化日志.md"
TEMPLATE_EXPERIENCE = SCRIPTS / "经验模板.md"
# ========== 角色 → agent 目录名映射 ==========
ROLE_TO_AGENT = {
# 管理层
"老板分身": "老板分身",
"开发助理": "开发助理",
"助理橙子": "开发助理",
"助手橙子": "开发助理",
# Soul 开发角色
"小程序开发工程师": "小程序开发工程师",
"小程序": "小程序开发工程师",
"管理端开发工程师": "管理端开发工程师",
"管理端": "管理端开发工程师",
"后端工程师": "后端工程师",
"后端": "后端工程师",
"后端开发": "后端工程师",
# 产品与质量
"产品经理": "产品经理",
"产品": "产品经理",
"软件测试": "软件测试",
"测试": "软件测试",
"测试人员": "软件测试",
# 通用
"团队": "团队",
}
def agent_evolution(role: str) -> Path:
"""获取角色对应的 evolution 目录。"""
agent_name = ROLE_TO_AGENT.get(role, role)
return AGENT / agent_name / "evolution"
def agent_script(role: str) -> Path:
"""获取角色对应的 script 目录。"""
agent_name = ROLE_TO_AGENT.get(role, role)
return AGENT / agent_name / "script"

View File

@@ -0,0 +1 @@
E:/Gongsi/Mycontent

View File

@@ -0,0 +1,2 @@
# 复制本文件为 workspace.txt取消下行注释并填入你的项目根绝对路径
# {{PROJECT_ROOT_PATH}}

View File

@@ -0,0 +1,45 @@
# .cursor 目录地图 - Soul 创业派对
> 脚本统一通过 `config/paths.py` 引用路径。迁移时只需改 `workspace.txt` 即可。
---
## 一、工作区覆盖(迁移用)
| 文件 | 说明 |
|------|------|
| `.cursor/config/workspace.txt` | 可选。写入一行**绝对路径**,覆盖自动推断的项目根。迁移到其他电脑时创建此文件即可。 |
---
## 二、核心别名一览
| 别名 | 路径 | 说明 |
|------|------|------|
| `ROOT` | 项目根 | 工作区根目录 |
| `CURSOR` | `.cursor/` | cursor 配置根 |
| `RULES` | `.cursor/rules/` | 规则 |
| `SKILLS` | `.cursor/skills/` | 技能 |
| `SCRIPTS` | `.cursor/scripts/` | 脚本 |
| `PROCESS` | `.cursor/process/` | 工作流 |
| `MEETING` | `.cursor/meeting/` | 会议纪要 |
| `ARCHIVE` | `.cursor/archive/` | 历史归档 |
| `DOCS` | `.cursor/docs/` | 文档 |
| `CONFIG` | `.cursor/config/` | 配置 |
| `MODEL_SWITCH` | `.cursor/config/model_switch.json` | 按角色配置模型 |
---
## 三、Agent 目录Soul 开发团队结构)
| 别名 | 路径 | 说明 |
|------|------|------|
| `AGENT` | `.cursor/agent/` | 智能体根 |
| `AGENT_LEAD` | `.cursor/agent/老板分身/` | 老板分身(最高权限) |
| `AGENT_ASSISTANT` | `.cursor/agent/开发助理/` | 开发助理(橙子) |
| `AGENT_MINIPROGRAM` | `.cursor/agent/小程序开发工程师/` | 小程序开发 |
| `AGENT_ADMIN` | `.cursor/agent/管理端开发工程师/` | 管理端开发 |
| `AGENT_BACKEND` | `.cursor/agent/后端工程师/` | 后端开发 |
| `AGENT_PRODUCT` | `.cursor/agent/产品经理/` | 产品经理 |
| `AGENT_TEST` | `.cursor/agent/软件测试/` | 测试人员 |
| `AGENT_TEAM` | `.cursor/agent/团队/` | 跨角色共享经验 |

View File

@@ -166,7 +166,7 @@
|------|------|
| [开发团队职责定义](./开发团队职责定义.md) | 五角色团队、Skills 分配 |
| [角色驱动Skills分析](./角色驱动Skills分析.md) | Skills 组织方式、改进点 |
| [SKILL-角色流程控制](../skills/SKILL-角色流程控制.md) | 跨端协同流程、决策表 |
| [SKILL-角色流程控制](../skills/role-flow-control/SKILL.md) | 跨端协同流程、决策表 |
| soul-project-boundary.mdc | 项目边界、防互窜原则 |
---

View File

@@ -124,14 +124,14 @@
| 项目 | 说明 |
|------|------|
| **位置** | `.cursor/经验库/`,每角色独立文件夹(小程序/管理端/后端/产品/测试/助理橙子) |
| **位置** | `.cursor/agent/*/evolution/`,每角色独立 evolution 目录 |
| **项目索引** | 每角色有 `项目索引.md`,根据开发进度做总结、保存进度,**每次保存写日期** |
| **经验存储** | 按天存储,文件名 `YYYY-MM-DD.md`,在对应角色文件夹下 |
| **用途** | 沉淀 bug 修复、最佳实践、决策、踩坑;根据经验**自动升级 Skills** |
| **触发** | 用户说「吸收经验」「升级 skills」「记录经验」→ 助理橙子执行入库 + 升级 |
| **流程** | 提炼 → 写入 `{角色}/YYYY-MM-DD.md` → 更新 `{角色}/项目索引.md` → 更新 `经验清单.md` → 升级 SKILL |
详见 [经验 README](../经验库/README.md)。
详见 [经验清单](../agent/开发助理/经验清单.md)、[.cursor README](../README.md)。
---
@@ -139,10 +139,10 @@
| 文档 | 说明 |
|------|------|
| [经验库 README](../经验库/README.md) | 经验入库流程、Skills 升级触发 |
| [经验清单](../agent/开发助理/经验清单.md) | 经验索引、Skills 升级触发 |
| [三角色边界定义](./三角色边界定义.md) | 开发三角色源码与业务边界 |
| [角色驱动Skills分析](./角色驱动Skills分析.md) | Skills 组织方式 |
| [SKILL-角色流程控制](../skills/SKILL-角色流程控制.md) | 跨端协同流程 |
| [SKILL-角色流程控制](../skills/role-flow-control/SKILL.md) | 跨端协同流程 |
---

View File

@@ -0,0 +1,136 @@
# 会议纪要 - 2026-02-28 | 临时需求池 stitch_soul 需求评审
> 本文件由**助理橙子**在会议结束后自动生成。
---
## 基本信息
- **时间**2026-02-28
- **议题**:临时需求池 `soul20260228/stitch_soul` 中的 10 个 UI 稿需求讨论,形成开发共识
- **触发方式**:开个会议、所有人讨论这个需求
- **参与角色**:产品经理、后端开发、管理端开发工程师、小程序开发工程师、测试人员
---
## 各角色发言
### 【产品经理】
- 这些稿子串联了「内容阅读 + 导师咨询」两条线:目录→会员→导师咨询。
- 用户价值:目录+阅读进度提升内容留存;导师列表/详情支持 1v1 咨询变现;会员落地页支撑付费转化。
- 待澄清73 章与现有内容库是否同一套?导师与内容作者是否同一人?「案例库」是独立内容池还是章节分类?
- 优先级建议:首页/目录/会员 > 导师列表/详情 > 资料编辑。
### 【后端开发】
- 需要接口:目录/章节(列表、分组、阅读进度、免费/付费/NEW、导师列表、详情、搜索/筛选、预约)、会员权益校验、资料(手机号、微信号、头像)。
- 数据模型:章节、导师、会员权益、预约单、阅读进度等,需核对 soul-api 现有模型。
- 支付/会员:会员付费、导师预约支付需与现有支付流程打通。
- 待确认:现有 soul-api 中已有 chapter、book、vip导师需新建或扩展现有 match 体系。
### 【管理端开发工程师】
- 需要能力:章节管理(增删改、排序、免费/付费/NEW 配置)、导师管理(审核、标签、价格、展示)、会员配置(权益、价格、有效期)、预约管理(列表、状态)。
- 接口依赖 `/api/admin/*``/api/db/*`
- 字段需与小程序端保持一致。
### 【小程序开发工程师】
- 页面:首页、目录、导师列表/详情、会员落地页、个人资料/编辑。
- 全部接口走 `/api/miniprogram/*`
- 支付:会员购买、导师预约支付需按微信支付规范实现。
### 【测试人员】
- 三端联调miniprogram ↔ soul-api、soul-admin ↔ soul-api。
- 关键场景:阅读进度、免费/付费解锁、会员权益、导师预约与支付、资料完善与提现限制。
- 回归:变更后需回归支付、登录、提现等现有流程。
---
## 讨论过程
- 产品强调 73 章与现有内容需先澄清,建议产品补充正式需求文档。
- 后端需梳理 soul-api 现有 chapter/book/vip 模型,导师能力需新建或扩展 match。
- 前端(管理端、小程序)需统一字段约定,避免后期频繁联调。
- 测试建议在需求确定后补充三端联调用例清单。
---
## 会议决议
1. **需求池定性**`soul20260228/stitch_soul` 作为原型/参考,需产品补充正式需求文档,明确业务规则与验收标准。
2. **数据与接口**:后端与产品核对现有 chapter/book/vip 模型,并给出导师、预约、会员权益的模型与接口建议。
3. **优先级**:以产品最终确认为准,建议顺序为「内容→会员→导师→资料编辑」。
4. **待确认**73 章与现有内容关系、导师与作者关系、「案例库」定义、会员权益与价格策略。
---
## 待办事项
| 责任角色 | 任务 | 优先级 | 截止建议 |
|---------|------|--------|---------|
| 产品经理 | 产出 stitch_soul 正式需求文档,澄清 73 章/导师/案例库/会员规则 | 高 | 需求排期前 |
| 后端开发 | 梳理 chapter/book/vip 现状,给出导师/预约/会员权益模型与接口方案 | 高 | 需求评审后 |
| 管理端开发工程师 | 待后端方案确定后,规划章节/导师/会员/预约管理页面 | 中 | 后端接口就绪后 |
| 小程序开发工程师 | 待需求与接口确定后,按优先级实现首页/目录/导师/会员/资料页面 | 中 | 分阶段排期 |
| 测试人员 | 需求确定后,补充三端联调用例与回归清单 | 中 | 开发启动前 |
---
## 问题与作答区
> 会议中提出的待确认问题在此列出;作答区域供后续补充答案,便于追溯闭环。
| # | 问题 | 责任角色 | 作答 |
|---|------|---------|------|
| 1 | 73 章与现有内容库是否同一套? | 产品经理 | (待补充) |
| 2 | 导师与内容作者是否同一人? | 产品经理 | (待补充) |
| 3 | 「案例库」是独立内容池还是章节分类? | 产品经理 | (待补充) |
| 4 | 会员权益与价格策略如何设计? | 产品经理 | (待补充) |
| 5 | 导师能力是新建实体还是扩展现有 match 体系? | 后端开发 | (待补充) |
以下是回答:
1、73章为内容章数的统计
2、不是。导师是导师属于咨询服务对接的人
3、章节分类
4、会员1980元。
5、后端创建导师
---
## 各角色经验与业务理解更新
### 产品经理
- stitch_soul 串联「内容→会员→导师」变现路径73 章、导师、案例库、会员需在需求文档中明确定义。
### 后端开发
- soul-api 已有 chapter、book、vip导师能力需新建或扩展现有 match 体系;预约、会员权益需与支付打通。
### 管理端开发工程师
- 需支撑章节、导师、会员、预约的 CRUD 与配置,字段与 miniprogram 端统一。
### 小程序开发工程师
- 首页/目录/导师/会员/资料五类页面,全部走 `/api/miniprogram/*`,支付走微信支付。
### 测试人员
- 阅读进度、免费/付费、会员权益、导师预约与支付、资料完善与提现限制为关键联调场景。
### 团队共享
- stitch_soul 为 stitch 产品线在 Soul 创业派对上的扩展,需与现有 soul-api/soul-admin/miniprogram 架构协同,避免混用 admin/miniprogram 路由。
---
*会议纪要由助理橙子生成 | 各角色经验已同步至 `agent/{角色}/evolution/2026-02-28.md`*

View File

@@ -45,6 +45,9 @@ YYYY-MM-DD_会议主题.md
## 待办事项
| 责任角色 | 任务 | 截止 |
## 问题与作答区
(待确认问题列表 + 作答列供后续补充,便于追溯闭环)
## 各角色经验与业务理解更新
### 产品经理 / 后端开发 / 管理端开发工程师 / 小程序开发工程师
```
@@ -56,3 +59,4 @@ YYYY-MM-DD_会议主题.md
| 日期 | 主题 | 参与角色 | 文件 |
|------|------|---------|------|
| 2026-02-27 | 开发进度同步会议 | 产品、后端、管理端、小程序 | [2026-02-27_开发进度同步会议.md](2026-02-27_开发进度同步会议.md) |
| 2026-02-28 | 临时需求池 stitch_soul 需求评审 | 产品、后端、管理端、小程序、测试 | [2026-02-28_临时需求池stitch_soul需求评审.md](2026-02-28_临时需求池stitch_soul需求评审.md) |

View File

@@ -67,6 +67,17 @@
---
## 问题与作答区
> 会议中提出的待确认问题在此列出;作答区域供后续补充答案,便于追溯闭环。
| # | 问题 | 责任角色 | 作答 |
|---|------|---------|------|
| 1 | {待确认问题1} | {谁负责回答} | (待补充) |
| 2 | {待确认问题2} | {谁负责回答} | (待补充) |
---
## 各角色经验与业务理解更新
> 本次会议结束后,各角色基于讨论结果生成的经验,已同步写入各自的日期经验文件。
@@ -97,4 +108,4 @@
---
*会议纪要由助理橙子生成 | 各角色经验已同步至 `e:\Gongsi\Mycontent\.cursor\经验库\{角色文件夹}\YYYY-MM-DD.md`*
*会议纪要由助理橙子生成 | 各角色经验已同步至 `agent/{角色}/evolution/YYYY-MM-DD.md`*

View File

@@ -0,0 +1,3 @@
# 工作流
存放项目工作流、流程图等文档。

View File

@@ -8,9 +8,9 @@ alwaysApply: false
当用户提及**小橙、橙子、橙橙、🍊**,或说**「讨论完毕」「记录一下」「同步到开发文档」「更新文档」「吸收经验」「升级 skills」「记录经验」「保存开发进度」「更新项目索引」「记录开发进度」「任务完成」「搞定了」「完成了」「会议结束」「散会」「会开完了」**时:
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-助理橙子-文档同步.md` 的完整内容**,然后严格按其流程执行。
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` 的完整内容**,然后严格按其流程执行。
### 行为摘要(供模型快速理解,完整流程以 SKILL 文件为准)
1. **文档同步**:从对话中提炼结论/待办/变更 → 写入 `开发文档/1、需求/需求汇总.md`、`开发文档/10、项目管理/运营与变更.md`、`临时需求池/` 等对应文档
2. **经验入库**:提炼经验 → 写入对应角色的 `.cursor/经验库/{角色}/YYYY-MM-DD.md` → 更新该角色的 `项目索引.md`(写日期)→ 更新 `经验清单.md` → 升级对应 `SKILL-xxx.md`
2. **经验入库**:提炼经验 → 写入 `agent/{角色}/evolution/YYYY-MM-DD.md` → 更新 `agent/开发助理/项目索引/{索引名}.md`(写日期)→ 更新 `agent/开发助理/经验清单.md` → 升级对应 SKILL

View File

@@ -8,4 +8,4 @@ alwaysApply: false
当编辑 **开发文档/1、需求/**、**临时需求池/**、**开发文档/10、项目管理/** 时,推断当前角色为**产品经理**。
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-产品经理.md` 的完整内容**,然后按其规范执行需求分析、文档编写、验收标准制定。
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\product-manager\SKILL.md` 的完整内容**,然后按其规范执行需求分析、文档编写、验收标准制定。

View File

@@ -26,7 +26,7 @@ alwaysApply: false
## Skill 加载(必须执行)
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-管理端开发.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\admin-dev\SKILL.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。
接口实现与路由分组的规范在 `e:\Gongsi\Mycontent\.cursor\rules\soul-api.mdc`(编辑 soul-api 时自动加载)。

View File

@@ -6,7 +6,7 @@ alwaysApply: false
# soul-api 开发规范
> **Skill 加载**:编辑 soul-api 代码时,**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-API开发.md` 的完整内容**,该 Skill 包含业务对接、与前端边界协同等补充约定。本规则侧重编码规范与路由边界。
> **Skill 加载**:编辑 soul-api 代码时,**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\api-dev\SKILL.md` 的完整内容**,该 Skill 包含业务对接、与前端边界协同等补充约定。本规则侧重编码规范与路由边界。
## 1. 路由按使用方归类(强制)

View File

@@ -30,10 +30,10 @@ alwaysApply: false
- **每次**在 miniprogram、soul-admin、soul-api 内完成一轮修改后,**先过一遍上表 + 二**,再视为本次变更完成。
- 若本次变更涉及多端(例如小程序新功能 + 管理端配置页),应在同一次任务内一并完成或明确记录未做项,避免漏改。
- 更详细的检查流程:**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-变更关联检查.md` 的完整内容**,按其「以领域为单位思考」的方法逐项确认。
- 更详细的检查流程:**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\change-checklist\SKILL.md` 的完整内容**,按其「以领域为单位思考」的方法逐项确认。
## 四、聊天中触发变更检查
编码完成后在聊天中说**「变更完成」「检查一下」「准备提交」**AI 会主动加载本清单 + SKILL-变更关联检查.md 完成核对。**不需要正在编辑文件,直接说触发词即可。**
编码完成后在聊天中说**「变更完成」「检查一下」「准备提交」**AI 会主动加载本清单 + change-checklist/SKILL.md 完成核对。**不需要正在编辑文件,直接说触发词即可。**
未通过上述检查即提交视为可能漏改,需补全后再提交。

View File

@@ -6,7 +6,7 @@ alwaysApply: false
# Soul 创业派对 - 会议触发器
当用户表达**开会意图**时(包括但不限于以下触发词),**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-团队会议.md` 的完整内容**,然后严格按其流程主持会议。
当用户表达**开会意图**时(包括但不限于以下触发词),**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\team-meeting\SKILL.md` 的完整内容**,然后严格按其流程主持会议。
## 语义化触发词(理解意图,不必完全匹配)
@@ -24,9 +24,9 @@ alwaysApply: false
当用户说**「会议结束」「散会」「会开完了」「结束会议」**时:
1. 助理橙子立即执行收尾流程
2. **生成会议纪要**`e:\Gongsi\Mycontent\.cursor\会议记录\YYYY-MM-DD_主题.md`
3. **各角色经验入库**`e:\Gongsi\Mycontent\.cursor\经验库\{角色文件夹}\YYYY-MM-DD.md`
4. **更新项目索引**各角色 `项目索引.md` 开发进度表追加一行
5. **更新会议记录索引**`e:\Gongsi\Mycontent\.cursor\会议记录\README.md`
2. **生成会议纪要**`e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_主题.md`
3. **各角色经验入库**`e:\Gongsi\Mycontent\.cursor\agent\{角色}\evolution\YYYY-MM-DD.md`
4. **更新项目索引**`agent/开发助理/项目索引/{索引名}.md` 开发进度表追加一行
5. **更新会议记录索引**`e:\Gongsi\Mycontent\.cursor\meeting\README.md`
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-助理橙子-文档同步.md` 执行收尾。**
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` 执行收尾。**

View File

@@ -23,7 +23,7 @@ alwaysApply: false
## Skill 加载(必须执行)
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-小程序开发.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。
**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\miniprogram-dev\SKILL.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。
接口实现与路由分组的规范在 `e:\Gongsi\Mycontent\.cursor\rules\soul-api.mdc`(编辑 soul-api 时自动加载)。

View File

@@ -32,11 +32,11 @@ alwaysApply: true
| 编辑目录 | 推断角色 | 必须 Read 的主 Skill 文件(绝对路径) |
|----------|----------|---------------------------------------|
| miniprogram/ | 小程序开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-小程序开发.md` |
| soul-admin/ | 管理端开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-管理端开发.md` |
| soul-api/ | 后端开发 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-API开发.md` |
| 开发文档/1、需求/、临时需求池/ | 产品经理 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-产品经理.md` |
| .cursor/ | 助理橙子 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-助理橙子-文档同步.md` |
| miniprogram/ | 小程序开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\miniprogram-dev\SKILL.md` |
| soul-admin/ | 管理端开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\admin-dev\SKILL.md` |
| soul-api/ | 后端开发 | `e:\Gongsi\Mycontent\.cursor\skills\api-dev\SKILL.md` |
| 开发文档/1、需求/、临时需求池/ | 产品经理 | `e:\Gongsi\Mycontent\.cursor\skills\product-manager\SKILL.md` |
| .cursor/ | 助理橙子 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` |
### 按语义触发词(说啥切角色,无需编辑文件)
@@ -44,21 +44,21 @@ alwaysApply: true
| 触发词 | 推断角色 | 必须 Read 的 Skill 文件 |
|--------|----------|-------------------------|
| 后端、API、soul-api、接口、Go、GORM | 后端开发 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-API开发.md` |
| 管理端、soul-admin、React、后台管理 | 管理端开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-管理端开发.md` |
| 小程序、miniprogram、C 端、微信小程序 | 小程序开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-小程序开发.md` |
| 产品、需求、验收、排期、需求文档 | 产品经理 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-产品经理.md` |
| 测试、测试用例、回归测试、功能测试、QA | 测试人员 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-测试.md` |
| 后端、API、soul-api、接口、Go、GORM | 后端开发 | `e:\Gongsi\Mycontent\.cursor\skills\api-dev\SKILL.md` |
| 管理端、soul-admin、React、后台管理 | 管理端开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\admin-dev\SKILL.md` |
| 小程序、miniprogram、C 端、微信小程序 | 小程序开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\miniprogram-dev\SKILL.md` |
| 产品、需求、验收、排期、需求文档 | 产品经理 | `e:\Gongsi\Mycontent\.cursor\skills\product-manager\SKILL.md` |
| 测试、测试用例、回归测试、功能测试、QA | 测试人员 | `e:\Gongsi\Mycontent\.cursor\skills\testing\SKILL.md` |
### 按场景触发词
| 场景触发词 | 必须 Read 的 Skill 文件(绝对路径) |
|------------|-------------------------------------|
| 小橙、橙子、橙橙、🍊、讨论完毕、记录一下、记录、同步文档 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-助理橙子-文档同步.md` |
| 吸收经验、升级 skills、记录经验、保存开发进度、更新项目索引、记录开发进度、任务完成、搞定了、完成了 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-助理橙子-文档同步.md` |
| 跨端功能开发 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-角色流程控制.md` |
| 变更完成、检查一下、准备提交 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-变更关联检查.md` |
| 开个会、团队会议、需求评审、方案讨论、大家一起讨论 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-团队会议.md` |
| 会议结束、散会、会开完了 | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-助理橙子-文档同步.md`(会议收尾) |
| 小橙、橙子、橙橙、🍊、讨论完毕、记录一下、记录、同步文档 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` |
| 吸收经验、升级 skills、记录经验、保存开发进度、更新项目索引、记录开发进度、任务完成、搞定了、完成了 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` |
| 跨端功能开发 | `e:\Gongsi\Mycontent\.cursor\skills\role-flow-control\SKILL.md` |
| 变更完成、检查一下、准备提交 | `e:\Gongsi\Mycontent\.cursor\skills\change-checklist\SKILL.md` |
| 开个会、团队会议、需求评审、方案讨论、大家一起讨论 | `e:\Gongsi\Mycontent\.cursor\skills\team-meeting\SKILL.md` |
| 会议结束、散会、会开完了 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md`(会议收尾) |
**注意**:「必须 Read」= 使用 Read 工具读取**绝对路径**的完整文件内容后执行,不可跳过或仅凭记忆。

View File

@@ -0,0 +1,82 @@
---
description: 老板分身 - 最高权限智能体,协调 Soul 开发团队;编码习惯与思维模式总览
alwaysApply: true
---
# 老板分身 - 能力与约束Soul 创业派对)
> **老板分身权限最高**:协调所有智能体(小程序开发工程师、管理端开发工程师、后端工程师、产品经理、开发助理等)。其他 agent 执行任务时遵循本规则;老板分身可调度、协调、指派任一角色。
> **激活方式**:用户说「老板」「分身」「架构」「帮我协调」时,从旁观者转为主动参与。
> **会话自检**:仅沿用本项目 `.cursor/` 下的 rules、skills、agent忽略与本项目无关的全局 rules/skills。
> **角色驱动**Soul 角色与 agent 映射见 `config/paths.py` 的 ROLE_TO_AGENT。
### 领域特例优先(含合理性校验)
当某个 **skill** 或领域规则与通用规则冲突时,原则上以该 skill/领域规则为准。**但须先做合理性校验**
- 若 skill 的规则**明显不合理**(如违背安全、可维护性、行业惯例等),应**提醒用户**并说明原因,**确认后再覆盖**
- 若合理(如 Soul 三端路由隔离约定),可直接按 skill 执行
---
## 〇、经验自动收集(优先执行)
**在每次回复前判断**:本次会话是否完成了一次「问题 → 解决」的闭环?
### 判定条件(同时满足则触发)
1. 会话中出现了**技术问题**报错、bug、实现困难、配置问题等
2. 问题已**解决**:用户明确表示解决(如「解决了」「可以了」「搞定了」「好了」「跑通了」)
3. 解决过程有**可提炼价值**:有具体的问题描述、解决步骤或关键决策
### 触发后动作
1. 从对话中提取:问题描述、解决过程、关键决策、可提炼的规则方向
2. **推断目标角色**(可多选):
- 小程序/WXML/微信/微信原生→**小程序开发工程师**
- 管理端/React/admin/后台管理→**管理端开发工程师**
- 后端/Go/Gin/GORM/接口/API→**后端工程师**
- 产品/需求/config→**产品经理**
- 测试/自检/QA→**软件测试**
- 架构/选型/路由约定/三端协同→**团队**
- 无法判断→**通用**(写入开发助理)
3. **若可写文件**
- **有明确目标角色**:写入 `.cursor/agent/{角色}/evolution/YYYY-MM-DD-简短描述.md`,并更新该目录下的 `索引.md`
- **无法判断角色**:写入 `.cursor/agent/开发助理/evolution/`
4. **若无法写文件**:输出 JSON并提示用户双击 `agent/开发助理/script/一键-添加经验.bat`
### Soul 目标角色与 target_roles 取值
| 推断场景 | target_roles |
|----------|--------------|
| 小程序/WXML/微信 | `["小程序开发工程师"]` |
| 管理端/React/admin | `["管理端开发工程师"]` |
| 后端/Go/Gin/API | `["后端工程师"]` |
| 产品/需求 | `["产品经理"]` |
| 测试/QA | `["软件测试"]` |
| 架构/三端协同 | `["团队"]` |
| 跨端(小程序+管理端) | `["小程序开发工程师","管理端开发工程师"]` |
### 不触发情况
- 纯咨询、无实际问题
- 问题未解决或用户未确认
- 用户明确说「不要记录」「不用沉淀」
---
## 一、编码习惯
- 先理解需求,再动手写代码
- 小步迭代,可读性优先
- 函数保持单一职责,避免深层嵌套
---
## 二、Soul 三端分工
- **小程序**:只调 `/api/miniprogram/*`,禁止调 admin/db
- **管理端**:只调 `/api/admin/*`、`/api/db/*`
- **后端**:路由分组 miniprogram/admin/db响应格式统一
跨端任务时先分解:后端任务 / 管理端任务 / 小程序任务,再分阶段执行。

View File

@@ -0,0 +1,311 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
老板分身/开发助理 - 规则进化脚本
支持:经验收集、经验池列表、规则进化(归档+应用)、进化日志
"""
import argparse
import json
import os
import re
import sys
from datetime import datetime
from pathlib import Path
# 路径别名
_CFG = Path(__file__).resolve().parent.parent / "config"
if str(_CFG) not in sys.path:
sys.path.insert(0, str(_CFG))
from paths import ROOT, EVOLUTION_ORANGE, ARCHIVED_ORANGE, RULE_MAIN, LOG_EVOLUTION, ROLE_TO_AGENT, agent_evolution
PROJECT_ROOT = ROOT
POOL_DIR = EVOLUTION_ORANGE
ARCHIVE_DIR = ARCHIVED_ORANGE
RULE_FILE = RULE_MAIN
LOG_FILE = LOG_EVOLUTION
def ensure_dirs():
POOL_DIR.mkdir(parents=True, exist_ok=True)
ARCHIVE_DIR.mkdir(parents=True, exist_ok=True)
def _get_role_evolution_dir(role: str) -> Path:
"""获取角色对应的 evolution 目录。"""
return agent_evolution(role)
def _update_role_index(role: str, date_str: str, summary: str, filename: str):
"""更新角色经验池的 索引.md在表格中追加一行。"""
role_dir = _get_role_evolution_dir(role)
role_dir.mkdir(parents=True, exist_ok=True)
index_file = role_dir / "索引.md"
new_row = f"| {date_str} | {summary} | [{filename}](./{filename}) |"
if not index_file.exists():
index_content = f"""# {role} 经验索引
> 相关经验。角色激活时优先读取本索引。
| 日期 | 摘要 | 文件 |
|------|------|------|
{new_row}
"""
index_file.write_text(index_content, encoding="utf-8")
else:
content = index_file.read_text(encoding="utf-8")
lines = content.split("\n")
inserted = False
for i, line in enumerate(lines):
if line.strip() == "|------|------|------|":
lines.insert(i + 1, new_row)
inserted = True
break
if not inserted:
lines.append(new_row)
index_file.write_text("\n".join(lines), encoding="utf-8")
print(f"已更新索引:{index_file}")
def add_experience(data: dict, from_stdin: bool = False) -> str:
"""添加经验到经验池或角色经验池。data 可为 dict 或从 stdin 读取的 JSON。"""
ensure_dirs()
if from_stdin:
raw = sys.stdin.read().strip()
if not raw:
print("错误stdin 为空", file=sys.stderr)
sys.exit(1)
try:
data = json.loads(raw)
except json.JSONDecodeError as e:
print(f"错误JSON 解析失败 - {e}", file=sys.stderr)
sys.exit(1)
title = data.get("title", "未命名经验")
date_str = data.get("date", datetime.now().strftime("%Y-%m-%d"))
domain = data.get("domain", "通用")
related_rule = data.get("related_rule", "")
target_roles = data.get("target_roles", [])
if isinstance(target_roles, str):
target_roles = [target_roles] if target_roles else []
problem = data.get("problem", "")
solution = data.get("solution", "")
decisions = data.get("decisions", "")
rules_to_extract = data.get("rules_to_extract", "")
code_example = data.get("code_example", "")
safe_title = re.sub(r'[\\/:*?"<>|]', "", title)[:20]
filename = f"{date_str}-{safe_title}.md"
content = f"""# {title}
## 元信息
- **日期**{date_str}
- **领域**{domain}
- **目标角色**{", ".join(target_roles) if target_roles else "通用"}
- **关联规则**{related_rule}
## 问题描述
{problem}
## 解决过程
{solution}
## 关键决策
{decisions}
## 可提炼的规则
{rules_to_extract}
"""
if code_example:
content += f"""
## 示例代码/模式
```
{code_example}
```
"""
if target_roles:
for role in target_roles:
role_dir = _get_role_evolution_dir(role)
role_dir.mkdir(parents=True, exist_ok=True)
filepath = role_dir / filename
filepath.write_text(content, encoding="utf-8")
print(f"已写入:{filepath}")
_update_role_index(role, date_str, safe_title, filename)
return str(role_dir)
else:
filepath = POOL_DIR / filename
filepath.write_text(content, encoding="utf-8")
print(f"已写入:{filepath}")
_update_role_index("开发助理", date_str, safe_title, filename)
return str(filepath)
def list_pool() -> list:
"""列出经验池中的文件(排除示例等)。"""
ensure_dirs()
files = []
for f in sorted(POOL_DIR.glob("*.md")):
if f.name.startswith("示例") or "可删除" in f.name or f.name == "索引.md":
continue
files.append(f)
return files
def cmd_list():
"""列出经验池"""
files = list_pool()
if not files:
print("经验池(开发助理/evolution为空")
return
for f in files:
print(f" - {f.name}")
def archive_files(filenames: list) -> list:
"""将 agent/开发助理/evolution 中的文件移入 agent/开发助理/archived。"""
ARCHIVE_DIR.mkdir(parents=True, exist_ok=True)
archived = []
for name in filenames:
src = POOL_DIR / name
if not src.exists():
print(f"跳过(不存在):{name}", file=sys.stderr)
continue
dst = ARCHIVE_DIR / name
if dst.exists():
base, ext = os.path.splitext(name)
dst = ARCHIVE_DIR / f"{base}-{datetime.now().strftime('%H%M%S')}{ext}"
src.rename(dst)
archived.append(name)
print(f"已归档:{name} -> {dst.name}")
return archived
def append_log(entries: list, trigger: str = "用户执行"):
"""追加进化日志。"""
ensure_dirs()
today = datetime.now().strftime("%Y-%m-%d")
block = f"""
## {datetime.now().strftime("%Y-%m-%d %H:%M")}
### 触发
- {trigger}
### 处理的经验
"""
for e in entries:
block += f"- {e}\n"
block += "\n"
if LOG_FILE.exists():
content = LOG_FILE.read_text(encoding="utf-8")
if "---" in content:
parts = content.split("---", 1)
content = parts[0] + "---" + block + "---" + parts[1]
else:
content += block
else:
content = "# 进化日志\n\n" + block
LOG_FILE.write_text(content, encoding="utf-8")
print(f"已更新:{LOG_FILE}")
def cmd_evolve(archive_all: bool = False, rule_content_file: str = None):
"""执行进化:归档经验池、可选应用新规则、追加进化日志。"""
ensure_dirs()
files = list_pool()
if not files:
print("经验池为空,无需进化")
return
if rule_content_file:
path = Path(rule_content_file)
if not path.is_absolute():
path = ROOT / rule_content_file
if path.exists():
new_content = path.read_text(encoding="utf-8")
RULE_FILE.write_text(new_content, encoding="utf-8")
print(f"已更新主规则:{RULE_FILE}")
else:
print(f"错误:文件不存在 {path}", file=sys.stderr)
sys.exit(1)
to_archive = [f.name for f in files] if archive_all or rule_content_file else []
if to_archive:
archived = archive_files(to_archive)
append_log(archived, "规则进化脚本执行")
else:
print("提示:使用 --archive 将经验池文件移入已归档")
print("提示:使用 --rule <文件路径> 应用 AI 生成的新规则内容")
def cmd_archive(filenames: list):
"""归档指定文件"""
archived = archive_files(filenames)
if archived:
append_log(archived, "手动归档")
def main():
parser = argparse.ArgumentParser(description="老板分身 - 规则进化")
sub = parser.add_subparsers(dest="cmd", help="命令")
p_add = sub.add_parser("add", help="添加经验到经验池")
p_add.add_argument("--input", "-i", help="JSON 文件路径")
p_add.add_argument("--stdin", action="store_true", help="从 stdin 读取 JSON")
p_add.add_argument("--title", help="经验标题")
p_add.add_argument("--problem", help="问题描述")
p_add.add_argument("--solution", help="解决过程")
p_add.add_argument("--decisions", default="", help="关键决策")
p_add.add_argument("--domain", default="通用", help="领域")
p_add.add_argument("--related", default="", help="关联规则")
sub.add_parser("list", help="列出经验池")
p_evolve = sub.add_parser("evolve", help="执行进化(归档+应用规则)")
p_evolve.add_argument("--archive", "-a", action="store_true", help="归档经验池全部文件")
p_evolve.add_argument("--rule", "-r", help="应用新规则内容文件路径")
p_arch = sub.add_parser("archive", help="归档指定文件")
p_arch.add_argument("files", nargs="+", help="文件名")
args = parser.parse_args()
if args.cmd == "add":
if args.stdin:
add_experience({}, from_stdin=True)
elif args.input:
input_path = Path(args.input)
if not input_path.is_absolute():
input_path = ROOT / args.input
data = json.loads(input_path.read_text(encoding="utf-8"))
add_experience(data)
elif args.title and args.problem and args.solution:
add_experience({
"title": args.title,
"problem": args.problem,
"solution": args.solution,
"decisions": args.decisions or "",
"domain": args.domain,
"related_rule": args.related,
"rules_to_extract": "",
})
else:
print("用法:")
print(" python .cursor/scripts/evolution.py add --stdin # 从 stdin 读 JSON")
print(" python .cursor/scripts/evolution.py add -i experience.json")
sys.exit(1)
elif args.cmd == "list":
cmd_list()
elif args.cmd == "evolve":
cmd_evolve(archive_all=args.archive, rule_content_file=args.rule)
elif args.cmd == "archive":
cmd_archive(args.files)
else:
parser.print_help()
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,40 @@
# 经验沉淀模板
> 复制本模板到 `agent/开发助理/evolution/` 或对应角色 `agent/{角色}/evolution/`,文件名:`YYYY-MM-DD-简短描述.md`
```markdown
# 经验标题(一句话概括)
## 元信息
- **日期**YYYY-MM-DD
- **领域**:前端/后端/全栈/工具/小程序/管理端/...
- **目标角色**:小程序开发工程师 / 管理端开发工程师 / 后端工程师 / 产品经理 / 软件测试 / 团队(可多选)
- **关联规则**:无 / 编码习惯 / 错误处理 / ...(若与已有规则相关)
## 问题描述
遇到了什么问题?在什么场景下?
## 解决过程
关键步骤、尝试过的方法、最终如何解决。
## 关键决策
- 为什么选 A 而不是 B
- 踩了哪些坑?
- 有什么反直觉的点?
## 可提炼的规则
- [ ] 可转化为新 skill描述
- [ ] 可补充到已有规则:(规则名 + 补充内容)
- [ ] 可优化已有规则:(规则名 + 优化建议)
## 示例代码/模式(如有)
\`\`\`
// 关键代码片段
\`\`\`
```

View File

@@ -53,47 +53,48 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论
1. **确定角色**根据本次对话涉及目录miniprogram/soul-admin/soul-api/需求文档)推断对应角色
2. **提炼进度**:从对话中提取本次开发完成的内容、当前阶段、待续项
3. **更新项目索引**:打开 `e:\Gongsi\Mycontent\.cursor\经验库\{文件名}\项目索引.md`(文件名见步骤 5.1 映射表)
3. **更新项目索引**:打开 `e:\Gongsi\Mycontent\.cursor\agent\开发助理\项目索引\{索引文件名}.md`索引文件名见步骤 5.1 映射表)
- 在「开发进度」表追加一行,**必须写日期**YYYY-MM-DD
- 视需要更新「项目总结」段落
- 文末「最后更新」改为当前日期
4. **回复**:已保存开发进度至 `经验库\{文件名}\项目索引.md`
4. **回复**:已保存开发进度至 `agent/开发助理/项目索引/{索引文件名}.md`
### 4.6 会议收尾(会议结束、散会、会开完了时)
当用户说**「会议结束」「散会」「会开完了」**时,执行会议收尾流程(完整流程见 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-团队会议.md` 第 4 节):
当用户说**「会议结束」「散会」「会开完了」**时,执行会议收尾流程(完整流程见 `e:\Gongsi\Mycontent\.cursor\skills\team-meeting\SKILL.md` 第 4 节):
1. **生成会议纪要**`e:\Gongsi\Mycontent\.cursor\会议记录\YYYY-MM-DD_主题.md`,按 `_模板.md` 填写
2. **各角色经验入库**:追加到 `e:\Gongsi\Mycontent\.cursor\经验库\{文件夹名}\YYYY-MM-DD.md`(角色→文件夹名见步骤 5.1 映射表)
3. **更新项目索引**:各参会角色的 `项目索引.md` 开发进度表追加一行,写日期
4. **更新会议记录索引**`e:\Gongsi\Mycontent\.cursor\会议记录\README.md` 索引表追加
1. **生成会议纪要**`e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_主题.md`,按 `_模板.md` 填写**必须包含「问题与作答区」**,将待确认/待澄清项列出为问题表,作答列留空
2. **各角色经验入库**:追加到 `e:\Gongsi\Mycontent\.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md`(角色→目录见步骤 5.1 映射表)
3. **更新项目索引**:各参会角色对应`agent/开发助理/项目索引/{索引名}.md` 开发进度表追加一行,写日期
4. **更新会议记录索引**`e:\Gongsi\Mycontent\.cursor\meeting\README.md` 索引表追加
5. **Skill 升级**(若有影响开发规范的决议):更新对应 SKILL-xxx.md
6. **回复**:会议收尾已完成,纪要见 `会议记录\YYYY-MM-DD_主题.md`
6. **回复**:会议收尾已完成,纪要见 `meeting/YYYY-MM-DD_主题.md`
### 5. 经验吸收与 Skills 升级(开发团队经验库)
当用户说**「吸收经验」「升级 skills」「记录经验」**时,执行:
#### 5.1 角色→经验库文件夹名映射(必须按此对应)
#### 5.1 角色→agent 目录与项目索引映射(必须按此对应)
| 推断角色 | 经验库文件夹名 | 示例路径 |
|----------|---------------|----------|
| 小程序开发工程师 | `小程序` | `e:\Gongsi\Mycontent\.cursor\经验库\小程序\` |
| 管理端开发工程师 | `管理端` | `e:\Gongsi\Mycontent\.cursor\经验库\管理端\` |
| 后端开发 | `后端` | `e:\Gongsi\Mycontent\.cursor\经验库\后端\` |
| 产品经理 | `产品` | `e:\Gongsi\Mycontent\.cursor\经验库\产品\` |
| 测试人员 | `测试` | `e:\Gongsi\Mycontent\.cursor\经验库\测试\` |
| 助理橙子 | `助理橙子` | `e:\Gongsi\Mycontent\.cursor\经验库\助理橙子\` |
| 推断角色 | agent 经验目录 | 项目索引文件 |
|----------|----------------|-------------|
| 小程序开发工程师 | `agent/小程序开发工程师/evolution/` | `agent/开发助理/项目索引/小程序.md` |
| 管理端开发工程师 | `agent/管理端开发工程师/evolution/` | `agent/开发助理/项目索引/管理端.md` |
| 后端开发 | `agent/后端工程师/evolution/` | `agent/开发助理/项目索引/后端.md` |
| 产品经理 | `agent/产品经理/evolution/` | `agent/开发助理/项目索引/产品.md` |
| 测试人员 | `agent/软件测试/evolution/` | `agent/开发助理/项目索引/测试.md` |
| 助理橙子 | `agent/开发助理/evolution/` | `agent/开发助理/项目索引/助理橙子.md` |
| 跨角色/团队 | `agent/团队/evolution/` | `agent/开发助理/项目索引/团队.md` |
#### 5.2 跨端经验写入规则
- 若经验**仅影响一个角色**:写入该角色文件夹,如 `后端/2026-02-26.md`
- 若经验**仅影响一个角色**:写入该角色 evolution`agent/后端工程师/evolution/2026-02-26.md`
- 若经验**同时影响多角色**(如 API 变更联动前端):
- 按**主要影响角色**写入一个文件夹
- **必须**同时写入 `e:\Gongsi\Mycontent\.cursor\经验库\团队\YYYY-MM-DD.md`
- 按**主要影响角色**写入对应 evolution
- **必须**同时写入 `agent/团队/evolution/YYYY-MM-DD.md`
- 在经验条目中注明「同时影响:小程序/管理端」
- 分别更新各角色的项目索引
- 若为**架构决策、业务规则、路由约定**等全团队共享内容:**必须**写入 `团队/YYYY-MM-DD.md`,并视情况写入相关角色
- 若为**架构决策、业务规则、路由约定**等全团队共享内容:**必须**写入 `agent/团队/evolution/`,并视情况写入相关角色
- 判断主要角色原则:谁的 Skill/规范因此次经验需要升级,谁就是主要角色
#### 5.3 执行步骤
@@ -105,24 +106,24 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论
- 应升级的 Skill
2. **写入经验文件**(绝对路径):
- 路径:`e:\Gongsi\Mycontent\.cursor\经验库\{文件夹名}\YYYY-MM-DD.md`
- 路径:`e:\Gongsi\Mycontent\.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md`
- 当天文件不存在则新建;文件名用日期,经验按天存储
3. **更新项目索引**(绝对路径):
- 路径:`e:\Gongsi\Mycontent\.cursor\经验库\{文件夹名}\项目索引.md`
- 路径:`e:\Gongsi\Mycontent\.cursor\agent\开发助理\项目索引\{索引名}.md`(见 5.1 映射)
- 在「开发进度」表追加一行,**必须写日期**YYYY-MM-DD
- 更新文末「最后更新」为当前日期
4. **更新经验清单**
- 路径:`e:\Gongsi\Mycontent\.cursor\经验库\经验清单.md`
- 路径:`e:\Gongsi\Mycontent\.cursor\agent\开发助理\经验清单.md`
- 在索引表追加一行
5. **升级 Skill**:根据经验类型,更新对应 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-xxx.md`
5. **升级 Skill**:根据经验类型,更新对应 `.cursor/skills/{skill}/SKILL.md`
- bug 修复 → 补充规则/流程/常见问题
- 最佳实践 → 补充示例或新章节
- 决策记录 → 补充到相关 Skill 或 boundary
6. **回复**:已吸收经验并升级 Skills详见 `经验库\{文件夹名}\YYYY-MM-DD.md``经验清单.md`
6. **回复**:已吸收经验并升级 Skills详见 `agent/{角色}/evolution/YYYY-MM-DD.md``经验清单.md`
## 文档结构速查
@@ -134,15 +135,14 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论
│ ├── 项目落地推进表.md # 里程碑、永平落地
│ └── 运营与变更.md # 近期更新、变更记录
临时需求池/ # 需求分析、技术分析、待办
.cursor/经验库/ # 每角色独立经验库,经验按天存储
├── README.md # 经验库说明、入库流程
├── 经验清单.md # 跨角色经验索引
├── 小程序/项目索引.md、YYYY-MM-DD.md
├── 管理端/项目索引.md、YYYY-MM-DD.md
├── 后端/项目索引.md、YYYY-MM-DD.md
├── 产品/项目索引.md、YYYY-MM-DD.md
── 助理橙子/项目索引.md、YYYY-MM-DD.md
└── 团队/项目索引.md、YYYY-MM-DD.md # 跨角色共享(架构决策、业务规则)
.cursor/agent/ # 每角色 evolution 经验池
├── 开发助理/evolution/、项目索引/{小程序,管理端,后端,产品,测试,助理橙子,团队}.md
├── 小程序开发工程师/evolution/
├── 管理端开发工程师/evolution/
├── 后端工程师/evolution/
├── 产品经理/evolution/
├── 软件测试/evolution/
── 团队/evolution/ # 跨角色共享(架构决策、业务规则)
```
## 示例
@@ -165,8 +165,8 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论
**小橙**执行:
1. 提炼:本次 bug 修复发现「支付回调需以 openId 解析买家,不信任 attach.userId」→ 适用角色:后端
2. 写入经验:追加到 `.cursor/经验库/后端/2026-02-26.md`
3. 更新项目索引:在 `后端/项目索引.md` 的「开发进度」表追加一行,写日期
4. 更新经验清单:在 `经验清单.md` 索引表追加
2. 写入经验:追加到 `.cursor/agent/后端工程师/evolution/2026-02-26.md`
3. 更新项目索引:在 `agent/开发助理/项目索引/后端.md` 的「开发进度」表追加一行,写日期
4. 更新经验清单:在 `agent/开发助理/经验清单.md` 索引表追加
5. 升级 Skill在 SKILL-API开发 或 相关部署文档中补充该规则
6. 回复:已吸收经验并升级 Skills详见 经验库/后端/2026-02-26.md
6. 回复:已吸收经验并升级 Skills详见 agent/后端工程师/evolution/2026-02-26.md

View File

@@ -23,7 +23,7 @@ description: Soul 创业派对开发团队多角色会议。语义化触发:
```
第零步(可选):回顾历史
→ 使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\会议记录\README.md` 的索引表
→ 使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\meeting\README.md` 的索引表
→ 若议题与近期会议相关Read 最近 12 份纪要(如 YYYY-MM-DD_主题.md
→ 便于延续上次讨论、避免重复决议
@@ -91,36 +91,37 @@ description: Soul 创业派对开发团队多角色会议。语义化触发:
### 4.1 生成会议纪要文件
1. **确定文件名**`YYYY-MM-DD_议题关键词.md`(日期为今天)
2. **创建文件**`e:\Gongsi\Mycontent\.cursor\会议记录\YYYY-MM-DD_议题关键词.md`
3. **内容**:按 `e:\Gongsi\Mycontent\.cursor\会议记录\_模板.md` 填写完整纪要
4. **更新索引**:在 `e:\Gongsi\Mycontent\.cursor\会议记录\README.md` 的索引表中追加一行
2. **创建文件**`e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_议题关键词.md`
3. **内容**:按 `e:\Gongsi\Mycontent\.cursor\meeting\_模板.md` 填写完整纪要
4. **问题与作答区**(必须):将「待确认项」「待澄清项」列出为问题表,责任角色标明谁负责回答,作答列留空供后续填写
5. **更新索引**:在 `e:\Gongsi\Mycontent\.cursor\meeting\README.md` 的索引表中追加一行
### 4.2 各角色经验入库(按日期文件)
角色→经验库文件夹名映射:
角色→agent 目录与项目索引映射:
| 角色 | 文件夹名 |
|------|----------|
| 产品经理 | 产品 |
| 后端开发 | 后端 |
| 管理端开发工程师 | 管理端 |
| 小程序开发工程师 | 小程序 |
| 测试人员 | 测试 |
| 角色 | agent evolution 目录 | 项目索引文件 |
|------|----------------------|-------------|
| 产品经理 | agent/产品经理/evolution/ | agent/开发助理/项目索引/产品.md |
| 后端开发 | agent/后端工程师/evolution/ | agent/开发助理/项目索引/后端.md |
| 管理端开发工程师 | agent/管理端开发工程师/evolution/ | agent/开发助理/项目索引/管理端.md |
| 小程序开发工程师 | agent/小程序开发工程师/evolution/ | agent/开发助理/项目索引/小程序.md |
| 测试人员 | agent/软件测试/evolution/ | agent/开发助理/项目索引/测试.md |
对每个参会角色,执行:
```
确定今天日期 YYYY-MM-DD
检查 e:\Gongsi\Mycontent\.cursor\经验库\{文件夹名}\YYYY-MM-DD.md 是否存在
检查 e:\Gongsi\Mycontent\.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md 是否存在
不存在 → 创建,写入文件头(# {角色名} 经验记录 - YYYY-MM-DD
从本次会议讨论中,提炼该角色的经验条目追加进去
更新 e:\Gongsi\Mycontent\.cursor\经验库\{文件夹名}\项目索引.md开发进度表追加一行写日期
更新 agent/开发助理/项目索引/{索引名}.md开发进度表追加一行写日期
```
若有跨角色共享的经验(架构决策、业务规则、路由约定),**必须**同时写入 `e:\Gongsi\Mycontent\.cursor\经验库\团队\YYYY-MM-DD.md`,并在对应角色文件中注明「详见 团队/YYYY-MM-DD.md」。
若有跨角色共享的经验(架构决策、业务规则、路由约定),**必须**同时写入 `e:\Gongsi\Mycontent\.cursor\agent\团队\evolution\YYYY-MM-DD.md`,并在对应角色文件中注明「详见 agent/团队/evolution/」。
### 4.3 Skill 升级(重要决议时)
@@ -134,11 +135,11 @@ description: Soul 创业派对开发团队多角色会议。语义化触发:
| 输出物 | 位置 | 负责人 |
|--------|------|--------|
| 会议纪要 | `e:\Gongsi\Mycontent\.cursor\会议记录\YYYY-MM-DD_主题.md` | 助理橙子 |
| 各角色经验 | `e:\Gongsi\Mycontent\.cursor\经验库\{角色文件夹}\YYYY-MM-DD.md` | 助理橙子 |
| 项目索引更新 | 各角色 `项目索引.md` 的开发进度表 | 助理橙子 |
| Skill 升级(按需) | `e:\Gongsi\Mycontent\.cursor\skills\SKILL-xxx.md` | 助理橙子 |
| 会议记录索引更新 | `e:\Gongsi\Mycontent\.cursor\会议记录\README.md` | 助理橙子 |
| 会议纪要 | `e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_主题.md` | 助理橙子 |
| 各角色经验 | `e:\Gongsi\Mycontent\.cursor\agent\{角色}\evolution\YYYY-MM-DD.md` | 助理橙子 |
| 项目索引更新 | agent/开发助理/项目索引/{角色}.md 的开发进度表 | 助理橙子 |
| Skill 升级(按需) | `.cursor/skills/{skill}/SKILL.md` | 助理橙子 |
| 会议记录索引更新 | `e:\Gongsi\Mycontent\.cursor\meeting\README.md` | 助理橙子 |
---

View File

@@ -1,78 +0,0 @@
# 开发团队经验库
> 每个角色拥有独立的经验库文件夹、项目索引;经验按天存储在单文件中,文件名用日期命名。
---
## 一、目录结构
```
.cursor/经验库/
├── README.md # 本说明
├── 经验清单.md # 跨角色经验索引(汇总)
├── 小程序/
│ ├── 项目索引.md
│ └── YYYY-MM-DD.md
├── 管理端/
│ ├── 项目索引.md
│ └── YYYY-MM-DD.md
├── 后端/
│ ├── 项目索引.md
│ └── YYYY-MM-DD.md
├── 产品/
│ ├── 项目索引.md
│ └── YYYY-MM-DD.md
├── 测试/
│ ├── 项目索引.md
│ └── YYYY-MM-DD.md
├── 助理橙子/
│ ├── 项目索引.md
│ └── YYYY-MM-DD.md
└── 团队/ # 跨角色共享(架构决策、业务规则)
├── 项目索引.md
└── YYYY-MM-DD.md
```
---
## 二、项目索引(每角色一份)
| 文件 | 用途 | 约定 |
|------|------|------|
| `{角色}/项目索引.md` | 根据开发进度对项目做总结,保存开发进度,方便下次继续开发 | **每次保存必须写日期**;含「项目总结」「开发进度」表 |
---
## 三、经验存储(按天)
| 规则 | 说明 |
|------|------|
| **文件名** | `YYYY-MM-DD.md`(日期) |
| **位置** | 对应角色文件夹下 |
| **内容** | 当日经验条目:类型、摘要、升级 Skill |
---
## 四、经验类型与升级目标
| 类型 | 说明 | 升级目标 |
|------|------|----------|
| bug 修复 | 修 bug 时发现的规则/流程遗漏 | 对应角色主 Skill、变更关联检查 |
| 最佳实践 | 表单、列表、路由等实现模式 | SKILL-xxx |
| 决策记录 | 技术选型、接口约定、边界决策 | 相关 Skill、boundary |
| 踩坑规避 | 已知坑及规避方式 | 对应 Skill 的「常见问题」 |
---
## 五、入库流程(助理橙子执行)
1. **提炼**:从对话中提取问题/场景、解决方案、适用角色、应升级的 Skill
2. **写入经验**:追加到对应角色的 `YYYY-MM-DD.md`(当天文件,不存在则新建)
3. **跨角色经验**:若为架构决策、业务规则、路由约定等**跨角色共享**内容,**必须**同时写入 `团队/YYYY-MM-DD.md`
4. **更新项目索引**:在对应角色的 `项目索引.md` 的「开发进度」表追加一行,**写日期**
5. **更新经验清单**:在根目录 `经验清单.md` 索引表追加
6. **升级 Skill**:根据经验类型,更新对应 `.cursor/skills/SKILL-xxx.md`
---
**更新日期**2026-02-26

View File

@@ -1,36 +0,0 @@
# 开发团队经验清单
> 跨角色经验索引,便于追溯与升级 Skills。各角色详情在 `{角色}/YYYY-MM-DD.md`、`{角色}/项目索引.md`。
---
## 各角色经验库
| 角色 | 项目索引 | 按日经验 |
|------|----------|----------|
| 小程序 | [小程序/项目索引.md](./小程序/项目索引.md) | 小程序/YYYY-MM-DD.md |
| 管理端 | [管理端/项目索引.md](./管理端/项目索引.md) | 管理端/YYYY-MM-DD.md |
| 后端 | [后端/项目索引.md](./后端/项目索引.md) | 后端/YYYY-MM-DD.md |
| 产品 | [产品/项目索引.md](./产品/项目索引.md) | 产品/YYYY-MM-DD.md |
| 测试 | [测试/项目索引.md](./测试/项目索引.md) | 测试/YYYY-MM-DD.md |
| 助理橙子 | [助理橙子/项目索引.md](./助理橙子/项目索引.md) | 助理橙子/YYYY-MM-DD.md |
| 团队(跨角色共享) | [团队/项目索引.md](./团队/项目索引.md) | 团队/YYYY-MM-DD.md |
---
## 索引表
| 日期 | 角色 | 类型 | 升级 Skill | 摘要 |
|------|------|------|------------|------|
| 2026-02-27 | 小程序、团队 | 最佳实践 | SKILL-小程序开发 §6、SKILL-管理端开发 §4.1 | 输入框 padding 用 view/div 包裹 |
---
## 已吸收经验(历史)
- **SetVipModal**SKILL-管理端开发 4.1 表单弹窗
- **vip_roles**SKILL-API开发 3.2、SKILL-MySQL直接操作 8
---
**最后更新**2026-02-27

View File

@@ -0,0 +1,291 @@
<!DOCTYPE html>
<html class="dark" lang="zh-CN"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>Clean Dark Mode Catalog with NEW Tags</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,typography"></script>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
<script>
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
primary: "#4FD1C5",
"background-light": "#f3f4f6",
"background-dark": "#000000",
"card-light": "#ffffff",
"card-dark": "#1C1C1E",
"text-secondary-dark": "#8E8E93",
"accent-dark": "#2C2C2E",
},
fontFamily: {
display: ["Noto Sans SC", "sans-serif"],
},
borderRadius: {
DEFAULT: "12px",
"xl": "16px",
"2xl": "20px",
},
},
},
};
</script>
<style>
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
.fab-shadow {
box-shadow: 0 4px 15px rgba(79, 209, 197, 0.4);
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background-light dark:bg-background-dark font-display text-gray-900 dark:text-gray-100 min-h-screen pb-24">
<header class="fixed top-0 left-0 right-0 z-50 bg-background-light/95 dark:bg-background-dark/95 backdrop-blur-sm px-4 pt-4 pb-2 flex justify-between items-center border-b border-gray-200 dark:border-gray-800">
<button class="w-9 h-9 rounded-full bg-gray-200 dark:bg-accent-dark flex items-center justify-center text-gray-500 dark:text-gray-400">
<span class="material-icons text-lg">search</span>
</button>
<h1 class="text-lg font-bold text-primary tracking-wide">目录</h1>
<div class="flex gap-3">
<button class="w-9 h-9 rounded-full bg-gray-200 dark:bg-accent-dark flex items-center justify-center text-gray-500 dark:text-gray-400">
<span class="material-icons text-lg">more_horiz</span>
</button>
<button class="w-9 h-9 rounded-full bg-gray-200 dark:bg-accent-dark flex items-center justify-center text-gray-500 dark:text-gray-400">
<span class="material-icons text-lg">radio_button_checked</span>
</button>
</div>
</header>
<main class="mt-20 px-4 space-y-4">
<div class="bg-white dark:bg-card-dark rounded-2xl p-4 flex items-center justify-between shadow-sm border border-gray-100 dark:border-gray-800/30">
<div class="flex items-center gap-4">
<div class="w-12 h-12 bg-primary rounded-xl flex items-center justify-center text-white shadow-lg shadow-primary/20">
<span class="material-icons text-2xl">menu_book</span>
</div>
<div>
<h2 class="font-bold text-base dark:text-white leading-tight mb-1">一场SOUL的创业实验场</h2>
<p class="text-xs text-gray-500 dark:text-text-secondary-dark">来自Soul派对房的真实商业故事</p>
</div>
</div>
<div class="text-center">
<span class="block text-2xl font-bold text-primary">73</span>
<span class="text-xs text-gray-500 dark:text-gray-500">章节</span>
</div>
</div>
<div class="bg-white dark:bg-card-dark rounded-xl p-4 flex items-center justify-between shadow-sm border border-gray-100 dark:border-gray-800/30">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-8 h-8 bg-gray-700/50 dark:bg-accent-dark rounded-lg flex items-center justify-center flex-shrink-0">
<span class="material-icons text-white dark:text-gray-400 text-sm">import_contacts</span>
</div>
<h3 class="font-medium text-sm truncate dark:text-gray-200">序言 | 为什么我每天早上6点在...</h3>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="px-2 py-1 bg-primary/20 text-primary text-[10px] font-medium rounded">免费</span>
<span class="material-icons text-gray-500 text-sm">arrow_forward</span>
</div>
</div>
<div class="bg-white dark:bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-100 dark:border-gray-800/30">
<div class="flex items-start justify-between mb-4">
<div class="flex gap-3">
<div class="w-10 h-10 bg-primary rounded-xl flex items-center justify-center flex-shrink-0 text-white font-bold shadow-lg shadow-primary/30">
</div>
<div>
<h3 class="font-bold dark:text-white text-base">真实的人</h3>
<p class="text-xs text-gray-500 dark:text-text-secondary-dark mt-0.5">人与人之间的底层逻辑</p>
</div>
</div>
<div class="flex items-center gap-2">
<span class="text-xs text-gray-500">2章</span>
<span class="material-icons text-gray-500 text-sm">arrow_downward</span>
</div>
</div>
<div class="space-y-4 pl-1">
<p class="text-xs text-gray-500 dark:text-gray-500 pt-2 pb-1">第1章 | 人与人之间的底层逻辑</p>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full border border-primary flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">1.1 荷包:电动车出租的被动收入模式</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="px-2 py-1 bg-primary/20 text-primary text-[10px] font-medium rounded">免费</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full bg-gray-400 dark:bg-gray-600 flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">1.2 老墨:资源整合高手的社交方法</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="text-xs text-gray-500">¥1</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full bg-gray-400 dark:bg-gray-600 flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">1.3 笑声背后的MBTI为什么ENTJ适合做...</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="text-xs text-gray-500">¥1</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full bg-gray-400 dark:bg-gray-600 flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">1.4 人性的三角结构:利益、情感、价值观</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="text-xs text-gray-500">¥1</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full bg-gray-400 dark:bg-gray-600 flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">1.5 沟通差的问题:为什么你说的别人听...</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="text-xs text-gray-500">¥1</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
<p class="text-xs text-gray-500 dark:text-gray-500 pt-4 pb-1">第2章 | 人性困境案例</p>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full bg-gray-400 dark:bg-gray-600 flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">2.1 相亲故事:你以为找的是人,实际是在找...</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="px-2 py-1 bg-primary/20 text-primary text-[10px] font-medium rounded">NEW</span>
<span class="text-xs text-gray-500">¥1</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full bg-gray-400 dark:bg-gray-600 flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">2.2 找工作迷茫者:为什么简历解决不了人生</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="text-xs text-gray-500">¥1</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
<div class="flex items-center justify-between group">
<div class="flex items-center gap-3 overflow-hidden">
<div class="w-2 h-2 rounded-full bg-gray-400 dark:bg-gray-600 flex-shrink-0"></div>
<span class="text-sm text-gray-700 dark:text-gray-200 truncate">2.3 撸运费险:小钱困住大脑的真实心理</span>
</div>
<div class="flex items-center gap-2 flex-shrink-0">
<span class="px-2 py-1 bg-primary/20 text-primary text-[10px] font-medium rounded">NEW</span>
<span class="text-xs text-gray-500">¥1</span>
<span class="material-icons text-gray-600 dark:text-gray-500 text-xs">chevron_right</span>
</div>
</div>
</div>
</div>
<div class="bg-white dark:bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-100 dark:border-gray-800/30 flex items-center justify-between">
<div class="flex items-center gap-3">
<div class="w-10 h-10 bg-primary rounded-xl flex items-center justify-center flex-shrink-0 text-white font-bold shadow-lg shadow-primary/30">
</div>
<div>
<h3 class="font-bold dark:text-white text-base">真实的行业</h3>
<p class="text-xs text-gray-500 dark:text-text-secondary-dark mt-0.5">电商、内容、传统行业解析</p>
</div>
</div>
<div class="flex items-center gap-2">
<span class="text-xs text-gray-500">3章</span>
<span class="material-icons text-gray-500 text-sm">arrow_forward</span>
</div>
</div>
<div class="bg-white dark:bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-100 dark:border-gray-800/30 flex items-center justify-between">
<div class="flex items-center gap-3">
<div class="w-10 h-10 bg-primary rounded-xl flex items-center justify-center flex-shrink-0 text-white font-bold shadow-lg shadow-primary/30">
</div>
<div>
<h3 class="font-bold dark:text-white text-base">真实的错误</h3>
<p class="text-xs text-gray-500 dark:text-text-secondary-dark mt-0.5">我和别人犯过的错</p>
</div>
</div>
<div class="flex items-center gap-2">
<span class="text-xs text-gray-500">2章</span>
<span class="material-icons text-gray-500 text-sm">arrow_forward</span>
</div>
</div>
<div class="bg-white dark:bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-100 dark:border-gray-800/30 flex items-center justify-between">
<div class="flex items-center gap-3">
<div class="w-10 h-10 bg-primary rounded-xl flex items-center justify-center flex-shrink-0 text-white font-bold shadow-lg shadow-primary/30">
</div>
<div>
<h3 class="font-bold dark:text-white text-base">真实的赚钱</h3>
<p class="text-xs text-gray-500 dark:text-text-secondary-dark mt-0.5">底层结构与真实案例</p>
</div>
</div>
<div class="flex items-center gap-2">
<span class="text-xs text-gray-500">2章</span>
<span class="material-icons text-gray-500 text-sm">arrow_forward</span>
</div>
</div>
<div class="bg-white dark:bg-card-dark rounded-2xl p-5 shadow-sm border border-gray-100 dark:border-gray-800/30">
<h3 class="text-sm font-medium text-gray-500 dark:text-gray-400 mb-4">附录</h3>
<div class="space-y-4">
<div class="flex justify-between items-center">
<span class="text-sm dark:text-gray-300">附录1 | Soul派对房精选对话</span>
<span class="material-icons text-gray-500 text-sm">arrow_forward</span>
</div>
<div class="w-full h-[1px] bg-gray-100 dark:bg-gray-800"></div>
<div class="flex justify-between items-center">
<span class="text-sm dark:text-gray-300">附录2 | 创业者自检清单</span>
<span class="material-icons text-gray-500 text-sm">arrow_forward</span>
</div>
<div class="w-full h-[1px] bg-gray-100 dark:bg-gray-800"></div>
<div class="flex justify-between items-center">
<span class="text-sm dark:text-gray-300">附录3 | 本书提到的工具和资源</span>
<span class="material-icons text-gray-500 text-sm">arrow_forward</span>
</div>
</div>
</div>
</main>
<nav class="fixed bottom-0 left-0 right-0 bg-white dark:bg-background-dark border-t border-gray-200 dark:border-gray-800 pb-safe pt-2 px-6 flex justify-between items-center z-50 h-[80px]">
<a class="flex flex-col items-center gap-1 text-gray-400 dark:text-gray-500" href="#">
<span class="material-icons text-2xl">home</span>
<span class="text-[10px]">首页</span>
</a>
<a class="flex flex-col items-center gap-1 text-primary" href="#">
<span class="material-icons text-2xl">list</span>
<span class="text-[10px]">目录</span>
</a>
<div class="relative -top-6">
<button class="w-14 h-14 bg-gradient-to-br from-primary to-primary/80 rounded-full flex items-center justify-center text-white fab-shadow border-4 border-white dark:border-background-dark">
<span class="material-icons text-2xl">groups</span>
</button>
<span class="absolute -bottom-5 left-1/2 transform -translate-x-1/2 text-[10px] text-gray-400 w-max">找伙伴</span>
</div>
<a class="flex flex-col items-center gap-1 text-gray-400 dark:text-gray-500" href="#">
<span class="material-icons text-2xl">person</span>
<span class="text-[10px]">我的</span>
</a>
</nav>
<div class="h-8"></div>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

View File

@@ -0,0 +1,215 @@
<!DOCTYPE html>
<html class="dark" lang="zh-CN"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>Comprehensive Profile Editor V1</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,typography"></script>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
-webkit-tap-highlight-color: transparent;
background-color: #000000;
}
.material-symbols-outlined {
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}
.custom-scrollbar::-webkit-scrollbar {
width: 4px;
}
.custom-scrollbar::-webkit-scrollbar-thumb {
background: #2D3748;
border-radius: 10px;
}
</style>
<script>
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
primary: "#4FD1C5",
"background-dark": "#000000",
"input-dark": "#1F2937",
"border-dark": "#374151",
},
borderRadius: {
DEFAULT: "12px",
},
},
},
};
</script>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background-dark text-white min-h-screen flex flex-col">
<header class="sticky top-0 z-50 bg-black/80 backdrop-blur-md px-4 py-4 flex items-center justify-between border-b border-white/10">
<div class="flex items-center gap-2">
<span class="material-symbols-outlined text-2xl cursor-pointer">chevron_left</span>
<h1 class="text-lg font-semibold">编辑资料</h1>
</div>
<div class="flex items-center gap-4">
<div class="flex items-center bg-gray-900 rounded-full px-3 py-1 gap-2 border border-white/10">
<span class="material-symbols-outlined text-sm">more_horiz</span>
<div class="w-[1px] h-3 bg-white/20"></div>
<div class="w-3 h-3 rounded-full border-2 border-white/40"></div>
</div>
</div>
</header>
<main class="flex-grow max-w-md mx-auto px-4 py-6 space-y-8 pb-32">
<div class="bg-primary/10 border border-primary/20 p-4 rounded-xl flex items-start gap-3">
<span class="material-symbols-outlined text-primary text-xl">info</span>
<p class="text-sm text-primary/90 leading-relaxed font-medium">
温馨提示:需完善手机号和微信号才能使用提现和找伙伴功能
</p>
</div>
<div class="flex flex-col items-center gap-4">
<div class="relative">
<div class="w-24 h-24 rounded-full p-1 border-2 border-primary shadow-[0_0_15px_rgba(79,209,197,0.3)]">
<img alt="User Avatar" class="w-full h-full rounded-full object-cover" src="https://lh3.googleusercontent.com/aida-public/AB6AXuByaFYqZutDoN6LuA2I7fT4RcZhrFxMFneSEUoMGyHZX55vvf-taz_AAEYDjMagOLNszcrdxJMszI1W-71DtHgK9OaVfJIW6qH0yb33bfdP8nNg9zpyE-F4ujPwa_E8AlZSX9CHISvTfkiB6aUMH8hdz1sA8ptLervlhVR4Cst5N38a4ZiB_zRETMlVJOaPZ1-Ry_XeDXTXAaZQN1xy-WIGX-1rlgs1JUDXg4Ihcv0Am5p4hgwoFat9JdcoYRQN6FfP4b5zzapLoBk"/>
</div>
<div class="absolute bottom-0 right-0 bg-primary text-black p-1.5 rounded-full border-2 border-background-dark flex items-center justify-center">
<span class="material-symbols-outlined text-xs">photo_camera</span>
</div>
</div>
<button class="text-primary text-sm font-medium">更换头像</button>
</div>
<form class="space-y-6">
<div class="space-y-4">
<div class="grid grid-cols-1 gap-4">
<label class="block">
<span class="text-sm text-gray-400 ml-1">昵称</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-500" type="text" value="乘风"/>
</label>
</div>
<div class="grid grid-cols-2 gap-4">
<label class="block">
<span class="text-sm text-gray-400 ml-1">MBTI</span>
<div class="relative mt-1">
<select class="block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white appearance-none py-2 px-3 pr-8">
<option>INTJ</option>
<option>INFP</option>
<option>ENTP</option>
<option>ENFJ</option>
</select>
<span class="material-symbols-outlined absolute right-2 top-2 text-gray-500 pointer-events-none">expand_more</span>
</div>
</label>
<label class="block">
<span class="text-sm text-gray-400 ml-1">地区</span>
<div class="relative mt-1">
<input class="block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white pr-8" type="text" value="杭州 · 余杭区"/>
<span class="material-symbols-outlined absolute right-2 top-2 text-gray-500 text-lg">location_on</span>
</div>
</label>
</div>
<div class="grid grid-cols-1 gap-4">
<label class="block">
<span class="text-sm text-gray-400 ml-1">行业</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-600" placeholder="例如:新媒体 / 电商" type="text"/>
</label>
<label class="block">
<span class="text-sm text-gray-400 ml-1">业务体量</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-600" placeholder="例如年GMV 5000万+" type="text"/>
</label>
<label class="block">
<span class="text-sm text-gray-400 ml-1">职位</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-600" placeholder="例如:创始人 / 联合创始人" type="text"/>
</label>
</div>
</div>
<div class="space-y-4 pt-4 border-t border-white/10">
<h3 class="font-semibold text-white flex items-center gap-2">
<span class="material-symbols-outlined text-primary text-xl">contact_phone</span>
核心联系方式
</h3>
<div class="grid grid-cols-1 gap-4">
<label class="block">
<span class="text-sm text-gray-400 ml-1">手机号</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-600" placeholder="请输入手机号" type="tel"/>
</label>
<label class="block">
<span class="text-sm text-gray-400 ml-1">微信号</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-600" placeholder="请输入微信号" type="text"/>
</label>
</div>
</div>
<div class="space-y-4 pt-4 border-t border-white/10">
<h3 class="font-semibold text-white flex items-center gap-2">
<span class="material-symbols-outlined text-yellow-400 text-xl">emoji_objects</span>
个人故事
</h3>
<label class="block">
<span class="text-sm text-gray-400 ml-1">你最赚钱的一个月做的是什么</span>
<textarea class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder:text-gray-600" placeholder="例如2021年主导电商大促单月GMV突破500W..." rows="3"></textarea>
</label>
<label class="block">
<span class="text-sm text-gray-400 ml-1">最有成就感的一件事</span>
<textarea class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder:text-gray-600" placeholder="例如帮助3个素人打造个人IP每月稳定变现5万+" rows="3"></textarea>
</label>
<label class="block">
<span class="text-sm text-gray-400 ml-1">人生的转折点</span>
<textarea class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder:text-gray-600" placeholder="例如:辞去大厂工作开始做自媒体..." rows="3"></textarea>
</label>
</div>
<div class="space-y-4 pt-4 border-t border-white/10">
<h3 class="font-semibold text-white flex items-center gap-2">
<span class="material-symbols-outlined text-orange-400 text-xl">handshake</span>
互助需求
</h3>
<label class="block">
<span class="text-sm text-gray-400 ml-1">我能帮助大家什么</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-600" placeholder="例如:短视频脚本、账号冷启动、私域转化" type="text"/>
</label>
<label class="block">
<span class="text-sm text-gray-400 ml-1">我需要什么帮助</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder-gray-600" placeholder="例如:寻找供应链资源、线下活动合作" type="text"/>
</label>
</div>
<div class="space-y-4 pt-4 border-t border-white/10">
<h3 class="font-semibold text-white flex items-center gap-2">
<span class="material-symbols-outlined text-blue-400 text-xl">rocket_launch</span>
项目介绍
</h3>
<label class="block">
<textarea class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg focus:border-primary focus:ring-0 text-white placeholder:text-gray-600" placeholder="详细介绍您的项目,让潜在伙伴更好地了解您..." rows="4"></textarea>
</label>
</div>
<div class="pt-6 pb-12">
<button class="w-full bg-primary hover:bg-teal-400 text-black font-bold py-4 rounded-xl text-lg transition-colors" type="submit">
保存
</button>
</div>
</form>
</main>
<nav class="fixed bottom-0 left-0 right-0 bg-black border-t border-white/10 px-6 py-3 pb-6 flex justify-between items-center z-50">
<div class="flex flex-col items-center gap-1 text-gray-500">
<span class="material-symbols-outlined">home</span>
<span class="text-[10px]">首页</span>
</div>
<div class="flex flex-col items-center gap-1 text-gray-500">
<span class="material-symbols-outlined">list_alt</span>
<span class="text-[10px]">目录</span>
</div>
<div class="flex flex-col items-center -mt-8">
<div class="bg-gray-800 rounded-full p-3 border-4 border-black">
<span class="material-symbols-outlined text-3xl text-gray-400">group</span>
</div>
<span class="text-[10px] text-gray-500 mt-1">找伙伴</span>
</div>
<div class="flex flex-col items-center gap-1 text-gray-500">
<span class="material-symbols-outlined">chat_bubble</span>
<span class="text-[10px]">消息</span>
</div>
<div class="flex flex-col items-center gap-1 text-primary">
<span class="material-symbols-outlined">person</span>
<span class="text-[10px] font-medium">我的</span>
</div>
</nav>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@@ -0,0 +1,158 @@
<!DOCTYPE html><html class="dark" lang="zh-CN"><head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Simplified Info Completion Popup</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,typography,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet">
<style type="text/tailwindcss">
:root {
--primary-color: #4FD1C5;
--bg-dark: #000000;
--card-dark: #1A1A1A;
--input-bg: #262626;
--border-color: #333333;
}
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
-webkit-tap-highlight-color: transparent;
background-color: var(--bg-dark);
}
.material-symbols-outlined {
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}
.modal-overlay {
background-color: rgba(0, 0, 0, 0.85);
backdrop-filter: blur(4px);
}
</style>
<script>
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
primary: "#4FD1C5",
"background-dark": "#000000",
"input-dark": "#1F2937",
"border-dark": "#374151",
},
borderRadius: {
DEFAULT: "12px",
},
},
},
};
</script>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background-dark text-white min-h-screen flex flex-col relative overflow-hidden">
<header class="sticky top-0 z-40 bg-black/80 backdrop-blur-md px-4 py-4 flex items-center justify-between border-b border-white/10">
<div class="flex items-center gap-2">
<span class="material-symbols-outlined text-2xl cursor-pointer" style="">chevron_left</span>
<h1 class="text-lg font-semibold" style="">编辑资料</h1>
</div>
<div class="flex items-center gap-4">
<div class="flex items-center bg-gray-900 rounded-full px-3 py-1 gap-2 border border-white/10">
<span class="material-symbols-outlined text-sm" style="">more_horiz</span>
<div class="w-[1px] h-3 bg-white/20"></div>
<div class="w-3 h-3 rounded-full border-2 border-white/40"></div>
</div>
</div>
</header>
<main class="flex-grow max-w-md mx-auto px-4 py-6 space-y-8 pb-32 opacity-50 pointer-events-none">
<div class="bg-primary/10 border border-primary/20 p-4 rounded-xl flex items-start gap-3">
<span class="material-symbols-outlined text-primary text-xl" style="">info</span>
<p class="text-sm text-primary/90 leading-relaxed font-medium" style="">
温馨提示:需完善手机号和微信号才能使用提现和找伙伴功能
</p>
</div>
<div class="flex flex-col items-center gap-4">
<div class="relative">
<div class="w-24 h-24 rounded-full p-1 border-2 border-primary shadow-[0_0_15px_rgba(79,209,197,0.3)]">
<img alt="User Avatar" class="w-full h-full rounded-full object-cover" src="https://lh3.googleusercontent.com/aida-public/AB6AXuByaFYqZutDoN6LuA2I7fT4RcZhrFxMFneSEUoMGyHZX55vvf-taz_AAEYDjMagOLNszcrdxJMszI1W-71DtHgK9OaVfJIW6qH0yb33bfdP8nNg9zpyE-F4ujPwa_E8AlZSX9CHISvTfkiB6aUMH8hdz1sA8ptLervlhVR4Cst5N38a4ZiB_zRETMlVJOaPZ1-Ry_XeDXTXAaZQN1xy-WIGX-1rlgs1JUDXg4Ihcv0Am5p4hgwoFat9JdcoYRQN6FfP4b5zzapLoBk" style="">
</div>
</div>
</div>
<form class="space-y-6">
<div class="space-y-4">
<label class="block" style="">
<span class="text-sm text-gray-400 ml-1" style="">昵称</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg text-white" type="text" value="乘风">
</label>
<div class="grid grid-cols-2 gap-4">
<label class="block" style="">
<span class="text-sm text-gray-400 ml-1" style="">MBTI</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg text-white" type="text" value="INTJ">
</label>
<label class="block" style="">
<span class="text-sm text-gray-400 ml-1" style="">地区</span>
<input class="mt-1 block w-full bg-input-dark border-border-dark rounded-lg text-white" type="text" value="杭州">
</label>
</div>
</div>
</form>
</main>
<div class="fixed inset-0 z-[60] flex items-center justify-center px-6 modal-overlay">
<div class="w-full max-w-sm bg-[#1A1A1A] rounded-[24px] overflow-hidden border border-white/10 shadow-2xl">
<div class="px-6 pt-10 pb-6 space-y-6">
<div class="text-center">
<h2 class="text-xl font-bold text-white tracking-wide" style="">请完善联系方式</h2>
</div>
<div class="space-y-4">
<div class="space-y-1.5">
<label class="text-xs font-medium text-gray-400 ml-1" style="">手机号</label>
<div class="relative">
<span class="material-symbols-outlined absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 text-lg" style="">smartphone</span>
<input class="w-full bg-[#262626] border-transparent rounded-xl py-3 pl-10 pr-4 text-white placeholder:text-gray-600 focus:ring-1 focus:ring-primary focus:border-primary transition-all text-sm" placeholder="请输入您的手机号" type="tel">
</div>
</div>
<div class="space-y-1.5">
<label class="text-xs font-medium text-gray-400 ml-1" style="">微信号</label>
<div class="relative">
<span class="material-symbols-outlined absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 text-lg" style="">chat</span>
<input class="w-full bg-[#262626] border-transparent rounded-xl py-3 pl-10 pr-4 text-white placeholder:text-gray-600 focus:ring-1 focus:ring-primary focus:border-primary transition-all text-sm" placeholder="请输入您的微信号" type="text">
</div>
</div>
</div>
<div class="pt-2">
<button class="w-full bg-primary hover:bg-[#45BCB0] text-black font-bold py-3.5 rounded-xl text-base transition-all active:scale-[0.98] shadow-lg shadow-primary/20" style="">
保存
</button>
<button class="w-full mt-3 text-gray-500 text-sm font-medium py-2" style="">
取消
</button>
</div>
</div>
</div>
</div>
<nav class="fixed bottom-0 left-0 right-0 bg-black border-t border-white/10 px-6 py-3 pb-6 flex justify-between items-center z-50 opacity-50 pointer-events-none">
<div class="flex flex-col items-center gap-1 text-gray-500">
<span class="material-symbols-outlined" style="">home</span>
<span class="text-[10px]" style="">首页</span>
</div>
<div class="flex flex-col items-center gap-1 text-gray-500">
<span class="material-symbols-outlined" style="">list_alt</span>
<span class="text-[10px]" style="">目录</span>
</div>
<div class="flex flex-col items-center -mt-8">
<div class="bg-gray-800 rounded-full p-3 border-4 border-black">
<span class="material-symbols-outlined text-3xl text-gray-400" style="">group</span>
</div>
<span class="text-[10px] text-gray-500 mt-1" style="">找伙伴</span>
</div>
<div class="flex flex-col items-center gap-1 text-gray-500">
<span class="material-symbols-outlined" style="">chat_bubble</span>
<span class="text-[10px]" style="">消息</span>
</div>
<div class="flex flex-col items-center gap-1 text-primary">
<span class="material-symbols-outlined" style="">person</span>
<span class="text-[10px] font-medium" style="">我的</span>
</div>
</nav>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -0,0 +1,206 @@
<!DOCTYPE html>
<html lang="zh-CN"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>Profile with Hidden Info Icons</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
accent: "#5EEAD4",
"background-dark": "#050B14",
"card-dark": "#0F1720",
"card-inner": "#17212F",
"text-label": "#94A3B8",
"text-value": "#FFFFFF",
"highlight-gold": "#F59E0B",
},
fontFamily: {
display: ['"Noto Sans SC"', "sans-serif"],
sans: ['"Noto Sans SC"', "sans-serif"],
},
borderRadius: {
DEFAULT: "0.5rem",
'xl': '0.75rem',
'2xl': '1rem',
'3xl': '1.5rem',
},
},
},
};
</script>
<style type="text/tailwindcss">
html { scroll-behavior: smooth; }
::-webkit-scrollbar { width: 0px; background: transparent; }
body { -webkit-tap-highlight-color: transparent; }
.border-subtle {
border: 1px solid rgba(255, 255, 255, 0.08);
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background-dark font-display text-gray-100 min-h-screen flex flex-col antialiased pb-32">
<header class="fixed top-0 w-full z-50 bg-background-dark/90 backdrop-blur-md px-4 py-3 flex items-center justify-between border-b border-white/5">
<button class="p-2 -ml-2 rounded-full hover:bg-white/10 transition-colors">
<span class="material-symbols-outlined text-accent text-[20px]">arrow_back_ios_new</span>
</button>
<h1 class="text-[17px] font-bold text-white tracking-wide">个人资料</h1>
<div class="flex items-center gap-2">
<button class="p-2 rounded-full hover:bg-white/10 transition-colors">
<span class="material-symbols-outlined text-white text-[24px]">more_horiz</span>
</button>
<button class="p-2 -mr-2 rounded-full hover:bg-white/10 transition-colors">
<span class="material-symbols-outlined text-white text-[24px]">radio_button_checked</span>
</button>
</div>
</header>
<main class="flex-grow px-4 pt-20 w-full mx-auto space-y-4 max-w-lg">
<div class="bg-card-dark border-subtle rounded-2xl p-8 flex flex-col items-center justify-center relative overflow-hidden shadow-lg shadow-black/20">
<div class="absolute top-0 inset-x-0 h-32 bg-gradient-to-b from-[#1E3A45]/30 to-transparent pointer-events-none"></div>
<div class="relative z-10 flex flex-col items-center">
<div class="w-[88px] h-[88px] rounded-full overflow-hidden border border-white/10 mb-4 shadow-xl">
<img alt="Profile Picture" class="w-full h-full object-cover" src="https://lh3.googleusercontent.com/aida-public/AB6AXuAkEMaAvAMloIMKdLUz6H3J7wK8hsWRTMPvWXscytVPPy0JGqD0z780NFUWH-LxpGJFc0zhWr-x_dlFJQjPP1TnCUVPzLpGMIS8Rvt7Tas75-TkbQqteNl_6BxURNsrKRf3_9nK2ucsTeFrF20Z9HcbubIYiUwL-55uX5lJV7xfS2GvSxPycZHm7A62PLGxA0eoMAnZwmmgMKOPsQkmTu4W6_1RBXHWFkf1Znjgl9Lsr4dDyIZF3dsbOgJTjudl1i4SRH8Q-6WbGJo"/>
</div>
<h2 class="text-xl font-bold text-white mb-3 tracking-wide">乘风</h2>
<div class="flex items-center justify-center gap-3 text-xs font-medium">
<span class="px-3 py-1 bg-[#134E4A] text-accent rounded-full border border-accent/20">INFP</span>
<span class="px-3 py-1 bg-[#1F2937] text-gray-300 rounded-full border border-white/10 flex items-center gap-1.5 pl-2">
<span class="material-symbols-outlined text-red-500 text-[14px] -ml-0.5">push_pin</span> 杭州
</span>
</div>
</div>
</div>
<section class="bg-card-dark border-subtle rounded-2xl p-5 shadow-lg shadow-black/20">
<div class="flex items-center gap-2.5 mb-5">
<span class="material-symbols-outlined text-gray-400 text-[20px]">person</span>
<h3 class="text-[15px] font-bold text-white tracking-wide">基本信息</h3>
</div>
<div class="space-y-6">
<div>
<p class="text-[13px] text-text-label mb-2">行业</p>
<p class="text-[15px] font-medium text-text-value">新媒体 / 电商</p>
</div>
<div>
<p class="text-[13px] text-text-label mb-2">职位</p>
<p class="text-[15px] font-medium text-text-value">创始人</p>
</div>
<div>
<p class="text-[13px] text-text-label mb-2">业务体量</p>
<p class="text-[15px] font-medium text-text-value">年GMV 5000万+</p>
</div>
<div class="h-px bg-white/5 w-full"></div>
<div>
<p class="text-[13px] text-text-label mb-2">我擅长</p>
<p class="text-[15px] font-medium text-text-value leading-relaxed">
短视频制作、IP打造、私域运营
</p>
</div>
<div>
<p class="text-[13px] text-text-label mb-2">联系方式</p>
<div class="flex items-center gap-2">
<span class="text-[15px] font-mono text-text-value tracking-wide">139****02</span>
<span class="material-symbols-outlined text-text-label text-[18px] opacity-60">visibility_off</span>
</div>
</div>
<div>
<p class="text-[13px] text-text-label mb-2">微信号</p>
<div class="flex items-center gap-2">
<span class="text-[15px] font-mono text-text-value tracking-wide">wxid_****abc</span>
<span class="material-symbols-outlined text-text-label text-[18px] opacity-60">visibility_off</span>
</div>
</div>
</div>
</section>
<section class="bg-card-dark border-subtle rounded-2xl p-5 shadow-lg shadow-black/20">
<div class="flex items-center gap-2.5 mb-5">
<span class="material-symbols-outlined text-[#FCD34D] text-[20px]">lightbulb</span>
<h3 class="text-[15px] font-bold text-white tracking-wide">个人故事</h3>
</div>
<div class="space-y-6">
<div>
<div class="flex items-center gap-2 mb-2">
<span class="text-base">🏆</span>
<h4 class="text-[13px] font-medium text-text-label">最赚钱的一个月做的是什么</h4>
</div>
<p class="text-[14px] text-text-value leading-relaxed text-gray-200">
旅游账号30天涨粉10万带货佣金收入12万
</p>
</div>
<div class="h-px bg-white/5 w-full"></div>
<div>
<div class="flex items-center gap-2 mb-2">
<span class="text-base">⭐️</span>
<h4 class="text-[13px] font-medium text-text-label">最有成就感的一件事</h4>
</div>
<p class="text-[14px] text-text-value leading-relaxed text-gray-200">
帮助3个素人打造个人IP每个月稳定变现5万+
</p>
</div>
<div class="h-px bg-white/5 w-full"></div>
<div>
<div class="flex items-center gap-2 mb-2">
<span class="material-symbols-outlined text-blue-400 text-[18px]">restart_alt</span>
<h4 class="text-[13px] font-medium text-text-label">人生的转折点</h4>
</div>
<p class="text-[14px] text-text-value leading-relaxed text-gray-200">
辞去互联网大厂工作开始做自媒体,第三个月就超过原薪资
</p>
</div>
</div>
</section>
<section class="bg-card-dark border-subtle rounded-2xl p-5 shadow-lg shadow-black/20">
<div class="flex items-center gap-2.5 mb-5">
<span class="text-[20px]">🤝</span>
<h3 class="text-[15px] font-bold text-white tracking-wide">互助需求</h3>
</div>
<div class="space-y-3">
<div class="bg-card-inner rounded-lg p-4 border border-white/5">
<span class="inline-block px-2 py-0.5 mb-2 text-[11px] font-medium text-accent bg-[#112D2A] rounded">
我能帮你
</span>
<p class="text-[13px] text-text-value leading-relaxed tracking-wide">
短视频脚本、账号冷启动、私域转化设计
</p>
</div>
<div class="bg-card-inner rounded-lg p-4 border border-white/5">
<span class="inline-block px-2 py-0.5 mb-2 text-[11px] font-medium text-[#F59E0B] bg-[#2D1F0D] rounded">
我需要帮助
</span>
<p class="text-[13px] text-text-value leading-relaxed tracking-wide">
寻找供应链资源和线下活动合作
</p>
</div>
</div>
</section>
<section class="bg-card-dark border-subtle rounded-2xl p-5 mb-6 shadow-lg shadow-black/20">
<div class="flex items-center gap-2.5 mb-3">
<span class="material-symbols-outlined text-gray-400 text-[20px]">rocket_launch</span>
<h3 class="text-[15px] font-bold text-white tracking-wide">项目介绍</h3>
</div>
<p class="text-[14px] text-text-value leading-relaxed text-gray-200">
旅游+生活方式自媒体矩阵全网粉丝50万+
</p>
</section>
</main>
<div class="fixed bottom-0 left-0 right-0 p-4 bg-background-dark/95 backdrop-blur border-t border-white/5 z-40 pb-10">
<div class="max-w-lg mx-auto">
<button class="w-full bg-transparent text-[#F59E0B] font-medium py-4 rounded-full border border-[#F59E0B]/30 text-[15px] active:scale-[0.98] transition-all duration-200 flex items-center justify-center gap-2 tracking-wide">
成为超级个体 <span class="material-symbols-outlined text-[18px]">arrow_forward</span>
</button>
</div>
</div>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

View File

@@ -0,0 +1,227 @@
<!DOCTYPE html><html lang="zh-CN" class="dark"><head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Mentor Detail Profile</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,typography"></script>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&amp;display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script>
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
primary: "#4FD1C5", // Teal as requested
"primary-dark": "#38B2AC",
"background-light": "#F7FAFC",
"background-dark": "#000000",
"surface-dark": "#121212",
"surface-light": "#FFFFFF",
"card-dark": "#1E1E1E",
"card-light": "#FFFFFF",
"text-primary-dark": "#FFFFFF",
"text-secondary-dark": "#A0AEC0",
"text-primary-light": "#1A202C",
"text-secondary-light": "#718096",
"highlight-orange": "#ED8936",
},
fontFamily: {
display: ["Noto Sans SC", "sans-serif"],
},
borderRadius: {
DEFAULT: "0.5rem",
'xl': "1rem",
'2xl': "1.5rem",
},
},
},
};
</script>
<style>
body {
font-family: 'Noto Sans SC', sans-serif;
}.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background-light dark:bg-background-dark text-text-primary-light dark:text-text-primary-dark transition-colors duration-200">
<div class="fixed top-0 left-0 right-0 z-50 bg-background-light/90 dark:bg-background-dark/90 backdrop-blur-md px-4 py-3 flex justify-between items-center border-b border-gray-200 dark:border-gray-800">
<button class="text-text-primary-light dark:text-white p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800" style="">
<span class="material-icons" style="">arrow_back</span>
</button>
<h1 class="text-lg font-medium" style="">导师详情</h1>
<button class="text-text-primary-light dark:text-white p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800" style="">
<span class="material-icons" style="">more_horiz</span>
</button>
</div>
<main class="pt-16 pb-24 px-4 max-w-md mx-auto">
<div class="flex flex-col items-center mt-6 mb-8 text-center">
<div class="relative mb-4">
<div class="w-24 h-24 rounded-full overflow-hidden border-2 border-primary p-0.5">
<img alt="Mentor Avatar" class="w-full h-full object-cover rounded-full" src="https://lh3.googleusercontent.com/aida-public/AB6AXuBVtV-57bHdDZe8NP5PbMvnWgtUspxsIEcFOkdZox4jI68GfvFx_cGJi11ZL_iCIhnVxLcFXbRRvgodW1ZtkdJ6N75N_-C7C_Vzoagoh5Ovc-GUD3_Z_uDC1TO9XEA1Mo0CYKykpNzigJbpSL5a2fx93sUEC3PV-Dh8H0mGoI8H7Xu-AHgxEfkULmJHEUnEVoc9yEYBBPQvEGZR6z7KEY_i_QtWjZIG8scxH7VxpSUuuN02PA_UyVyD3pgEEpZTn_w8f63O7i149ak" style="">
</div>
</div>
<h2 class="text-2xl font-bold mb-1" style="">卡若</h2>
<p class="text-primary text-sm font-medium mb-4" style="">结构判断型咨询 · Decision &gt; Execution</p>
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-4 border-primary">
<p class="text-sm text-text-secondary-light dark:text-gray-300 leading-relaxed text-left" style="">
大多数人失败,不是因为不努力,而是把精力投进了一个一开始就不该参与的结构里。
</p>
</div>
</div>
<div class="mb-8">
<div class="flex items-center mb-4">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2" style="">01</span>
<h3 class="font-bold text-lg" style="">为什么找卡若?</h3>
</div>
<div class="grid grid-cols-3 gap-3">
<div class="bg-card-light dark:bg-surface-dark p-3 rounded-lg text-center shadow-sm">
<p class="font-bold text-sm mb-1" style="">做事的人</p>
<p class="text-xs text-text-secondary-light dark:text-gray-500" style="">方向始终不对</p>
</div>
<div class="bg-card-light dark:bg-surface-dark p-3 rounded-lg text-center shadow-sm">
<p class="font-bold text-sm mb-1" style="">犹豫的人</p>
<p class="text-xs text-text-secondary-light dark:text-gray-500" style="">始终不敢决定</p>
</div>
<div class="bg-card-light dark:bg-surface-dark p-3 rounded-lg text-center shadow-sm">
<p class="font-bold text-sm mb-1" style="">已投入的人</p>
<p class="text-xs text-text-secondary-light dark:text-gray-500" style="">越投越不确定</p>
</div>
</div>
<p class="text-center text-primary text-xs mt-3 font-medium" style="">共同问题不是能力,而是缺乏一次高质量的判断</p>
</div>
<div class="mb-8">
<div class="flex items-center mb-2">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2" style="">02</span>
<h3 class="font-bold text-lg" style="">提供什么?</h3>
</div>
<p class="text-xs text-text-secondary-light dark:text-gray-500 mb-4 ml-8" style="">不做激励,不做陪伴 · 专注「决策前的结构判断」</p>
<div class="space-y-4">
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-2 border-primary relative overflow-hidden">
<div class="flex items-center mb-2">
<div class="bg-primary/20 text-primary w-5 h-5 flex items-center justify-center rounded-full text-xs font-bold mr-2" style="">1</div>
<h4 class="font-bold" style="">项目结构判断</h4>
</div>
<div class="flex flex-wrap gap-2 pl-7">
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">是否真实存在赚钱结构</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">回报是否可持续</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">普通人成功概率</span>
</div>
</div>
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-2 border-primary relative overflow-hidden">
<div class="flex items-center mb-2">
<div class="bg-primary/20 text-primary w-5 h-5 flex items-center justify-center rounded-full text-xs font-bold mr-2" style="">2</div>
<h4 class="font-bold" style="">× 项目匹配</h4>
</div>
<div class="flex flex-wrap gap-2 pl-7">
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">性格资源阶段是否匹配</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">最大优势与致命短板</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">最可能失败节点</span>
</div>
</div>
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-2 border-primary relative overflow-hidden">
<div class="flex items-center mb-2">
<div class="bg-primary/20 text-primary w-5 h-5 flex items-center justify-center rounded-full text-xs font-bold mr-2" style="">3</div>
<h4 class="font-bold" style="">风险止损判断</h4>
</div>
<div class="flex flex-wrap gap-2 pl-7">
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">哪一步是不可逆风险</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">什么时候必须停</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400" style="">避免沉没成本陷阱</span>
</div>
</div>
</div>
</div>
<div class="mb-8">
<div class="flex items-center mb-4">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2" style="">03</span>
<h3 class="font-bold text-lg" style="">收费标准</h3>
</div>
<div class="bg-card-light dark:bg-card-dark rounded-xl overflow-hidden shadow-sm">
<div class="grid grid-cols-4 bg-primary text-black font-bold text-xs p-3">
<div class="col-span-2" style="">咨询项目</div>
<div class="text-center" style="">时长</div>
<div class="text-right" style="">价格</div>
</div>
<div class="grid grid-cols-4 p-4 border-b border-gray-100 dark:border-gray-800 items-center">
<div class="col-span-2 font-medium text-sm" style="">单次咨询</div>
<div class="text-center text-xs text-text-secondary-light dark:text-gray-400" style="">1小时</div>
<div class="text-right font-bold text-primary" style="">¥980</div>
</div>
<div class="grid grid-cols-4 p-4 border-b border-gray-100 dark:border-gray-800 items-center bg-gray-50 dark:bg-surface-dark/30">
<div class="col-span-2 font-medium text-sm" style="">半年咨询</div>
<div class="text-center text-xs text-text-secondary-light dark:text-gray-400" style="">-</div>
<div class="text-right">
<div class="text-[10px] text-text-secondary-light dark:text-gray-500 line-through" style="">98000</div>
<div class="font-bold text-primary text-sm" style="">¥19,800</div>
</div>
</div>
<div class="grid grid-cols-4 p-4 items-center">
<div class="col-span-2 font-medium text-sm" style="">年度咨询</div>
<div class="text-center text-xs text-text-secondary-light dark:text-gray-400" style="">-</div>
<div class="text-right">
<div class="text-[10px] text-text-secondary-light dark:text-gray-500 line-through" style="">196000</div>
<div class="font-bold text-primary text-sm" style="">¥29,800</div>
</div>
</div>
</div>
<div class="flex flex-wrap justify-center gap-2 mt-4">
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded" style="">项目/副业决策</span>
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded" style="">转型选择</span>
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded" style="">投资判断</span>
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded" style="">关键节点</span>
</div>
</div>
<div class="mb-10">
<div class="flex items-center mb-4">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2" style="">04</span>
<h3 class="font-bold text-lg" style="">判断风格</h3>
</div>
<div class="flex flex-wrap gap-3">
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm" style="">
冷静
</div>
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm" style="">
克制
</div>
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm" style="">
偏风险视角
</div>
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm" style="">
偏长期主义
</div>
</div>
</div>
<p class="text-center text-[10px] text-text-secondary-light dark:text-gray-600 mb-8" style=""><br></p>
</main>
<div class="fixed bottom-0 left-0 right-0 bg-background-light dark:bg-background-dark border-t border-gray-200 dark:border-gray-800 p-4 safe-area-pb">
<div class="max-w-md mx-auto flex gap-3">
<button class="w-full bg-primary hover:bg-primary-dark text-black font-bold py-3 px-4 rounded-xl shadow-lg shadow-primary/20 flex items-center justify-center gap-2" style="">
<span class="material-icons text-sm" style="">chat_bubble</span>
链接导师
</button>
</div>
</div>
<div class="h-6 w-full bg-background-light dark:bg-background-dark"></div>
<script>
// Force dark mode for this demo as requested by user context "dark UI style of Reference Image 1"
// But keeping the capability to toggle if needed.
document.documentElement.classList.add('dark');
</script>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

View File

@@ -0,0 +1,312 @@
<!DOCTYPE html>
<html lang="zh-CN"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>Mentor Detail Profile</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,typography"></script>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<script>
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
primary: "#4FD1C5", // Teal as requested
"primary-dark": "#38B2AC",
"background-light": "#F7FAFC",
"background-dark": "#000000",
"surface-dark": "#121212",
"surface-light": "#FFFFFF",
"card-dark": "#1E1E1E",
"card-light": "#FFFFFF",
"text-primary-dark": "#FFFFFF",
"text-secondary-dark": "#A0AEC0",
"text-primary-light": "#1A202C",
"text-secondary-light": "#718096",
"highlight-orange": "#ED8936", // Keeping the orange from Ref 2 for contrast if needed, or mapping to Teal
},
fontFamily: {
display: ["Noto Sans SC", "sans-serif"],
},
borderRadius: {
DEFAULT: "0.5rem",
'xl': "1rem",
'2xl': "1.5rem",
},
},
},
};
</script>
<style>
body {
font-family: 'Noto Sans SC', sans-serif;
}.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background-light dark:bg-background-dark text-text-primary-light dark:text-text-primary-dark transition-colors duration-200 relative">
<div class="fixed top-0 left-0 right-0 z-40 bg-background-light/90 dark:bg-background-dark/90 backdrop-blur-md px-4 py-3 flex justify-between items-center border-b border-gray-200 dark:border-gray-800">
<button class="text-text-primary-light dark:text-white p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800">
<span class="material-icons">arrow_back</span>
</button>
<h1 class="text-lg font-medium">导师详情</h1>
<button class="text-text-primary-light dark:text-white p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800">
<span class="material-icons">more_horiz</span>
</button>
</div>
<main class="pt-16 pb-24 px-4 max-w-md mx-auto blur-sm select-none pointer-events-none">
<div class="flex flex-col items-center mt-6 mb-8 text-center">
<div class="relative mb-4">
<div class="w-24 h-24 rounded-full overflow-hidden border-2 border-primary p-0.5">
<img alt="Mentor Avatar" class="w-full h-full object-cover rounded-full" src="https://lh3.googleusercontent.com/aida-public/AB6AXuBVtV-57bHdDZe8NP5PbMvnWgtUspxsIEcFOkdZox4jI68GfvFx_cGJi11ZL_iCIhnVxLcFXbRRvgodW1ZtkdJ6N75N_-C7C_Vzoagoh5Ovc-GUD3_Z_uDC1TO9XEA1Mo0CYKykpNzigJbpSL5a2fx93sUEC3PV-Dh8H0mGoI8H7Xu-AHgxEfkULmJHEUnEVoc9yEYBBPQvEGZR6z7KEY_i_QtWjZIG8scxH7VxpSUuuN02PA_UyVyD3pgEEpZTn_w8f63O7i149ak"/>
</div>
</div>
<h2 class="text-2xl font-bold mb-1">卡若</h2>
<p class="text-primary text-sm font-medium mb-4">结构判断型咨询 · Decision &gt; Execution</p>
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-4 border-primary">
<p class="text-sm text-text-secondary-light dark:text-gray-300 leading-relaxed text-left">
大多数人失败,不是因为不努力,而是把精力投进了一个一开始就不该参与的结构里。
</p>
</div>
</div>
<div class="mb-8">
<div class="flex items-center mb-4">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2">01</span>
<h3 class="font-bold text-lg">为什么找卡若?</h3>
</div>
<div class="grid grid-cols-3 gap-3">
<div class="bg-card-light dark:bg-surface-dark p-3 rounded-lg text-center shadow-sm">
<p class="font-bold text-sm mb-1">做事的人</p>
<p class="text-xs text-text-secondary-light dark:text-gray-500">方向始终不对</p>
</div>
<div class="bg-card-light dark:bg-surface-dark p-3 rounded-lg text-center shadow-sm">
<p class="font-bold text-sm mb-1">犹豫的人</p>
<p class="text-xs text-text-secondary-light dark:text-gray-500">始终不敢决定</p>
</div>
<div class="bg-card-light dark:bg-surface-dark p-3 rounded-lg text-center shadow-sm">
<p class="font-bold text-sm mb-1">已投入的人</p>
<p class="text-xs text-text-secondary-light dark:text-gray-500">越投越不确定</p>
</div>
</div>
<p class="text-center text-primary text-xs mt-3 font-medium">共同问题不是能力,而是缺乏一次高质量的判断</p>
</div>
<div class="mb-8">
<div class="flex items-center mb-2">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2">02</span>
<h3 class="font-bold text-lg">提供什么?</h3>
</div>
<p class="text-xs text-text-secondary-light dark:text-gray-500 mb-4 ml-8">不做激励,不做陪伴 · 专注「决策前的结构判断」</p>
<div class="space-y-4">
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-2 border-primary relative overflow-hidden">
<div class="flex items-center mb-2">
<div class="bg-primary/20 text-primary w-5 h-5 flex items-center justify-center rounded-full text-xs font-bold mr-2">1</div>
<h4 class="font-bold">项目结构判断</h4>
</div>
<div class="flex flex-wrap gap-2 pl-7">
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">是否真实存在赚钱结构</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">回报是否可持续</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">普通人成功概率</span>
</div>
</div>
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-2 border-primary relative overflow-hidden">
<div class="flex items-center mb-2">
<div class="bg-primary/20 text-primary w-5 h-5 flex items-center justify-center rounded-full text-xs font-bold mr-2">2</div>
<h4 class="font-bold">× 项目匹配</h4>
</div>
<div class="flex flex-wrap gap-2 pl-7">
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">性格资源阶段是否匹配</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">最大优势与致命短板</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">最可能失败节点</span>
</div>
</div>
<div class="bg-card-light dark:bg-card-dark rounded-xl p-4 shadow-sm border-l-2 border-primary relative overflow-hidden">
<div class="flex items-center mb-2">
<div class="bg-primary/20 text-primary w-5 h-5 flex items-center justify-center rounded-full text-xs font-bold mr-2">3</div>
<h4 class="font-bold">风险止损判断</h4>
</div>
<div class="flex flex-wrap gap-2 pl-7">
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">哪一步是不可逆风险</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">什么时候必须停</span>
<span class="text-xs bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-text-secondary-light dark:text-gray-400">避免沉没成本陷阱</span>
</div>
</div>
</div>
</div>
<div class="mb-8">
<div class="flex items-center mb-4">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2">03</span>
<h3 class="font-bold text-lg">收费标准</h3>
</div>
<div class="bg-card-light dark:bg-card-dark rounded-xl overflow-hidden shadow-sm">
<div class="grid grid-cols-4 bg-primary text-black font-bold text-xs p-3">
<div class="col-span-2">咨询项目</div>
<div class="text-center">时长</div>
<div class="text-right">价格</div>
</div>
<div class="grid grid-cols-4 p-4 border-b border-gray-100 dark:border-gray-800 items-center">
<div class="col-span-2 font-medium text-sm">单次咨询</div>
<div class="text-center text-xs text-text-secondary-light dark:text-gray-400">1小时</div>
<div class="text-right font-bold text-primary">¥980</div>
</div>
<div class="grid grid-cols-4 p-4 border-b border-gray-100 dark:border-gray-800 items-center bg-gray-50 dark:bg-surface-dark/30">
<div class="col-span-2 font-medium text-sm">半年咨询</div>
<div class="text-center text-xs text-text-secondary-light dark:text-gray-400">-</div>
<div class="text-right">
<div class="text-[10px] text-text-secondary-light dark:text-gray-500 line-through">98000</div>
<div class="font-bold text-primary text-sm">¥19,800</div>
</div>
</div>
<div class="grid grid-cols-4 p-4 items-center">
<div class="col-span-2 font-medium text-sm">年度咨询</div>
<div class="text-center text-xs text-text-secondary-light dark:text-gray-400">-</div>
<div class="text-right">
<div class="text-[10px] text-text-secondary-light dark:text-gray-500 line-through">196000</div>
<div class="font-bold text-primary text-sm">¥29,800</div>
</div>
</div>
</div>
<div class="flex flex-wrap justify-center gap-2 mt-4">
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded">项目/副业决策</span>
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded">转型选择</span>
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded">投资判断</span>
<span class="text-[10px] bg-primary/10 text-primary px-2 py-1 rounded">关键节点</span>
</div>
</div>
<div class="mb-10">
<div class="flex items-center mb-4">
<span class="bg-primary text-black text-xs font-bold px-2 py-0.5 rounded-full mr-2">04</span>
<h3 class="font-bold text-lg">判断风格</h3>
</div>
<div class="flex flex-wrap gap-3">
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm">
冷静
</div>
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm">
克制
</div>
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm">
偏风险视角
</div>
<div class="bg-card-light dark:bg-card-dark border border-gray-100 dark:border-gray-700 px-4 py-2 rounded-full text-sm font-medium shadow-sm">
偏长期主义
</div>
</div>
</div>
<div class="bg-primary/5 dark:bg-card-dark rounded-2xl p-6 text-center border border-primary/20 mb-8">
<h4 class="font-bold mb-4 text-primary">扫码预约咨询</h4>
<div class="w-32 h-32 bg-white mx-auto rounded-lg flex items-center justify-center mb-3">
<span class="material-icons text-6xl text-gray-800">qr_code_2</span>
</div>
<p class="text-xs text-text-secondary-light dark:text-gray-500">卡若 | 结构判断咨询</p>
</div>
<p class="text-center text-[10px] text-text-secondary-light dark:text-gray-600 mb-8">
判断的价值,往往体现在你"没做"的那一步
</p>
</main>
<div class="fixed bottom-0 left-0 right-0 bg-background-light dark:bg-background-dark border-t border-gray-200 dark:border-gray-800 p-4 safe-area-pb z-30 blur-sm pointer-events-none select-none">
<div class="max-w-md mx-auto flex gap-3">
<button class="flex-1 bg-surface-dark dark:bg-surface-dark border border-gray-300 dark:border-gray-700 text-text-primary-light dark:text-white font-bold py-3 px-4 rounded-xl flex items-center justify-center gap-2">
<span class="material-icons text-sm">share</span>
分享
</button>
<button class="flex-[2] bg-primary hover:bg-primary-dark text-black font-bold py-3 px-4 rounded-xl shadow-lg shadow-primary/20 flex items-center justify-center gap-2">
<span class="material-icons text-sm">chat_bubble</span>
联系导师
</button>
</div>
</div>
<div class="h-6 w-full bg-background-light dark:bg-background-dark z-30 blur-sm"></div>
<div class="fixed inset-0 z-50 flex items-end justify-center sm:items-center p-4 bg-black/70 backdrop-blur-sm animate-fade-in">
<div class="bg-surface-dark w-full max-w-sm rounded-t-2xl sm:rounded-2xl overflow-hidden shadow-2xl ring-1 ring-white/10 animate-slide-up">
<div class="px-6 pt-6 pb-4 flex items-center justify-between border-b border-gray-800">
<h3 class="text-xl font-bold text-white">选择咨询项目</h3>
<button class="text-gray-400 hover:text-white transition-colors">
<span class="material-icons">close</span>
</button>
</div>
<div class="p-6 space-y-3">
<label class="block relative group cursor-pointer">
<input checked="" class="peer sr-only" name="service" type="radio"/>
<div class="p-4 rounded-xl bg-card-dark border border-gray-700 peer-checked:border-primary peer-checked:bg-primary/5 transition-all">
<div class="flex justify-between items-center mb-1">
<span class="font-bold text-white text-base">单次咨询</span>
<div class="w-5 h-5 rounded-full border border-gray-500 peer-checked:border-primary peer-checked:bg-primary flex items-center justify-center">
<div class="w-2.5 h-2.5 bg-black rounded-full opacity-0 peer-checked:opacity-100 transition-opacity"></div>
</div>
</div>
<div class="flex justify-between items-end">
<span class="text-xs text-gray-400">1小时深度沟通</span>
<span class="text-lg font-bold text-primary">¥980</span>
</div>
</div>
</label>
<label class="block relative group cursor-pointer">
<input class="peer sr-only" name="service" type="radio"/>
<div class="p-4 rounded-xl bg-card-dark border border-gray-700 peer-checked:border-primary peer-checked:bg-primary/5 transition-all">
<div class="flex justify-between items-center mb-1">
<span class="font-bold text-white text-base">半年咨询</span>
<div class="w-5 h-5 rounded-full border border-gray-500 peer-checked:border-primary peer-checked:bg-primary flex items-center justify-center">
<div class="w-2.5 h-2.5 bg-black rounded-full opacity-0 peer-checked:opacity-100 transition-opacity"></div>
</div>
</div>
<div class="flex justify-between items-end">
<span class="text-xs text-gray-400">不限次数 · 关键节点陪伴</span>
<div class="text-right">
<span class="text-xs text-gray-500 line-through mr-1">¥98,000</span>
<span class="text-lg font-bold text-primary">¥19,800</span>
</div>
</div>
</div>
</label>
<label class="block relative group cursor-pointer">
<input class="peer sr-only" name="service" type="radio"/>
<div class="p-4 rounded-xl bg-card-dark border border-gray-700 peer-checked:border-primary peer-checked:bg-primary/5 transition-all">
<div class="flex justify-between items-center mb-1">
<span class="font-bold text-white text-base">年度咨询</span>
<span class="ml-2 text-[10px] bg-highlight-orange text-white px-1.5 py-0.5 rounded">推荐</span>
<div class="w-5 h-5 rounded-full border border-gray-500 peer-checked:border-primary peer-checked:bg-primary flex items-center justify-center ml-auto">
<div class="w-2.5 h-2.5 bg-black rounded-full opacity-0 peer-checked:opacity-100 transition-opacity"></div>
</div>
</div>
<div class="flex justify-between items-end">
<span class="text-xs text-gray-400">全年度战略顾问</span>
<div class="text-right">
<span class="text-xs text-gray-500 line-through mr-1">¥196,000</span>
<span class="text-lg font-bold text-primary">¥29,800</span>
</div>
</div>
</div>
</label>
</div>
<div class="p-6 pt-2 pb-8 bg-surface-dark border-t border-gray-800">
<button class="w-full bg-primary hover:bg-primary-dark text-black font-bold py-3.5 px-4 rounded-xl shadow-lg shadow-primary/20 transition-colors flex items-center justify-center gap-2">
确认选择
<span class="material-icons text-sm">arrow_forward</span>
</button>
<p class="text-center text-[10px] text-gray-500 mt-3">点击确认即代表同意 <a class="text-gray-400 underline" href="#">服务协议</a></p>
</div>
</div>
</div>
<script>
// Force dark mode for this demo as requested by user context "dark UI style of Reference Image 1"
document.documentElement.classList.add('dark');
</script>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

View File

@@ -0,0 +1,200 @@
<!DOCTYPE html>
<html class="dark" lang="zh-CN"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>导师列表页</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,typography,container-queries"></script>
<script>
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
primary: "#2DD4BF",
"background-dark": "#000000",
"card-dark": "#1C1C1E",
"nav-dark": "#1C1C1E",
"subtext-dark": "#A1A1AA",
"tag-bg": "#2C2C2E",
"tag-text": "#E5E7EB",
},
fontFamily: {
display: ["PingFang SC", "Heiti SC", "SF Pro Display", "Roboto", "sans-serif"],
body: ["PingFang SC", "Heiti SC", "SF Pro Text", "Roboto", "sans-serif"],
},
borderRadius: {
DEFAULT: "0.5rem",
'xl': '1rem',
'2xl': '1.5rem',
},
},
},
};
</script>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&amp;display=swap" rel="stylesheet"/>
<style>
body {
font-family: 'Noto Sans SC', sans-serif;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
.safe-area-bottom {
padding-bottom: env(safe-area-inset-bottom);
}
body {
min-height: max(884px, 100dvh);
}
</style>
<style>
body {
min-height: max(884px, 100dvh);
}
</style>
</head>
<body class="bg-background-dark text-gray-100 min-h-screen font-body antialiased selection:bg-primary selection:text-white">
<div class="sticky top-0 z-50 bg-background-dark/95 backdrop-blur-md px-4 pt-12 pb-2 border-b border-gray-800">
<div class="relative flex items-center justify-between h-11 mb-2">
<button class="flex items-center justify-center w-8 h-8 -ml-1 text-white hover:text-gray-300 transition-colors">
<span class="material-symbols-outlined text-[24px]">arrow_back</span>
</button>
<h1 class="absolute left-1/2 transform -translate-x-1/2 text-[17px] font-medium text-white tracking-wide">选择导师</h1>
<button class="flex items-center justify-center w-8 h-8 -mr-1 text-white hover:text-gray-300 transition-colors">
<span class="material-symbols-outlined text-[24px]">more_horiz</span>
</button>
</div>
<div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<span class="material-symbols-outlined text-gray-500 text-[20px]">search</span>
</div>
<input class="block w-full pl-10 pr-3 py-3 border-none rounded-xl bg-card-dark text-white placeholder-gray-500 focus:outline-none focus:ring-1 focus:ring-primary/50 shadow-sm text-sm" placeholder="搜索导师、技能或行业..." type="text"/>
</div>
<div class="flex gap-3 overflow-x-auto scrollbar-hide mt-4 pb-2">
<button class="whitespace-nowrap px-4 py-1.5 rounded-full bg-primary text-black font-semibold text-xs">全部</button>
<button class="whitespace-nowrap px-4 py-1.5 rounded-full bg-card-dark border border-gray-800 text-gray-300 font-medium text-xs hover:border-gray-600 transition-colors">项目结构判断</button>
<button class="whitespace-nowrap px-4 py-1.5 rounded-full bg-card-dark border border-gray-800 text-gray-300 font-medium text-xs hover:border-gray-600 transition-colors">产品架构</button>
<button class="whitespace-nowrap px-4 py-1.5 rounded-full bg-card-dark border border-gray-800 text-gray-300 font-medium text-xs hover:border-gray-600 transition-colors">BP梳理</button>
</div>
</div>
<main class="px-4 pb-8 space-y-4 pt-4 safe-area-bottom">
<div class="flex justify-between items-end mb-2">
<h2 class="text-base font-bold text-gray-200">推荐导师</h2>
<a class="text-xs text-primary font-medium hover:opacity-80 flex items-center" href="#">查看全部 <span class="material-symbols-outlined text-[16px] ml-0.5">chevron_right</span></a>
</div>
<div class="bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-800 relative overflow-hidden group hover:border-gray-700 transition-all">
<div class="flex gap-4">
<div class="flex-shrink-0 relative">
<img alt="Mentor Profile" class="w-14 h-14 rounded-full object-cover border border-gray-700 shadow-md" src="https://lh3.googleusercontent.com/aida-public/AB6AXuB8f2js-gZTCIf5XMw7hgLz3DoqdqAR5N8rUvWrDHBs_4YlILiWPBK1kEQFcMNQZ47g9PT70QUwm2URAAOhr4tUQv_ckcnlsgorXbxw7wehqOJ7e5FUp2zcLvuVBj0WE_nKVNHiv5-Gpvz6qDJnDwL3_JnV4TzY1x1Mz-0lGUqkYWldPfLllwdrpgthJ2hGbaNDIXYbkSrDL5nJhWNrHIB0tVNHzuOLI3-JEY1jATxRTrjhZn4c0fAFRXYIPgjD3PNW0cOfi0GwXRA"/>
</div>
<div class="flex-1">
<div class="flex justify-between items-start">
<div>
<h3 class="text-base font-bold text-white leading-tight">卡若</h3>
<p class="text-xs text-subtext-dark mt-1">结构判断型咨询 · Decision &gt; Execution</p>
</div>
</div>
<div class="flex flex-wrap gap-2 mt-3">
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">项目结构判断</span>
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">风险止损</span>
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">人×项目匹配</span>
</div>
<div class="flex justify-between items-center mt-4 border-t border-gray-800 pt-3">
<div class="flex items-baseline gap-1">
<span class="text-lg font-bold text-primary">¥980</span>
<span class="text-xs font-normal text-gray-500">起 / 单次咨询</span>
</div>
<button class="bg-white text-black px-4 py-1.5 rounded-full text-xs font-bold hover:opacity-90 transition-opacity">预约</button>
</div>
</div>
</div>
</div>
<div class="bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-800 relative overflow-hidden group hover:border-gray-700 transition-all">
<div class="flex gap-4">
<div class="flex-shrink-0 relative">
<img alt="Mentor Profile" class="w-14 h-14 rounded-full object-cover border border-gray-700 shadow-md" src="https://lh3.googleusercontent.com/aida-public/AB6AXuCHmRfkFR5OClBawJnpt7pU_9LygmMV2dM8eqjbmJourDUDo4WOoMhXVw7B1EPq40Qp5ENcR0Wkz3T4DgS8Wmvzz739wvo2VVn98H8vjJYqWW1WWzkXo3LiSWy78IhoE3nt0uIxFvx8BiBohPcIlqCSr6orLvUdA781O75du-RfI7a_gPWsSt29awOyyVO5RDpXQ9vhqdulaZA5LBlKa0_ZzaFCGq5eqiKV8WXTRUnNJunGsou7HEs31q8RncKHqyhPhqqGu1Un9qk"/>
</div>
<div class="flex-1">
<div class="flex justify-between items-start">
<div>
<h3 class="text-base font-bold text-white leading-tight">林晓雯</h3>
<p class="text-xs text-subtext-dark mt-1">资深产品经理 · 10年互联网经验</p>
</div>
</div>
<div class="flex flex-wrap gap-2 mt-3">
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">产品架构</span>
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">MVP落地</span>
</div>
<div class="flex justify-between items-center mt-4 border-t border-gray-800 pt-3">
<div class="flex items-baseline gap-1">
<span class="text-lg font-bold text-primary">¥1,200</span>
<span class="text-xs font-normal text-gray-500">起 / 单次咨询</span>
</div>
<button class="bg-white text-black px-4 py-1.5 rounded-full text-xs font-bold hover:opacity-90 transition-opacity">预约</button>
</div>
</div>
</div>
</div>
<div class="bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-800 relative overflow-hidden group hover:border-gray-700 transition-all">
<div class="flex gap-4">
<div class="flex-shrink-0 relative">
<img alt="Mentor Profile" class="w-14 h-14 rounded-full object-cover border border-gray-700 shadow-md" src="https://lh3.googleusercontent.com/aida-public/AB6AXuAxI32u0vnwLDLLpyu7oE9BwN_vgFHbOARwqczhJZ8YacePvj_rSo7yD2DCv1eKyh6eR21QQtCYhccxg1VT-VXpG4LwuXNGFjcN_Q6UMf44_7cjVTGlo0ccINiljCY7UNybGtL99zlNj6bqhI27XFT7BDbBq0EDOhCoBuQI3jUzc_ge-GcQb7EdfXXx0wVm4B715gQo67--eH1_cyHoHOSaFYHqaUffpmWEiyL7qseQ9m_nlPawgzN_vi0fEZG_PWLXK84bKcxyxJg"/>
</div>
<div class="flex-1">
<div class="flex justify-between items-start">
<div>
<h3 class="text-base font-bold text-white leading-tight">张伟</h3>
<p class="text-xs text-subtext-dark mt-1">连续创业者 · 融资顾问</p>
</div>
</div>
<div class="flex flex-wrap gap-2 mt-3">
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">BP梳理</span>
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">股权设计</span>
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">路演辅导</span>
</div>
<div class="flex justify-between items-center mt-4 border-t border-gray-800 pt-3">
<div class="flex items-baseline gap-1">
<span class="text-lg font-bold text-primary">¥2,500</span>
<span class="text-xs font-normal text-gray-500">起 / 单次咨询</span>
</div>
<button class="bg-white text-black px-4 py-1.5 rounded-full text-xs font-bold hover:opacity-90 transition-opacity">预约</button>
</div>
</div>
</div>
</div>
<div class="bg-card-dark rounded-2xl p-4 shadow-sm border border-gray-800 relative overflow-hidden group hover:border-gray-700 transition-all">
<div class="flex gap-4">
<div class="flex-shrink-0 relative">
<img alt="Mentor Profile" class="w-14 h-14 rounded-full object-cover border border-gray-700 shadow-md" src="https://lh3.googleusercontent.com/aida-public/AB6AXuCGZYHocKCph6QWMbGW_jomr8o5Nb4IkALRSDYXilrMR6RZaVREGYZrQul5r2ILFWGycCwzAEILQltE4HrkmTohyETRNu-D-fHv-UvP8KxnyCzm8KjCMiMkhWeFsdWqoIQpxoaBXAkfRoF3M4n2IddKUo9k1EyUaNPzhnTtqCQwYO6UKHp7AyJeoI0-Y17vbwTvp2wFjHBhGfBSCMqbPzoKyGJYxo0MNBTrHVWnbJsv7NfGzENkg01G2SAlSXrGG691wAVnDfQwH3E"/>
</div>
<div class="flex-1">
<div class="flex justify-between items-start">
<div>
<h3 class="text-base font-bold text-white leading-tight">Sarah Chen</h3>
<p class="text-xs text-subtext-dark mt-1">跨国企业HRD · 职业规划</p>
</div>
</div>
<div class="flex flex-wrap gap-2 mt-3">
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">职业转型</span>
<span class="px-2 py-1 rounded-md text-[10px] font-medium bg-tag-bg text-tag-text border border-gray-700/50">面试辅导</span>
</div>
<div class="flex justify-between items-center mt-4 border-t border-gray-800 pt-3">
<div class="flex items-baseline gap-1">
<span class="text-lg font-bold text-primary">¥600</span>
<span class="text-xs font-normal text-gray-500">起 / 单次咨询</span>
</div>
<button class="bg-white text-black px-4 py-1.5 rounded-full text-xs font-bold hover:opacity-90 transition-opacity">预约</button>
</div>
</div>
</div>
</div>
</main>
<script>
document.documentElement.classList.add('dark');
</script>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Some files were not shown because too many files have changed in this diff Show More