Skip to content

Harvested moss interface bank

These files are real moss interface, not drawings of it. They are generated from the desktop app's own code, so the landing page and the documentation show what the app shows. Reuse them before drawing a substitute interface, and never edit them by hand: a hand edit is lost at the next refresh.

FileWhat it isWho uses it
app-editor.htmlThe app's own editor, booted end to end with only the native seams mocked. Opening files, saving, menus, templates and versions are the app's code, running against an in-memory project per locale (?lang=en a William Blake project, ?lang=zh-hant / ?lang=zh-hans a 朱耷 project).The documentation demo (demo/) and the two fallback stills below
editor.htmlA hand-assembled editor panel built from the app's components, with a typing driverThe landing page
shell.htmlThe preview and publish shellThe landing page
mark.svgThe moss mark the shell drawsshell.html only
demo/<moss-editor-demo> and <moss-demo-marker>: the one editor a documentation page shows, and the markers that hand it a sceneDocumentation pages with a #scene= link; see demo/README.md
../assets/guides/editor-ui-source.png, choose-page-source.pngStills of app-editor.html, shown where JavaScript is offMeet the editor, in all three languages

capture-manifest.json records which commit of the desktop app each harvested document came from: app_editor_source for app-editor.html, and harvest_commit with captured_on for the landing pair.

Refresh

One command, run in the desktop app repository on a clean checkout of a pushed commit:

pnpm harvest:docs -- --site /path/to/this/repo/site

It builds the three documents from the app's current code, drives the result through the harvest's own end-to-end check in Chromium and WebKit, and only then copies app-editor.html here and writes its commit into capture-manifest.json. It then runs this repository's docs:after-harvest script (see package.json), which retakes the two stills from the new document with scripts/capture-editor-guide-assets.mjs and runs the scene checks that need no browser. Add --landing to copy editor.html and shell.html as well; that is a landing-page change, so run node scripts/check-landing-all.mjs before keeping it.

Then prove the pages a reader gets, against a real build:

target/debug/moss-cli build site
node scripts/check-docs-demo.mjs http://127.0.0.1:PORT/   # every scene plays, in both engines
node scripts/check-docs-media.mjs                          # every image, video and demo on the Get Started pages

check-docs-demo.mjs needs the build served (moss-cli build site --serve prints the address); check-docs-media.mjs serves the build itself when given no address. Both load Playwright from PLAYWRIGHT_MODULE when it is not installed here.

When a refresh breaks a scene, the app renamed or moved something a scene clicks. The fix is one line in demo/surfaces/editor.js, which is the only file that knows the harvested document's selectors; the scenes, the stills and the checks all resolve targets through it.

What the harvest is not