diff --git a/public/images/lora-social-card.webp b/public/images/lora-social-card.webp
new file mode 100644
index 0000000..ea196d5
Binary files /dev/null and b/public/images/lora-social-card.webp differ
diff --git a/scripts/audit-release.mjs b/scripts/audit-release.mjs
index 395cb9f..266b8fa 100644
--- a/scripts/audit-release.mjs
+++ b/scripts/audit-release.mjs
@@ -10,6 +10,7 @@ const required = [
'blog/index.html',
'notes/index.html',
'projects/index.html',
+ 'projects/zhihu-threads/index.html',
'lab/index.html',
'talks/index.html',
'about/index.html',
@@ -17,6 +18,22 @@ const required = [
'now/index.html',
'links/index.html',
'search/index.html',
+ 'archives/index.html',
+ 'tags/index.html',
+ 'guestbook/index.html',
+ 'resume/index.html',
+ 'terms/index.html',
+ 'en/index.html',
+ 'en/work/index.html',
+ 'en/writing/index.html',
+ 'en/now/index.html',
+ 'en/links/index.html',
+ 'en/about/index.html',
+ 'en/contact/index.html',
+ 'en/search/index.html',
+ 'en/guestbook/index.html',
+ 'en/resume/index.html',
+ 'en/projects/zhihu-threads/index.html',
'404.html',
'rss.xml',
'robots.txt',
@@ -74,6 +91,9 @@ for (const file of files.filter((path) => textExtensions.has(extname(path)))) {
url.startsWith(`${base}/tags/`) ||
url.startsWith(`${base}/archives`) ||
url.startsWith(`${base}/terms`) ||
+ url.startsWith(`${base}/guestbook`) ||
+ url.startsWith(`${base}/resume`) ||
+ url.startsWith(`${base}/en/`) ||
url.startsWith(`${base}/404`)
) continue
diff --git a/scripts/fetch-github-projects.mjs b/scripts/fetch-github-projects.mjs
index dbb365c..adb733c 100644
--- a/scripts/fetch-github-projects.mjs
+++ b/scripts/fetch-github-projects.mjs
@@ -97,6 +97,8 @@ const buildingRepositories = new Set([
])
const summaryOverrides = new Map([
+ // Reviewed against Glassbox c191401 on 2026-09-10; roadmap capabilities are not shipped.
+ ['glassbox-agent-harness', '正在演进为长期运行的个人 Agent 工作台。当前支持 Codex、Claude Code、本地会话、运行回放、审批与画布检查;微信、QQ、长期任务和学习沉淀仍在规划。'],
['zhihu-threads', '从知乎回答与专栏摘录中选择来源,生成可追问、自测和导出的学习线。'],
['lorasys', '基于 Astro 的个人站,收录项目、构建笔记和公开贡献,通过 GitHub Pages 发布。'],
[
@@ -127,7 +129,7 @@ const summaryOverrides = new Map([
const titleOverrides = new Map([
['zhihu-threads', 'Zhihu Threads'],
- ['glassbox-agent-harness', 'Glassbox Agent Harness'],
+ ['glassbox-agent-harness', 'Glassbox'],
['ai-engineering-harness', 'AI Engineering Harness'],
['nano-vllm-interactive-guide', 'nano-vLLM Interactive Guide'],
['trandingos', 'TradingOS'],
diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro
index bde6441..802ecca 100644
--- a/src/components/BaseHead.astro
+++ b/src/components/BaseHead.astro
@@ -34,18 +34,25 @@ const alternateWithBase = alternatePath
? alternatePath
: `${basePath}/${alternatePath.replace(/^\/+/, '')}`
: undefined
-const siteTitle = `${title} ${config.titleDelimiter} ${config.title}`
+const hasBrandInTitle = title.toLocaleLowerCase().includes(config.title.toLocaleLowerCase())
+const siteTitle = hasBrandInTitle ? title : `${title} ${config.titleDelimiter} ${config.title}`
const canonicalURL = new URL(Astro.url.pathname, Astro.site)
const socialImageURL = new URL(ogImage ? ogImage : config.socialCard, Astro.url).href
const alternateURL = alternateWithBase ? new URL(alternateWithBase, Astro.site) : undefined
const socialProfiles = socialLinks.filter((link) => link.href.startsWith('http')).map((link) => link.href)
const twitterCreator = socialLinks.find((link) => link.name === 'X')?.handle
+const structuredSiteDescription =
+ locale === 'zh-CN'
+ ? 'AI Agent 开发者与全栈工程师的个人网站,记录项目、技术写作、公开构建与正在进行的实验。'
+ : config.description
+const structuredJobTitle = locale === 'zh-CN' ? 'AI Agent 开发者与全栈工程师' : 'AI Agent Developer & Full-stack Engineer'
const websiteJsonLd = {
'@context': 'https://schema.org',
'@type': 'WebSite',
name: config.title,
url: canonicalURL.origin + baseUrl,
- description: config.description,
+ description: structuredSiteDescription,
+ inLanguage: locale,
publisher: { '@type': 'Person', name: config.author }
}
const webPageJsonLd = {
@@ -62,8 +69,8 @@ const profileJsonLd = {
'@type': 'Person',
name: config.author,
url: canonicalURL.origin + baseUrl,
- jobTitle: config.description,
- description: config.description,
+ jobTitle: structuredJobTitle,
+ description: structuredSiteDescription,
sameAs: socialProfiles
}
---
diff --git a/src/components/layout/SiteHeader.astro b/src/components/layout/SiteHeader.astro
index 29cf0f8..5f630bc 100644
--- a/src/components/layout/SiteHeader.astro
+++ b/src/components/layout/SiteHeader.astro
@@ -25,7 +25,7 @@ const search = locale === 'en-US' ? '/en/search' : '/search'
{copy.contactLabel}
{alternate && {copy.switchLabel}}
-