Canonical metadata registry for the five OpenFrame dev-center surfaces (Roadmap, Bug-fixes & Enhancements, Releases, Onboarding Guides, Help Center), co-locating all per-section values consumed by both the homepage navigator cards and destination page heroes. ## Key Components ### Filter Option Constants | Constant | Description | |---|---| | `ROADMAP_STATUS_OPTIONS` | `all` / `completed` / `in_progress` — roadmap status pills | | `DELIVERY_TASK_TYPE_OPTIONS` | `all` / `Bug` / `Request` — maps to ClickUp `custom_item_id` labels | | `TICKET_STATUS_OPTIONS` | `all` / `open` / `closed` — wire values accepted by `/api/chat/agent/find-ticket` | ### `OpenframeDevSection` Interface Defines the shape of each registry entry: | Field | Type | Purpose | |---|---|---| | `href` | `string` | Route path for nav cards and cross-links | | `icon` | `LucideIcon` | Icon component reference (not rendered at module load) | | `navigator` | `{ title, description }` | ~50-char teaser for homepage navigator cards | | `hero` | `{ title, description }` | ~120–150-char copy for destination page heroes | | `search` | `{ placeholder, paramKey } \| null` | Inline search bar config; `null` for onboarding | | `filter` | `{ label, paramKey, defaultValue, options } \| null` | Filter pill row config; `null` for onboarding | ### `OPENFRAME_DEV_SECTIONS` The central registry — a `const` object satisfying `Record` with five keys: `roadmap`, `delivery`, `releases`, `onboarding`, `tickets`. > **Important:** The `onboarding` entry has `search: null` and `filter: null`. Its route (`/onboarding-guides`) is owned by `OnboardingGuidesCatalogView`, not the shared `DevSectionView`. Embedders iterating the registry that don't host this route should filter it out. ### `OpenframeDevSectionKey` Derived type: `keyof typeof OPENFRAME_DEV_SECTIONS` — `"roadmap" | "delivery" | "releases" | "onboarding" | "tickets"`. ## Usage Example ```typescript import { OPENFRAME_DEV_SECTIONS, type OpenframeDevSectionKey, } from './openframe-dev-sections' // Render all homepage navigator cards (skip inert onboarding if route not hosted) const navSections = Object.values(OPENFRAME_DEV_SECTIONS).filter( (s) => s.href !== '/onboarding-guides' ) // Access a specific section by key const roadmap = OPENFRAME_DEV_SECTIONS['roadmap'] console.log(roadmap.hero.description) // "See what's in flight, what's planned, and what's up for community vote..." // Type-safe key usage function getSectionHref(key: OpenframeDevSectionKey): string { return OPENFRAME_DEV_SECTIONS[key].href } ``` **Source:** [`src/utils/openframe-dev-sections.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/utils/openframe-dev-sections.ts)