Mirobody
The canonical registry of human health — roughly two thousand standardized indicators, clinical and lifestyle, resolved into one language.
遇事不决读毛选,治愈你90%的焦虑。随机抽取毛泽东语录,获取精神力量。
Translation pending
HealthJavaScript · HTMLGitHub @kirinzhangOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
遇事不决读毛选
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Don't worry, be fighting. 遇事不决读毛选,把问题带回事实、调查、矛盾分析、行动和复盘。
Red Wisdom 是一个以《毛泽东选集》为核心内容和方法论来源的学习与实践工具网站。
当前版本已经围绕“问题案例”打通抽卡、阅读、问道、行动和复盘。首页保持简洁抽卡体验;用户可以把长期现实困难记录到「我的问题」,在同一条时间线中积累事实、问答、笔记、行动和结果。核心页面支持移动端导航与 PWA 安装。账户系统使用 Supabase Google 登录;配置完成后会在首次登录时合并本机档案,并持续同步,未配置时自动保持本机私密模式。
🌐 在线访问: redwisdom.xyz
reading.html?concept=概念 可直达。问道时提到这些概念,AI 会拿到对应释义和原文出处。概念源数据在 data/concepts.source.json,修改后运行 npm run build:concepts。timeline.html 默认打开「沙盘地图」:在全国立体地图上,用一条可拖动的时间轴浏览 1919 年五四运动到 1949 年新中国成立的 53 件大事(之后的大事在「时间线」列表中)。时间轴按事件排列,标出建党与大革命、土地革命、全民族抗战、解放战争四个阶段和重大节点。js/timeline-data.js 的 place(可多个)和 PLACES 坐标表中;全国性或图外的事件用 placeNote 说明,只出现在时间轴上。major: true 标记重大节点。tests/timeline-map.test.js 校验日期解析、事件排序、每条事件都有地点或说明、坐标都在地图范围内。campaign.html 默认打开「长征全图」:在整幅中国地形图上推演中央红军从瑞金到陕北的全程(附南海诸岛附图),图上的战役标记和简报中的按钮可直接进入各战役沙盘。js/campaign-data.js,新增战役只需按同一格式补充地理、部队关键帧、章节和复盘;tests/campaign-data.test.js 会校验坐标范围、时间顺序、派系引用和毛选引文锚点。docs/content/history-case-editorial-policy.md。scripts/build-map-data.py 预先生成并提交到仓库:data/terrain/*.bin(Int16 高程栅格)和 data/map/*.json(矢量图层)。来源与许可:
campaigns.json,再运行 python3 scripts/build-map-data.py --dem gebco_2024_China.tif --vege vege_1km_projected.tif --ne natural-earth-vector/geojson --campaigns campaigns.json --out .。docs/database/migrations/2026-10-04-practice-loop.sql,未执行前这两项只保存在本机,其他字段照常同步。首页、阅读毛选、问道毛选三个页面右上角有「中 / EN」切换,选择会记在本机;链接上加 ?lang=en 或 ?lang=zh 也可以直接指定。英文模式下导航只保留这三项。
重新生成英文数据(需要能访问 marxists.org):
python3 scripts/build-english-edition.py --cache /tmp/mia-cache --out .
node scripts/build-search-index.mjs --edition en
| 类型 | 技术 |
|---|---|
| 前端 | HTML5 + Tailwind CSS + Vanilla JS |
| AI 对话 | DeepSeek API V4 Pro(OpenRouter 作为回退) |
| API 代理 | Cloudflare Worker(worker/index.mjs);迁移完成前 Vercel Serverless Function 并行 |
| 账户系统 | Supabase Auth (Google OAuth,配置后启用) |
| 数据库 | Supabase Postgres + Row Level Security |
| 部署平台 | Cloudflare Workers(静态资源 + Worker),迁移步骤见 docs/deploy/cloudflare.md |
| 数据格式 | JSON + Markdown |
| 离线能力 | Web App Manifest + Service Worker |
| 测试 | Node.js built-in test runner |
git clone https://github.com/kirinzhang/redwisdom.git
cd redwisdom
npm run dev
# 访问 http://127.0.0.1:4173
本地开发服务器会读取仓库根目录的 .env,并提供与线上一致的 /api/chat 路由。也可以用 npm install && npm run cf:dev 以 Cloudflare Workers 方式本地运行(机密写在 .dev.vars)。本地不会注册 PWA Service Worker,避免开发服务器停止后仍显示缓存页面。
AI 对话优先直连 DeepSeek V4 Pro:
DEEPSEEK_API_KEY=你的 DeepSeek API Key
未配置 DeepSeek Key 时,可以使用 OPENROUTER_API_KEY 回退到 OpenRouter 上的 deepseek/deepseek-v4-pro。部署到 Cloudflare 时,在 Worker 的「变量和机密」中配置密钥(Vercel 同理);本机 .env 不会上传。
问道接口的限流与来源限制(均为可选环境变量):
CHAT_LIMIT_PER_MINUTE=6 # 每个 IP 每分钟提问次数,默认 6
CHAT_LIMIT_PER_DAY=60 # 每个 IP 每天提问次数,默认 60
CHAT_GLOBAL_LIMIT_PER_DAY=0 # 全站每日总量上限,0 表示不限
UPSTASH_REDIS_REST_URL=... # 配置后跨函数实例共享计数(推荐生产环境使用)
UPSTASH_REDIS_REST_TOKEN=...
CHAT_ALLOWED_ORIGINS=https://redwisdom.xyz # 额外允许的来源,本站域名默认允许
未配置 Upstash 时,计数只保存在单个函数实例的内存里,只能挡住连续刷接口;正式环境建议接入 Upstash Redis(Cloudflare 与 Vercel 均可,通过 REST 访问)。
页面样式使用预先生成的 assets/tailwind.css。修改页面里的 Tailwind 类名后运行:
npm run build:css
账户系统需要在 config.js 中填写 Supabase 项目配置:
SUPABASE_URL: 'https://your-project.supabase.co',
SUPABASE_ANON_KEY: 'your-anon-key'
生产环境(Cloudflare Worker 或 Vercel)推荐直接配置以下公开环境变量,前端会通过 /api/public-config 在运行时读取,无需把值写入仓库:
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-publishable-key
SUPABASE_GOOGLE_AUTH_ENABLED=false
只允许公开的 Supabase URL、Publishable Key 和 Provider 状态通过该接口返回;DeepSeek、OpenRouter 等服务端密钥不会暴露。Google Provider 配置完成后,把 SUPABASE_GOOGLE_AUTH_ENABLED 改为 true,并重新部署。
还需要在 Supabase Authentication 中启用 Google Provider。Google Cloud OAuth 客户端的 Authorized redirect URI 是 Supabase Auth 回调:
https://你的项目引用.supabase.co/auth/v1/callback
同时在 Supabase URL Configuration 的 Redirect URLs 中加入网站登录页:
https://你的域名/login.html
https://redwisdom.xyz/login.html
http://127.0.0.1:4173/login.html
数据库表和 RLS 策略见 docs/database/supabase-schema.sql。
node --test tests/*.test.js tests/*.test.mjs
node --check script.js
node --check js/analysis-guide.js
node --check js/auth-utils.js
node --check js/cloud-sync.js
node --check js/conversation-store.js
node --check js/quote-utils.js
node --check js/ai-methodology.js
node --check js/reading-notes-store.js
node --check js/reading-progress-store.js
node --check js/reading-guides.js
node --check js/saved-quotes-store.js
node --check js/saved-answers-store.js
node --check js/practice-store.js
node --check js/practice-review-prompts.js
node --check js/campaign-engine.js
node --check js/campaign.js
node --check api/openrouter-guard.mjs
node --check api/chat.js
redwisdom/
├── index.html # 首页 - 智慧卡片
├── chat.html # 问道毛选 - AI 实践教练
├── reading.html # 毛选阅读页
├── timeline.html # 党史时间线与大事汇总
├── campaign.html # 长征沙盘:战役立体推演
├── modern.html # 毛选思维 · 现代问题栏目
├── problems.html # 现实问题工作台与时间线
├── practice.html # 实践任务与复盘
├── me.html # 个人学习档案预览
├── login.html # 登录与账户状态
├── config.js # 前端 API 配置
├── script.js # 卡片交互逻辑
├── style.css # 首页卡片样式
├── js/
│ ├── ai-methodology.js # AI 方法论 prompt 和 payload
│ ├── analysis-guide.js # 毛选方法分析向导
│ ├── ai-context.js # 本地毛选语录/导读上下文检索
│ ├── auth-utils.js # Supabase 登录状态工具
│ ├── cloud-sync.js # 学习档案云同步、拉取和合并
│ ├── auto-sync.js # 首次迁移与持续同步调度
│ ├── conversation-store.js # 本机私密问答历史
│ ├── problem-case-store.js # 问题案例与复盘时间线
│ ├── guided-coach.js # 逐步分析状态机
│ ├── full-text-search.js # 原文全文检索
│ ├── history-case-retrieval.js # 历史案例检索与边界提示
│ ├── practice-store.js # 本机私密实践存储
│ ├── practice-review-prompts.js # 实践复盘提示生成器
│ ├── quote-utils.js # 语录归一化和展示规则
│ ├── reading-notes-store.js # 本机私密阅读笔记
│ ├── reading-progress-store.js # 本机阅读进度、收藏和摘录
│ ├── saved-quotes-store.js # 本机私密语录收藏
│ ├── saved-answers-store.js # 本机私密 AI 回答收藏
│ ├── timeline-data.js # 党史时间线数据(事件、决策点、党代会)
│ ├── timeline.js # 党史时间线页渲染与筛选
│ ├── timeline-map.js # 党史沙盘地图:时间轴与事件标注
│ ├── campaign-data.js # 长征战役沙盘数据(地理、部队、章节、复盘)
│ ├── campaign-engine.js # WebGL2 立体沙盘渲染器(Albers 投影、真实高程、小地图)
│ ├── campaign.js # 长征沙盘页面控制
│ ├── modern-cases.js # 现代问题案例数据(场景、原文依据、行动清单)
│ ├── modern.js # 现代问题栏目渲染与筛选
│ └── reading-guides.js # 阅读导读和主题路径
├── worker/
│ └── index.mjs # Cloudflare Worker:/api/chat、/api/public-config,其余交给静态资源
├── api/
│ ├── chat.js # Vercel API 代理(迁移完成后可删除)
│ ├── chat-context-core.mjs # 问道提示词与检索(与平台无关)
│ ├── chat-provider.mjs # DeepSeek/OpenRouter 服务选择
│ └── openrouter-guard.mjs # AI 请求白名单和长度守卫
├── data/
│ ├── quotes.json # 精选语录
│ ├── catalog.json # 文章目录
│ ├── search-index.json # 带段落锚点的全文检索索引
│ ├── history-cases.json # 历史问题案例库
│ ├── text-edition.json # 文本版本与来源说明
│ ├── terrain/ # 长征沙盘高程栅格(GEBCO 2024)与植被类型 PNG
│ ├── map/ # 长征沙盘矢量图层(Natural Earth)
│ └── articles/ # 毛选文章 Markdown
├── tests/ # Node 测试
├── docs/database/
│ └── supabase-schema.sql # Supabase 表结构与 RLS
├── docs/product/
│ └── redwisdom-requirements.md
└── assets/ # 图片资源
profiles / practices / conversations / messages / reading_notes / reading_progress / highlights / saved_quotes / saved_answers RLS schema。完整产品需求见:
docs/product/redwisdom-requirements.md
Powered by Cloudflare & DeepSeek