"use client"; import { ModelContextProtocolIcon, SlackIcon } from "@openstatus/icons"; import { ArrowUpRight, Bell, BookOpen, Braces, FileText, Globe, Palette, ScanEye, ScrollText, ServerCog, Shield, Terminal, UserPlus, Users, Zap, } from "lucide-react"; import Link from "next/link"; import { QuestionForm } from "@/components/forms/onboarding/question"; import { OnboardingResultHeading } from "@/components/layout/onboarding-layout"; import { cn } from "@/lib/utils"; type FeatureLinkItem = { name: string; href: string; icon: React.ComponentType<{ className?: string }>; external?: boolean; }; const DOCS = "https://www.openstatus.dev/docs"; const WEB = "https://www.openstatus.dev"; const FEATURE_CATEGORIES: { label: string; items: FeatureLinkItem[] }[] = [ { label: "Resources", items: [ { name: "Docs", href: DOCS, icon: BookOpen, external: true }, { name: "Changelog", href: `${WEB}/changelog`, icon: ScrollText, external: true, }, { name: "Blog", href: `${WEB}/blog`, icon: FileText, external: true, }, ], }, { label: "Monitoring", items: [ { name: "OpenTelemetry", href: `${DOCS}/guides/how-to-export-metrics-to-otlp-endpoint`, icon: Zap, external: true, }, { name: "Private locations", href: `${DOCS}/tutorial/how-to-create-private-location`, icon: ServerCog, external: true, }, { name: "Notifications", href: `${DOCS}/reference/notification`, icon: Bell, external: true, }, ], }, { label: "Status page", items: [ { name: "Custom domain", href: `${DOCS}/reference/status-page#custom-domain`, icon: Globe, external: true, }, { name: "Themes Store", href: "https://themes.openstatus.dev", icon: Palette, external: true, }, { name: "Protection", href: `${DOCS}/reference/status-page#password-basic-auth`, icon: Shield, external: true, }, { name: "Slack agent", href: `${DOCS}/tutorial/how-to-setup-slack-agent`, icon: SlackIcon, external: true, }, { name: "Subscribers", href: `${DOCS}/reference/subscriber`, icon: Users, external: true, }, ], }, { label: "Developer", items: [ { name: "REST API", href: `${DOCS}/api-reference`, icon: Braces, external: true, }, { name: "CLI", href: `${DOCS}/reference/cli-reference`, icon: Terminal, external: true, }, { name: "MCP server", href: `${DOCS}/reference/mcp-server`, icon: ModelContextProtocolIcon, external: true, }, ], }, { label: "Workspace", items: [ { name: "Audit logs", href: "/settings/audit-logs", icon: ScanEye }, { name: "Team & invites", href: "/settings/general", icon: UserPlus }, ], }, ]; export function FeatureBadgeWall({ className, ...props }: Omit, "children">) { return (
What else openstatus can do
{FEATURE_CATEGORIES.map((category) => (

{category.label}

{category.items.map((item) => ( ))}
))}
); } export function QuestionPanel({ onSubmit, className, ...props }: Omit, "children" | "onSubmit"> & { onSubmit: (values: { source: string; other?: string }) => Promise; }) { return (
How did you hear about openstatus?
); } function FeatureLink({ item, className, ...props }: Omit, "href" | "children"> & { item: FeatureLinkItem; }) { const externalProps = item.external ? { target: "_blank" as const, rel: "noopener noreferrer" } : {}; return ( {item.name} {item.external ? ( ) : null} ); }