diff --git a/CHANGELOG.md b/CHANGELOG.md index 03b6e66..8412c2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Port configuration: - - Local development: Port 3000 + - Local development: Port 2333 - Docker deployment: Port 4000 ### Technical Stack @@ -57,3 +57,4 @@ For Docker: git pull origin main ./docker-start.sh ``` + diff --git a/Dockerfile b/Dockerfile index d9f0ac4..42faa8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -64,9 +64,9 @@ RUN mkdir -p /app/data && \ USER nextjs -EXPOSE 3000 +EXPOSE 2333 -ENV PORT=3000 +ENV PORT=2333 ENV HOSTNAME="0.0.0.0" # 使用 node 直接启动,不需要 npm(更轻量) diff --git a/README.md b/README.md index 47fb24c..0b788ab 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
-# ✨ STARK Todo List +# ?STARK Todo List Next.js React @@ -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 Next.js React @@ -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 +