🚀 超前科技感个人博客 — 项目架构设计

技术分享 2026-06-30 164
预计阅读时间:12 分钟

🚀 超前科技感个人博客 — 项目架构设计

一、技术栈选型

层级 选型 说明
框架 Next.js 15 (App Router) SSR/ISR/SSG 三合一,动态+静态混合渲染
语言 TypeScript 5.x 严格类型,泛型复用
样式 Tailwind CSS v4 + class-variance-authority 原子化 + 组件级变体
动画引擎 Framer Motion + GSAP 页面过渡 + 粒子/光效等重动画
3D/特效 Three.js (React Three Fiber) + @react-three/postprocessing 3D 背景、粒子系统、后期光效
内容管理 MDX + Contentlayer / next-mdx-remote 本地 Markdown 渲染,支持 React 组件内嵌
数据库 Prisma + SQLite/PostgreSQL 访客留言、阅读量、点赞等动态数据
搜索引擎 MeiliSearch / pagefind 全站模糊搜索
部署 Docker + Vercel / 自建 VPS CI/CD 自动部署

二、目录结构

blog/
├── app/                          # Next.js App Router 页面
   ├── layout.tsx                # 根布局全局粒子背景字体加载
   ├── page.tsx                  # 首页动态 Terminal 入口 + 最新文章
   ├── globals.css               # 全局样式CSS 变量暗黑模式
   ├── not-found.tsx             # 404 故障风页面
   ├── error.tsx                 # 错误边界光污染报错页
   
   ├── posts/                    # 文章列表 + 详情
      ├── page.tsx              # 文章列表网格/时间轴切换
      └── [slug]/
          └── page.tsx          # 文章详情代码高亮TOC阅读进度
   
   ├── projects/                 # 项目展示
      ├── page.tsx              # 项目墙3D 卡片翻转
      └── [slug]/page.tsx
   
   ├── about/                    # 关于页
      └── page.tsx              # 个人星盘/技能树 3D 可视化
   
   ├── guestbook/                # 留言板
      └── page.tsx              # 动态粒子留言墙
   
   ├── api/                      # API Routes
      ├── views/route.ts        # 阅读量 +1
      ├── likes/route.ts        # 点赞 toggle
      ├── guestbook/route.ts    # 留言 CRUD
      └── search/route.ts       # 搜索接口
   
   └── sitemap.ts / robots.ts    # SEO

├── components/                   # 组件目录
   ├── ui/                       # 基础 UI 组件
      ├── Button.tsx            # 霓虹光效按钮
      ├── Card.tsx              # 玻璃态卡片
      ├── Badge.tsx             # 全息标签
      ├── Input.tsx             # 发光输入框
      ├── Modal.tsx             # 毛玻璃模态框
      └── Toast.tsx             # 流动光提示
   
   ├── layout/                   # 布局组件
      ├── Navbar.tsx            # 悬浮导航栏滚轮变色
      ├── Footer.tsx            # 简约底部动态星座连线
      ├── Sidebar.tsx           # 侧边栏TOC + 相关文章
      └── MobileNav.tsx         # 移动端抽屉导航
   
   ├── effects/                  # 特效组件
      ├── ParticleBackground.tsx # Three.js 粒子系统
      ├── GridGlow.tsx          # 网格光效背景
      ├── GlitchText.tsx        # 故障文字效果
      ├── TypeWriter.tsx        # 打字机效果
      ├── ScanLine.tsx          # CRT 扫描线叠层
      └── Aurora.tsx            # 极光动态背景
   
   ├── blog/                     # 博客相关
      ├── PostCard.tsx          # 文章卡片悬停 3D 倾斜
      ├── PostHeader.tsx        # 文章头图 + 元信息
      ├── TableOfContents.tsx   # 悬浮目录
      ├── ReadingProgress.tsx   # 顶部阅读进度条光效
      ├── CodeBlock.tsx         # 代码块霓虹高亮 + 复制
      └── TagCloud.tsx          # 标签云粒子碰撞动效
   
   └── home/                     # 首页专用
       ├── HeroSection.tsx       # 欢迎区3D 文字 + 粒子
       ├── TerminalIntro.tsx     # Terminal 交互式自我介绍
       ├── FeaturedPosts.tsx     # 精选文章轮播
       └── StatsBoard.tsx        # 站点数据仪表盘

