# Digital Nomad Guide | 数字游民指南 开源免费的数字游民资源平台,支持多主题切换、国际化、电子书、课程、加入申请与支付等能力。 ## 功能特性 - **多主题**:内置数字游民、一人公司、TikTok 运营、独立开发等主题,可快速克隆扩展 - **国际化**:中英双语,基于 next-intl 的 i18n 方案 - **7 天路线图**:首页展示数字游民入门路径,支持按天查看详情 - **工具导航**:按主题加载工具分类与链接 - **电子书**:Markdown 电子书阅读,支持目录、懒加载、阅读进度 - **课程页**:视频课程大纲、学习进度、讲师介绍 - **加入申请**:表单提交 + PocketBase 存储 + 支付(Z-Pay / XorPay) - **暗色模式**:跟随系统或手动切换 ## 技术栈 - **框架**:Next.js 16、React 19 - **样式**:Tailwind CSS 4 - **国际化**:next-intl - **后端服务**:PocketBase(用户/申请)、MinIO(文件存储)、自建支付 API ## 快速开始 ### 环境要求 - Node.js 20+ - pnpm(推荐) ### 安装与运行 ```bash # 安装依赖 pnpm install # 开发模式 pnpm dev # 构建 pnpm build # 生产运行 pnpm start ``` 开发模式下访问 `http://localhost:3000`(或终端显示的端口)。 ### 环境变量(可选) 创建 `.env.local` 覆盖默认配置: | 变量名 | 说明 | 默认值 | |--------|------|--------| | `NEXT_PUBLIC_THEME` | 当前主题 | `digital-nomad` | | `NEXT_PUBLIC_POCKETBASE_URL` | PocketBase 地址 | `https://pocketbase.hackrobot.cn` | | `POCKETBASE_JOIN_COLLECTION` | 申请集合名 | `solan` | | `PAYMENT_API_URL` | 支付 API 地址 | 开发 `127.0.0.1:8700`,生产 `https://api.hackrobot.cn` | | `PAYMENT_PROVIDER` | 支付提供商 | `zpay` | | `MINIO_ENDPOINT` | MinIO 端点 | `minioweb.hackrobot.cn` | | `MINIO_BUCKET` | 存储桶 | `hackrobot` | | `NEXT_PUBLIC_SITE_URL` | 站点根地址(支付回跳等) | 开发 `http://localhost:3001` | | `NEXT_PUBLIC_SHOP_URL` | 电商独立站链接 | `https://store.hackrobot.cn/` | ## 项目结构 ``` ├── app/ │ ├── [locale]/ # 多语言路由 (zh, en) │ │ ├── page.tsx # 首页 │ │ ├── about/ # 关于我们 │ │ ├── course/ # 课程页 │ │ ├── ebook/ # 电子书 │ │ ├── join/ # 加入申请 │ │ ├── jobs/ # 招聘 │ │ └── day/[id]/ # 路线图每日详情 │ ├── api/ # API 路由 │ │ ├── join/ # 申请提交 │ │ ├── pay/ # 支付 │ │ └── upload-media/ # 媒体上传 │ ├── components/ # 公共组件 │ ├── context/ # React Context │ ├── data/ # 静态数据(如 ebook.md) │ └── lib/ # 工具与配置 ├── config/ │ ├── site.config.ts # 主题配置 │ └── services.config.ts # 服务配置(PocketBase、支付、MinIO) ├── content/themes/ # 主题内容 │ └── digital-nomad/ │ ├── messages/ # 文案 (zh.json, en.json) │ └── data/ # 工具等数据 └── i18n/ # 国际化路由 ``` ## 主题配置 切换主题:设置 `NEXT_PUBLIC_THEME` 或修改 `config/site.config.ts` 中的 `CURRENT_THEME`。 内置主题:`digital-nomad` | `solo-company` | `tiktok-ops` | `indie-dev`。 新增主题步骤: 1. 在 `config/site.config.ts` 的 `THEME_CONFIGS` 中添加配置 2. 在 `content/themes/[theme-id]/` 下添加 `messages` 和 `data` 3. 在 `app/lib/theme-data.ts` 的 switch 中添加对应 case ## 脚本 | 命令 | 说明 | |------|------| | `pnpm dev` | 启动开发服务器 | | `pnpm build` | 构建生产版本 | | `pnpm start` | 启动生产服务器 | | `pnpm lint` | 运行 ESLint | ## 开源与致谢 - 电子书样式参考 [nomadbook](https://www.hackrobot.cn/book) - 使用 [next-intl](https://next-intl-docs.vercel.app/) 实现国际化