# venus-nextjs

个人作品集/博客网站模板，适用于设计师、开发者、自由职业者展示作品和服务。

## 技术栈

- Next.js 15.5.9 (已锁定版本，App Router)
- React 19.2.3 (已锁定版本，修复 CVE-2025-55182 漏洞)
- TypeScript 5
- Tailwind CSS 4
- next-auth (身份认证)
- next-themes (深色/浅色主题切换)
- AOS (滚动动画)
- react-slick (轮播组件)
- Markdown/MDX (博客内容)

## 快速开始

```bash
npm install
npm run dev
```

## 目录结构

```text
src/
├── app/                      # Next.js App Router 入口
│   ├── layout.tsx            # 根布局 (Header + Footer + 主题Provider)
│   ├── page.tsx              # 首页
│   ├── not-found.tsx         # 404 页面
│   ├── globals.css           # 全局样式
│   ├── context/              # React Context
│   │   └── AuthDialogContext.tsx  # 认证对话框状态管理
│   ├── api/                  # API 路由和数据
│   │   ├── auth/[...nextauth]/route.ts # NextAuth 认证 API
│   │   ├── data.tsx          # 静态数据 (菜单、计数器、服务、作品集)
│   │   └── contex/ToasetContex.tsx # Toast 通知 Context
│   └── (site)/               # 路由分组 (共享布局)
│       ├── about/page.tsx    # 关于页面
│       ├── blog/page.tsx     # 博客列表
│       ├── contact/page.tsx  # 联系页面
│       ├── documentation/page.tsx # 文档页面
│       ├── portfolio/page.tsx # 作品集列表
│       └── services/page.tsx # 服务页面
├── components/               # 可复用组件
│   ├── Layout/               # 布局组件
│   │   ├── Header/index.tsx  # 导航栏 (Logo + 菜单 + 主题切换)
│   │   └── Footer/index.tsx  # 页脚
│   ├── Home/                 # 首页专用组件
│   │   ├── Hero/index.tsx    # Hero 区域
│   │   ├── Services/index.tsx # 服务展示
│   │   ├── Counter/index.tsx # 数据统计
│   │   ├── WorkProgress/index.tsx # 工作进度
│   │   └── Contact/index.tsx # 联系表单
│   ├── Auth/                 # 认证相关
│   │   ├── SignIn/index.tsx  # 登录组件
│   │   ├── SignUp/index.tsx  # 注册组件
│   │   ├── SocialSignIn.tsx  # 社交登录
│   │   └── AuthDialog/       # 认证对话框
│   ├── Blog/                 # 博客组件
│   ├── Contact/              # 联系页组件
│   │   ├── Form/index.tsx    # 联系表单
│   │   ├── ContactInfo/index.tsx # 联系信息
│   │   └── OfficeLocation/index.tsx # 办公地点
│   ├── Documentation/        # 文档组件
│   ├── portfolio/            # 作品集组件
│   ├── Common/               # 通用组件
│   ├── SharedComponent/      # 共享组件
│   ├── Breadcrumb/           # 面包屑
│   ├── ScrollToTop/          # 回到顶部按钮
│   ├── NotFound/             # 404 组件
│   └── nextauth/             # NextAuth Provider
├── types/                    # TypeScript 类型定义
│   ├── blog.ts               # 博客类型
│   ├── menu.ts               # 菜单类型
│   └── breadcrumb.ts         # 面包屑类型
├── utils/                    # 工具函数
│   ├── image.ts              # 图片路径处理
│   ├── aos.tsx               # AOS 动画初始化
│   ├── markdown.ts           # Markdown 解析
│   ├── markdownToHtml.ts     # Markdown 转 HTML
│   ├── validateEmail.ts      # 邮箱验证
│   └── extendedConfig.ts     # 扩展配置
└── Style/                    # 样式文件
    └── style.css             # 组件样式

markdown/                     # 博客内容 (MDX 格式)
└── Blog/
    ├── Blog_1.mdx
    ├── Blog_2.mdx
    └── ...

public/                       # 静态资源
└── images/
    ├── logo/                 # Logo 图片
    ├── hero/                 # Hero 区域图片
    ├── blog/                 # 博客封面图
    ├── portfolio/            # 作品集图片
    ├── services/             # 服务图标
    ├── contact/              # 联系页图片
    ├── counter/              # 计数器图标
    ├── testimonial/          # 评价图片
    ├── footer/               # 页脚图标
    └── documentation/        # 文档图片
```

