Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

免费沉浸式 Codex 桌面主题。支持 Windows 与 macOS:下载安装月海版后,可从网页主题墙一键换肤,无需重启,也不会修改官方 Codex。

[官网](https://moonsea-codex-theme.suguowen5.chatgpt.site/) · [主题墙](https://moonsea-codex-theme.suguowen5.chatgpt.site/themes) · [下载最新版](https://moonsea-codex-theme.suguowen5.chatgpt.site/download)
[官网](https://moonsea.kevinsu.xyz/) · [主题墙](https://moonsea.kevinsu.xyz/themes) · [下载最新版](https://moonsea.kevinsu.xyz/download)

![月海 Codex 主题预览](./web/public/og.png)

Expand All @@ -12,7 +12,7 @@

## 使用

1. 打开[月海主题官网](https://moonsea-codex-theme.suguowen5.chatgpt.site),点击“下载”,网站会自动提供 Windows 或 macOS 安装包。
1. 打开[月海主题官网](https://moonsea.kevinsu.xyz),点击“下载”,网站会自动提供 Windows 或 macOS 安装包。
2. Windows 运行 `Moonsea-Codex-Windows-x64-Setup.exe`;macOS 解压后右键打开 `Install.command`。
3. 打开桌面的“Codex 月海版”,回到官网选择主题。

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# 章鱼给彗星剪尾焰|Codex壁纸

## 正文

今天的新 Codex 壁纸叫「彗星理发章鱼」。

我突然想到:如果彗星的尾焰也会长乱,宇宙里是不是会有一位专门替它理发的章鱼师傅?

于是就有了这张原创搞怪壁纸:一只太空理发师章鱼,正在认真给彗星修剪尾焰。

为了让它真正适合工作区,我把主角和亮色集中在右侧,左侧保留较暗、低细节区域。代码、文件树和导航依然清楚,不会被背景抢走。

它已经上线月海主题墙,支持 Codex 和 WorkBuddy。连接月海助手后,在网页点击「应用」,系统会自动获取、校验并缓存资源,随后让壁纸生效,不需要手动搬文件。

今天一共上新四张,我最想先分享这一张。

下一位出现在宇宙里的离谱职业,你想看什么?

## 最终标签

发布时请从小红书话题选择器逐个选择,确认显示为可点击话题对象,不要直接粘贴普通 `#` 文本。

#Codex壁纸 #Codex自定义主题 #codex皮肤 #WorkBuddy #原创壁纸

如果 `#原创壁纸` 的候选内容明显偏手机壁纸,则替换为 `#桌面美化`。

## 插图顺序

1. `01-彗星理发章鱼.png`:主推图
2. `02-红月折扇剧场.png`:今日其他新品
3. `03-晨星换灯人.png`:今日其他新品
4. `04-睡莲星港.png`:今日其他新品

## SEO 复核

- 唯一主关键词:Codex壁纸
- 不使用:`#VibeCoding`、`#AI编程工具`、`#效率神器`、`#AI进化生活howto`
- 不写“一键安装”;真实体验是连接月海助手后点击应用
- 不写“自动生成壁纸”;自动完成的是获取、校验、缓存与应用
34 changes: 34 additions & 0 deletions docs/growth/运营发帖经验.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,37 @@ WorkBuddy 主题墙:https://moonsea-codex-theme.suguowen5.chatgpt.site/workbud
- 5 篇项目笔记中只编辑了 2 篇:WorkBuddy 笔记补齐主词“WorkBuddy 换肤”;月海主题笔记只修正 macOS 验收边界,并把 7 个普通文本 `#` 替换为 `#Codex`、`#Codex自定义主题`、`#codex皮肤`、`#vibecoding` 四枚真话题。
- 《我把报错烤成了一张壁纸》《给 Codex 做了张动漫雨夜壁纸》《我做了个 Codex 换肤网站|免费开源》在当前登录环境已分别承接“Codex 壁纸”或“Codex 换肤网站”搜索,因此不为换标签而编辑。
- 站内搜索名次可能受账号和环境个性化影响,只用于判断是否值得扰动旧笔记,不写成全平台固定排名。

## 2026-08-01|原创角色壁纸四张上新

### 昨日证据与选题判断

- 站点后台截图显示 7 月 31 日 PV 为 94;7 日访客为 24、7 日 PV 为 159。PV 是页面访问次数,不能与去重访客数相加或互相替代;该截图未提供 7 月 31 日独立 UV,因此不推算日 UV。
- 与前一轮后台快照相比,累计下载点击从 22 到 27,可识别下载访客从 2 到 5,重复下载从 6 到 8;这些是不同时间快照,不能写成精确 24 小时增长。
- GitHub Release `v1.5.9` 的真实安装包下载合计 12 次(Codex macOS 3、Codex Windows 2、WorkBuddy macOS 4、WorkBuddy Windows 3);`update.json` 和 `update-workbuddy.json` 是更新检查,不计下载。
- X 已公开的 WorkBuddy 预告为 87 浏览、0 可见互动;深夜 Debug 面包房为 73 浏览、0 可见互动。说明纯功能预告和单主题链接还没有得到互动验证,今日优先选强角色画面组合,但不夸大转化。

### 今日主题成品与选品

| 主题 | 生成 | API 上传 | 公开访问 | 网页应用验证 | 选用 |
| --- | --- | --- | --- | --- | --- |
| 晨星换灯人 | 已生成 | 201 成功 | 原图与清单可访问 | Codex / WorkBuddy 均已验证 | 组图候选 |
| 红月折扇剧场 | 已生成 | 201 成功 | 原图与清单可访问 | Codex / WorkBuddy 均已验证 | 组图候选 |
| 彗星理发章鱼 | 已生成 | 201 成功 | 原图与清单可访问 | Codex / WorkBuddy 均已验证 | 主推 |
| 睡莲星港 | 已生成 | 201 成功 | 原图与清单可访问 | Codex / WorkBuddy 均已验证 | 素材包补充 |

### 当日渠道状态

| 平台 | 内容形式 | 状态 | 证据与处理 |
| --- | --- | --- | --- |
| 小红书 | 4 图人工发布素材包 | 素材已准备,未操作平台 | 主关键词为“Codex壁纸”;标题、正文、最终候选话题及 4 张实图位于 `docs/growth/xiaohongshu/2026-08-01-彗星理发章鱼/`,由用户自行发布 |
| X | 3 图原生组图短文 | 未发布 | 公开个人页最新内容仍是约 23 小时前的 WorkBuddy 帖;自动化浏览资料当前未保持 X 登录,不能把之前未核实的发送动作记为发布,也不重复提交 |
| Reddit | 不发布 | 主动跳过 | 昨日内容曾被移除,今天没有匹配且规则明确的新社区内容 |
| GitHub | 不更新 | 主动跳过 | 今日为远程动态主题上新,没有新的 Release 或可验证技术变更,不制造无意义公告 |

### 有效做法与下一次假设

- 四张成品先完成“生成、上传、公开、清单可见、网页应用”五步验证,再选主推,避免把仅有图片的草稿当作上新。
- 小红书只沉淀人工发布素材包;标题以主关键词收束,话题必须在用户发布时从平台候选中逐个选择。
- X 发布完成的最低证据是公开个人页出现最新帖子及独立状态链接;仅看到编辑器或点击按钮都不算发布。
- `moonsea.kevinsu.xyz` 已完成 CNAME 与验证记录配置,Sites 绑定和 HTTPS 均为 active;后续将把标准网址、sitemap 与分享链接迁移到新域名,并与月海助手的网页控制来源一起随版本发布,避免“网页能开、应用按钮失效”。
2 changes: 1 addition & 1 deletion docs/wiki/Home.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## 开始使用

1. 打开[月海主题官网](https://moonsea-codex-theme.suguowen5.chatgpt.site)。
1. 打开[月海主题官网](https://moonsea.kevinsu.xyz)。
2. 点击“下载”,网站会自动识别 Windows 或 macOS。
3. 完成安装并打开“Codex 月海版”。
4. 回到官网主题墙,选择壁纸并点击应用。
Expand Down
2 changes: 1 addition & 1 deletion docs/wiki/_Sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
- [更新与卸载](更新与卸载)
- [常见问题](常见问题)

[打开月海主题官网](https://moonsea-codex-theme.suguowen5.chatgpt.site)
[打开月海主题官网](https://moonsea.kevinsu.xyz)
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "moonsea-codex-theme",
"version": "1.5.9",
"version": "1.5.10",
"description": "通过本地助手即时切换 Codex 免费渐变壁纸与 Pro 精选壁纸",
"type": "module",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion scripts/ci/probe-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ set -euo pipefail

release_version="${1:?用法:probe-release.sh <version>}"
repository="${GITHUB_REPOSITORY:-413162826/moonsea-codex-theme}"
site_url="${MOONSEA_SITE_URL:-https://moonsea-codex-theme.suguowen5.chatgpt.site}"
site_url="${MOONSEA_SITE_URL:-https://moonsea.kevinsu.xyz}"
manifest_url="https://github.com/$repository/releases/latest/download/update.json"
workbuddy_manifest_url="https://github.com/$repository/releases/latest/download/update-workbuddy.json"
temp_root="$(mktemp -d)"
Expand Down
2 changes: 1 addition & 1 deletion scripts/sync-wallpapers.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const remoteProThemes = PRO_THEMES.map((theme) => {
contentType: "image/png",
sha256: crypto.createHash("sha256").update(bytes).digest("hex"),
size: bytes.length,
url: `https://moonsea-codex-theme.suguowen5.chatgpt.site/theme-assets/${file}`,
url: `https://moonsea.kevinsu.xyz/theme-assets/${file}`,
},
};
});
Expand Down
2 changes: 1 addition & 1 deletion site/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ function updateCardActions() {
}

function configureDownload() {
elements.downloadLink.href = "https://moonsea-codex-theme.suguowen5.chatgpt.site/download";
elements.downloadLink.href = "https://moonsea.kevinsu.xyz/download";
elements.downloadLabel.textContent = "下载";
}

Expand Down
2 changes: 1 addition & 1 deletion site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
</span>
<button class="retry-button" id="retry-button" type="button">重试</button>
</div>
<a class="download-link" id="download-link" href="https://moonsea-codex-theme.suguowen5.chatgpt.site/download">
<a class="download-link" id="download-link" href="https://moonsea.kevinsu.xyz/download">
<span id="download-label">下载</span>
</a>
</div>
Expand Down
4 changes: 2 additions & 2 deletions site/theme-catalog-v1.json
Original file line number Diff line number Diff line change
Expand Up @@ -1019,7 +1019,7 @@
"contentType": "image/png",
"sha256": "e9d3edaf05dd7229fe5783310a03780725405518f914f1b5eaff16953c54ac85",
"size": 1146286,
"url": "https://moonsea-codex-theme.suguowen5.chatgpt.site/theme-assets/tide-dragon-realm.png"
"url": "https://moonsea.kevinsu.xyz/theme-assets/tide-dragon-realm.png"
}
},
{
Expand Down Expand Up @@ -1080,7 +1080,7 @@
"contentType": "image/png",
"sha256": "01a2e405006eda44fb8e6bcd801e64b16ba0d1cd91724ec4a02de87b534fe734",
"size": 1867778,
"url": "https://moonsea-codex-theme.suguowen5.chatgpt.site/theme-assets/moonlit-silent.png"
"url": "https://moonsea.kevinsu.xyz/theme-assets/moonlit-silent.png"
}
}
]
Expand Down
7 changes: 5 additions & 2 deletions src/manager-core.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ export const MANAGER_PORT = Number.parseInt(process.env.MOONSEA_MANAGER_PORT ??
if (!Number.isInteger(MANAGER_PORT) || MANAGER_PORT < 1 || MANAGER_PORT > 65535) {
throw new Error("月海助手端口无效");
}
export const PUBLIC_SITE_ORIGIN = "https://moonsea-codex-theme.suguowen5.chatgpt.site";
export const PUBLIC_SITE_ORIGIN = "https://moonsea.kevinsu.xyz";
export const LEGACY_SITE_ORIGINS = new Set([
"https://moonsea-codex-theme.suguowen5.chatgpt.site",
]);

// 客户端身份:codex(默认)或 workbuddy。WorkBuddy 通过环境变量注入,
// 其官方应用包名、调试端口与主题桥名由对应安装包/启动脚本提供。
Expand Down Expand Up @@ -39,7 +42,7 @@ const MIME_TYPES = new Map([
export function isAllowedOrigin(origin) {
if (!origin) return true;
if (LOCAL_ORIGINS.has(origin)) return true;
return origin === PUBLIC_SITE_ORIGIN;
return origin === PUBLIC_SITE_ORIGIN || LEGACY_SITE_ORIGINS.has(origin);
}

export function isLocalAdminOrigin(origin) {
Expand Down
2 changes: 1 addition & 1 deletion src/telemetry-service.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import fs from "node:fs";
import path from "node:path";
import { randomUUID } from "node:crypto";

export const TELEMETRY_ENDPOINT = "https://moonsea-codex-theme.suguowen5.chatgpt.site/api/telemetry";
export const TELEMETRY_ENDPOINT = "https://moonsea.kevinsu.xyz/api/telemetry";
export const TELEMETRY_INTERVAL_MS = 5 * 60 * 1000;
export const TELEMETRY_RETRY_MS = 5 * 60 * 1000;

Expand Down
2 changes: 1 addition & 1 deletion src/theme-delivery-service.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import fs from "node:fs";
import path from "node:path";

export const DEFAULT_THEME_MANIFEST_URL =
"https://moonsea-codex-theme.suguowen5.chatgpt.site/theme-catalog-v1.json";
"https://moonsea.kevinsu.xyz/theme-catalog-v1.json";

const MAX_THEME_ASSET_SIZE = 12 * 1024 * 1024;
const THEME_ID = /^[a-z0-9-]+$/;
Expand Down
2 changes: 1 addition & 1 deletion src/version.mjs
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const APP_VERSION = "1.5.9";
export const APP_VERSION = "1.5.10";
5 changes: 3 additions & 2 deletions tests/manager.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ test("WorkBuddy 助手只连接 renderer 主页面和固定主题桥", () => {

test("本地助手只接受官网和本机页面", () => {
assert.equal(isAllowedOrigin(PUBLIC_SITE_ORIGIN), true);
assert.equal(isAllowedOrigin("https://moonsea-codex-theme.suguowen5.chatgpt.site"), true);
assert.equal(isAllowedOrigin("http://127.0.0.1:17321"), true);
assert.equal(isAllowedOrigin("app://-"), true);
assert.equal(isAllowedOrigin("https://example.com"), false);
Expand Down Expand Up @@ -468,7 +469,7 @@ test("壁纸目录同时生成官网预览与安装资源", () => {
assert.equal(theme.asset.contentType, "image/png");
assert.equal(
theme.asset.url,
`https://moonsea-codex-theme.suguowen5.chatgpt.site/theme-assets/${wallpaper.file}`,
`https://moonsea.kevinsu.xyz/theme-assets/${wallpaper.file}`,
);
assert.equal(Object.hasOwn(theme.runtime, "wallpaper"), false);
}
Expand All @@ -477,7 +478,7 @@ test("壁纸目录同时生成官网预览与安装资源", () => {
test("官网按系统直下安装包且入口使用通用命名", () => {
const website = fs.readFileSync(path.join(projectRoot, "site", "app.js"), "utf8");
const page = fs.readFileSync(path.join(projectRoot, "site", "index.html"), "utf8");
assert.match(website, /suguowen5\.chatgpt\.site\/download/);
assert.match(website, /moonsea\.kevinsu\.xyz\/download/);
assert.match(website, /downloadLabel\.textContent = "下载"/);
assert.doesNotMatch(website, /Moonsea-Codex-Windows|Moonsea-Codex-macOS/);
assert.match(page, />下载<\/span>/);
Expand Down
29 changes: 29 additions & 0 deletions web/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,31 @@ import "./globals.css";
import { SITE_NAME, SITE_URL } from "../lib/site";
import { PageViewTracker } from "./page-view-tracker";

const structuredData = {
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": `${SITE_URL}#organization`,
name: "月海主题实验室",
url: SITE_URL.toString(),
sameAs: [
"https://github.com/413162826/moonsea-codex-theme",
"https://x.com/HmafVj0nsz59334",
],
},
{
"@type": "WebSite",
"@id": `${SITE_URL}#website`,
url: SITE_URL.toString(),
name: "月海主题",
description: "免费主题,让 Codex / WorkBuddy 更沉浸。",
publisher: { "@id": `${SITE_URL}#organization` },
inLanguage: "zh-CN",
},
],
};

export const metadata: Metadata = {
metadataBase: SITE_URL,
title: {
Expand Down Expand Up @@ -34,6 +59,10 @@ export default function RootLayout({
return (
<html lang="zh-CN">
<body>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
<PageViewTracker />
{children}
</body>
Expand Down
6 changes: 4 additions & 2 deletions web/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import { ThemeBrowserLink } from "./theme-browser-link";
export const dynamic = "force-static";

export const metadata: Metadata = {
title: "Codex 壁纸与 WorkBuddy 主题",
description: "免费 Codex 壁纸、WorkBuddy 主题与月海助手,一键应用,保持安静、专注、氛围编程。",
alternates: { canonical: "/" },
openGraph: {
title: "免费主题,让 Codex / WorkBuddy 更沉浸",
description: "保持安静、专注、氛围编程。",
title: "Codex 壁纸与 WorkBuddy 主题|月海",
description: "免费主题,让 Codex / WorkBuddy 更沉浸。",
url: "/",
},
};
Expand Down
13 changes: 13 additions & 0 deletions web/app/themes/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,23 @@ export default async function ThemePage({ params }: ThemePageProps) {
const structuredData = {
"@context": "https://schema.org",
"@type": "CreativeWork",
"@id": new URL(`/themes/${theme.id}#theme`, SITE_URL).toString(),
name: theme.name,
description: theme.description,
isAccessibleForFree: true,
url: new URL(`/themes/${theme.id}`, SITE_URL).toString(),
creator: { "@id": `${SITE_URL}#organization` },
keywords: [
theme.name,
"Codex 壁纸",
"Codex 自定义主题",
"WorkBuddy 壁纸",
"月海主题",
],
...(theme.previewImage
? { image: new URL(theme.previewImage, SITE_URL).toString() }
: {}),
...(theme.createdAt ? { dateModified: theme.createdAt } : {}),
};

return (
Expand Down
4 changes: 2 additions & 2 deletions web/app/themes/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ export const dynamic = "force-static";

export const metadata: Metadata = {
title: "主题",
description: "浏览并应用月海渐变主题与 Pro 壁纸。",
description: "浏览并应用月海 Codex 壁纸、WorkBuddy 壁纸与免费主题,选择今天的工作氛围。",
alternates: { canonical: "/themes" },
openGraph: {
title: "月海主题墙",
description: "浏览免费渐变主题与 Pro 精选壁纸,选择今天的工作氛围。",
description: "浏览免费 Codex 主题、WorkBuddy 主题与精选壁纸,选择今天的工作氛围。",
url: "/themes",
},
};
Expand Down
22 changes: 22 additions & 0 deletions web/app/updates/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { Metadata } from "next";
import Image from "next/image";
import { SITE_URL } from "../../lib/site";
import { SITE_UPDATES } from "../../lib/site-updates";
import { SiteFooter, SiteHeader } from "../site-chrome";

Expand All @@ -16,11 +17,32 @@ export const metadata: Metadata = {
},
};

const structuredData = {
"@context": "https://schema.org",
"@type": "CollectionPage",
name: "更新日志",
description: "沿着月海的发布线,查看主题、壁纸、助手与网站体验的每一次更新。",
url: new URL("/updates", SITE_URL).toString(),
mainEntity: {
"@type": "ItemList",
itemListElement: SITE_UPDATES.map((update, index) => ({
"@type": "ListItem",
position: index + 1,
name: update.title,
url: new URL(`/updates#${update.id}`, SITE_URL).toString(),
})),
},
};

export default function UpdatesPage() {
return (
<div className="themes-shell updates-shell">
<SiteHeader />
<main className="updates-page">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
<header className="updates-hero">
<h1>更新日志</h1>
<p>记录功能更新、体验改进与每一张新壁纸。</p>
Expand Down
2 changes: 1 addition & 1 deletion web/lib/site.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export const SITE_URL = new URL("https://moonsea-codex-theme.suguowen5.chatgpt.site");
export const SITE_URL = new URL("https://moonsea.kevinsu.xyz");
export const SITE_NAME = "月海主题";
Loading