Files
dudu/README.md
T
wangjia 208d0cda12 feat(design): design/ 真相源 + 防漂移静态闸(#25)
真相源整固:
- design/index.html 登记簿:token 色板(var() 实时渲染)/ 组件登记卡 /
  图标与跨端映射 / guidelines / ui_kits 单一入口,check-ds 强制登记
- design/icons.js 图标单源(Lucide 线条)+ icon-map.json 跨端映射表
  (web/iOS/Android 三列,iOS 12 个 SF Symbol 全部收编登记)
- components/core/Icon.jsx 单源图标渲染器;MicBar/RecognitionOverlay 接入
- tokens 新增 --brand-wechat(-press)(微信官方绿)与 --overlay-wave
- fonts.css 弃 Google Fonts CDN,Outfit 可变字体自托管
  (assets/outfit-latin.woff2,40KB;中国网络下 CDN 不可用会卡字体)
- design/serve.mjs 零依赖预览服务器(登记簿与原型评审入口)

codegen 强化(export-tokens.mjs):
- 产物直写消费位置:ios/dudu/Shared/DuduTheme.swift、
  android/.../design/DuduTheme.kt——删除 design-pipeline/generated/
  中间拷贝层(此前 app 内是手工拷贝,--check 守不到真实消费文件已漂移)
- 新增 web/tokens.css 产物(custom props 透传 + Outfit data URI 内嵌)
- tokens 文件遍历排序,产物确定性

存量收编:
- desktop:三个窗口内联 SVG → Icon 组件;tray 裸 rgba → token+opacity
- Android:LoginScreen 微信绿常量 → DuduPalette.brandWechat(Press),
  Color.White → textOnAccent
- 官网 web/index.html:接入 tokens.css,34 处硬编码 hex 全部 var() 化;
  深色板块(metrics/cta/footer)改挂 data-theme="dark" 复用 dark 令牌;
  移除 Google Fonts CDN
- design 包内 8 处裸色:微信绿 token 化、装饰色 ds-ignore 白名单、
  同值色改 var() 引用

防漂移闸(零依赖 Node):
- design-pipeline/check-ds.mjs:真相源自检 7 道(dark⊆light / var 链 /
  裸色∈tokens 值集 / 组件登记 / icons 唯一 / icon-map 双向同集 / 禁 emoji)
- design-pipeline/check-code.mjs:代码侧单源(desktop 禁字面色+内联 path /
  iOS 禁字面色+SF Symbol 同集 / Android 禁 Color(0x / web 禁字面色),
  ds-ignore 行级豁免制
- .githooks/pre-commit(启用:git config core.hooksPath .githooks)
- CI design job 扩展为三道闸全绿
- 反向验证通过:注入裸色/孤儿 token/未登记组件/未登记 symbol 均被拦截

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 00:05:22 +08:00

61 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# dudu(嘟嘟)语音输入法
付费语音输入法:大模型识别准确度 + 流式实时上屏 + 极简交互。全平台(Mac / Windows / iPhone / iPad / Android),桌面端按住全局快捷键说话,移动端键盘按住大麦克风说话。微信登录 + 微信支付时长包(不过期),每天免费试用 3 分钟。
## 仓库结构
```
server/ Go 后端(gin + gorilla/websocket + PostgreSQL + Redis
pkg/protocol/ 客户端协议常量与消息结构 —— 5 端对齐的唯一真相源
desktop/ 桌面端 Tauri 2Mac + Windows
android/ Kotlin:主 App + IME Service
ios/ Swift:主 App + Keyboard Extension
design/ 官方设计系统(tokens / 组件 / 图标 / UI kits,登记簿 index.html)—— 界面唯一真相源
design-pipeline/ 令牌导出管线 + 防漂移闸(export-tokens / check-ds / check-code
doc/ 设计文档(HTML)
todo/ 项目 TODOtodo.html 看板,经 /todo skill 管理)
```
## 设计文档
| 文档 | 内容 |
|---|---|
| `doc/plan/design.html` | MVP 总体方案 v0.3(架构、里程碑、风险) |
| `doc/frontend-design.html` | 前端实现设计 v1.1(100% 还原设计系统) |
| `doc/backend-architecture.html` | 后端与数据架构 v1.1(API / 协议 / 计费账本) |
## 开发
后端:
```bash
cd server
docker compose up -d # postgres + redis
go run ./cmd/server # 默认 :8080ASR_PROVIDER=mock
go test ./...
```
令牌导出(design/tokens 变更后执行并提交产物;直写 ios/android/web 消费位置):
```bash
node design-pipeline/export-tokens.mjs # 生成
node design-pipeline/export-tokens.mjs --check # CI 校验
```
设计系统防漂移闸(首次 clone 后启用 pre-commit):
```bash
git config core.hooksPath .githooks # 启用提交前闸(一次性)
node design-pipeline/check-ds.mjs # 真相源自检(design/ 自身 7 道)
node design-pipeline/check-code.mjs # 代码侧颜色/图标单源(四端)
node design/serve.mjs # 登记簿与原型评审(http://localhost:5180
```
全景说明见 `doc/frontend-overview.html`;改 UI 前先读 `design/index.html`(登记簿)。
## 关键约定
- 协议改动只改 `server/pkg/protocol`,各端对照实现
- 界面规格以 `design/` 为准,硬规则见 `design/readme.md`(一屏一个蓝主按钮 / 无渐变 / 无 emoji / 浮层永远深色玻璃)
- 待办经 `/todo` 管理(看板 `todo/todo.html`),状态流转 open → doing → done →(用户验收)accepted