# AIwelink 项目交接说明 > 用途:帮助新加入的开发者快速理解 AIwelink 的产品方向、设计理念、技术基线和文档协作边界。 > > 当前状态:产品和技术方向已完成初步确认,尚未进入实际代码目录初始化阶段。 > > 重要范围:本文记录的是产品设计与工程共识,不等同于完整的商业运营方案。商业和运营细节以飞书为准。 ## 1. 项目一句话定义 AIwelink 是一个帮助大学生认识自己、找到适合的学习或项目机会,并在真实协作中建立高质量关系的项目成长平台。 第一阶段从大学生竞赛和技术项目切入,但长期方向不局限于竞赛信息或组队,而是逐步形成: ```text 认识自己 -> 发现适合的机会 -> 参与真实项目 -> 与合适的人协作 -> 获得项目反馈 -> 更新个人认知和成长路径 ``` ## 2. 产品设计理念 ### 2.1 不做校园墙 校园墙解决的是“让信息被看见”;AIwelink 要解决的是“让合适的人真正开始并完成一件事”。 因此平台内容应尽量绑定: - 明确的竞赛、项目或挑战。 - 具体的角色和能力缺口。 - 时间投入和截止时间。 - 用户能够采取的下一步行动。 - 最终的作品、结果或复盘。 核心指标不应是发帖数和浏览量,而应逐步关注有效申请率、成队率、持续协作率和完成项目的队伍数量。 ### 2.2 不做一次性人格测试 自我认知 Agent 不是为了给用户贴上固定人格标签,也不是心理疾病诊断工具。 测评或对话产生的结果应被视为当前阶段的“待验证假设”,后续通过真实项目行为、队友反馈和项目复盘逐渐修正。 平台要帮助用户回答: - 我擅长什么类型的任务? - 我适合承担什么项目角色? - 我在什么工作环境中更容易发挥? - 我可能在哪些环节遇到困难? - 下一步应该尝试什么或补足什么能力? ### 2.3 社交来自共同目标 社交可以是平台的重要属性,但不应从泛聊天或陌生人浏览开始。 推荐路径是: ```text 个人画像 -> 邀请已认识的人 -> 双方明确授权共享 -> 生成双人合作报告 -> 共同参加项目或挑战 -> 通过结果建立长期关系 ``` 社交关系的核心不是“匹配指数”,而是: - 彼此有哪些互补优势。 - 适合怎样分工。 - 可能在哪些地方产生协作摩擦。 - 应该采用什么沟通方式。 - 适合一起尝试什么项目。 第一阶段优先面向已经认识的朋友、同学和队友,降低信任和隐私风险。暂不以恋爱社交为主场景。 ### 2.4 推荐应帮助用户理解自己 推荐系统不只是提高点击率的工具,而是帮助用户做选择和形成自我认知的导航系统。 推荐对象包括: - 竞赛和项目。 - 学科和学习内容。 - 项目角色。 - 合作对象。 - 课程、导师和 AI 工具。 每条推荐应尽量解释“为什么推荐”,并同时提供适合当前能力的机会、补足短板的机会和带有挑战性的探索机会,避免把用户锁死在单一标签中。 ### 2.5 首页以机会和下一步为中心 首页不以介绍产品、API 或课程为主,也不做简历瀑布流或泛校园信息流。 首页的核心问题应是: > 用户现在最值得做的下一件事是什么? 推荐内容优先级: 1. 适合用户的机会和项目。 2. 用户正在参与的项目。 3. 自我认知和成长任务。 4. 真实项目成果和经验。 5. 在具体需求出现后推荐课程、API 或导师服务。 ## 3. 第一阶段业务闭环 第一阶段优先验证以下闭环: ```text 自我认知 Agent -> 生成个人画像 -> 推荐竞赛、项目和学习方向 -> 邀请朋友并授权共享画像 -> 生成双人合作报告 -> 参与一次真实项目或挑战 -> 记录项目行为和队友反馈 -> 复盘并更新画像 ``` 平台的推广入口可以是免费的自我认知 Agent: - 用户完成个人认知报告。 - 用户分享安全、可控的摘要。 - 邀请朋友后解锁双人或团队分析。 - 完成有效邀请或项目行为后获得积分。 - 积分可兑换深度报告、API 额度、课程优惠或挑战资格。 邀请机制应围绕双方共同获得的价值设计,不应只奖励链接点击或虚假注册。 ## 4. 商业化方向 平台本身先提供免费价值,再在真实需求出现时转化: ```text 赛事和项目机会 -> 组队和真实协作 -> AI 工具与 API 使用 -> 竞赛课程、训练营和导师服务 -> 学校、赛事方和企业服务 ``` 主要商业化方向包括: - 面向竞赛团队的模型 API 和工具包。 - 面向具体赛事的课程、训练营和作品辅导。 - 导师、作品评审和项目启动服务。 - 学校、社团和赛事方的组织管理服务。 - 企业命题赛、品牌赞助和人才发现。 API 和课程不应成为首页硬广告,而应在用户已进入项目或明确遇到问题时出现。 ## 5. 技术总体基线 ### 5.1 已确认选型 | 层 | 选型 | | --- | --- | | Web | Next.js + React + TypeScript | | 业务 API | NestJS + Fastify Adapter | | API 规范 | RESTful API,路径前缀 `/api/v1` | | 数据访问 | Drizzle ORM 为默认工具,复杂查询补充原生 SQL | | 主数据库 | PostgreSQL | | 向量能力 | PostgreSQL `pgvector` 扩展 | | 缓存和队列基础设施 | Redis | | 文件存储 | 阿里云 OSS | | 部署 | 自有 ECS + Docker Compose | | 后续部署 | Kubernetes | | 身份系统 | API 内部 Identity 模块 | | 初期可用性监控 | Uptime Kuma | Agent 的具体模型供应商、编排框架、异步任务实现和独立服务边界暂不定型。 ### 5.2 Web 与 API 的关系 Web 和 API 是两个独立应用,但第一阶段使用同一个公网域名: ```text https://aiwelink.com/ -> Next.js Web https://aiwelink.com/api/v1/* -> NestJS REST API ``` 通过 Nginx 或同类入口反向代理分流。第一阶段不要求 API 子域名,也不把核心业务逻辑写进 Next.js 页面接口。 ### 5.3 API 设计原则 - 使用资源名词和复数路径。 - 使用标准 HTTP 方法和状态码。 - 使用 `/api/v1` 版本前缀。 - JSON 字段使用 `camelCase`,URL 使用小写短横线。 - 列表优先使用游标分页。 - 写操作按需支持 `Idempotency-Key`。 - 错误响应统一格式,并带 `requestId`。 - 权限必须在服务端校验,不能只依赖前端控制。 - 长任务建模为资源或任务,不能把所有功能写成动词接口。 ### 5.4 数据访问原则 ```text Controller -> Application Service -> Repository Interface -> Drizzle Repository / SQL Repository -> PostgreSQL ``` - 普通 CRUD 使用 Drizzle。 - 普通事务使用 Drizzle transaction。 - pgvector、全文搜索、复杂推荐和报表使用参数化原生 SQL。 - Controller 不直接访问数据库。 - 数据库结构必须通过版本化迁移维护。 ### 5.5 数据分层原则 数据按业务和敏感性拆分,不提前进行跨数据库分片: - 身份数据和登录方式。 - 基础资料和公开画像。 - 原始测评回答。 - AI 推测画像和画像版本。 - 项目行为和队友反馈。 - 公开共享结果。 - 授权记录和审计记录。 大型追加型表先通过索引、归档和后续 PostgreSQL 分区解决,实际需要出现前不引入多数据库分片。 ### 5.6 文件存储原则 简历、作品、报告和项目附件使用阿里云 OSS。推荐浏览器直传 OSS,API 只负责签发临时凭证、记录元数据和校验权限。私有文件通过短期签名 URL 访问,应用容器不作为长期文件存储位置。 ## 6. 代码仓库和文档协作约定 使用单 Git 仓库和 Monorepo。当前只确定结构,不立即创建全部目录。 ```text AIwelink/ ├─ apps/ │ ├─ web/ # Next.js Web │ ├─ api/ # NestJS REST API │ ├─ worker/ # 异步任务,Agent 方案未定型 │ └─ admin/ # 后续运营后台 ├─ packages/ │ ├─ contracts/ # OpenAPI、DTO、共享接口 │ ├─ db/ # Drizzle Schema、迁移、种子 │ ├─ validation/ # 共享数据校验 │ ├─ ui/ # 跨应用 UI │ ├─ config/ # 共享配置 │ └─ tooling/ # 工程工具配置 ├─ infra/ │ ├─ docker/ # Compose、Nginx、脚本 │ ├─ ecs/ # ECS 部署配置 │ ├─ k8s/ # 后续 Kubernetes 配置 │ └─ docs/ # 技术运维文档 ├─ scripts/ # 根级脚本 ├─ docs/ # 全局工程文档,进入 Git ├─ docs-local/ # 临时文档,本地存在但 Git 忽略 └─ .github/ # 后续 CI/CD ``` ### 6.1 文档放置规则 | 内容 | 归属 | | --- | --- | | 总体架构、技术栈、工程规范 | 根目录 `docs/`,进入 Git | | API 具体接口和模块实现 | `apps/api/docs/`,进入 Git | | 数据库结构和迁移规范 | `packages/db/docs/`,进入 Git | | Docker、ECS、备份等技术运维 | `infra/docs/`,进入 Git | | 临时需求、草稿和未确认讨论 | `docs-local/`,Git 忽略 | | 商业、市场、运营和合作 | 飞书,不进入 Git | 如果商业或运营决策最终影响代码,只把脱敏后的技术结论记录到 `docs/decisions/`,不复制完整商业背景。 ## 7. 开发者接手时的工作方式 新开发者开始实现前,应先确认: 1. 先阅读本文和根目录工程文档。 2. 不擅自改变已确认的 API、数据库和部署边界。 3. 新增 API 必须遵循 `/api/v1` 和 RESTful 资源设计。 4. 新增业务模块应放在 `apps/api/src/modules/` 对应目录。 5. 数据库访问必须经过 Repository,不在 Controller 直接写查询。 6. 新的跨模块技术决策记录到 `docs/decisions/`。 7. 商业或运营内容不要提交到 Git,回到飞书维护。 8. Agent 方案属于未定型事项,先保持接口边界,不要提前绑定具体供应商或框架。 ## 8. 当前明确不做的事情 第一阶段暂不提前引入: - 微服务拆分。 - Kubernetes 生产部署。 - 独立向量数据库。 - Elasticsearch / OpenSearch。 - ClickHouse。 - MongoDB。 - 复杂机器学习推荐服务。 - 已定型的 Agent 编排框架。 - 过早的跨库分片。 选择这些边界的原因是:当前首先验证产品闭环和用户价值,而不是提前解决尚未出现的规模问题。 ## 9. 交接结论 AIwelink 的核心不是“校园信息流”或“陌生人交友”,而是: > 通过真实项目帮助年轻人认识自己、找到适合的机会,并与合适的人建立高质量协作关系。 技术上采用清晰的模块化 Monorepo,Web 和 REST API 分离但同域名提供,业务数据以 PostgreSQL 为中心,敏感数据分层存储,文件使用 OSS,第一阶段使用 ECS + Docker Compose。 工程实现应优先保持边界清楚、可解释、可迭代;商业和运营决策则统一在飞书中维护。