├── lib/                          # 工具库
   ├── utils.ts                  # cn() 等工具函数
   ├── prisma.ts                 # Prisma 客户端单例
   ├── mdx.ts                    # MDX 编译与渲染
   └── constants.ts              # 站点常量

├── content/                      # 内容目录
   ├── posts/                    # Markdown/MDX 文章
      ├── hello-world.mdx
      └── ...
   ├── projects/                 # 项目数据
      └── ...
   └── snippets/                 # 代码片段

├── public/                       # 静态资源
   ├── fonts/                    # 自定义字体JetBrains Mono 
   ├── images/                   # 图片
   └── models/                   # 3D 模型文件

├── styles/                       # 样式
   ├── animations.css            # 关键帧动画
   └── prose-custom.css          # 文章内容样式覆盖

├── types/                        # 类型定义
   └── index.ts                  # 全局 TS 类型

├── hooks/                        # 自定义 Hooks
   ├── useMousePosition.ts       # 鼠标位置追踪视差
   ├── useScrollProgress.ts      # 滚动进度
   ├── useIntersectionObserver.ts# 进入视口检测
   └── useLocalStorage.ts        # 本地存储

├── providers/                    # React Context Providers
   └── ThemeProvider.tsx          # 主题切换黑暗/浅色/赛博

├── docker/                       # Docker 配置
   ├── Dockerfile
   └── nginx.conf

├── .env.local                    # 环境变量
├── tailwind.config.ts            # Tailwind 配置扩展暗黑色板
├── next.config.ts                # Next.js 配置
├── tsconfig.json                 # TS 配置
├── package.json
└── README.md

三、核心技术设计

3.1 视觉语言系统

色彩体系(暗黑赛博风)

:root {
  --bg-primary: #0a0a0f;            /* 深空黑底 */
  --bg-secondary: #12121a;          /* 次级背景 */
  --bg-card: rgba(18, 18, 26, 0.6); /* 卡片 - 毛玻璃 */

  --accent-cyan: #00f0ff;           /* 主强调色 - 青色 */
  --accent-purple: #a855f7;         /* 辅强调色 - 紫色 */
  --accent-pink: #ff2d95;           /* 点缀色 - 粉色 */

  --text-primary: #e2e8f0;          /* 主文字 */
  --text-secondary: #94a3b8;        /* 次文字 */
  --text-dim: #475569;              /* 弱文字 */

  --glow-cyan: 0 0 20px #00f0ff;    /* 青色辉光 */
  --glow-purple: 0 0 20px #a855f7;  /* 紫色辉光 */

  --glass-bg: rgba(255, 255, 255, 0.03);
  --glass-border: rgba(255, 255, 255, 0.06);
}

字体层级

用途 字体 权重
标题/Logo Orbitron / 'Syne' 700-900
正文 'Inter' 300-500
代码 'JetBrains Mono', 'Fira Code' 400-600
装饰性 'Major Mono Display'

3.2 核心交互设计

交互 实现 描述
鼠标视差 useMousePosition → 粒子/卡片偏移 鼠标移动带动背景元素位移
滚动驱动 useScrollProgress + scroll-driven-animations 页面元素按滚动进度触发动画
页面转场 Framer Motion AnimatePresence + layoutId SP 风格的平滑页面切换
悬停反馈 卡片 3D 倾斜 + 辉光边缘 + 缩放 所有可交互元素都有"活着"的反馈
懒加载 next/dynamic + 滚动 IntersectionObserver 非首屏组件延迟加载

3.3 性能优化策略

