Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. 🫖 Status page with uptime monitoring & API monitoring as code 🫖 openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107// One record per listing route. `label` is the h1 / breadcrumb / markdown// heading, `title` the <title> and og card; HTML and markdown read both.export type ContentSection = { label: string; path: string; title: string; description: string; // Listed under /{path}/category/{slug}; falls back to `description`. categoryDescription?: string;};
export const sections = { blog: { label: "Blog", path: "/blog", title: "Blog - Engineering, Product & Monitoring Insights", description: "Read engineering deep dives, product updates, and monitoring best practices from the openstatus team. Learn about uptime monitoring, incident communication, and building reliable systems.", categoryDescription: "All the latest articles and news from openstatus.", }, changelog: { label: "Changelog", path: "/changelog", title: "Changelog", description: "All the latest changes and updates to openstatus.", }, compare: { label: "Comparisons", path: "/compare", title: "Compare openstatus with uptime and status page solutions", description: "See how openstatus compares to BetterStack, UptimeRobot, Checkly, Instatus, and other monitoring tools. Side-by-side feature and pricing comparisons to help you choose the right solution.", }, guides: { label: "Guides", path: "/guides", title: "Guides", description: "All the latest guides from openstatus.", }, "use-case": { label: "Use Cases", path: "/use-case", title: "Use Cases", description: "Discover how teams use openstatus for compliance, incident records for audits, reducing support tickets, closing enterprise deals, open-source projects, crypto exchanges, and API infrastructure.", }, customers: { label: "Customers", path: "/customers", title: "Meet our customers", description: "Real teams using openstatus to monitor uptime, latency, and run their status pages.", }, tooling: { label: "Tooling", path: "/tooling", title: "Manage openstatus from anywhere", description: "Manage status pages and uptime monitoring from anywhere your workflow lives — CLI, ConnectRPC API, Node SDK, Terraform provider, and MCP server, all on a single API key.", }, play: { label: "Playground (Tools)", path: "/play", title: "Playground (Tools)", description: "Playground for tools and services related to openstatus.", }, status: { label: "External Status", path: "/status", title: "External Status", description: "Check whether the external providers you depend on are working properly.", }, "oss-friends": { label: "OSS Friends", path: "/oss-friends", title: "OSS Friends", description: "List of all our awesome open source friends.", },} satisfies Record<string, ContentSection>;
export type SectionKey = keyof typeof sections;
export function capitalize(slug: string) { return `${slug.charAt(0).toUpperCase()}${slug.slice(1)}`;}
/** Metadata for /{section}/category/{slug}. */export function categorySection(section: ContentSection, slug: string) { return { label: capitalize(slug), path: `${section.path}/category/${encodeURIComponent(slug)}`, title: `${section.label} - ${capitalize(slug)}`, description: section.categoryDescription ?? section.description, };}
/** Metadata for the /{section}/category index. */export function categoriesIndex(section: ContentSection) { return { label: `${section.label} Categories`, path: `${section.path}/category`, title: `${section.label} Categories`, description: `Browse all ${section.label.toLowerCase()} categories from openstatus.`, };}