# 技术选型与全景图

**我是卡若。**

选技术跟选合伙人一样，不求最贵的，但求最稳的。

我们要做的是一个**高并发读取、低频次写入、极度依赖 SEO** 的内容变现系统。

基于这个业务特征，我把整个技术栈扒得干干净净，列在这里。

## 1. 技术栈一览表 (Tech Stack)

| 领域 | 选型 | 理由 | 替代方案 (为何不用) |
| :--- | :--- | :--- | :--- |
| **框架** | **Next.js 14 (App Router)** | SSR 对 SEO 极度友好；React 生态最强；Vercel 亲儿子部署方便。 | Vue/Nuxt (生态略逊), Pure React (无 SEO) |
| **语言** | **TypeScript** | 类型安全，重构不慌。 | JavaScript (维护是噩梦) |
| **样式** | **Tailwind CSS** | 写得快，原子化，体积小。 | CSS Modules (写得慢), Styled Components (运行时开销) |
| **UI 库** | **Shadcn UI** | 复制粘贴即用，拥有代码所有权，方便魔改。 | Ant Design (太重，风格太 B 端), MUI (太丑) |
| **数据库** | **MongoDB** | Schema-free，适合存文章、评论这种非结构化数据。 | MySQL (表结构变更麻烦), PostgreSQL (太重) |
| **部署** | **Vercel** | 零配置，全球 CDN，自动 HTTPS。 | 阿里云/腾讯云 ECS (还得自己运维 Nginx) |
| **状态管理** | **Zustand** | 极简，比 Redux 少写 80% 代码。 | Redux (太啰嗦), Recoil (已死) |
| **包管理** | **pnpm** | 速度快，省磁盘空间。 | npm (慢), yarn (幽灵依赖) |

## 2. 架构全景流程图

这是一张让我们可以“闭眼开发”的地图。

\`\`\`mermaid
graph TD
    %% 用户接入层
    subgraph "用户接入 (User Access)"
        User[用户] -->|HTTPS| CDN[Vercel Edge Network]
        CDN -->|静态资源| Static[静态文件 (JS/CSS/Img)]
        CDN -->|动态请求| NextServer[Next.js Server]
    end

    %% 应用服务层
    subgraph "应用服务 (Application)"
        NextServer -->|Page Request| SSR[服务端渲染 (SSR)]
        NextServer -->|API Request| API[API Routes]
        
        SSR -->|获取数据| DataLayer[数据访问层 (DAL)]
        API -->|业务逻辑| Service[业务服务 (Service)]
        
        Service -->|调用| DataLayer
    end

    %% 数据存储层
    subgraph "数据存储 (Data Storage)"
        DataLayer -->|读取 Markdown| FileSys[文件系统 (book/)]
        DataLayer -->|读写动态数据| MongoDB[(MongoDB Atlas)]
        DataLayer -->|缓存热数据| Redis[(Redis - 规划中)]
    end

    %% 外部服务层
    subgraph "外部集成 (External)"
        API -->|消息通知| Feishu[飞书 Webhook]
        API -->|支付回调| WechatPay[微信支付]
    end
\`\`\`

## 3. 核心决策点解析

### 3.1 为什么是 Next.js 而不是纯 React？
- **SEO 是命脉**：我们的文章需要被百度、谷歌收录，纯 React 是客户端渲染 (CSR)，爬虫抓不到内容。Next.js 的服务端渲染 (SSR) 完美解决这个问题。
- **首屏速度**：SSR 直接返回 HTML，用户不用等 JS 下载完就能看到字，体验极佳。

### 3.2 为什么用 Shadcn UI？
- **不是库，是代码**：Shadcn 不是 npm 安装的包，而是把代码下载到你的 `components/ui` 目录。
- **魔改自由**：我想把按钮改成圆的、扁的，直接改代码就行，不受第三方库的限制。这非常符合我们“独立自主”的创业精神。

### 3.3 为什么现在还是文件系统？
- **奥卡姆剃刀**：如无必要，勿增实体。
- **现状**：文章都在 Git 里，Git 就是最好的版本控制数据库。
- **未来**：等文章超过 1000 篇，或者需要全文检索时，再把 Markdown 导入 MongoDB。

---
**卡若说：**
技术选型没有“最好”，只有“最合适”。这一套架构，扛个百万日活没问题，够我们折腾好几年了。
