mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-08-01 16:43:37 +08:00
把 9 个文件里的 11 处 claudecode-haha.relakkesyang.org 换成 cchaha.ai。 apex 走 Cloudflare CNAME flattening,www 由 GitHub 自动 301 到裸域名。 - docs/public/CNAME 与 prepare-static-output.mjs 的 expectedCustomDomain 必须同步:后者是硬校验,不一致会让 postbuild 直接 throw、Pages 发不出去。 它同时驱动 canonical / hreflang / og:url / sitemap.xml / robots.txt。 - meta.js 的 SITE_ORIGIN 管前端运行时那一份同名标签。 - AGENTS.md 里的契约描述一并更新,否则后续改动会照旧域名回退。 - 桌面端 IM 文档跳转链接及其测试断言。 验证:site build 通过(78 路由 + 74 重定向)、check:docs 通过(78 页 323 链接)、 sitemap 80 条 loc 全为新域名、AdapterSettings 6 tests passed。
46 lines
2.3 KiB
HTML
46 lines
2.3 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
|
||
<meta name="theme-color" content="#201d17" media="(prefers-color-scheme: dark)">
|
||
<meta name="description" content="Claude Code Haha — Claude Code 的本地优先桌面客户端。会话、改动、Agent、定时任务都摆在明处,接哪个模型你说了算。">
|
||
<link rel="icon" href="/images/app-icon.png" type="image/png">
|
||
<link rel="preload" href="/fonts/inter-latin.woff2" as="font" type="font/woff2" crossorigin>
|
||
<link rel="preload" href="/fonts/noto-serif-sc-latin.woff2" as="font" type="font/woff2" crossorigin>
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:site_name" content="Claude Code Haha">
|
||
<meta property="og:title" content="Claude Code Haha — Claude Code 的本地优先桌面客户端">
|
||
<meta property="og:description" content="会话、改动、Agent、定时任务都摆在明处。接哪个模型你说了算,改哪一行你点头才算。">
|
||
<meta property="og:image" content="https://cchaha.ai/images/banner.png">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<title>Claude Code Haha — Claude Code 的本地优先桌面客户端</title>
|
||
<script>
|
||
// 首帧就把主题定下来,避免深色偏好的用户先闪一下白屏。
|
||
(function () {
|
||
try {
|
||
var stored = localStorage.getItem('cch-theme')
|
||
var theme = stored === 'dark' || stored === 'light'
|
||
? stored
|
||
: (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
|
||
document.documentElement.dataset.theme = theme
|
||
} catch (error) {
|
||
document.documentElement.dataset.theme = 'light'
|
||
}
|
||
})()
|
||
</script>
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-D42DM82263"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || []
|
||
function gtag(){dataLayer.push(arguments)}
|
||
gtag('js', new Date())
|
||
gtag('config', 'G-D42DM82263')
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<div id="root"></div>
|
||
<script type="module" src="/src/main.jsx"></script>
|
||
</body>
|
||
</html>
|