>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
JavaScript

深入解析基于 Next.js 14 和 Bun 构建的暗黑阅读空间

开发者热衷于重写博客。这已经成了一个梗:我们不是写文章,而是每六个月就拆掉旧技术栈、从头重建界面。这个过程几乎总是导致一个千篇一律的模板。但有时候你会遇到一些源代码,作者在细节上花了更多心思。

前几天我在浏览 woosal13/37/blog 仓库——这是开发者 Ege Celebi 的个人网站。该项目在 GitHub 上获得了刚刚超过 300 颗星。其中隐藏着几个有趣的解决方案,涵盖图形生成、排版和 MDX 处理。

chele.bi

引擎盖下

这里没有 Ghost 或 Strapi 这样的重型 CMS。作者选择了静态生成和高加载速度。

构建基于三个要素:

  1. Next.js 14 配合 App Router 和 React 18。
  2. Bun 作为包管理器和运行时。
  3. Biome 用于代码检查和格式化。

Bun 节省了依赖安装的时间,而 Biome 则取代了经典的 ESLint 和 Prettier 组合。要运行带有自动修复的 linter,项目使用了 bun run check 命令。

样式使用 Tailwind CSS。颜色和 token 设置被提取到 app/globals.css 中。Geist Sans 负责文章阅读,Geist Mono 用于代码块。

无需设计师和 Midjourney 的封面

这个仓库的主要亮点是文章横幅生成。通常作者会在 Unsplash 上搜索合适的图片、用神经网络生成图像,或在 Figma 中制作卡片。

Ege 用不同的方式解决了这个问题。在 lib/contour.ts 文件中,有一个算法接收文章标题并将其转换为轮廓图案。你会得到一个确定性的 SVG 横幅。每个标题对应自己独特的图案,而且无需调用外部服务。

相同的轮廓标记被用作 logo 和 favicon,保持了统一的身份标识。

液态玻璃和 ASCII 动画

视觉上,网站看起来像一个暗黑风格的编辑页面。设计使用了超细边框(发丝线边框)和统一的动画曲线来实现过渡效果。

界面包含几个视觉亮点:

  • 带有液态玻璃效果的圆形控件。
  • 毛玻璃质感的分类和标签。
  • 左侧文章目录带有导航标记,可平滑滚动跟随。标记的行为参考了 LineNav 组件。
  • 实时 ASCII 动态效果。在 components/blocks/ascii/ 文件夹中,你可以找到动画圆环(著名的 ASCII 甜甜圈)、数字雨、等离子和隧道效果。作者从 soft-club-ui 库移植过来,并重新着色以匹配网站的黑白配色。

项目结构和 MDX

所有文章直接存储在 App Router 页面树中:app/(website)/blog/(post)/[slug]/page.mdx

这种方法将路由逻辑和内容本身结合在一起。UI 组件被清晰地分离:

  • components/ds/ 包含可复用的基础设计系统元素。
  • components/blocks/ 存储复杂的领域逻辑和动画。

本地运行方法

你需要 Node.js 20 或更高版本以及已安装的 Bun。不需要配置环境变量。

克隆仓库并启动本地服务器:

bun install
bun dev

要使用 linter 检查并格式化代码:

bun run check

为什么要研究这些源码

如果你计划构建自己的网站或寻找前端架构的简洁示例,这个仓库值得打开。在代码中,你可以学到:

  • Next.js 项目中的 Biome 配置。
  • 基于文本的矢量卡片生成实现。
  • 将 Canvas 和 ASCII 效果集成到 React 组件中。
  • 在单个 CSS 文件中组织 Tailwind token。

代码采用 MIT 许可,但文本内容和图片受版权保护。复制文章不是好主意,但研究架构并将想法应用到你自己的项目中是个很棒的计划。

相关项目