feat: ship blog platform admin and deploy stack

This commit is contained in:
2026-03-31 21:48:39 +08:00
parent a9a05aa105
commit 313f174fbc
210 changed files with 25476 additions and 5803 deletions

View File

@@ -127,12 +127,30 @@ export const messages = {
about: '关于我',
techStack: '技术栈',
systemStatus: '系统状态',
hotNow: '最近热门内容',
hotNowDescription: '基于 24h / 7d / 30d 的页面访问与阅读完成信号生成,可切换窗口查看最有反馈的内容。',
hotNowEmpty: '当前筛选条件下还没有热门内容信号。',
sortByViews: '最多浏览',
sortByCompletes: '完读最多',
sortByDepth: '阅读最深',
readingSignals: '阅读信号',
readingSignalsDescription: '以下统计面板会跟随所选窗口切换,展示全站内容消费表现。',
views: '浏览',
completes: '完读',
avgProgress: '平均进度',
avgDuration: '平均时长',
totalViews: '累计浏览',
totalCompletes: '累计完读',
statsWindow: '统计窗口:最近 7 天',
statsWindowLabel: '统计窗口:{label}',
promptWelcome: 'pwd',
promptDiscoverDefault: "find ./posts -type f | sort",
promptDiscoverFiltered: 'grep -Ril "{filters}" ./posts',
promptPinned: 'grep -Ril "^pinned: true$" ./posts',
promptPostsDefault: "find ./posts -type f | head -n {count}",
promptPostsFiltered: 'grep -Ril "{filters}" ./posts | head -n {count}',
promptPopular: "awk 'NR<=6 {print}' ./analytics/popular-posts.log",
promptPopularRange: "awk 'NR<=6 {print}' ./analytics/popular-posts.log --window={label}",
promptFriends: "find ./links -maxdepth 1 -type f | sort",
promptAbout: "sed -n '1,80p' ~/profile.md",
},
@@ -148,6 +166,25 @@ export const messages = {
previous: '上一页',
next: '下一页',
},
searchPage: {
pageTitle: '站内搜索',
title: '搜索结果',
intro: '独立搜索页会保留搜索词,并支持按类型、分类、标签继续缩小范围。',
promptIdle: "printf 'search query required\\n'",
promptQuery: 'grep -Rin "{query}" ./posts',
queryLabel: '当前查询',
searchTips: '搜索会优先走站内索引,并自动复用同义词与轻量拼写纠错。',
resultSummary: '找到 {count} 条结果',
filteredSummary: '筛选后剩余 {count} 条结果',
filtersTitle: '二次筛选',
allCategories: '全部分类',
allTags: '全部标签',
emptyQueryTitle: '先输入关键词',
emptyQueryDescription: '可以直接使用顶部搜索框,或在 URL 中传入 ?q= 进入搜索结果页。',
emptyTitle: '没有匹配结果',
emptyDescription: '可以切换分类 / 标签,或换一个关键词重新搜索。',
askFallback: '改去 AI 问答',
},
article: {
backToArticles: '返回文章索引',
documentSession: '文档会话',
@@ -158,6 +195,9 @@ export const messages = {
title: '相关文章',
description: '基于当前分类与标签关联出的相近内容,延续同一条阅读链路。',
linked: '{count} 条关联',
hotKicker: '热门延伸',
hotTitle: '同类热门文章',
hotDescription: '结合最近 7 天的访问与阅读数据,优先推荐同分类或共享标签的高反馈内容。',
},
comments: {
title: '评论终端',
@@ -528,12 +568,30 @@ export const messages = {
about: 'About',
techStack: 'Tech stack',
systemStatus: 'System status',
hotNow: 'Hot now',
hotNowDescription: 'Generated from 24h / 7d / 30d page-view and completion signals so visitors can switch windows and spot the strongest feedback loops quickly.',
hotNowEmpty: 'No hot content matched the current filters yet.',
sortByViews: 'Most viewed',
sortByCompletes: 'Most completed',
sortByDepth: 'Deepest reads',
readingSignals: 'Reading signals',
readingSignalsDescription: 'These stats switch with the selected window to summarize site-wide content consumption.',
views: 'Views',
completes: 'Completes',
avgProgress: 'Avg progress',
avgDuration: 'Avg duration',
totalViews: 'Total views',
totalCompletes: 'Total completes',
statsWindow: 'Window: last 7 days',
statsWindowLabel: 'Window: {label}',
promptWelcome: 'pwd',
promptDiscoverDefault: "find ./posts -type f | sort",
promptDiscoverFiltered: 'grep -Ril "{filters}" ./posts',
promptPinned: 'grep -Ril "^pinned: true$" ./posts',
promptPostsDefault: "find ./posts -type f | head -n {count}",
promptPostsFiltered: 'grep -Ril "{filters}" ./posts | head -n {count}',
promptPopular: "awk 'NR<=6 {print}' ./analytics/popular-posts.log",
promptPopularRange: "awk 'NR<=6 {print}' ./analytics/popular-posts.log --window={label}",
promptFriends: "find ./links -maxdepth 1 -type f | sort",
promptAbout: "sed -n '1,80p' ~/profile.md",
},
@@ -549,6 +607,25 @@ export const messages = {
previous: 'Prev',
next: 'Next',
},
searchPage: {
pageTitle: 'Site search',
title: 'Search results',
intro: 'The dedicated search page keeps the query visible and lets visitors narrow results by type, category, and tag.',
promptIdle: "printf 'search query required\\n'",
promptQuery: 'grep -Rin "{query}" ./posts',
queryLabel: 'Current query',
searchTips: 'Search uses the site index first and also applies synonyms plus lightweight typo correction automatically.',
resultSummary: 'Found {count} results',
filteredSummary: '{count} results after filters',
filtersTitle: 'Refine results',
allCategories: 'All categories',
allTags: 'All tags',
emptyQueryTitle: 'Enter a keyword first',
emptyQueryDescription: 'Use the header search box or open this page with a ?q= query string.',
emptyTitle: 'No matching results',
emptyDescription: 'Try switching categories / tags or search again with another keyword.',
askFallback: 'Ask the AI instead',
},
article: {
backToArticles: 'Back to article index',
documentSession: 'Document session',
@@ -559,6 +636,9 @@ export const messages = {
title: 'Related Posts',
description: 'More nearby reading paths based on the current category and shared tags.',
linked: '{count} linked',
hotKicker: 'Hot follow-up',
hotTitle: 'Popular related posts',
hotDescription: 'Uses the last 7 days of visit and reading signals to recommend the strongest-performing posts from the same category or shared tags.',
},
comments: {
title: 'Comment Terminal',