- colophon:五节灰阶数据表讲"这站怎么造的"(build/visual/写作流
/i18n/features,变字体提速等实数入表)
- stack:homelab/自托管/站点依赖/日常四节(版本号实读
package.json;硬件细节与 daily 清单 TODO(下轮) 待补)
- Footer 顺手修真缺陷:locale prop 机制存在但从未透传,en 全站
页脚实为 zh 文案——改 Astro.url.pathname 构建期自推断(localeOf
复用,显式 prop 优先),零 BaseLayout 改动
- 页脚「装备 · 制作」双入口(en 轨自动 /en/ 前缀)
车道:op-artalk(自验 15/15:双页双语桌面+390 溢出断言+Footer
双轨感知);收编验收 6 检全过
验证: pnpm astro build 34 页 exit 0;双页双语 390 视口无溢出;E2E
31/31 PASS
Spec: none (两静态页+Footer 修复,车道级交付)
Co-authored-by: GLM-5.3
118 lines
4.0 KiB
Plaintext
118 lines
4.0 KiB
Plaintext
---
|
||
// /colophon 制作页:本站如何造出来——灰阶数据表叙事,不做营销页
|
||
// 事实源:package.json 实版本、部署实录、docs/博客重设计调研报告.md 拍板项
|
||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||
|
||
const SECTIONS = [
|
||
{
|
||
tag: 'build',
|
||
items: [
|
||
['Astro 7.3.8', '静态生成(SSG),零运行时框架 JS;交互由原生 island 脚本承担'],
|
||
['Pagefind', '搜索索引构建期生成,静态站零后端搜索'],
|
||
['Shiki', '代码双主题高亮,构建期完成'],
|
||
['构建产物', '约 30 页 / 数秒完成,homelab 上由 push 触发'],
|
||
],
|
||
},
|
||
{
|
||
tag: 'visual',
|
||
items: [
|
||
['丙路线', '灰阶骨架 × 分轨正文:结构用灰阶与留白说话,正文按内容轨道换字体'],
|
||
['四字体族', '思源宋(书评正文)· 思源黑(UI/技术)· JetBrains Mono(代码)· 霞鹜文楷(金句,系统栈回退)'],
|
||
['@fontsource', '字体自托管分片加载;思源黑/宋切换变字体后 CSS 345KB→106KB 全站提速'],
|
||
['tokens', '颜色/间距/时长全部变量化,亮暗两套一套代码'],
|
||
],
|
||
},
|
||
{
|
||
tag: 'writing flow',
|
||
items: [
|
||
['gitea', '自托管 git 服务:本地编辑器与 gitea 网页写的是同一个仓库'],
|
||
['webhook', 'push 触发,HMAC 签名验证,仅 main 分支'],
|
||
['发布链', 'homelab 构建 → rsync → nginx 静态目录,全程无云厂商构建分钟'],
|
||
['透明化', '页脚 built-from 一行链到本次构建对应的 commit'],
|
||
],
|
||
},
|
||
{
|
||
tag: 'i18n',
|
||
items: [
|
||
['预翻译', '腾讯 TMT 构建期机翻,.en.md 入仓版本化'],
|
||
['双语轨', '/en/ 前缀预构建,切换是纯导航零等待'],
|
||
['译注', '机翻文章带 AI 译注小标,欢迎指正'],
|
||
],
|
||
},
|
||
{
|
||
tag: 'features',
|
||
items: [
|
||
['评论', 'Artalk 2.10 自托管(sqlite),挂主域 /artalk 路径'],
|
||
['图库', 'EXIF 构建期提取(exifr)+ sharp 宽高比驱动 masonry,零运行时 JS'],
|
||
['边缘', 'ESA CDN + HTTPS 通配证书;页脚 ICP 备案法定保留'],
|
||
],
|
||
},
|
||
];
|
||
---
|
||
|
||
<BaseLayout title="colophon" description="这个博客怎么造的:构建、视觉、写作流与自托管全家桶">
|
||
<section class="colo">
|
||
<h1 class="colo-title">制作 <span class="dim">/ colophon</span></h1>
|
||
<p class="colo-lead">
|
||
一个静态博客能自己决定的事情,尽量自己决定:自己构建、自己托管、自己翻译、自己记版本。
|
||
</p>
|
||
{SECTIONS.map((s) => (
|
||
<section class="sec">
|
||
<h2 class="sec-tag">{s.tag}</h2>
|
||
<dl class="rows">
|
||
{s.items.map(([term, desc]) => (
|
||
<div class="row">
|
||
<dt>{term}</dt>
|
||
<dd>{desc}</dd>
|
||
</div>
|
||
))}
|
||
</dl>
|
||
</section>
|
||
))}
|
||
</section>
|
||
</BaseLayout>
|
||
|
||
<style>
|
||
.colo { max-width: 720px; }
|
||
.colo-title {
|
||
font-size: 22px;
|
||
color: var(--ink-1);
|
||
margin: var(--space-5) 0 var(--space-2);
|
||
}
|
||
.dim { color: var(--ink-4); font-family: var(--font-mono); font-size: 16px; }
|
||
.colo-lead {
|
||
font-size: 14px;
|
||
color: var(--ink-3);
|
||
margin-bottom: var(--space-5);
|
||
}
|
||
.sec { margin-bottom: var(--space-5); }
|
||
.sec-tag {
|
||
font-family: var(--font-mono);
|
||
font-size: 12px;
|
||
color: var(--ink-4);
|
||
letter-spacing: 0.08em;
|
||
border-bottom: 1px solid var(--line);
|
||
padding-bottom: var(--space-1);
|
||
margin-bottom: var(--space-2);
|
||
}
|
||
.rows { margin: 0; }
|
||
.row {
|
||
display: grid;
|
||
grid-template-columns: 120px 1fr;
|
||
gap: var(--space-3);
|
||
padding-block: var(--space-2);
|
||
}
|
||
.row + .row { border-top: 1px dashed var(--line); }
|
||
dt {
|
||
font-family: var(--font-mono);
|
||
font-size: 13px;
|
||
color: var(--ink-2);
|
||
overflow-wrap: anywhere;
|
||
}
|
||
dd { margin: 0; font-size: 13px; color: var(--ink-3); line-height: 1.7; }
|
||
/* 窄屏:键值上下堆叠,避免 120px 定宽挤压长译文 */
|
||
@media (max-width: 560px) {
|
||
.row { grid-template-columns: 1fr; gap: 2px; }
|
||
}
|
||
</style>
|