119 lines
4.1 KiB
Markdown
119 lines
4.1 KiB
Markdown
# 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/) 实现国际化
|