Skip to content
This repository was archived by the owner on May 29, 2026. It is now read-only.
This repository was archived by the owner on May 29, 2026. It is now read-only.

Convert OpenBuilt's own shell to Tier-4 (manifest.json + CnAppRoot + customComponents) #17

Description

@rubenvdlinde

Why

OpenBuilt currently hand-rolls its own app shell — src/App.vue (NcContent + MainMenu.vue + vue-router + router-view) and a bespoke src/router/index.js. Per ADR-024 new apps should adopt at least Tier 1 from inception: a src/manifest.json rendered by CnAppRoot / CnPageRenderer / useAppManifest, with a small src/customComponents.js registry for the views that don't map to a built-in page type. decidesk is the Tier-4 reference (decidesk/src/{manifest.json,customComponents.js,App.vue,main.js}).

Converting OpenBuilt's shell:

Plan (mirror decidesk)

  1. src/manifest.json{$schema, version, dependencies:["openregister"], menu[], pages[]}. Pages (all type: "custom" — they are tooling UIs, not generic register CRUD):
    • Dashboard /DashboardView
    • VirtualApps /applications (+ VirtualAppDetail /applications/:slug) → ApplicationsView
    • Schemas /builder/:slug/schemas (+ SchemaDetail /builder/:slug/schemas/:schemaId) → SchemaDesignerView
    • Templates /templatesTemplatesView (from spec(openbuilt-templates-marketplace): starter template gallery + clone-from-template (#8/9) #8)
    • Exports /exportsExportJobsView
    • BuilderHost /builder/:slug/:pathMatch(.*)?BuilderHostView (declare last — wildcard)
    • menu: Dashboard / Virtual apps / Schemas / Templates / Exports / Documentation(href, section:settings). Admin settings stay server-side (AdminSettings.php); no in-app admin route (ADR-004 / hydra-gate-admin-router).
  2. src/customComponents.js{ DashboardView, ApplicationsView, SchemaDesignerView, TemplatesView, ExportJobsView, BuilderHostView } mapping to the existing src/views/*.vue (renamed/wrapped as needed). feat(openspec): openbuilt-page-editor — visual manifest designer (chain spec #5) #4's PageDesigner.vue becomes a "Design" tab inside ApplicationsView (or its own type:custom page); feat(openspec): openbuilt-page-editor — visual manifest designer (chain spec #5) #4's sub-editors live in components/page-editor/.
  3. src/App.vue — thin wrapper: <CnAppRoot :manifest :custom-components :page-types app-id="openbuilt" :translate :permissions>. Delete navigation/MainMenu.vue.
  4. src/main.js — build vue-router config from manifest.pages (decidesk's routesFromManifest), registerIcons(), registerTranslations(), fire-and-forget loadTranslations, mount App.vue with manifest/customComponents/pageTypes props.
  5. Delete src/router/index.js (routes now derived from the manifest).
  6. Update Vitest/Playwright suites; run quality gates.

Reconciliation tasks folded in

Notes

  • Backend is already largely declarative: lib/Settings/openbuilt_register.json uses x-openregister-lifecycle (ADR-031); ApplicationsController (runtime manifest API / listMine / clone / diff / export) is genuinely needed; ApplicationVersionSnapshotListener / DeepLinkRegistrationListener are documented ADR-031 §Exceptions(1) fallbacks. This issue is about the frontend shell.
  • Do this via the opsx flow (opsx-new openbuilt-adopt-manifestopsx-ffopsx-applyopsx-verify), not ad-hoc, so it carries ADR-022/024/032 in the loop.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions