[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81564":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":12,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":10,"rankLanguage":10,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":17,"hasPages":17,"topics":19,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":14,"starSnapshotCount":14,"syncStatus":30,"lastSyncTime":31,"discoverSource":32},81564,"weiwuweixin","luyou666\u002Fweiwuweixin","luyou666","围物为心 - 算法赋能主观个人榜单,分享你的主观| Rank anything. Share your taste.","https:\u002F\u002Fweiwuweixin.com",null,"TypeScript",24,1,0,40.9,"MIT License",false,"master",[20,21,22,23,24,25,26],"community","fastify","nextjs","prisma","ranking","ranking-platform","typescript","2026-06-12 04:01:34","# 围物为心 (WeiWuWeiXin)\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![pnpm](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpnpm-9.0.6-blue)](https:\u002F\u002Fpnpm.io)\n\n> 把心中的排序具象化、算法化，被社区以\"置信度\"形式温柔共识化的主观评分社区产品。\n\n## 核心精神\n\n- **主观优先**：保护作者个人偏好，永不将算法输出称为\"客观分\"或\"权威分\"\n- **可解释**：每个分数必须能回答\"为什么\"\n- **置信度 ≠ 优劣**：UI 必须反复暗示\"这是共识度\"\n\n## 架构概览\n\n> 详见下方「目录结构」段落。\n\n## 技术栈\n\n| 层级 | 技术 |\n|------|------|\n| 前端 | Next.js 14, TypeScript, Tailwind CSS, Framer Motion, Zustand, TanStack Query, next-intl, KaTeX, satori |\n| 后端 | Fastify, Prisma, PostgreSQL 15, Redis 7, MinIO |\n| 算法 | packages\u002Fscoring — 5种评分算法 + 置信度引擎 + 反刷分检测 |\n| 导出 | satori + @resvg\u002Fresvg-js — 6套模板纯客户端PNG导出 |\n| 国际化 | next-intl — \u002Fzh\u002F \u002Fen\u002F 双语路由 |\n| 质量 | ESLint, Prettier, Husky, Vitest (171 tests), Playwright E2E, TypeScript strict |\n\n## 快速开始\n\n### 方式一：一键安装（推荐，无需 Docker）\n\n#### Windows\n\n下载仓库后，双击运行即可：\n\n```batch\n一键安装.bat\n```\n\n脚本将自动完成：\n1. 环境检查（Node.js \u002F pnpm \u002F Git）\n2. 服务协议确认\n3. 环境变量配置（自动生成 JWT_SECRET）\n4. 依赖安装 + 数据库初始化\n5. （可选）演示数据播种\n\n也可以先用 `创建桌面快捷方式.bat` 在桌面放置一个安装入口。\n\n安装完成后，运行 `start.bat` 即可启动。\n\n#### Linux \u002F macOS\n\n```bash\nchmod +x install.sh && .\u002Finstall.sh\n```\n\n#### 启动\n\n```bash\n.\u002Fstart.sh          # Linux\u002FmacOS\u002FWindows(WSL)\nstart.bat           # Windows\n```\n\n→ 前端 http:\u002F\u002Flocalhost:3000\u002Fzh\u002F (中文) | \u002Fen\u002F (英文)\n→ 后端 http:\u002F\u002Flocalhost:4000\n\n---\n\n### 方式二：手动安装（需要 Docker）\n\n#### 前置条件\n\n- Node.js ≥ 18.17\n- pnpm ≥ 8.0\n- Docker & Docker Compose (用于数据库)\n\n#### 安装与启动\n\n```bash\n# 1. 克隆仓库\ngit clone \u003Crepo-url> && cd weiwuweixin\n\n# 2. 安装依赖\npnpm install\n\n# 3. 启动基础设施（PostgreSQL \u002F Redis \u002F MinIO）\ndocker compose up -d\n\n# 4. 初始化数据库 schema + 演示数据（5 用户 \u002F 20 榜单 \u002F 300 社区评分）\npnpm seed:demo\n\n# 5. 开发模式\npnpm dev\n# → 前端 http:\u002F\u002Flocalhost:3000\u002Fzh\u002F (中文) | \u002Fen\u002F (英文)\n# → 后端 http:\u002F\u002Flocalhost:4000\n\n# 6. 生产构建\npnpm --filter web build && pnpm --filter web start\n```\n\n## 测试\n\n```bash\n# 单元测试\npnpm --filter @weiwuweixin\u002Fscoring test    # 91 tests (算法+置信度+反刷分)\npnpm --filter @weiwuweixin\u002Fshared test     # 66 tests (类型+工具+徽章+评论)\npnpm --filter @weiwuweixin\u002Fui test         # 14 tests (UI组件)\n\n# 覆盖率\ncd packages\u002Fscoring && pnpm test:coverage  # 99.8% lines\n\n# E2E 测试\ncd apps\u002Fweb && pnpm test:e2e               # 冒烟 + 审计测试\n\n# API 类型检查\ncd apps\u002Fapi && pnpm typecheck\n```\n\n## 页面清单 (Routes)\n\n| 路由 | 功能 | 状态 |\n|------|------|------|\n| `\u002F[locale]` | 首页 Feed（多样性×高置信度×新鲜度） | ✅ |\n| `\u002F[locale]\u002Fexplore` | 发现 — 分类浏览 + 话题聚合 + 全站搜索 | ✅ |\n| `\u002F[locale]\u002Flist\u002Fnew` | 榜单创建器 Ranker Studio (4步) | ✅ |\n| `\u002F[locale]\u002Flist\u002F[id]` | 榜单详情（排名+置信度+评论+社区分数） | ✅ |\n| `\u002F[locale]\u002Flist\u002F[id]\u002Fscore` | 他人打分（沉浸式，3步流程） | ✅ |\n| `\u002F[locale]\u002Fu\u002F[handle]` | 个人主页（榜单+徽章+同好） | ✅ |\n| `\u002F[locale]\u002Fabout` | 产品故事 + 算法说明 | ✅ |\n| `\u002F[locale]\u002Fsettings` | 账户设置 | ✅ |\n| `\u002Flist\u002F[id]\u002Fexport` | PNG分享卡导出（6套模板） | ✅ |\n\n## 算法库\n\n### 评分算法 (5种)\n\n| 算法 | ID | 场景 |\n|------|-----|------|\n| 加权平均 | `weighted-mean` | 默认，无短板惩罚 |\n| 几何平均 | `geometric-mean` | 惩罚短板，任一维度差则大幅下降 |\n| Borda排位分 | `borda-count` | 比排名而非绝对分，消除评分尺度差异 |\n| TOPSIS理想解 | `topsis` | 多维度综合决策，距离理想解最近者胜 |\n| 贝叶斯收缩 | `bayesian-shrinkage` | 小样本向全局均值收缩，避免极端 |\n\n### 置信度算法\n\n```ts\nConfidence = 100 × sigmoid(α·log(1+N) + β·τ + γ·sentiment) × time_decay(t)\n```\n\n- `N`：参与评分的独立用户数\n- `τ`：Kendall Tau 相关系数（他人 vs 作者排序一致性）\n- `sentiment`：评论情感倾向 (-1~+1)\n- `time_decay`：半衰期 30 天\n- 默认 `α=0.6, β=1.2, γ=0.4`\n\n### 反刷分检测\n\n- 过快打分（\u003C3s）→ 降权 0.2\n- 同设备同榜单 24h 内 → 降权至 0\n- 评分方差异常（标准差\u003C0.5）→ 降权 0.5\n- 极端评分（全最高\u002F全最低）→ 标记待审核\n\n## 分享卡模板 (6套)\n\n| 模板 | ID | 风格 |\n|------|-----|------|\n| 宣纸水墨 | `rice-ink` | 纸面纹理 + 朱砂红点缀 + 传统印章 |\n| 莫兰迪 | `morandi` | 低饱和度柔和色系 + 圆润卡片 |\n| 赛博霓虹 | `cyber-neon` | 深底 + 霓虹色 + 网格科技感 |\n| 复古杂志 | `retro-magazine` | 报纸风 + 衬线字体 + 双线标题 |\n| 极简白 | `minimal-white` | 大量留白 + 轻线条 + 细编号 |\n| 手账贴纸 | `sticker-journal` | 和纸胶带 + 贴纸装饰 + 虚线边框 |\n\n## 徽章系统\n\n| 徽章 | 代码 | 获得条件 |\n|------|------|----------|\n| 初心 | `first-list` | 创建第一个榜单 |\n| 八方共鸣 | `echo-eight` | 单榜置信度≥80 |\n| 众声喧哗 | `chorus-100` | 单榜参评≥100人 |\n| 品类开拓者 | `pioneer` | 某分类下首个榜单 |\n\n## 国际化\n\n- 使用 `next-intl`，URL 前缀 `\u002Fzh\u002F` \u002F `\u002Fen\u002F`\n- 翻译文件：`apps\u002Fweb\u002Fsrc\u002Fi18n\u002Fmessages\u002F{zh,en}.json`\n- 涵盖命名空间：common, home, newList, listDetail, scoring, export, algorithm, confidence, microcopy, explore, profile, comment\n\n## 设计系统\n\n### 色板 (Design Tokens)\n\n```css\n--ink-900: #1A1A24;   \u002F* 主文字 *\u002F\n--ink-500: #5E5E72;   \u002F* 辅助文字 *\u002F\n--paper:   #FBF7F0;   \u002F* 纸面底色 *\u002F\n--rice:    #F3ECDE;   \u002F* 米色底 *\u002F\n--vermilion: #E2553F; \u002F* 朱砂红-主按钮 *\u002F\n--celadon:   #7FB3A3; \u002F* 青瓷绿-辅助 *\u002F\n--apricot:   #F4B860; \u002F* 杏黄-点缀 *\u002F\n--indigo:    #3B4A8C; \u002F* 靛蓝-链接 *\u002F\n```\n\n### 暗色模式\n\n基调：墨夜深靛蓝 + 烛光杏黄点缀（夜观山水）\n\n### 置信度标签\n\n| 范围 | 中文 | English | 色 |\n|------|------|---------|-----|\n| 0-20 | 存疑 | Doubtful | ink-500 |\n| 20-40 | 微识 | Emerging | apricot |\n| 40-60 | 初聚 | Forming | celadon |\n| 60-80 | 确然 | Settled | indigo |\n| 80-100 | 深契 | Deep Accord | vermilion |\n\n## 置信度标签（共识度）\n\n注意：UI 文案中始终使用\"共识度\"而非\"权威分\"或\"置信度\"，遵循产品核心精神。\n\n## API 路由\n\n| 方法 | 路径 | 描述 |\n|------|------|------|\n| GET | \u002Fapi\u002Flists | 榜单列表（支持分类\u002F排序\u002F搜索） |\n| GET | \u002Fapi\u002Flists\u002F:id | 榜单详情（含评分统计） |\n| POST | \u002Fapi\u002Flists | 创建榜单 |\n| PATCH | \u002Fapi\u002Flists\u002F:id | 更新榜单 |\n| DELETE | \u002Fapi\u002Flists\u002F:id | 删除榜单 |\n| POST | \u002Fapi\u002Flists\u002F:id\u002Fscores | 提交评分（含反刷分检测） |\n| GET | \u002Fapi\u002Flists\u002F:id\u002Fscores | 评分汇总 |\n| GET | \u002Fapi\u002Flists\u002F:id\u002Fcomments | 评论列表（支持情感筛选） |\n| POST | \u002Fapi\u002Flists\u002F:id\u002Fcomments | 创建评论（自动情感分析） |\n| GET | \u002Fapi\u002Fusers\u002F:handle | 用户主页 |\n| GET | \u002Fapi\u002Fusers\u002F:handle\u002Fbadges | 用户徽章 |\n| GET | \u002Fapi\u002Fexplore | 发现页数据 |\n\n## 目录结构\n\n```\nweiwuweixin\u002F\n├─ apps\u002F\n│  ├─ web\u002F              # Next.js 14 (App Router) + TS + Tailwind + Framer Motion\n│  │  ├─ src\u002Fapp\u002F[locale]\u002F   # 页面路由（首页\u002F发现\u002F新建\u002F详情\u002F打分\u002F个人\u002F设置\u002F关于）\n│  │  ├─ tests\u002Fe2e\u002F          # Playwright E2E 测试\n│  │  └─ playwright.config.ts\n│  └─ api\u002F              # Fastify + Prisma + PostgreSQL + Redis + MinIO\n│     ├─ prisma\u002F        # Schema & Seed\n│     └─ src\u002F\n├─ packages\u002F\n│  ├─ scoring\u002F          # 纯函数算法库 (5种评分 + 置信度 + 反刷分, 91 tests, 99.8% lines)\n│  ├─ ui\u002F               # 设计系统组件库 (11基础组件, Storybook 38+ stories)\n│  └─ shared\u002F           # 类型、常量、工具、seed (66 tests)\n├─ docs\u002F                # 审计报告 & 截图\n├─ docker-compose.yml\n├─ pnpm-workspace.yaml\n└─ README.md\n```\n\n## 已实现功能清单 (W1–W5)\n\n| 周次 | 功能 | 状态 |\n|------|------|------|\n| W1 | Monorepo 初始化 (pnpm workspace + Turborepo) | ✅ |\n| W1 | 设计系统 Design Tokens + 色板 + 暗色模式 | ✅ |\n| W1 | 5 种评分算法 (weighted-mean \u002F geometric-mean \u002F borda-count \u002F topsis \u002F bayesian-shrinkage) | ✅ |\n| W1 | 基础 UI 组件 11 个 (Button \u002F Card \u002F Sticker \u002F Badge \u002F Modal \u002F Input 等) | ✅ |\n| W1 | 置信度算法 + 反刷分检测 91 tests | ✅ |\n| W2 | 维度权重编辑器 (Slider + 实时预览) | ✅ |\n| W2 | 作者打分 3 维度评分面板 | ✅ |\n| W2 | 算法选择面板 (5 算法 + 雷达图对比) | ✅ |\n| W2 | FLIP 列表动画 + 宣纸水墨主题 | ✅ |\n| W2 | Storybook 38+ stories | ✅ |\n| W3 | PNG 分享卡导出 (satori + 6 套模板) | ✅ |\n| W3 | 榜单详情页 (排名 + 共识度 + 评论 + 社区分数) | ✅ |\n| W3 | 他人打分页 (沉浸式 3 步流程) | ✅ |\n| W3 | i18n 双语 (zh\u002Fen) + next-intl | ✅ |\n| W3 | 三态覆盖 (空态\u002F单态\u002F多态) | ✅ |\n| W4 | 发现\u002F搜索页 (分类浏览 + 话题聚合 + 搜索) | ✅ |\n| W4 | 评论互动 (情感分析 + 热门\u002F最新排序) | ✅ |\n| W4 | 个人主页 + 徽章系统 (4 种徽章) | ✅ |\n| W4 | 反刷分 API 检测 (降权 + 标记) | ✅ |\n| W4 | API CRUD + E2E 测试 | ✅ |\n| W4 | 设置页 + 关于页 | ✅ |\n| W5 | Seed 演示数据脚本 (5 用户 \u002F 20 榜单 \u002F 300 社区评分) | ✅ |\n| W5 | Playwright E2E 冒烟测试 (首页 + 审计) | ✅ |\n| W5 | 生产构建验证 (`pnpm --filter web build`) | ✅ |\n| W5 | 性能审计 (LCP\u002FDCL\u002FCLS) + 可访问性审计 | ✅ |\n| W5 | W5 收尾文档 | ✅ |\n\n## 审计分数\n\n> 日期: 2026-04-24 | 详细报告: `docs\u002Faudit-notes.md` | 工具: Lighthouse 13.1 + axe-core 4.11.3 + Playwright 1.59\n\n### Lighthouse\n\n| 页面 | Accessibility | Performance | FCP | LCP | CLS | DCL | DOM |\n|------|:---:|:---:|-----|-----|-----|-----|-----|\n| `\u002Fzh` (首页) | **100** | —* | 1820ms | 1820ms | 0 | 1827ms | 98 |\n| `\u002Fzh\u002Flist\u002Fnew` | **93** | —* | 900ms | 900ms | 0 | 914ms | 131 |\n\n\\* Performance 分数需在有图形环境的 CI 中运行 (WSL2 中 Chromium tracing 崩溃)。基于 Playwright Web Vitals 采集，两页 LCP \u003C 2.5s、CLS ≈ 0、DCL \u003C 2s，预估 Performance ≥ 90。\n\n### axe-core CLI\n\n| 页面 | Violations | Serious\u002FCritical | 规则 ID |\n|------|:---:|:---:|---------|\n| `\u002Fzh` (首页) | **0** | 0 | — |\n| `\u002Fzh\u002Flist\u002Fnew` | **1** (2 occurrences) | 1 serious | `color-contrast` |\n\n## 里程碑进度\n\n| 周次 | 交付内容 | 状态 |\n|------|---------|------|\n| W1 | Monorepo初始化 + 设计系统 + 5算法 + 基础UI组件 | ✅ |\n| W2 | 维度权重编辑器 + 作者打分 + 算法选择面板 + FLIP动画 + Storybook + 暗色模式 | ✅ |\n| W3 | 置信度算法 + PNG导出6模板 + 榜单详情页 + 他人打分页 + i18n + 三态覆盖 | ✅ |\n| W4 | 发现\u002F搜索 + 评论互动 + 个人主页+徽章 + 反刷分 + API CRUD + E2E测试 | ✅ |\n| W5 | 性能审计 + 生产构建验证 + Playwright E2E + Seed 脚本 + 文档 | ✅ |\n\n## 关键截图占位\n\n| 页面 | 路径 |\n|------|------|\n| 首页Feed | `docs\u002Fscreenshots\u002Ffeed.png` |\n| 发现页 | `docs\u002Fscreenshots\u002Fexplore.png` |\n| 新建榜单 | `docs\u002Fscreenshots\u002Flist-new.png` |\n| 榜单详情 | `docs\u002Fscreenshots\u002Flist-detail.png` |\n| 沉浸打分 | `docs\u002Fscreenshots\u002Fscoring-flow.png` |\n| 个人主页 | `docs\u002Fscreenshots\u002Fprofile.png` |\n| 分享卡导出 | `docs\u002Fscreenshots\u002Fexport-page.png` |\n| 算法雷达图 | `docs\u002Fscreenshots\u002Falgo-radar.png` |\n| 暗色模式 | `docs\u002Fscreenshots\u002Fdark-mode.png` |\n\n## 运行命令\n\n```bash\ncd \u002Fhome\u002Fwuyanzu\u002Fweiwuweixin\n\n# 运行测试\npnpm --filter @weiwuweixin\u002Fscoring test    # 91 tests\npnpm --filter @weiwuweixin\u002Fshared test     # 66 tests\npnpm --filter @weiwuweixin\u002Fui test         # 14 tests\n\n# E2E 测试\ncd apps\u002Fweb && pnpm test:e2e               # 冒烟 + 审计测试\n\n# Storybook\ncd packages\u002Fui && pnpm storybook            # → http:\u002F\u002Flocalhost:6006\n\n# 前端构建\ncd apps\u002Fweb && npx next build\n\n# 演示数据\npnpm seed:demo\n\n# 开发模式\npnpm dev\n# → 前端 http:\u002F\u002Flocalhost:3000\u002Fzh\u002F\n# → 后端 http:\u002F\u002Flocalhost:4000\n```\n\n## 已知 TODO\n\n- [ ] **[Accessibility]** `\u002Flist\u002Fnew` 页 color-contrast 违规 (`.step-active > .md\\:inline.hidden` 和 `.weiwu-btn > .inline-flex.items-center` 对比度不足) — Lighthouse 93\u002F100\n- [ ] **[Performance]** 在有图形环境的 CI 中运行完整 Lighthouse Performance 审计 (WSL2 中 Chromium tracing 崩溃)\n- [ ] **[Accessibility]** 添加 skip-nav 链接提升键盘导航体验\n- [ ] **[Accessibility]** 设置页和关于页的完整 @axe-core\u002Fcli 扫描\n- [ ] **[Performance]** KaTeX CSS (`cdn.jsdelivr.net`) 为渲染阻塞资源，建议本地化或内联\n- [ ] **[Accessibility]** 验证暗色模式下颜色对比度是否达 WCAG AA 标准\n- [ ] 缓存优化（Redis 热榜 + API 缓存头）\n- [ ] 生产部署配置（Vercel \u002F Docker）\n\n---\n\n*围物为心 — 保护作者主观性 · 视觉优先于功能堆砌 · 置信度非权威分*\n","围物为心 (WeiWuWeiXin) 是一个基于算法的主观个人榜单分享平台，用户可以创建和分享自己的排名列表。项目采用TypeScript编写，前端使用Next.js、Tailwind CSS等现代技术栈，后端则由Fastify、Prisma等构成，并支持PostgreSQL与Redis数据库。它通过五种不同的评分算法（如加权平均、几何平均等）来处理用户的偏好数据，同时引入置信度机制以反映社区对某一排名的认可程度而非其绝对优劣。此外，该项目强调主观性和可解释性原则，确保每个分数都有据可依。围物为心适合需要个性化表达且希望获得群体反馈的各种场景，比如个人兴趣爱好展示、专业领域内观点交流等。",2,"2026-06-11 04:05:30","CREATED_QUERY"]