## 路由配置

| 路径 | 页面 | 说明 |
|------|------|------|
| `/` | Home | 首页 (Hero + 服务 + 作品集 + 评价 + 联系) |
| `/about` | About | 关于我 |
| `/services` | Services | 服务介绍 |
| `/portfolio` | Portfolio | 作品集列表 |
| `/blog` | Blog | 博客列表 |
| `/contact` | Contact | 联系方式 |
| `/documentation` | Documentation | 模板文档 |

## 数据结构

### 菜单数据 (src/app/api/data.tsx)

```typescript
export const menuItems = [
    { name: "Home", href: "#home" },
    { name: "About", href: "#about" },
    { name: "Services", href: "#services" },
    { name: "Portfolio", href: "#portfolio" },
    { name: "Testimonials", href: "#testimonials" },
    { name: "Blog", href: "/#blog" },
];
```

### 服务数据 (src/app/api/data.tsx)

```typescript
export const Servicebox = [
    {
        icon: '/images/services/ux-design-product_1.svg',
        title: 'UX & Product Design',
        description: '服务描述...',
    },
    // ...
];
```

### 作品集数据 (src/app/api/data.tsx)

```typescript
export const portfolioinfo = [
    {
        image: '/images/portfolio/cozycasa.png',
        alt: 'Portfolio',
        title: 'Cozycasa',
        slug: 'Cozycasa',
        info: 'Designation',
        Class: 'md:mt-0'  // 布局样式
    },
    // ...
];
```

### 博客类型 (src/types/blog.ts)

```typescript
export type Blog = {
  id?: number;
  title?: string;
  slug?: string;
  excerpt?: string;
  coverImage?: string;
  date: string;
};
```

## 核心组件说明

### 布局系统

- `RootLayout` (src/app/layout.tsx): 根布局，包含主题Provider、认证Provider、Header和Footer
- 使用 `next-themes` 实现深色/浅色模式切换
- 使用 `next-auth` 实现用户认证

### 主题切换

主题通过 `next-themes` 的 `ThemeProvider` 管理，支持:

- `light` - 浅色主题
- `dark` - 深色主题
- `system` - 跟随系统

### 动画效果

使用 AOS (Animate On Scroll) 库，在 `src/utils/aos.tsx` 初始化

### 认证系统

使用 `next-auth` v4，配置文件位于 `src/app/api/auth/[...nextauth]/route.ts`。

启用社交登录需要：

1. 在 `.env.local` 中配置环境变量：

```bash
NEXTAUTH_SECRET=your-secret-key
NEXTAUTH_URL=http://localhost:3000

# Google 登录
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret

# GitHub 登录
GITHUB_ID=your-github-id
GITHUB_SECRET=your-github-secret
```

1. 在 `route.ts` 中取消对应 provider 的注释

## 常见修改任务

### 修改网站信息

1. 修改 `src/components/Layout/Header/index.tsx` 中的 Logo
2. 修改 `src/components/Layout/Footer/index.tsx` 中的版权信息
3. 修改 `src/app/layout.tsx` 中的 metadata

### 修改导航菜单

编辑 `src/app/api/data.tsx` 中的 `menuItems` 数组

### 添加新页面

1. 在 `src/app/(site)/` 目录下创建新文件夹和 `page.tsx`
2. 在 `menuItems` 中添加导航项

### 添加博客文章

1. 在 `markdown/Blog/` 目录下创建新的 `.mdx` 文件
2. 使用 frontmatter 定义标题、日期、封面图等

### 修改样式主题

1. 编辑 `src/app/globals.css` 中的 CSS 变量
2. 或修改 `tailwind.config.ts` 中的主题配置

### 修改服务/作品集数据

编辑 `src/app/api/data.tsx` 中对应的数据数组

## 图片资源

- 存放在 `public/images/` 目录
- 使用 `getImgPath()` 工具函数获取路径 (src/utils/image.ts)
- 引用路径：`/images/xxx.jpg`

## 安全说明

以下依赖版本已锁定以修复安全漏洞：

- **Next.js 15.5.9** - 锁定版本，修复漏洞编号为：CVE-2025-66478
- **React 19.2.3** - 修复 React Server Components 远程代码执行漏洞 (CVE-2025-55182)

请勿使用 `^` 或 `~` 前缀以避免自动升级到有漏洞的版本。
