Skip to main content

CnFeaturesAndRoadmapView

Route-level container for the Features & Roadmap surface. Body is a card grid (Features OR Roadmap). Header carries three buttons: the view-toggle ("Show roadmap" / "Show features"), the info-sidebar toggle ("Show info" / "Hide info"), and the primary "+ Suggest feature" CTA. The info sidebar is a slide-in NcAppSidebar with three pitch sections: suggest a feature, tweak the app in OpenBuilt, and let an LLM ship the feature using the Conduction skill set. The admin-disabled empty state collapses everything to a single "disabled by administrator" notice.

When to use

Mount this as the page component for the /features-roadmap route (or whatever route name your host app registers). Pair with <CnFeaturesAndRoadmapLink> in your navigation. Features data is supplied as a prop — typically read at runtime from docs/features.json, which the org-wide Features Extract workflow stage regenerates from openspec/specs/ (see ADR-033).

The view defaults to Features. The view-toggle switches to Roadmap and back; the page title (Features / Roadmap) reflects the active view. The sidebar starts closed; the info toggle opens it as a right-edge slide-in panel. Roadmap cards are fully clickable — anywhere on the card opens the corresponding GitHub issue in a new tab.

Props

PropTypeRequiredNotes
repoStringYes<owner>/<repo> slug of the app's GitHub repository. Passed through to CnRoadmapTab and CnSuggestFeatureModal.
featuresArrayYesBuild-time feature manifest — array of {slug, title, summary, docsUrl} objects rendered by CnFeaturesTab.
disabledBooleanNoWhen true, the view collapses to a single "disabled by your administrator" empty state.
openbuiltUrlStringNoOverride the OpenBuilt sidebar CTA target. Pass an absolute URL or a Nextcloud-relative path. Defaults to the in-instance OpenBuilt route at /apps/openbuilt (resolved via generateUrl).
llmSkillsUrlStringNoOverride the LLM-skills sidebar CTA target. Defaults to https://docs.conduction.nl/ai-skills.

Manifest usage

The library's roadmap page type wires this view automatically. One manifest entry replaces the per-app wrapper + customComponents.js registration + type: "custom" declaration the older pattern required:

{
"id": "FeaturesRoadmap",
"route": "/features-roadmap",
"type": "roadmap",
"title": "Features & roadmap",
"config": {
"repo": "ConductionNL/<appid>",
"features": [],
"disabled": false
}
}

config.repo, config.features, and config.disabled are forwarded verbatim as props. Per-app loadState resolution of either repo or features (for admin-configurable / build-extracted values) is the consumer's responsibility — supply the resolved values through config.* before passing the manifest to CnAppRoot (e.g. mutate the bundled manifest in main.js).

Backend contract

The Roadmap view inside this component consumes GET /index.php/apps/openregister/api/github/issues?labels=enhancement,feature and the Suggest modal POSTs to the same endpoint. Full backend contract: openregister/openspec/changes/add-features-roadmap-menu/specs/github-issue-proxy/spec.md.

Reference

Props

PropTypeDefaultDescription
suggestUrlString''Optional override for the "Suggest a feature" CTA target.
documentationUrlString''Per-app documentation site URL shown in the docs info card.
appNameString''Human app name used in the feature-request copy.
appSlugString''App slug used to build the GitHub feature-request deep-link repo.
appStoreUrlString''Nextcloud app-store URL for the app.
featureRequestUrlString''Explicit feature-request URL override.
donateUrlString''Donation/support link.
supportUrlString''Support contact link.
founderNameString''Founder name shown in the personal-touch copy.
founderTitleString''Founder title/role shown alongside the name.