Files
2026-03-08 22:24:33 -05:00

119 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/) 实现国际化