一个用于英语学习的 AI 项目仓库,采用 monorepo 结构,包含 Web 端、浏览器扩展和 Go 后端。
当前仓库的核心能力已经围绕「生词采集 + 页面分析 + 词汇复习」搭起来:
apps/web提供登录、注册、Dashboard、词库、单词详情和复习页面apps/Extension提供浏览器扩展,可以抓取页面内容、分析英文页面、添加选中单词backend提供认证、词汇、学习分析、扩展接口等 APIpackages/*提供共享 UI 和工程配置
- Monorepo: Turborepo
- Frontend: Next.js 16, React 19, TypeScript
- Extension: Plasmo, React 18
- Backend: Go, Gin, PostgreSQL, Redis
- Package manager: Bun
.
├── apps/
│ ├── web/ # 主 Web 应用
│ ├── docs/ # 文档/演示站,当前仍是模板页
│ └── Extension/ # 浏览器扩展
├── backend/ # Go 后端服务
├── packages/
│ ├── ui/ # 共享 UI 组件
│ ├── eslint-config/
│ └── typescript-config/
├── docker-compose.yml
└── turbo.json
flowchart LR
User[User]
Web[apps/web<br/>Next.js Web App]
Ext[apps/Extension<br/>Plasmo Browser Extension]
API[backend<br/>Go + Gin API]
PG[(PostgreSQL)]
Redis[(Redis)]
AI[AI Provider<br/>OpenAI / DeepSeek / Gemini / Ollama]
Docs[apps/docs<br/>Docs Site]
UI[packages/ui<br/>Shared UI]
User --> Web
User --> Ext
User --> Docs
Web --> API
Ext --> API
Ext -. custom provider fallback .-> AI
API --> PG
API --> Redis
API --> AI
Web --> UI
Docs --> UI
这个项目目前的运行形态是:
apps/web和apps/Extension都是业务入口backend是统一 API 层,负责认证、词汇、学习分析和扩展接口PostgreSQL存业务数据,Redis做缓存- AI 能力默认由后端调用,也支持扩展直接走自定义 AI provider
sequenceDiagram
participant U as User
participant E as Extension
participant B as Backend API
participant A as AI Provider
participant D as PostgreSQL/Redis
U->>E: 在网页中点击分析
E->>E: 提取页面标题与正文
E->>B: POST /api/extension/analyze_page
B->>A: 请求总结、难度、新词
A-->>B: 返回分析结果
B-->>E: 返回 summary / difficulty / new_words
E-->>U: 展示双语分析结果
U->>E: 选中单词并加入词库
E->>B: POST /api/extension/add_word
B->>A: 补全释义/音标/例句
B->>D: 保存词汇与学习记录
B-->>E: 返回添加结果
sequenceDiagram
participant U as User
participant W as Web App
participant B as Backend API
participant D as PostgreSQL/Redis
U->>W: 登录 / 注册
W->>B: /api/login 或 /api/register
B-->>W: JWT token
U->>W: 打开 Dashboard
W->>B: GET /api/dashboard
B->>D: 查询学习数据
B-->>W: 总词数、复习数、进度数据
U->>W: 打开词库 / 复习页
W->>B: GET /api/vocabulary/list / review
B->>D: 查询词汇与复习计划
B-->>W: 返回单词列表或复习卡片
apps/web 已接入后端 API,包含这些页面:
/login登录/register注册/dashboard学习概览/vocabulary词库列表和手动加词/vocabulary/[id]单词详情/vocabulary/review复习卡片
Web 端默认请求 http://localhost:8080/api。
apps/Extension 是基于 Plasmo 的浏览器扩展,当前能力包括:
- 登录 / 注册
- 右键选中文本加入词库
- 提取当前网页正文并做英文内容分析
- 优先调用后端分析接口,失败时可回退到自定义 AI 提供方
- 支持自定义 AI endpoint / model / apiKey
默认后端地址同样是 http://localhost:8080/api,也可以在扩展设置中覆盖。
backend 已实现的主要接口分组:
- 认证:
/api/login,/api/register,/api/user/profile - 词汇:
/api/vocabulary/add,/api/vocabulary/list,/api/vocabulary/:id,/api/vocabulary/review - 学习:
/api/page/analyze,/api/dashboard - 扩展:
/api/extension/analyze_page,/api/extension/add_word,/api/extension/chat
后端依赖:
- PostgreSQL 16
- Redis 7
- AI provider 配置
在仓库根目录执行:
bun installdocker compose up -d这会启动:
- PostgreSQL:
localhost:5432 - Redis:
localhost:6379
先安装迁移工具:
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest然后执行迁移:
cd backend
migrate -path ./migrations -database "postgres://postgres:password@localhost:5432/well_english?sslmode=disable" upcd backend
go run ./cmd/server默认监听:
http://localhost:8080
cd apps/web
bun run dev打开:
http://localhost:3000
cd apps/Extension
bun run dev然后把生成的开发构建加载到浏览器中。
根目录:
bun run build
bun run dev
bun run lint
bun run check-types更推荐按模块单独启动,尤其是开发阶段,因为根目录 bun run dev 会通过 Turbo 同时拉起所有 workspace。
后端默认配置文件在 backend/configs/config.yaml。
关键默认值:
- 服务端口:
:8080 - PostgreSQL DSN:
postgres://postgres:password@localhost:5432/well_english?sslmode=disable - Redis:
localhost:6379 - AI endpoint:
https://api.openai.com/v1 - AI model:
gpt-4
生产环境至少需要修改:
jwt.secretdatabase.dsnai.api_key
这个仓库目前不是纯模板,但也还没完全收口,现状大致如下:
apps/web已经是业务页面,不再是默认 Next.js 首页apps/Extension已经接入真实业务逻辑backend已有完整的基础分层和 APIapps/docs仍然基本是 Turborepo/Next 模板页packages/ui仍比较轻,只包含少量共享组件
如果你要继续推进这个项目,比较合理的顺序是:
- 先保证
backend + web本地联调稳定 - 再验证
Extension的登录、加词、页面分析链路 - 最后补
docs、部署配置、环境变量和测试