diff --git a/apps/marketing/src/content.config.ts b/apps/marketing/src/content.config.ts new file mode 100644 index 000000000..c16e06018 --- /dev/null +++ b/apps/marketing/src/content.config.ts @@ -0,0 +1,15 @@ +import { defineCollection, z } from "astro:content"; +import { glob } from "astro/loaders"; + +const roadmap = defineCollection({ + loader: glob({ pattern: "**/*.yaml", base: "./src/content/roadmap" }), + schema: z.object({ + title: z.string(), + description: z.string(), + status: z.enum(["shipped", "building", "next"]), + date: z.string().optional(), // e.g. "Mar 2026", required for shipped + sortOrder: z.number(), // lower = shown first within status group + }), +}); + +export const collections = { roadmap }; diff --git a/apps/marketing/src/content/roadmap/api-server-web-ui.yaml b/apps/marketing/src/content/roadmap/api-server-web-ui.yaml new file mode 100644 index 000000000..992c61098 --- /dev/null +++ b/apps/marketing/src/content/roadmap/api-server-web-ui.yaml @@ -0,0 +1,5 @@ +title: API server & web UI +description: REST API with SSE event streaming and a React dashboard for managing workflows at scale. +status: shipped +date: Feb 2026 +sortOrder: 2 diff --git a/apps/marketing/src/content/roadmap/automatic-retrospectives.yaml b/apps/marketing/src/content/roadmap/automatic-retrospectives.yaml new file mode 100644 index 000000000..7876efa74 --- /dev/null +++ b/apps/marketing/src/content/roadmap/automatic-retrospectives.yaml @@ -0,0 +1,5 @@ +title: Automatic retrospectives +description: Each run generates a retro with cost, duration, files touched, and an LLM-written narrative. +status: shipped +date: Mar 2026 +sortOrder: 1 diff --git a/apps/marketing/src/content/roadmap/cloud-sandboxes.yaml b/apps/marketing/src/content/roadmap/cloud-sandboxes.yaml new file mode 100644 index 000000000..b1a947dcd --- /dev/null +++ b/apps/marketing/src/content/roadmap/cloud-sandboxes.yaml @@ -0,0 +1,5 @@ +title: Cloud sandboxes +description: Isolated VM execution environments with snapshot-based setup, network controls, and SSH access. +status: shipped +date: Jan 2026 +sortOrder: 3 diff --git a/apps/marketing/src/content/roadmap/core-workflow-engine.yaml b/apps/marketing/src/content/roadmap/core-workflow-engine.yaml new file mode 100644 index 000000000..cd144d724 --- /dev/null +++ b/apps/marketing/src/content/roadmap/core-workflow-engine.yaml @@ -0,0 +1,5 @@ +title: Core workflow engine +description: DOT graph parsing with branching, loops, parallel execution, and conditional routing. +status: shipped +date: May 2025 +sortOrder: 7 diff --git a/apps/marketing/src/content/roadmap/custom-tool-plugins.yaml b/apps/marketing/src/content/roadmap/custom-tool-plugins.yaml new file mode 100644 index 000000000..3c8c2208a --- /dev/null +++ b/apps/marketing/src/content/roadmap/custom-tool-plugins.yaml @@ -0,0 +1,4 @@ +title: Custom tool plugins +description: Extend agent capabilities with your own tool definitions. Package, share, and version tools independently of workflows. +status: next +sortOrder: 2 diff --git a/apps/marketing/src/content/roadmap/git-checkpointing.yaml b/apps/marketing/src/content/roadmap/git-checkpointing.yaml new file mode 100644 index 000000000..3d0e8e604 --- /dev/null +++ b/apps/marketing/src/content/roadmap/git-checkpointing.yaml @@ -0,0 +1,5 @@ +title: Git checkpointing & resume +description: Every stage commits to a Git branch with full metadata. Revert or resume from any checkpoint. +status: shipped +date: Nov 2025 +sortOrder: 4 diff --git a/apps/marketing/src/content/roadmap/human-in-the-loop.yaml b/apps/marketing/src/content/roadmap/human-in-the-loop.yaml new file mode 100644 index 000000000..336c0dfa3 --- /dev/null +++ b/apps/marketing/src/content/roadmap/human-in-the-loop.yaml @@ -0,0 +1,5 @@ +title: Human-in-the-loop +description: Approval gates pause for human decisions. Steer running agents mid-turn. Interview steps collect input. +status: shipped +date: Sep 2025 +sortOrder: 5 diff --git a/apps/marketing/src/content/roadmap/metrics-cost-dashboards.yaml b/apps/marketing/src/content/roadmap/metrics-cost-dashboards.yaml new file mode 100644 index 000000000..cdc5fab69 --- /dev/null +++ b/apps/marketing/src/content/roadmap/metrics-cost-dashboards.yaml @@ -0,0 +1,4 @@ +title: Metrics & cost dashboards +description: Real-time cost tracking, success rates, and performance trends across all runs. Set budgets, alerts, and optimization targets. +status: next +sortOrder: 3 diff --git a/apps/marketing/src/content/roadmap/multi-model-routing.yaml b/apps/marketing/src/content/roadmap/multi-model-routing.yaml new file mode 100644 index 000000000..b19f13a9b --- /dev/null +++ b/apps/marketing/src/content/roadmap/multi-model-routing.yaml @@ -0,0 +1,5 @@ +title: Multi-model routing +description: CSS-like model stylesheets assign providers per stage. Automatic fallback chains across providers. +status: shipped +date: Jul 2025 +sortOrder: 6 diff --git a/apps/marketing/src/content/roadmap/parallel-execution-scaling.yaml b/apps/marketing/src/content/roadmap/parallel-execution-scaling.yaml new file mode 100644 index 000000000..7961b7cd4 --- /dev/null +++ b/apps/marketing/src/content/roadmap/parallel-execution-scaling.yaml @@ -0,0 +1,4 @@ +title: Parallel execution scaling +description: Dynamic fan-out with resource-aware scheduling. Run dozens of sandboxes concurrently with automatic load balancing and cost caps. +status: building +sortOrder: 2 diff --git a/apps/marketing/src/content/roadmap/self-hosted-cloud.yaml b/apps/marketing/src/content/roadmap/self-hosted-cloud.yaml new file mode 100644 index 000000000..23f0e2d63 --- /dev/null +++ b/apps/marketing/src/content/roadmap/self-hosted-cloud.yaml @@ -0,0 +1,4 @@ +title: Self-hosted cloud +description: Deploy Fabro as a managed service in your own infrastructure. Kubernetes-native with horizontal scaling and multi-tenant isolation. +status: next +sortOrder: 4 diff --git a/apps/marketing/src/content/roadmap/team-collaboration.yaml b/apps/marketing/src/content/roadmap/team-collaboration.yaml new file mode 100644 index 000000000..9a4fdf35a --- /dev/null +++ b/apps/marketing/src/content/roadmap/team-collaboration.yaml @@ -0,0 +1,4 @@ +title: Team collaboration +description: Shared workflow runs with role-based access. Assign reviewers, track ownership, and coordinate across teams. +status: next +sortOrder: 1 diff --git a/apps/marketing/src/content/roadmap/workflow-marketplace.yaml b/apps/marketing/src/content/roadmap/workflow-marketplace.yaml new file mode 100644 index 000000000..6299ff062 --- /dev/null +++ b/apps/marketing/src/content/roadmap/workflow-marketplace.yaml @@ -0,0 +1,4 @@ +title: Workflow marketplace +description: Browse, fork, and publish community workflows. One-command install with dependency resolution and version pinning. +status: building +sortOrder: 1 diff --git a/apps/marketing/src/pages/roadmap.astro b/apps/marketing/src/pages/roadmap.astro index d6cb3728e..bf668b931 100644 --- a/apps/marketing/src/pages/roadmap.astro +++ b/apps/marketing/src/pages/roadmap.astro @@ -1,124 +1,35 @@ --- import Layout from "../layouts/Layout.astro"; +import { getCollection } from "astro:content"; -interface RoadmapItem { - title: string; - description: string; -} +const allItems = await getCollection("roadmap"); +const byStatus = (status: string) => + allItems + .filter((item) => item.data.status === status) + .sort((a, b) => a.data.sortOrder - b.data.sortOrder); -interface RoadmapSection { - label: string; - status: "shipped" | "building" | "next"; - items: RoadmapItem[]; -} +const shipped = byStatus("shipped"); +const SHIPPED_VISIBLE = 3; +const shippedVisible = shipped.slice(0, SHIPPED_VISIBLE); +const shippedHidden = shipped.slice(SHIPPED_VISIBLE); -const sections: RoadmapSection[] = [ - { - label: "Shipped", - status: "shipped", - items: [ - { - title: "Core workflow engine", - description: - "DOT graph parsing with branching, loops, parallel execution, and conditional routing. Deterministic, diffable, version-controlled.", - }, - { - title: "Multi-model routing", - description: - "CSS-like model stylesheets assign providers per stage by ID, class, or shape. Automatic fallback chains across Anthropic, OpenAI, and Gemini.", - }, - { - title: "Human-in-the-loop", - description: - "Hexagon-shaped approval gates pause for human decisions. Steer running agents mid-turn. Interview steps collect structured input.", - }, - { - title: "Git checkpointing & resume", - description: - "Every stage commits to a Git branch with full metadata. Revert, resume from any checkpoint, or trace every change back to the stage that made it.", - }, - { - title: "Cloud sandboxes", - description: - "Isolated VM execution environments with snapshot-based setup, network controls, and automatic cleanup. SSH in with fabro ssh.", - }, - { - title: "API server & web UI", - description: - "REST API with SSE event streaming and a React dashboard. Queue runs, track progress, and manage workflows at scale.", - }, - { - title: "Automatic retrospectives", - description: - "Each run generates a retro with cost, duration, files touched, and an LLM-written narrative. Workflows improve over time.", - }, - ], - }, - { - label: "Building", - status: "building", - items: [ - { - title: "Workflow marketplace", - description: - "Browse, fork, and publish community workflows. One-command install with dependency resolution and version pinning.", - }, - { - title: "Parallel execution scaling", - description: - "Dynamic fan-out with resource-aware scheduling. Run dozens of sandboxes concurrently with automatic load balancing and cost caps.", - }, - ], - }, - { - label: "Next", - status: "next", - items: [ - { - title: "Team collaboration", - description: - "Shared workflow runs with role-based access. Assign reviewers, track ownership, and coordinate across teams.", - }, - { - title: "Custom tool plugins", - description: - "Extend agent capabilities with your own tool definitions. Package, share, and version tools independently of workflows.", - }, - { - title: "Metrics & cost dashboards", - description: - "Real-time cost tracking, success rates, and performance trends across all runs. Set budgets, alerts, and optimization targets.", - }, - { - title: "Self-hosted cloud", - description: - "Deploy Fabro as a managed service in your own infrastructure. Kubernetes-native with horizontal scaling and multi-tenant isolation.", - }, - ], - }, +const sections = [ + { label: "Building", status: "building" as const, items: byStatus("building") }, + { label: "Next", status: "next" as const, items: byStatus("next") }, ]; const statusConfig = { - shipped: { - dot: "bg-mint", - border: "via-mint/30", - label: "text-mint", - track: "bg-mint/20", - icon: "mint", - }, building: { dot: "bg-amber", border: "via-amber/30", label: "text-amber", track: "bg-amber/20", - icon: "amber", }, next: { dot: "bg-teal-500", border: "via-teal-500/30", label: "text-teal-500", track: "bg-teal-500/20", - icon: "teal", }, }; --- @@ -127,24 +38,51 @@ const statusConfig = {