- 后端新增邮箱绑定/验证、忘记密码/重置密码、修改密码接口 - users 表新增 nickname、avatar 字段,含迁移脚本 - 新增 PUT /api/auth/me 更新头像和昵称 - 新增 POST /api/auth/change-password 修改密码(需旧密码) - 前端新增 ProfileModal 个人中心(头像上传、昵称、邀请码、邮箱绑定、修改密码、退出) - LoginModal 新增忘记密码流程 - UserMenu 点击头像直接打开个人中心 - server/lib/email.ts:nodemailer 邮件发送封装 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
StudyNote
基于 Vite + React + TypeScript 构建的现代化 AI 笔记应用,提供富文本编辑、灵活的文件夹组织,以及由 Claude API 驱动的 AI 写作辅助能力。
技术栈
| 层次 | 选型 |
|---|---|
| 构建工具 | Vite 5 |
| 前端框架 | React 19 + TypeScript |
| 编辑器 | TipTap v3 |
| 样式 | Tailwind CSS v4 |
| 状态管理 | Zustand v5 |
| 本地存储 | IndexedDB(Dexie.js) |
| AI 接入 | Anthropic SDK(claude-sonnet-4-6) |
| 后端代理 | Hono(Node.js,端口 3001) |
| 动画 | Framer Motion |
| 拖拽 | @dnd-kit |
快速开始
# 1. 克隆仓库
git clone https://git.muchen.fan/MikiVL/studynote.git
cd studynote
# 2. 安装依赖
npm install
# 3. 配置 API Key
cp .env.example .env
# 编辑 .env,填入你的 ANTHROPIC_API_KEY 和 ANTHROPIC_BASE_URL
# 4. 启动开发服务器(同时启动前端 + AI 代理)
npm run dev
浏览器访问 http://localhost:5173
功能一览
富文本编辑
- 标题(H1–H4)、段落、引用块、代码块(含语法高亮)
- 粗体、斜体、下划线、删除线、行内代码、高亮
- 有序/无序列表、任务列表(Checkbox)
- 表格、图片插入
/斜杠命令菜单快速插入内容块- 浮动工具栏(选中文字后出现)
- 自动保存(防抖 1s)
笔记组织
- 多级文件夹嵌套
- 笔记标签(多标签、按标签过滤)
- 收藏标记
- 全文搜索(标题 + 正文 + 标签)
- 排序:按修改时间、创建时间、标题
- 拖拽移动笔记到文件夹
- 笔记/文件夹重命名、删除
AI 功能
- AI 续写:点击 ⚡ 按钮,基于当前内容流式续写
- AI 润色:选中文字 → 浮动工具栏 → 润色,预览后替换
- AI 摘要:选中段落或全文生成摘要
- 翻译成英文:选中文字 → 浮动工具栏 → 翻译
- AI 问答:可拖拽/缩放浮窗,针对当前笔记自由提问
- 模型管理:支持添加多个 OpenAI 兼容模型,一键切换
界面体验
- 亮色 / 暗色主题切换
- 专注模式(隐藏侧边栏,全屏写作)
- 弹窗缩放动画(Framer Motion)
键盘快捷键
| 快捷键 | 功能 |
|---|---|
Cmd/Ctrl + N |
新建笔记 |
Cmd/Ctrl + \ |
切换专注模式 |
Cmd/Ctrl + Shift + J |
打开 AI 助手 |
Cmd/Ctrl + B |
粗体 |
Cmd/Ctrl + I |
斜体 |
Cmd/Ctrl + Z |
撤销 |
Cmd/Ctrl + Shift + Z |
重做 |
/ |
命令菜单 |
Esc |
退出专注模式 |
项目结构
studynote/
├── src/
│ ├── components/
│ │ ├── editor/ # TipTap 编辑器、浮动工具栏、欢迎页
│ │ ├── sidebar/ # 左侧导航栏
│ │ └── ai/ # AI 面板、模型管理弹窗
│ ├── stores/ # Zustand store
│ ├── db/ # Dexie.js IndexedDB 封装
│ ├── lib/ # 工具函数、AI 流式请求
│ └── test/ # Vitest 单元测试
├── server/ # Hono AI 代理服务
├── .env.example # 环境变量模板
└── vite.config.ts
环境变量
复制 .env.example 为 .env 并填写:
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_BASE_URL=https://api.anthropic.com
.env和运行时生成的models.json已加入.gitignore,不会被提交。
构建
npm run build # 生产构建,输出到 dist/
npm run preview # 本地预览生产构建
Description
Languages
TypeScript
84%
HTML
11.6%
CSS
3.4%
Shell
0.8%
JavaScript
0.2%