┌───────────────────────────────────────────┐
│              性能优化策略                    │
├───────────────────────────────────────────┤
│  粒子背景: canvas 离屏渲染 + requestAnim  │
│  Image: next/image + WebP + blurDataURL  │
│  字体: next/font + 预加载 + fallback     │
│  3D: R3F 懒加载 + 降低粒子数(移动端)      │
│  文章: ISR revalidate=3600 增量静态生成   │
│  动画:  transform/opacity 避免重排      │
│  代码: 按需引入 Shiki + 延迟高亮          │
│  数据: SWR + 乐观更新 + 预取              │
└───────────────────────────────────────────┘

四、页面路由与数据流

                    ┌─────────────┐
                    │  Next.js 15  │
                    │  App Router  │
                    └──────┬──────┘
                           │
         ┌─────────────────┼─────────────────┐
         │                 │                  │
    ┌────▼────┐     ┌─────▼─────┐     ┌──────▼─────┐
    │   SSG   │     │    ISR    │     │    SSR     │
    │ posts/* │     │  首页     │     │ 留言板     │
    │ about   │     │  projects │     │ 搜索       │
    └─────────┘     │  /api/*   │     │ 认证       │
                    └───────────┘     └────────────┘

静态生成 SSG:    构建时生成 HTML,CDN 缓存
增量再生 ISR:    构建生成 + 按需重新验证(revalidate)
服务端渲染 SSR: 每次请求渲染(动态数据)
客户端获取:     useSWR / fetch → API Routes → Prisma

五、组件树 & 渲染层级

<RootLayout>
  ├── <Providers>
  │   ├── <ThemeProvider />        # 主题上下文
  │   └── <ParticleBackground />   # 全局粒子(fixed, 全屏)
  │
  ├── <Navbar />                   # fixed 顶部
  │   ├── <Logo />                 # 故障闪烁 Logo
  │   ├── <NavLinks />             # 导航链接
  │   └── <ThemeToggle />          # 主题切换按钮
  │
  ├── <main>
  │   └── <PageContent />          # 各页面内容(AnimatePresence 包裹)
  │       ├── <HeroSection />      # 首页 Hero
  │       │   ├── <TerminalIntro />
  │       │   └── <GlitchText />
  │       ├── <FeaturedPosts />
  │       │   └── <PostCard />[]
  │       └── <StatsBoard />
  │
  ├── <Footer />                   # 底部 + 星座连线
  │
  └── <ScanLine />                 # CRT 扫描线(可选装饰层)

六、技术亮点实现

6.1 Terminal 交互式自我介绍

页面加载时,模拟终端输入效果,逐行打印自我介绍。支持用户输入简单命令(helpskillsprojects)展示不同信息。

// 终端组件核心逻辑
const [lines, setLines] = useState<Line[]>([]);
const [input, setInput] = useState('');
const history = useRef<string[]>([]);

const commands: Record<string, () => string> = {
  help:    () => '可用命令: about, skills, projects, contact, clear',
  skills:  () => '● React/Next.js  ● TypeScript  ● Three.js  ● Node.js',
  about:   () => '全栈开发者 | 设计爱好者 | 开源贡献者',
  clear:   () => { setLines([]); return ''; },
};

6.2 3D 粒子背景系统

Three.js 粒子系统,随鼠标移动产生交互,可切换不同形态(银河、矩阵、星云)。

粒子数量: 桌面端 3000 个 / 移动端 800 个
交互:     鼠标移动 → 粒子产生流动/波纹效果
色彩:     渐变映射 → 随主题切换
连接线:   相邻粒子间光纤连线(性能敏感,可选关闭)

6.3 阅读进度 & 文章页体验

┌─ 顶部阅读进度 ──────────────────────────── 100% ─┐
│   [==============光效进度条================]       │
│                                                    │
│   📝 文章标题                                        │
│   📅 2025-01-15  ⏱ 8 min read  👁 1,234 views      │
│                                                    │
│   正文内容... [← 悬浮目录]                           │
│   代码块 [霓虹 Monokai 主题 + 一键复制]               │
│   图片 [懒加载 + 模糊占位]                           │
│                                                    │
│   ──────────────────────────────────────             │
│   💬 评论区 (客户端渲染,SSG 友好)                    │
└────────────────────────────────────────────────────┘

6.4 全站搜索

layer:
  ┌─ 用户输入 ─→ 防抖 300ms ─→ MeiliSearch/Pagefind API
  │
  ├── 返回: 标题 + 摘要 + 路径 + 高亮片段
  │
  └── 展示: 模态框浮层,键盘上下选择,Enter 跳转

离线方案: Pagefind(构建时生成静态索引,无后端依赖)
在线方案: MeiliSearch(自建 Docker,实时索引)

七、部署架构

┌─────────────┐       ┌──────────────┐       ┌────────────┐
│   GitHub    │ ──→   │  CI/CD       │ ──→   │  Vercel    │
│   (源码)    │       │  GitHub Actions│      │  (主站)    │
└─────────────┘       └──────────────┘       └─────┬──────┘
                                                    │
                    ┌───────────────────────────────┤
                    │                               │
            ┌───────▼───────┐             ┌─────────▼─────────┐
            │   Docker      │             │   自建 VPS        │
            │   + MeiliSearch│            │   + PostgreSQL    │
            │   (搜索)      │             │   (数据库/API)    │
            └───────────────┘             └───────────────────┘

域名: blog.yourdomain.com
CDN:  Vercel Edge Network (全球 100+ 节点)
监控: Vercel Analytics + Sentry
备份: 每日自动备份 content/ + 数据库

八、推荐开发顺序

Phase 1  骨架(Week 1-2   Next.js 项目初始化 + TypeScript + Tailwind
   基础目录结构搭建
   全局布局、主题系统
   粒子背景(简单版)

Phase 2  内容(Week 3-4   MDX 内容管线
   文章列表页 + 详情页
   代码高亮 + 目录组件
   项目展示页

Phase 3  交互(Week 5-6   首页 Terminal 自我介绍
   3D 粒子背景增强
   页面转场动画
   视差 + 滚动驱动动画

Phase 4  动态(Week 7-8   数据库 + API Routes
   留言板
   阅读量 + 点赞
   全站搜索

Phase 5  打磨(Week 9-10   性能优化(Lighthouse 90+   移动端适配
   SEOsitemapOpen GraphJSON-LD   Docker + CI/CD
   自定义域名 + SSL

九、关键 npm 包

{
  "dependencies": {
    "next": "^15.x",
    "react": "^19.x",
    "react-dom": "^19.x",
    "framer-motion": "^11.x",
    "three": "^0.170.x",
    "@react-three/fiber": "^8.x",
    "@react-three/postprocessing": "^2.x",
    "next-mdx-remote": "^5.x",
    "@prisma/client": "^6.x",
    "shiki": "^1.x",
    "clsx": "^2.x",
    "tailwind-merge": "^2.x",
    "swr": "^2.x"
  },
  "devDependencies": {
    "typescript": "^5.x",
    "tailwindcss": "^4.x",
    "prisma": "^6.x",
    "postcss": "^8.x",
    "autoprefixer": "^10.x"
  }
}

十、设计灵感参考

风格元素 参考来源
粒子系统 + 鼠标交互 CodePen / Three.js 官方示例
玻璃态 UI (Glassmorphism) UI 设计趋势,MacOS Big Sur 启发的毛玻璃
故障文字 Glitch 赛博朋克风格,2 层 position 偏移 + clip
Terminal 交互 Stripe 的 Terminal 演示页
霓虹光效 80 年代合成器波 + Vaporwave
滚动驱动动画 Awwwards 获奖个人站
CRT 扫描线 复古显示器模拟装饰层
3D 卡片翻转 Apple 产品页的 3D 旋转卡片

本文由 admin 原创,转载请注明出处。

相关推荐

暂无评论,来发表第一条评论吧

发表评论

登录 后发表评论