Open the Studio / 打开工作台
?studio=1, for example:
localhost, 127.0.0.0/8, or ::1) and are not included in a
production build. A deployed ?studio=1 page may preview or export, but it
cannot write repository files.
The three editor sections / 三个编辑区域
Profile / 个人资料
Edit localized identity and opening-screen copy, including display name, logo initial, subtitle, eyebrow, title, description, quote, city, and author timezone.profile.timezone is the author’s clock, not the visitor’s device timezone.
Use an IANA zone such as Asia/Shanghai when daylight-saving behavior matters,
or a fixed offset such as GMT+8.
The mirror/About chapter also supports:
- a profile portrait uploaded by drag-and-drop or file picker;
- localized alternative text;
- the About chapter introduction as the personal biography; and
- up to 12 social links with platform-specific icons and optional localized labels.
Digital assets / 数字资产
Choose an enabled or disabled built-in chapter and edit its bilingual label, title, trait, teaser, introduction, status, last-updated value, note, metrics, and content cards. Cards share one schema:
Each card may be standard, wide, or full width and can be reordered. A chapter
may contain up to 24 cards.
For photography, every configured photo remains visible. Selecting a photo
opens its instant-photo dialog with description text. Spotlight does not
hide the other photos; it additionally gives the selected photo a large feature
position and dedicated editorial introduction column.
Scene layout / 场景布局
The scene editor can:- move, rotate, and scale built-in objects;
- disable and later reactivate a built-in object;
- attach or remove a GLB visual replacement while preserving the native object;
- create a decorative custom asset with no content page;
- create an interactive custom asset with localized cards and a deep link; and
- upload and place a custom GLB.
- Plane for X/Z;
- Height for Y; and
- Heading for rotation around Y. Hold Shift to snap to 15°.
Draft, preview, and project files / 草稿、预览与项目文件
The word “draft” refers to:?studio=1. Normal /
pages ignore it and always render source-controlled published content.
Use Reset draft when you want the Studio to discard this browser copy and
return to the project version. Reset does not alter Git history.
Text fields keep the raw value while you type, including a trailing space.
Import and project save validate and normalize the complete document.
Media and GLB lifecycle / 媒体与 GLB 生命周期
Images are validated and written immediately:
The JSON stores only same-origin public paths, never base64 data. Image uploads
do not use the GLB staging transaction, so inspect
git status and remove
unwanted, unreferenced image files before committing.
GLBs use a safer two-phase lifecycle:
- Upload validation writes the file to
.content-studio-cache/models/<uuid>.glb. - Preview uses a future-looking
/uploads/models/<uuid>.glbURL. The local server resolves it from the cache, and an in-memory prepared buffer can make the first preview faster. - Removing or replacing the model requests immediate staged-file cleanup.
- Save to project promotes only models referenced by the final document to
public/uploads/models/. - The save removes previously published GLBs no longer referenced and clears all remaining staged GLBs.
What Save to project writes / 保存产生什么
The browser normalizes the document and sends a local-onlyPUT request to
/__content-studio/save. The development plugin validates it, resolves the
final model-reference set, and performs one save transaction:
site-content.json contains profile overrides, chapter overrides, media,
social links, and the scene document. scene-config.ts contains only the
normalized scene branch and is bundled as the production scene authority.
Tests require the two scene values to be identical.
JSON Export, Copy, and Import operate on the document only. They
neither transport binary uploads nor generate
app/generated/scene-config.ts.
They are not substitutes for a successful project save.Runtime load order / 页面如何读取
On a normal route:- built-in defaults come from
app/portfolio-data.ts,app/portfolio-data-en.ts, andapp/content-config.ts; - the application fetches
public/content/site-content.json; - profile, chapter, and media overrides merge with the defaults;
- the bundled
app/generated/scene-config.tsreplaces the JSON scene branch; - active built-ins and custom assets are rendered.
?studio=1, the same published baseline loads first. A valid browser draft
may then replace it for authoring preview.
Commit and publish / 提交与发布
Saving changes local files; it does not create a Git commit or deploy.git status. The push starts the repository
GitHub Actions workflow. It installs locked dependencies, typechecks, lints,
builds, runs the smoke tests—including scene JSON/generated-source
consistency—and deploys the Cloudflare Worker only after quality succeeds.
See Scene layout, GLB
models, and GitHub
Actions.