中文 | English
Drluffy 是一个可部署到 GitHub Pages 的未来科技风个人网站,基于原生 HTML/CSS/JavaScript。
- 科技感背景 + 鼠标跟随粒子特效
- 白天(太阳升起)/ 黑夜(月亮发光)滑动切换主题
- Explore 入口支持淡出+景深动画,默认每个会话只出现一次
- 壁纸、相册、问候语、猫咪 SVG 均可作为项目资源直接部署到网站
Home / About / Articles / Article多页面结构- Markdown 驱动文章系统(脚本生成 JSON)
- 初始访问时仅显示背景,点击
Explore进入页面内容 - About 页面支持头像图片和社交图标行(X / Telegram / Email / GitHub)
- 右侧猫咪滑轮绳子滚动联动,滚到底触发跳跃和吃猫粮文案
- 30 秒无操作进入相册轮播,支持点击放大、按比例完整展示、自动切换与滑动浏览
- 支持中英切换(页面右上角语言按钮)
本项目内置 Luffy 命令,支持一键安装、运行、新建文章。
node scripts/luffy.js install
node scripts/luffy.js run新建文章:
node scripts/luffy.js create-article --title "我的新文章" --lang zh在项目根目录执行:
npm install -g .然后就可以直接用:
Luffy install
Luffy run --port=4173
Luffy create-article --title "My New Post" --lang en
Luffy create-page --name portfolio --title "Portfolio"
Luffy delete-page --name portfolioLuffy install- 执行依赖安装并自动构建文章数据
Luffy run [--port=4173]- 自动构建文章数据并启动本地静态服务
Luffy create-article --title "..." [--lang zh|en] [--slug custom-slug]- 一键创建 Markdown 文章并自动更新
data/articles.json
- 一键创建 Markdown 文章并自动更新
Luffy create-page --name portfolio [--title "Portfolio"]- 快速创建新的独立页面(根目录
.html文件,带完整站点结构)
- 快速创建新的独立页面(根目录
Luffy delete-page --name portfolio [--force]- 删除已有页面文件;删除核心页面
index/about/articles/article需要显式传--force
- 删除已有页面文件;删除核心页面
npm run build:content
npm run run
npm run create-article -- --title "Hello"
npm run create-page -- --name portfolio --title "Portfolio"
npm run delete-page -- --name portfolio文章放在 content/posts/*.md,格式示例:
---
title: "Article title"
date: 2026-03-14
tags: ["TagA", "TagB"]
excerpt: "Short summary"
cover: "/assets/images/covers/article-cover.jpg"
slug: "article-slug"
---
## Section
Content...- 站点右上角语言按钮可在
EN / 中文间切换 - 语言状态保存在本地存储键:
drluffy.lang
当前版本不再在前端提供图片导入入口。壁纸、相册、问候语、猫咪 SVG 都通过仓库文件直接部署。
核心配置文件:data/site-config.json
默认结构:
{
"theme": "night",
"enableExploreGate": true,
"entry": {
"titleTypeSpeedMs": 38,
"subtitleTypeSpeedMs": 18,
"subtitleDelayMs": 180,
"blinkMinOpacity": 0.45,
"blinkGlowAlpha": 0.55,
"blinkGlowSizePx": 10,
"leaveDurationMs": 430
},
"enableIdleSlideshow": true,
"idleTimeoutMs": 30000,
"slideshowIntervalMs": 4500,
"particles": {
"dayDesktop": 260,
"nightDesktop": 180,
"dayMobile": 110,
"nightMobile": 70
},
"wallpaper": {
"day": "",
"night": "",
"default": ""
},
"gallery": [],
"greetings": ["Hi", "Hello"],
"cat": {
"svg": ""
},
"visits": {
"enabled": true,
"provider": "countapi",
"namespace": "drluffy",
"key": "site"
}
}在 data/site-config.json 中设置:
"enableExploreGate": truetrue:开启 Explore 入口。首次访问会显示入口层,点击Explore进入;同一浏览器会话内仅出现一次。false:关闭入口层,直接进入页面内容。
入口层动效默认包含:
System Ready闪烁Drluffy与副标题打字机效果- 点击
Explore后淡出 + 景深过渡
并且为避免页面切换时闪烁,站点会在页面最早阶段根据会话状态预判是否显示 Explore 层。
在 data/site-config.json 中配置 entry:
"entry": {
"titleTypeSpeedMs": 38,
"subtitleTypeSpeedMs": 18,
"subtitleDelayMs": 180,
"blinkMinOpacity": 0.45,
"blinkGlowAlpha": 0.55,
"blinkGlowSizePx": 10,
"leaveDurationMs": 430
}titleTypeSpeedMs/subtitleTypeSpeedMs: 打字速度(毫秒,越小越快)subtitleDelayMs: 标题与副标题之间的等待时间blinkMinOpacity: 闪烁最低透明度blinkGlowAlpha: 发光强度(0~1)blinkGlowSizePx: 发光范围(像素)leaveDurationMs: 点击 Explore 后淡出+景深过渡时长
页脚会显示访问量,默认使用 countapi 统计。
"visits": {
"enabled": true,
"provider": "countapi",
"namespace": "drluffy",
"key": "site"
}enabled: 是否开启访问统计provider: 目前支持countapi(其它值将走本地计数兜底)namespace+key: 统计键名- 当远程统计不可用时,会自动显示本地计数作为 fallback
在 data/site-config.json 中设置:
"particles": {
"dayDesktop": 260,
"nightDesktop": 180,
"dayMobile": 110,
"nightMobile": 70
}说明:
- 白天默认粒子更多、可见度更高
- 你可以按设备和主题分别调整数量
在 data/site-config.json 中设置:
"enableIdleSlideshow": truetrue:开启空闲相册模式false:关闭空闲相册模式(即使配置了gallery也不会自动进入)
- 将图片放入:
assets/images/wallpapers/ - 在
data/site-config.json中填写路径:
"wallpaper": {
"day": "/assets/images/wallpapers/day.jpg",
"night": "/assets/images/wallpapers/night.jpg",
"default": "/assets/images/wallpapers/night.jpg"
}- 将图片放入:
assets/images/gallery/ - 在
data/site-config.json中填写gallery:
"gallery": [
{
"src": "/assets/images/gallery/photo-1.jpg",
"alt": "Sunrise over the city",
"altZh": "城市日出",
"caption": "Shot on a quiet morning.",
"captionZh": "清晨拍摄。"
},
{
"src": "/assets/images/gallery/photo-2.jpg",
"alt": "Studio desk",
"altZh": "工作台",
"caption": "Workspace details.",
"captionZh": "桌面细节。"
}
]说明:
- 空闲 30 秒后会自动进入相册模式
- 照片会按图片比例完整显示在相框内
- 点击可放大,支持触屏左右滑动和按钮翻页
在 data/site-config.json 中修改:
"greetings": ["Hi", "Hello", "欢迎回来", "Good to see you"]相册 Exit 后,猫咪会从这里随机取一句问候。
- 将 SVG 文件放入:
assets/images/cat/ - 在
data/site-config.json中填写:
"cat": {
"svg": "/assets/images/cat/custom-cat.svg"
}说明:
- 若未配置
cat.svg,页面使用内置 CSS 猫咪 - 若配置了 SVG,页面会自动切换为你的 SVG 猫咪,并保留滚动联动与跳跃动画
- 将头像图片放到:
assets/images/about-photo.jpg(可改名,但需同步修改about.html) - 在
about.html中更新社媒链接:- X:
https://x.com/... - Telegram:
https://t.me/... - Email:
mailto:... - GitHub:
https://github.com/...
- X:
- 创建 GitHub 仓库并推送代码到
main分支。 - 确认仓库包含工作流文件:
.github/workflows/deploy.yml。 - 打开仓库
Settings -> Pages。 Build and deployment下将Source设置为GitHub Actions。- 回到仓库
Actions页面,确认Deploy GitHub Pages工作流成功。 - 部署完成后访问:
- 用户主页仓库:
https://<username>.github.io/ - 普通仓库:
https://<username>.github.io/<repo>/(本项目当前按根路径设计,建议用于用户主页仓库)
- 用户主页仓库:
- 每次推送到
main都会自动重新部署。
- 本地构建文章数据:
Luffy install或npm run build:content - 本地运行检查:
Luffy run - 验证页面:
Home/About/Articles/Article可访问 - 验证交互:粒子、日夜切换、猫咪滚动、30 秒空闲相册、点击放大、退出问候
- 验证语言切换:中英切换后静态文案和动态分页文案正确
- 验证
data/site-config.json中配置的壁纸、相册、问候语、猫咪 SVG 全部可加载 - 验证首次访问只显示背景与
Explore,点击后进入站点内容
index.html/about.html/articles.html/article.htmlassets/css/*assets/js/*content/posts/*.mdscripts/luffy.js/scripts/build-content.js/scripts/serve.jsdata/articles.json,data/article-map.json
- 壁纸、相册、问候语和猫咪 SVG 现在通过项目文件部署,不依赖浏览器本地导入。
- 低性能设备或用户设置减少动画时,动效会自动降级。
