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.
2.8 kB Β· 100 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101export type Customer = { name: string; /** Public status page, or the customer story when there is one. */ href: string; /** Under `public/`; a `.dark` sibling is picked up automatically. */ logo?: string; /** Rendered height in px; default 24. Bump for icon-only marks. */ logoHeight?: number; story?: string; quote?: { text: string; name: string; role: string };};
// Order is the order the logo cloud renders in.export const customers: Customer[] = [ { name: "Cal.com", href: "https://status.cal.com", logo: "/assets/customers/calcom/logo.svg", }, { name: "Twenty", href: "https://twenty-status.com", logo: "/assets/customers/twenty/logo.svg", logoHeight: 32, story: "/customers/twenty", quote: { text: "Open-source CRM needs an open-source status page. Openstatus took us minutes to set up β and it covers everything our customers actually depend on.", name: "FΓ©lix Malfait", role: "Co-founder @twentycrm", }, }, { name: "Documenso", href: "https://status.documenso.com", logo: "/assets/customers/documenso/logo.svg", }, { name: "Traefik", href: "https://status.traefik.io", logo: "/assets/customers/traefik/logo.png", story: "/customers/traefik", quote: { text: "We picked openstatus because the workflow matched ours. We stayed because it keeps matching.", name: "Michel Loiseleur", role: "Head of Platforms @traefiklabs", }, }, { name: "Passbolt", href: "https://passboltuptime.com", logo: "/assets/customers/passbolt/logo.svg", }, { name: "Hanko", href: "https://status.hanko.io", logo: "/assets/customers/hanko/logo.svg", logoHeight: 32, }, { name: "WhiteBIT", href: "https://status.whitebit.com", logo: "/assets/customers/whitebit/logo.svg", }, { name: "Superwall", href: "https://status.superwall.com", logo: "/assets/customers/superwall/logo.svg", }, { name: "OpenPanel", href: "https://status.openpanel.dev", logo: "/assets/customers/openpanel/logo.svg", logoHeight: 20, }, { name: "Probo", href: "https://probostatus.com", logo: "/assets/customers/probo/logo.svg", }, { name: "Roundtable", // Their status page is password-protected, so link the company site. href: "https://roundtable.eu", logo: "/assets/customers/roundtable/logo.svg", logoHeight: 18, }, { name: "Smplrspace", href: "https://status.smplrspace.com", logo: "/assets/customers/smplrspace/logo.svg", },];
export function getCustomer(name: string) { const customer = customers.find( (c) => c.name.toLowerCase() === name.toLowerCase(), ); if (!customer) throw new Error(`Unknown customer "${name}"`); return customer;}