app-publishing
Turn a verified reference application into a consistent public project without
hand-maintaining a second copy of its facts. The app manifest owns runtime and
capability truth, the portable case study owns narrative and media metadata,
and the website composes both into overview, live, and guide surfaces.
When to use this skill
- Adding a finished application to the Robium application/demo catalogs.
- Creating or revising an app-backed article or technical guide.
- Replacing one-off demo pages with shared project identity, navigation, and
reusable live-workspace components.
- Cross-references: use
live-demo for session allocation, gateway claims,
readiness, capacity, shutdown, or viewer transport; use testing to decide
whether the app is ready to publish; use skill-author only when changing
this skill rather than publishing an application.
Key directives
- Delegation posture: embed + links. Embed Robium's repository-to-website
publishing contract here; link to Hugging Face Spaces and Gradio for the
upstream repo-backed project and embedded-app patterns.
- One app, one identity, multiple surfaces. Overview, live workspace,
guide, cards, metadata, and source links share the app ID and a common
project header. They may have different routes and layouts; they must not
look like unrelated products.
- Facts stay with their owner. Runtime, requirements, tags,
hosted capability, startup estimate, and session limits come from
robium-app.yaml. Article title, summary, author, hero, social image, and
prose come from the app's portable case study. Site-owned publication state
says what robium.ai currently exposes. Do not create a parallel page
manifest that repeats those values.
- Working surfaces lead with the work. A live route opens on the
controls, boot state, logs, or viewer. Marketing explanation belongs in the
overview or guide, not ahead of the primary interaction.
- Publishing never weakens the evidence bar. Media and performance
claims come from real runs; simulations, fixtures, recorded evidence, and
live hardware are labeled honestly. A polished card is not evidence.
Quick start
- Confirm the app's normal smoke test and hosted
make demo-smoke (when it has
a hosted demo) are green.
- Complete the app's
robium-app.yaml and docs/case-study.md. Keep article
media below the app's assets/ directory and reference it with portable
relative Markdown paths. robium-ai app new ... --from ... creates an
ID-safe case-study starter so copied application prose cannot leak into the
new project; replace its TODOs only with verified results.
- Validate the application metadata with the existing CLI:
npx robium-ai app validate
- Build the website against the sibling apps checkout, then run its smoke:
ROBIUM_APPS_DIR=../robium-apps npm run build
make smoke
- Inspect the generated overview, live, and guide routes locally. Deployment,
paid capacity, image publication, and production resource changes remain
separate explicit actions.
Decision guidance
Choose the surface without duplicating the project.
| Visitor intent |
Surface |
Default first viewport |
| Understand the application |
Overview |
Real preview, outcome, availability, local and live paths |
| Try it |
Live |
Session state or working viewer, with guide/source links nearby |
| Learn or reproduce it |
Guide |
Article title and prose inside the same project identity |
| Evaluate the catalog |
Card |
Name, outcome, maturity, requirements, availability |
Choose shared code vs an app adapter. Shared project identity, navigation,
try-live/run-local cards, lifecycle state, boot log, stop/restart behavior, and
iframe framing belong in reusable components. App-specific evidence or a
special viewer belongs in a small adapter or optional section. Promote a
pattern only after a second consumer exists; do not force genuinely different
robot interactions through a lowest-common-denominator UI.
Choose metadata ownership. See references/publication-contract.md. If a
field changes when the application changes, it belongs with the application.
If it changes when editorial framing changes, it belongs in case-study
frontmatter. If it changes because production capacity is paused or a page is
not yet approved, it belongs to the site's publication registry.
Choose a live integration. Reuse the hosted workspace shell and provide a
viewer adapter for Gradio, Lichtblick/Foxglove, or a custom capability URL.
The publishing layer renders the shell; the live-demo skill owns the
allocation and gateway state machine beneath it.
Platform gotchas
- Committed fallbacks can hide stale source. The website retains generated
article/app data so it can build without a sibling checkout. A publication
check must also build with
ROBIUM_APPS_DIR pointed at the current apps repo,
or stale fallbacks can pass locally.
- Hosted capability is not current availability.
demo.hosted: true means
the app supports the hosted contract. It does not mean paid capacity or a
production image is enabled today. Render current availability from the
site-owned publication state.
- Never allocate on catalog or overview load. Cards and overview pages use
static facts. A live instance starts only after an explicit visitor action;
otherwise casual page views can create cost.
- Embedded apps keep their own styling boundary. Gradio documents web
components and iframes as supported embed shapes. Parent CSS selectors must
not leak into the embedded UI; scope site styles to the surrounding shell.
Customization
- A project may use a light editorial overview and a dark live canvas while
retaining the same typography, accent, border, status, and navigation
language. Visual consistency does not require making a robot viewer look
like article prose.
- A project without hosted capacity still gets an overview and guide. Keep the
Live tab visibly unavailable or route it to recorded proof rather than
removing the project identity.
- An evidence-heavy application can add a project-specific section below the
shared overview. Its evidence references stay in the app or an immutable
dataset; the website contains presentation code, not copied result truth.
References
references/publication-contract.md: source ownership, generated surfaces,
article frontmatter, and the reusable project-shell boundary.
- Upstream: Hugging Face Spaces overview
(repo-backed app/source pattern), Hugging Face Spaces configuration
(repository metadata), and Gradio sharing and embedding
(web component/iframe integration), checked 2026-08-28. Sibling skills:
live-demo (runtime lifecycle), testing (publication entry bar), and
skill-author (skill changes).
Changelog
- 1.0.0 (2026-08-28): created from the robium.ai AppRecord/project-shell and
shared ACT/PushT live-workspace implementation; separates public project and
article composition from live-demo runtime lifecycle and adds an ID-safe
case-study starter to app scaffolding.
1---2name: app-publishing-23description: Post-build editorial publication for an already implemented and smoke-tested robium reference application: compose its catalog entry, overview, working surface, article/guide, source links, media, and metadata from repository-owned facts. Use when: 'publish this finished application', 'add this tested project to robium.ai', 'unify this existing project's public pages', or 'turn this verified project into an article and showcase'. Load only after the application smoke passes. Not for: planning, choosing a stack, coding, or starting robot behavior (architect), nor gateway, orchestrator, or cloud runtime mechanics (live-demo).4---56# app-publishing78Turn a verified reference application into a consistent public project without9hand-maintaining a second copy of its facts. The app manifest owns runtime and10capability truth, the portable case study owns narrative and media metadata,11and the website composes both into overview, live, and guide surfaces.1213## When to use this skill1415- Adding a finished application to the Robium application/demo catalogs.16- Creating or revising an app-backed article or technical guide.17- Replacing one-off demo pages with shared project identity, navigation, and18 reusable live-workspace components.19- Cross-references: use `live-demo` for session allocation, gateway claims,20 readiness, capacity, shutdown, or viewer transport; use `testing` to decide21 whether the app is ready to publish; use `skill-author` only when changing22 this skill rather than publishing an application.2324## Key directives2526- **Delegation posture: embed + links.** Embed Robium's repository-to-website27 publishing contract here; link to Hugging Face Spaces and Gradio for the28 upstream repo-backed project and embedded-app patterns.29- **One app, one identity, multiple surfaces.** <!-- id: one-app-one-public-identity --> Overview, live workspace,30 guide, cards, metadata, and source links share the app ID and a common31 project header. They may have different routes and layouts; they must not32 look like unrelated products.33- **Facts stay with their owner.** <!-- id: publishing-facts-stay-with-owner --> Runtime, requirements, tags,34 hosted capability, startup estimate, and session limits come from35 `robium-app.yaml`. Article title, summary, author, hero, social image, and36 prose come from the app's portable case study. Site-owned publication state37 says what robium.ai currently exposes. Do not create a parallel page38 manifest that repeats those values.39- **Working surfaces lead with the work.** <!-- id: live-surface-leads-with-work --> A live route opens on the40 controls, boot state, logs, or viewer. Marketing explanation belongs in the41 overview or guide, not ahead of the primary interaction.42- **Publishing never weakens the evidence bar.** <!-- id: publishing-keeps-evidence-bar --> Media and performance43 claims come from real runs; simulations, fixtures, recorded evidence, and44 live hardware are labeled honestly. A polished card is not evidence.4546## Quick start47481. Confirm the app's normal smoke test and hosted `make demo-smoke` (when it has49 a hosted demo) are green.502. Complete the app's `robium-app.yaml` and `docs/case-study.md`. Keep article51 media below the app's `assets/` directory and reference it with portable52 relative Markdown paths. `robium-ai app new ... --from ...` creates an53 ID-safe case-study starter so copied application prose cannot leak into the54 new project; replace its TODOs only with verified results.553. Validate the application metadata with the existing CLI:56 ```bash57 npx robium-ai app validate58 ```594. Build the website against the sibling apps checkout, then run its smoke:60 ```bash61 ROBIUM_APPS_DIR=../robium-apps npm run build62 make smoke63 ```645. Inspect the generated overview, live, and guide routes locally. Deployment,65 paid capacity, image publication, and production resource changes remain66 separate explicit actions.6768## Decision guidance6970**Choose the surface without duplicating the project.**7172| Visitor intent | Surface | Default first viewport |73| --- | --- | --- |74| Understand the application | Overview | Real preview, outcome, availability, local and live paths |75| Try it | Live | Session state or working viewer, with guide/source links nearby |76| Learn or reproduce it | Guide | Article title and prose inside the same project identity |77| Evaluate the catalog | Card | Name, outcome, maturity, requirements, availability |7879**Choose shared code vs an app adapter.** Shared project identity, navigation,80try-live/run-local cards, lifecycle state, boot log, stop/restart behavior, and81iframe framing belong in reusable components. App-specific evidence or a82special viewer belongs in a small adapter or optional section. Promote a83pattern only after a second consumer exists; do not force genuinely different84robot interactions through a lowest-common-denominator UI.8586**Choose metadata ownership.** See `references/publication-contract.md`. If a87field changes when the application changes, it belongs with the application.88If it changes when editorial framing changes, it belongs in case-study89frontmatter. If it changes because production capacity is paused or a page is90not yet approved, it belongs to the site's publication registry.9192**Choose a live integration.** Reuse the hosted workspace shell and provide a93viewer adapter for Gradio, Lichtblick/Foxglove, or a custom capability URL.94The publishing layer renders the shell; the `live-demo` skill owns the95allocation and gateway state machine beneath it.9697## Platform gotchas9899- **Committed fallbacks can hide stale source.** The website retains generated100 article/app data so it can build without a sibling checkout. A publication101 check must also build with `ROBIUM_APPS_DIR` pointed at the current apps repo,102 or stale fallbacks can pass locally.103- **Hosted capability is not current availability.** `demo.hosted: true` means104 the app supports the hosted contract. It does not mean paid capacity or a105 production image is enabled today. Render current availability from the106 site-owned publication state.107- **Never allocate on catalog or overview load.** Cards and overview pages use108 static facts. A live instance starts only after an explicit visitor action;109 otherwise casual page views can create cost.110- **Embedded apps keep their own styling boundary.** Gradio documents web111 components and iframes as supported embed shapes. Parent CSS selectors must112 not leak into the embedded UI; scope site styles to the surrounding shell.113114## Customization115116- A project may use a light editorial overview and a dark live canvas while117 retaining the same typography, accent, border, status, and navigation118 language. Visual consistency does not require making a robot viewer look119 like article prose.120- A project without hosted capacity still gets an overview and guide. Keep the121 Live tab visibly unavailable or route it to recorded proof rather than122 removing the project identity.123- An evidence-heavy application can add a project-specific section below the124 shared overview. Its evidence references stay in the app or an immutable125 dataset; the website contains presentation code, not copied result truth.126127## References128129- `references/publication-contract.md`: source ownership, generated surfaces,130 article frontmatter, and the reusable project-shell boundary.131- Upstream: [Hugging Face Spaces overview](https://huggingface.co/docs/hub/spaces-overview)132 (repo-backed app/source pattern), [Hugging Face Spaces configuration](https://huggingface.co/docs/hub/spaces-config-reference)133 (repository metadata), and [Gradio sharing and embedding](https://www.gradio.app/guides/sharing-your-app)134 (web component/iframe integration), checked 2026-08-28. Sibling skills:135 `live-demo` (runtime lifecycle), `testing` (publication entry bar), and136 `skill-author` (skill changes).137138## Changelog139140<!-- One dated line per battle-tested change, added by skill-author hardening sessions. -->141142- 1.0.0 (2026-08-28): created from the robium.ai AppRecord/project-shell and143 shared ACT/PushT live-workspace implementation; separates public project and144 article composition from live-demo runtime lifecycle and adds an ID-safe145 case-study starter to app scaffolding.