@@ -97,7 +97,7 @@
4. **Open your browser**
```
- http://localhost:3000
+ http://localhost:2333
```
### Option 2: Using Management Script
@@ -204,28 +204,28 @@ A convenient shell script is provided for easy management:
```
stark-todo-list/
├── src/
-│ ├── app/ # Next.js App Router
-│ │ ├── api/ # API Routes
-│ │ │ └── todos/ # Todo CRUD endpoints
-│ │ ├── analytics/ # Insights & Charts page
-│ │ ├── settings/ # Settings page
-│ │ ├── page.tsx # Main page
-│ │ ├── layout.tsx # Root layout
-│ │ └── globals.css # Global styles
-│ ├── components/ # React components
-│ │ ├── StarkLogo.tsx # Animated logo
-│ │ └── AnalyticsDashboard.tsx # Data visualization
-│ ├── contexts/ # React contexts
-│ │ └── SettingsContext.tsx
-│ ├── lib/ # Utility functions
-│ │ ├── storage.ts # JSON file operations
-│ │ ├── translations.ts # i18n translations
-│ │ └── timezones.ts # Timezone data
-│ └── ...
+? ├── app/ # Next.js App Router
+? ? ├── api/ # API Routes
+? ? ? └── todos/ # Todo CRUD endpoints
+? ? ├── analytics/ # Insights & Charts page
+? ? ├── settings/ # Settings page
+? ? ├── page.tsx # Main page
+? ? ├── layout.tsx # Root layout
+? ? └── globals.css # Global styles
+? ├── components/ # React components
+? ? ├── StarkLogo.tsx # Animated logo
+? ? └── AnalyticsDashboard.tsx # Data visualization
+? ├── contexts/ # React contexts
+? ? └── SettingsContext.tsx
+? ├── lib/ # Utility functions
+? ? ├── storage.ts # JSON file operations
+? ? ├── translations.ts # i18n translations
+? ? └── timezones.ts # Timezone data
+? └── ...
├── public/ # Static assets
├── scripts/
-│ ├── generate-icons.js # Favicon generator
-│ └── generate-mock-data.js # Demo data generator
+? ├── generate-icons.js # Favicon generator
+? └── generate-mock-data.js # Demo data generator
├── docker-compose.yml # Docker Compose config
├── Dockerfile # Docker image config
├── run.sh # Management script
@@ -234,7 +234,7 @@ stark-todo-list/
└── package.json # Project dependencies
```
-## 🛠️ Technology Stack
+## 🛠?Technology Stack
- **Framework**: Next.js 15 (App Router)
- **Language**: TypeScript 5
@@ -288,10 +288,10 @@ Protected endpoints require authentication via API key in request headers:
| Method | Auth | Description |
|--------|------|-------------|
-| GET | ❌ | Get all active todos |
-| POST | ✅ | Create a new todo |
-| PUT | ✅ | Update an existing todo |
-| DELETE | ✅ | Soft delete a todo |
+| GET | ?| Get all active todos |
+| POST | ?| Create a new todo |
+| PUT | ?| Update an existing todo |
+| DELETE | ?| Soft delete a todo |
**GET /api/todos**
```bash
@@ -324,9 +324,9 @@ curl -X DELETE "https://your-domain/api/todos?id=uuid" \
| Method | Auth | Description |
|--------|------|-------------|
-| GET | ❌ | Get all groups |
-| POST | ✅ | Create a new group |
-| DELETE | ✅ | Delete a group |
+| GET | ?| Get all groups |
+| POST | ?| Create a new group |
+| DELETE | ?| Delete a group |
**GET /api/groups**
```bash
@@ -351,8 +351,8 @@ curl -X DELETE "https://your-domain/api/groups?id=uuid" \
| Method | Auth | Description |
|--------|------|-------------|
-| GET | ❌ | Get PV/UV statistics |
-| POST | ❌ | Update visit statistics |
+| GET | ?| Get PV/UV statistics |
+| POST | ?| Update visit statistics |
**GET /api/stats**
```bash
@@ -363,7 +363,7 @@ curl https://your-domain/api/stats
| Method | Auth | Description |
|--------|------|-------------|
-| POST | ❌ | Verify password |
+| POST | ?| Verify password |
**POST /api/auth**
```bash
@@ -398,8 +398,9 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
-**[⬆ Back to Top](#-stark-todo-list)**
+**[?Back to Top](#-stark-todo-list)**
Made with ❤️ by STARK | Powered by Next.js
+
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 0e163ad..37d9a34 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -1,6 +1,6 @@
-# ✨ STARK Todo List
+# ?STARK Todo List

@@ -18,29 +18,20 @@
---
-## 🎯 功能特性
-
-- **🎨 现代化 UI/UX 设计**
- - 精美的动画 Logo,流畅过渡效果
- - 毛玻璃卡片与背景模糊特效
- - Framer Motion 驱动的丝滑动画
- - 色彩编码的任务统计(蓝色、橙色、绿色)
+## 🎯 功能特?
+- **🎨 现代?UI/UX 设计**
+ - 精美的动?Logo,流畅过渡效? - 毛玻璃卡片与背景模糊特效
+ - Framer Motion 驱动的丝滑动? - 色彩编码的任务统计(蓝色、橙色、绿色)
- **🌓 主题支持**
- - 浅色模式,鲜艳渐变
- - 深色模式,专业美学
- - 系统主题自动检测
- - 无缝主题切换
+ - 浅色模式,鲜艳渐? - 深色模式,专业美? - 系统主题自动检? - 无缝主题切换
-- **📱 响应式设计**
+- **📱 响应式设?*
- 桌面端优化的顶部导航标签
- - 移动端友好的底部导航栏
- - 触摸优化的交互元素
- - 所有屏幕尺寸的自适应布局
+ - 移动端友好的底部导航? - 触摸优化的交互元? - 所有屏幕尺寸的自适应布局
- **⚙️ 个性化定制**
- - 多语言支持(中文和英文)
- - 可自定义 Logo 文字
+ - 多语言支持(中文和英文? - 可自定义 Logo 文字
- 时区选择
- 主题模式偏好设置
@@ -48,33 +39,28 @@
- 创建、完成和删除任务
- 任务创建和完成时间戳
- 软删除(逻辑删除,保留数据)
- - 按状态筛选任务(全部、进行中、已完成)
-
+ - 按状态筛选任务(全部、进行中、已完成?
- **📊 交互式数据分析仪表盘**
- - 每日动态趋势图(创建 vs 完成)
- - 任务完成时间轴(甘特图视觉效果)
- - 实时 KPI 指标统计(总数、完成数、成功率)
- - 灵活的时间范围选择(7天、一个月、所有时间)
+ - 每日动态趋势图(创?vs 完成? - 任务完成时间轴(甘特图视觉效果)
+ - 实时 KPI 指标统计(总数、完成数、成功率? - 灵活的时间范围选择?天、一个月、所有时间)
- **🔐 访问控制**
- 密码保护的任务操作(添加、编辑、删除)
- 客户端认证状态持久化
- 可通过环境变量配置密码
-- **💾 数据持久化**
+- **💾 数据持久?*
- 本地 JSON 存储(无需数据库)
- 数据在应用重启后保留
- 完全可追溯的任务历史
-## 🚀 快速开始
-
+## 🚀 快速开?
### 环境要求
-- Node.js 18+ (本地开发)
-- Docker (可选,用于容器化部署)
-
-### 方案一:本地开发(推荐)
+- Node.js 18+ (本地开?
+- Docker (可选,用于容器化部?
+### 方案一:本地开发(推荐?
1. **克隆仓库**
```bash
git clone https://github.com/yourusername/stark-todo-list.git
@@ -84,26 +70,23 @@
2. **安装依赖**
```bash
npm install
- # 或
- pnpm install
+ # ? pnpm install
```
3. **启动开发服务器**
```bash
npm run dev
- # 或
- pnpm dev
+ # ? pnpm dev
```
-4. **打开浏览器**
+4. **打开浏览?*
```
- http://localhost:3000
+ http://localhost:2333
```
### 方案二:使用管理脚本
-提供了便捷的 Shell 脚本用于轻松管理:
-
+提供了便捷的 Shell 脚本用于轻松管理?
```bash
# 启动应用
./run.sh start
@@ -111,14 +94,12 @@
# 停止应用
./run.sh stop
-# 重启并清理缓存
-./run.sh restart
+# 重启并清理缓?./run.sh restart
# 查看日志
./run.sh logs
-# 检查状态
-./run.sh status
+# 检查状?./run.sh status
```
### 方案三:Docker 部署
@@ -128,7 +109,7 @@
./docker-start.sh
```
脚本会自动:
- - 构建并启动 Docker 容器
+ - 构建并启?Docker 容器
- 自动显示后端日志
- 使用 Docker 卷进行数据持久化
@@ -136,24 +117,18 @@
```bash
./docker-update.sh
```
- 此脚本会:
- - 停止当前容器
- - 拉取最新代码(如果是 Git 仓库)
- - 重新构建 Docker 镜像(无缓存)
- - 启动新容器
- - 自动显示日志
+ 此脚本会? - 停止当前容器
+ - 拉取最新代码(如果?Git 仓库? - 重新构建 Docker 镜像(无缓存? - 启动新容? - 自动显示日志
3. **配置访问密码(可选)**
```bash
- # 通过环境变量设置自定义密码
- export AUTH_PASSWORD=your_custom_password
+ # 通过环境变量设置自定义密? export AUTH_PASSWORD=your_custom_password
- # 或创建 .env 文件
+ # 或创?.env 文件
echo "AUTH_PASSWORD=your_custom_password" > .env
```
- > 如未配置,默认密码为 `stark123`。
-
-4. **或手动使用 Docker Compose**
+ > 如未配置,默认密码为 `stark123`?
+4. **或手动使?Docker Compose**
```bash
# 使用 Docker Compose 启动
docker compose up -d --build
@@ -183,18 +158,14 @@
```
5. **数据持久化与安全更新**
- - 数据存储在名为 `todos-data` 的 Docker 卷中,持久化存储 `todos.json` 和 `stats.json`。
- - **重要提示**:在更新容器时,请务必使用 `./docker-update.sh`。不要手动运行 `docker compose down -v`,因为 `-v` 参数会永久删除您的所有数据卷。
- - 备份数据:
- ```bash
+ - 数据存储在名?`todos-data` ?Docker 卷中,持久化存储 `todos.json` ?`stats.json`? - **重要提示**:在更新容器时,请务必使?`./docker-update.sh`。不要手动运?`docker compose down -v`,因?`-v` 参数会永久删除您的所有数据卷? - 备份数据? ```bash
docker run --rm -v stark-todo-list_todos-data:/data -v $(pwd):/backup alpine tar czf /backup/todos-backup.tar.gz -C /data .
```
- - 恢复数据:
- ```bash
+ - 恢复数据? ```bash
docker run --rm -v stark-todo-list_todos-data:/data -v $(pwd):/backup alpine tar xzf /backup/todos-backup.tar.gz -C /data
```
-6. **清理(会删除数据)**
+6. **清理(会删除数据?*
```bash
docker compose down -v
```
@@ -204,28 +175,22 @@
```
stark-todo-list/
├── src/
-│ ├── app/ # Next.js App Router
-│ │ ├── api/ # API 路由
-│ │ │ └── todos/ # Todo CRUD 端点
-│ │ ├── analytics/ # 数据分析与图表页面
-│ │ ├── settings/ # 设置页面
-│ │ ├── page.tsx # 主页面
-│ │ ├── layout.tsx # 根布局
-│ │ └── globals.css # 全局样式
-│ ├── components/ # React 组件
-│ │ ├── StarkLogo.tsx # 动画 Logo
-│ │ └── AnalyticsDashboard.tsx # 数据可视化组件
-│ ├── contexts/ # React 上下文
-│ │ └── SettingsContext.tsx
-│ ├── lib/ # 工具函数
-│ │ ├── storage.ts # JSON 文件操作
-│ │ ├── translations.ts # 国际化翻译
-│ │ └── timezones.ts # 时区数据
-│ └── ...
-├── public/ # 静态资源
-├── scripts/
-│ ├── generate-icons.js # 图标生成脚本
-│ └── generate-mock-data.js # 演示数据生成脚本
+? ├── app/ # Next.js App Router
+? ? ├── api/ # API 路由
+? ? ? └── todos/ # Todo CRUD 端点
+? ? ├── analytics/ # 数据分析与图表页?? ? ├── settings/ # 设置页面
+? ? ├── page.tsx # 主页?? ? ├── layout.tsx # 根布局
+? ? └── globals.css # 全局样式
+? ├── components/ # React 组件
+? ? ├── StarkLogo.tsx # 动画 Logo
+? ? └── AnalyticsDashboard.tsx # 数据可视化组?? ├── contexts/ # React 上下?? ? └── SettingsContext.tsx
+? ├── lib/ # 工具函数
+? ? ├── storage.ts # JSON 文件操作
+? ? ├── translations.ts # 国际化翻?? ? └── timezones.ts # 时区数据
+? └── ...
+├── public/ # 静态资?├── scripts/
+? ├── generate-icons.js # 图标生成脚本
+? └── generate-mock-data.js # 演示数据生成脚本
├── docker-compose.yml # Docker Compose 配置
├── Dockerfile # Docker 镜像配置
├── run.sh # 管理脚本
@@ -234,7 +199,7 @@ stark-todo-list/
└── package.json # 项目依赖
```
-## 🛠️ 技术栈
+## 🛠?技术栈
- **框架**: Next.js 15 (App Router)
- **语言**: TypeScript 5
@@ -242,12 +207,11 @@ stark-todo-list/
- **动画**: Framer Motion
- **图表**: Recharts
- **图标**: Lucide React
-- **容器化**: Docker & Docker Compose
+- **容器?*: Docker & Docker Compose
## 📝 数据格式
-任务存储在 `todos.json` 中,格式如下:
-
+任务存储?`todos.json` 中,格式如下?
```json
[
{
@@ -266,32 +230,27 @@ stark-todo-list/
## 🔌 API 接口文档
-应用提供 RESTful API 用于程序化访问。在浏览器中访问 `/api-docs` 可查看交互式 API 文档。
-
+应用提供 RESTful API 用于程序化访问。在浏览器中访问 `/api-docs` 可查看交互式 API 文档?
### 认证方式
-受保护的端点需要在请求头中提供 API 密钥:
-
+受保护的端点需要在请求头中提供 API 密钥?
```bash
-# 方式一:X-API-Key 请求头
--H "X-API-Key: your_password"
+# 方式一:X-API-Key 请求?-H "X-API-Key: your_password"
-# 方式二:Authorization Bearer 请求头
--H "Authorization: Bearer your_password"
+# 方式二:Authorization Bearer 请求?-H "Authorization: Bearer your_password"
```
-> 默认密码为 `stark123`。可通过 `AUTH_PASSWORD` 环境变量配置。
-
+> 默认密码?`stark123`。可通过 `AUTH_PASSWORD` 环境变量配置?
### 接口列表
#### 任务接口 (`/api/todos`)
| 方法 | 认证 | 描述 |
|------|------|------|
-| GET | ❌ | 获取所有活跃任务 |
-| POST | ✅ | 创建新任务 |
-| PUT | ✅ | 更新现有任务 |
-| DELETE | ✅ | 软删除任务 |
+| GET | ?| 获取所有活跃任?|
+| POST | ?| 创建新任?|
+| PUT | ?| 更新现有任务 |
+| DELETE | ?| 软删除任?|
**GET /api/todos**
```bash
@@ -303,7 +262,7 @@ curl https://your-domain/api/todos
curl -X POST https://your-domain/api/todos \
-H "Content-Type: application/json" \
-H "X-API-Key: stark123" \
- -d '{"text": "新任务", "groupId": "default", "priority": "P1"}'
+ -d '{"text": "新任?, "groupId": "default", "priority": "P1"}'
```
**PUT /api/todos**
@@ -324,9 +283,9 @@ curl -X DELETE "https://your-domain/api/todos?id=uuid" \
| 方法 | 认证 | 描述 |
|------|------|------|
-| GET | ❌ | 获取所有分组 |
-| POST | ✅ | 创建新分组 |
-| DELETE | ✅ | 删除分组 |
+| GET | ?| 获取所有分?|
+| POST | ?| 创建新分?|
+| DELETE | ?| 删除分组 |
**GET /api/groups**
```bash
@@ -351,8 +310,8 @@ curl -X DELETE "https://your-domain/api/groups?id=uuid" \
| 方法 | 认证 | 描述 |
|------|------|------|
-| GET | ❌ | 获取 PV/UV 统计 |
-| POST | ❌ | 更新访问统计 |
+| GET | ?| 获取 PV/UV 统计 |
+| POST | ?| 更新访问统计 |
**GET /api/stats**
```bash
@@ -363,7 +322,7 @@ curl https://your-domain/api/stats
| 方法 | 认证 | 描述 |
|------|------|------|
-| POST | ❌ | 验证密码 |
+| POST | ?| 验证密码 |
**POST /api/auth**
```bash
@@ -374,32 +333,27 @@ curl -X POST https://your-domain/api/auth \
## 🤝 贡献
-欢迎贡献!请随时提交 Pull Request。
-
-1. Fork 本仓库
-2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
+欢迎贡献!请随时提交 Pull Request?
+1. Fork 本仓?2. 创建您的特性分?(`git checkout -b feature/AmazingFeature`)
3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
-5. 打开一个 Pull Request
-
-更多详情请查看 [贡献指南](CONTRIBUTING.md)。
-
-## 📄 许可证
-
-本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
+5. 打开一?Pull Request
+更多详情请查?[贡献指南](CONTRIBUTING.md)?
+## 📄 许可?
+本项目采?MIT 许可?- 详见 [LICENSE](LICENSE) 文件?
## 🙏 致谢
- 基于 [Next.js](https://nextjs.org/) 构建
- UI 设计灵感来自现代极简主义
-- 由 STARK 用 ❤️ 打造
-
+- ?STARK ?❤️ 打?
---
-**[⬆ 返回顶部](#-stark-todo-list)**
+**[?返回顶部](#-stark-todo-list)**
-由 STARK 用 ❤️ 制作 | 基于 Next.js
+?STARK ?❤️ 制作 | 基于 Next.js
+
diff --git a/dev.bat b/dev.bat
index c35a9d1..d6c58bf 100644
--- a/dev.bat
+++ b/dev.bat
@@ -33,13 +33,14 @@ if errorlevel 1 (
)
echo [INFO] Starting development server...
-echo [INFO] Server will be available at: http://localhost:3000
+echo [INFO] Server will be available at: http://localhost:2333
echo [INFO] Press Ctrl+C to stop the server
echo.
echo ========================================
echo.
REM Start the development server
+set PORT=2333
call pnpm dev
REM If server exits, pause to show any errors
diff --git a/docker-compose.yml b/docker-compose.yml
index a447b92..ffb5387 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -4,7 +4,7 @@ services:
context: .
dockerfile: Dockerfile
ports:
- - "4000:3000"
+ - "2333:2333"
volumes:
- todos-data:/app/data
environment:
diff --git a/package.json b/package.json
index 34631a0..e6ba9f5 100644
--- a/package.json
+++ b/package.json
@@ -25,9 +25,9 @@
"homepage": "https://github.com/yourusername/stark-todo-list#readme",
"private": false,
"scripts": {
- "dev": "next dev",
+ "dev": "next dev -p 2333",
"build": "next build",
- "start": "next start",
+ "start": "next start -p 2333",
"lint": "next lint"
},
"dependencies": {
diff --git a/run.bat b/run.bat
index af36526..9aea3d9 100644
--- a/run.bat
+++ b/run.bat
@@ -44,13 +44,14 @@ if errorlevel 1 (
echo.
echo [INFO] Starting production preview server...
-echo [INFO] Server will be available at: http://localhost:3000
+echo [INFO] Server will be available at: http://localhost:2333
echo [INFO] Press Ctrl+C to stop the server
echo.
echo ========================================
echo.
REM Start the production server
+set PORT=2333
call pnpm start
REM If server exits, pause to show any errors
@@ -59,4 +60,3 @@ if errorlevel 1 (
echo [ERROR] Production server exited with errors.
pause
)
-
diff --git a/run.sh b/run.sh
index d03a7f9..a46fcd7 100644
--- a/run.sh
+++ b/run.sh
@@ -23,14 +23,14 @@ function do_stop() {
rm "$PID_FILE"
fi
- # 2. 强力兜底:查找并杀死占用 3000 端口的所有 Node 进程
- PORT_PIDS=$(lsof -t -i:3000)
+ # 2. 强力兜底:查找并杀死占?2333 端口的所?Node 进程
+ PORT_PIDS=$(lsof -t -i:2333)
if [ -n "$PORT_PIDS" ]; then
for P in $PORT_PIDS; do
kill -9 $P >/dev/null 2>&1
done
fi
- printf "${YELLOW}已停止所有相关进程并释放端口。${NC}\n"
+ printf "${YELLOW}已停止所有相关进程并释放端口?{NC}\n"
}
function do_start() {
@@ -39,36 +39,34 @@ function do_start() {
return 0
fi
- PORT_PID=$(lsof -t -i:3000)
+ PORT_PID=$(lsof -t -i:2333)
if [ -n "$PORT_PID" ]; then
- printf "${RED}错误: 端口 3000 已被占用,尝试执行 stop 后再启动${NC}\n"
+ printf "${RED}错误: 端口 2333 已被占用,尝试执?stop 后再启动${NC}\n"
return 1
fi
printf "${GREEN}使用 $PM 启动 STARK Todo List...${NC}\n"
- # 抑制安装输出,保持界面整洁
- $PM install > /dev/null 2>&1
+ # 抑制安装输出,保持界面整? $PM install > /dev/null 2>&1
nohup $PM run dev > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
sleep 2
if kill -0 $(cat "$PID_FILE") 2>/dev/null; then
- printf "${GREEN}启动成功!访问: http://localhost:3000${NC}\n"
+ printf "${GREEN}启动成功!访? http://localhost:2333${NC}\n"
else
printf "${RED}启动失败,请查看 $LOG_FILE${NC}\n"
rm -f "$PID_FILE"
fi
}
-# --- 初始化 ---
+# --- 初始?---
if [ ! -f "todos.json" ]; then
echo "[]" > todos.json
- printf "${YELLOW}已创建初始数据文件 todos.json${NC}\n"
+ printf "${YELLOW}已创建初始数据文?todos.json${NC}\n"
fi
-# 检查包管理器
-if command -v pnpm >/dev/null 2>&1; then
+# 检查包管理?if command -v pnpm >/dev/null 2>&1; then
PM="pnpm"
else
PM="npm"
@@ -89,18 +87,18 @@ case "$1" in
do_start
;;
logs)
- [ -f "$LOG_FILE" ] && tail -f "$LOG_FILE" || printf "${RED}日志文件不存在${NC}\n"
+ [ -f "$LOG_FILE" ] && tail -f "$LOG_FILE" || printf "${RED}日志文件不存?{NC}\n"
;;
status)
- if lsof -i:3000 >/dev/null 2>&1; then
+ if lsof -i:2333 >/dev/null 2>&1; then
printf "${GREEN}应用正在运行${NC}\n"
- lsof -i:3000
+ lsof -i:2333
else
- printf "${RED}应用未运行${NC}\n"
+ printf "${RED}应用未运?{NC}\n"
fi
;;
clean)
- printf "${BLUE}清理缓存和日志...${NC}\n"
+ printf "${BLUE}清理缓存和日?..${NC}\n"
rm -rf .next "$LOG_FILE" "$PID_FILE"
printf "${GREEN}清理完成${NC}\n"
;;
@@ -110,3 +108,4 @@ case "$1" in
exit 1
;;
esac
+