gitextract_l155h8jc/ ├── .claude/ │ └── commands/ │ └── ship.md ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── api-preview.yml │ ├── claude-code-review.yml │ ├── claude.yml │ ├── deploy-checker.yml │ ├── deploy-private-location.yml │ ├── deploy-workflows.yml │ ├── deploy.yml │ ├── docker-publish-dev.yml │ ├── docker-publish.yml │ ├── dx.yml │ ├── go-tests.yml │ ├── lint.yml │ ├── migrate.yml │ ├── publish-checker.yml │ ├── synthetic.yml │ ├── test.yml │ └── workflow-preview.yml ├── .gitignore ├── .koyebignore ├── .npmrc ├── .oxlintrc.json ├── .prettierignore ├── .stacked.toml ├── .vscode/ │ └── settings.json ├── CLAUDE.md ├── CONTRIBUTING.MD ├── COOLIFY_DEPLOYMENT.md ├── COOLIFY_ENVIRONMENT_GUIDE.md ├── COOLIFY_SETUP.md ├── DOCKER.md ├── LICENSE ├── README.md ├── SECURITY.md ├── apps/ │ ├── README.md │ ├── checker/ │ │ ├── .gitignore │ │ ├── .golangci.yml │ │ ├── .private.air.toml │ │ ├── .probe.air.toml │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── ca/ │ │ │ └── ca-bundle.crt │ │ ├── checker/ │ │ │ ├── dns.go │ │ │ ├── dns_test.go │ │ │ ├── http.go │ │ │ ├── http_test.go │ │ │ ├── tcp.go │ │ │ ├── tcp_test.go │ │ │ └── update.go │ │ ├── cmd/ │ │ │ ├── private/ │ │ │ │ └── main.go │ │ │ └── server/ │ │ │ └── main.go │ │ ├── fly.toml │ │ ├── go.mod │ │ ├── go.sum │ │ ├── handlers/ │ │ │ ├── checker.go │ │ │ ├── checker_test.go │ │ │ ├── dns.go │ │ │ ├── dns_test.go │ │ │ ├── handler.go │ │ │ ├── ping.go │ │ │ ├── ping_test.go │ │ │ └── tcp.go │ │ ├── justfile │ │ ├── pkg/ │ │ │ ├── assertions/ │ │ │ │ ├── assertions.go │ │ │ │ └── assertions_test.go │ │ │ ├── job/ │ │ │ │ ├── dns_job.go │ │ │ │ ├── http_job.go │ │ │ │ ├── http_job_test.go │ │ │ │ ├── job.go │ │ │ │ ├── monitors.go │ │ │ │ ├── tcp_job.go │ │ │ │ └── tcp_job_test.go │ │ │ ├── logger/ │ │ │ │ └── logger.go │ │ │ ├── otel/ │ │ │ │ ├── otel.go │ │ │ │ └── otel_test.go │ │ │ ├── scheduler/ │ │ │ │ ├── scheduler.go │ │ │ │ └── scheduler_test.go │ │ │ └── tinybird/ │ │ │ ├── client.go │ │ │ └── client_test.go │ │ ├── private-location.Dockerfile │ │ ├── proto/ │ │ │ └── private_location/ │ │ │ └── v1/ │ │ │ ├── assertions.pb.go │ │ │ ├── dns_monitor.pb.go │ │ │ ├── http_monitor.pb.go │ │ │ ├── private_location.connect.go │ │ │ ├── private_location.pb.go │ │ │ └── tcp_monitor.pb.go │ │ └── request/ │ │ └── request.go │ ├── dashboard/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── components.json │ │ ├── docker-compose.yaml │ │ ├── dofigen.yml │ │ ├── env.ts │ │ ├── instrumentation-client.ts │ │ ├── next-env.d.ts │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── public/ │ │ │ └── fonts/ │ │ │ ├── CommitMono-400-Italic.otf │ │ │ ├── CommitMono-400-Regular.otf │ │ │ ├── CommitMono-700-Italic.otf │ │ │ └── CommitMono-700-Regular.otf │ │ ├── sentry.edge.config.ts │ │ ├── sentry.server.config.ts │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── (dashboard)/ │ │ │ │ │ ├── agents/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── cli/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── invite/ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── search-params.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── monitors/ │ │ │ │ │ │ ├── (list)/ │ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ ├── incidents/ │ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── logs/ │ │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ │ ├── overview/ │ │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ ├── sidebar.tsx │ │ │ │ │ │ │ └── tabs.tsx │ │ │ │ │ │ └── create/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── notifications/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ ├── onboarding/ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ ├── overview/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── data-table-status-reports.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── private-locations/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── (list)/ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── account/ │ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── billing/ │ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ │ ├── general/ │ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── integrations/ │ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ └── slack-card.tsx │ │ │ │ │ │ └── tabs.tsx │ │ │ │ │ └── status-pages/ │ │ │ │ │ ├── (list)/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── maintenances/ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── nav-actions.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ ├── sidebar.tsx │ │ │ │ │ │ ├── status-reports/ │ │ │ │ │ │ │ ├── [reportId]/ │ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── subscribers/ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── tabs.tsx │ │ │ │ │ └── create/ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ ├── client.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── api/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── [...nextauth]/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── trpc/ │ │ │ │ │ ├── edge/ │ │ │ │ │ │ └── [trpc]/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── lambda/ │ │ │ │ │ └── [trpc]/ │ │ │ │ │ └── route.ts │ │ │ │ ├── global-error.tsx │ │ │ │ ├── globals.css │ │ │ │ ├── layout.tsx │ │ │ │ ├── login/ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ └── magic-link-form.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── search-params.ts │ │ │ │ ├── metadata.ts │ │ │ │ ├── not-found.tsx │ │ │ │ ├── react-table.d.ts │ │ │ │ └── robots.ts │ │ │ ├── components/ │ │ │ │ ├── chart/ │ │ │ │ │ ├── chart-area-latency.tsx │ │ │ │ │ ├── chart-area-timing-phases.tsx │ │ │ │ │ ├── chart-bar-uptime-light.tsx │ │ │ │ │ ├── chart-bar-uptime.tsx │ │ │ │ │ ├── chart-line-region.tsx │ │ │ │ │ ├── chart-line-regions.tsx │ │ │ │ │ └── chart-tooltip-number.tsx │ │ │ │ ├── common/ │ │ │ │ │ ├── code.tsx │ │ │ │ │ ├── hover-card-timestamp.tsx │ │ │ │ │ ├── icon-cloud-provider.tsx │ │ │ │ │ ├── input-with-addons.tsx │ │ │ │ │ ├── kbd.tsx │ │ │ │ │ ├── link.tsx │ │ │ │ │ ├── note.tsx │ │ │ │ │ └── wheel-picker.tsx │ │ │ │ ├── content/ │ │ │ │ │ ├── action-card.tsx │ │ │ │ │ ├── billing-addons.tsx │ │ │ │ │ ├── billing-overlay.tsx │ │ │ │ │ ├── billing-progress.tsx │ │ │ │ │ ├── block-wrapper.tsx │ │ │ │ │ ├── empty-state.tsx │ │ │ │ │ ├── process-message.tsx │ │ │ │ │ └── section.tsx │ │ │ │ ├── controls-filter/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── controls-search/ │ │ │ │ │ ├── button-reset.tsx │ │ │ │ │ ├── command-region.tsx │ │ │ │ │ ├── command-tags.tsx │ │ │ │ │ ├── dropdown-interval.tsx │ │ │ │ │ ├── dropdown-percentile.tsx │ │ │ │ │ ├── dropdown-period.tsx │ │ │ │ │ ├── dropdown-status.tsx │ │ │ │ │ ├── dropdown-trigger.tsx │ │ │ │ │ └── popover-date.tsx │ │ │ │ ├── data-table/ │ │ │ │ │ ├── audit-logs/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── wrapper.tsx │ │ │ │ │ ├── billing/ │ │ │ │ │ │ └── data-table.tsx │ │ │ │ │ ├── dable-cell-skeleton.tsx │ │ │ │ │ ├── data-table-sheet.tsx │ │ │ │ │ ├── incidents/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── maintenances/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── monitors/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ ├── data-table-action-bar.tsx │ │ │ │ │ │ ├── data-table-row-actions.tsx │ │ │ │ │ │ └── data-table-toolbar.tsx │ │ │ │ │ ├── notifications/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── page-components/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── private-locations/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── response-logs/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ ├── data-table-basics.tsx │ │ │ │ │ │ ├── data-table-sheet-test.tsx │ │ │ │ │ │ ├── data-table-sheet.tsx │ │ │ │ │ │ ├── data-table-toolbar.tsx │ │ │ │ │ │ └── regions/ │ │ │ │ │ │ └── columns.tsx │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── api-key/ │ │ │ │ │ │ │ └── data-table.tsx │ │ │ │ │ │ ├── invitations/ │ │ │ │ │ │ │ └── data-table.tsx │ │ │ │ │ │ └── members/ │ │ │ │ │ │ └── data-table.tsx │ │ │ │ │ ├── status-pages/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── status-report-updates/ │ │ │ │ │ │ ├── data-table-row-actions.tsx │ │ │ │ │ │ └── data-table.tsx │ │ │ │ │ ├── status-reports/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── subscribers/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table-row-actions.tsx │ │ │ │ │ ├── table-cell-badge.tsx │ │ │ │ │ ├── table-cell-boolean.tsx │ │ │ │ │ ├── table-cell-date.tsx │ │ │ │ │ ├── table-cell-link.tsx │ │ │ │ │ ├── table-cell-number.tsx │ │ │ │ │ └── table-cell-unavailable.tsx │ │ │ │ ├── date-picker.tsx │ │ │ │ ├── development-indicator.tsx │ │ │ │ ├── dialogs/ │ │ │ │ │ ├── export-code.tsx │ │ │ │ │ └── upgrade.tsx │ │ │ │ ├── domains/ │ │ │ │ │ ├── domain-configuration.tsx │ │ │ │ │ ├── domain-status-icon.tsx │ │ │ │ │ └── use-domain-status.ts │ │ │ │ ├── dropdowns/ │ │ │ │ │ └── quick-actions.tsx │ │ │ │ ├── forms/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── form-components.tsx │ │ │ │ │ │ ├── form-import.tsx │ │ │ │ │ │ ├── telegram-connection-flow.tsx │ │ │ │ │ │ ├── telegram-form-actions.tsx │ │ │ │ │ │ ├── telegram-manual-input.tsx │ │ │ │ │ │ ├── telegram-qr-connection.tsx │ │ │ │ │ │ ├── telegram-qrcode.tsx │ │ │ │ │ │ └── update.tsx │ │ │ │ │ ├── form-alert-dialog.tsx │ │ │ │ │ ├── form-card.tsx │ │ │ │ │ ├── form-sheet.tsx │ │ │ │ │ ├── maintenance/ │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ └── sheet.tsx │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ ├── form-danger-zone.tsx │ │ │ │ │ │ ├── form-follow-redirect.tsx │ │ │ │ │ │ ├── form-general.tsx │ │ │ │ │ │ ├── form-notifiers.tsx │ │ │ │ │ │ ├── form-otel.tsx │ │ │ │ │ │ ├── form-response-time.tsx │ │ │ │ │ │ ├── form-retry.tsx │ │ │ │ │ │ ├── form-scheduling-regions.tsx │ │ │ │ │ │ ├── form-status-pages.tsx │ │ │ │ │ │ ├── form-tags.tsx │ │ │ │ │ │ ├── form-visibility.tsx │ │ │ │ │ │ └── update.tsx │ │ │ │ │ ├── monitor-tag/ │ │ │ │ │ │ ├── form-monitor-tag.tsx │ │ │ │ │ │ └── sheet.tsx │ │ │ │ │ ├── notifications/ │ │ │ │ │ │ ├── form-discord.tsx │ │ │ │ │ │ ├── form-email.tsx │ │ │ │ │ │ ├── form-google-chat.tsx │ │ │ │ │ │ ├── form-grafana-oncall.tsx │ │ │ │ │ │ ├── form-ntfy.tsx │ │ │ │ │ │ ├── form-opsgenie.tsx │ │ │ │ │ │ ├── form-pagerduty.tsx │ │ │ │ │ │ ├── form-slack.tsx │ │ │ │ │ │ ├── form-sms.tsx │ │ │ │ │ │ ├── form-telegram.tsx │ │ │ │ │ │ ├── form-webhook.tsx │ │ │ │ │ │ ├── form-whatsapp.tsx │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ └── sheet.tsx │ │ │ │ │ ├── onboarding/ │ │ │ │ │ │ ├── create-monitor.tsx │ │ │ │ │ │ ├── create-page.tsx │ │ │ │ │ │ └── learn-from.tsx │ │ │ │ │ ├── private-location/ │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ └── sheet.tsx │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── form-api-key.tsx │ │ │ │ │ │ ├── form-members.tsx │ │ │ │ │ │ ├── form-slug.tsx │ │ │ │ │ │ └── form-workspace.tsx │ │ │ │ │ ├── status-page/ │ │ │ │ │ │ ├── form-appearance.tsx │ │ │ │ │ │ ├── form-configuration.tsx │ │ │ │ │ │ ├── form-custom-domain.tsx │ │ │ │ │ │ ├── form-danger-zone.tsx │ │ │ │ │ │ ├── form-general.tsx │ │ │ │ │ │ ├── form-links.tsx │ │ │ │ │ │ ├── form-monitors.tsx │ │ │ │ │ │ ├── form-page-access.tsx │ │ │ │ │ │ └── update.tsx │ │ │ │ │ ├── status-report/ │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ └── sheet.tsx │ │ │ │ │ ├── status-report-update/ │ │ │ │ │ │ ├── form-status-report.tsx │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ └── sheet.tsx │ │ │ │ │ └── support-contact/ │ │ │ │ │ ├── dialog.tsx │ │ │ │ │ └── form.tsx │ │ │ │ ├── layout/ │ │ │ │ │ └── auth-layout.tsx │ │ │ │ ├── metric/ │ │ │ │ │ ├── global-uptime/ │ │ │ │ │ │ └── section.tsx │ │ │ │ │ └── metric-card.tsx │ │ │ │ ├── nav/ │ │ │ │ │ ├── app-header.tsx │ │ │ │ │ ├── app-sidebar.tsx │ │ │ │ │ ├── nav-banner-checklist.tsx │ │ │ │ │ ├── nav-banner-upgrade.tsx │ │ │ │ │ ├── nav-banner.tsx │ │ │ │ │ ├── nav-breadcrumb.tsx │ │ │ │ │ ├── nav-feedback.tsx │ │ │ │ │ ├── nav-help.tsx │ │ │ │ │ ├── nav-main.tsx │ │ │ │ │ ├── nav-monitors.tsx │ │ │ │ │ ├── nav-overview.tsx │ │ │ │ │ ├── nav-status-pages.tsx │ │ │ │ │ ├── nav-tabs.tsx │ │ │ │ │ ├── nav-user.tsx │ │ │ │ │ ├── sidebar-metadata.tsx │ │ │ │ │ ├── sidebar-right.tsx │ │ │ │ │ └── workspace-switcher.tsx │ │ │ │ ├── popovers/ │ │ │ │ │ ├── popover-quantile.tsx │ │ │ │ │ └── popover-resolution.tsx │ │ │ │ ├── tailwind-indicator.tsx │ │ │ │ ├── theme-provider.tsx │ │ │ │ ├── theme-toggle.tsx │ │ │ │ └── ui/ │ │ │ │ ├── data-table/ │ │ │ │ │ ├── data-table-action-bar.tsx │ │ │ │ │ ├── data-table-column-header.tsx │ │ │ │ │ ├── data-table-faceted-filter.tsx │ │ │ │ │ ├── data-table-pagination.tsx │ │ │ │ │ ├── data-table-skeleton.tsx │ │ │ │ │ ├── data-table-toobar.tsx │ │ │ │ │ ├── data-table-view-options.tsx │ │ │ │ │ └── data-table.tsx │ │ │ │ └── sortable.tsx │ │ │ ├── data/ │ │ │ │ ├── audit-logs.client.ts │ │ │ │ ├── audit-logs.ts │ │ │ │ ├── icons.ts │ │ │ │ ├── incidents.client.ts │ │ │ │ ├── incidents.ts │ │ │ │ ├── invitations.ts │ │ │ │ ├── maintenances.client.ts │ │ │ │ ├── maintenances.ts │ │ │ │ ├── members.ts │ │ │ │ ├── metrics.client.ts │ │ │ │ ├── monitor-tags.ts │ │ │ │ ├── monitors.client.ts │ │ │ │ ├── monitors.ts │ │ │ │ ├── notifications.client.ts │ │ │ │ ├── notifications.ts │ │ │ │ ├── page-components.client.ts │ │ │ │ ├── plans.ts │ │ │ │ ├── region-metrics.client.ts │ │ │ │ ├── region-metrics.ts │ │ │ │ ├── regions.ts │ │ │ │ ├── response-logs.ts │ │ │ │ ├── status-codes.ts │ │ │ │ ├── status-pages.client.ts │ │ │ │ ├── status-pages.ts │ │ │ │ ├── status-report-updates.client.ts │ │ │ │ ├── status-reports.client.ts │ │ │ │ ├── status-reports.ts │ │ │ │ └── subscribers.ts │ │ │ ├── hooks/ │ │ │ │ ├── use-feature.ts │ │ │ │ └── use-telegram-connection.ts │ │ │ ├── instrumentation.ts │ │ │ ├── lib/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── adapter.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── providers.ts │ │ │ │ ├── composition.ts │ │ │ │ ├── domains.ts │ │ │ │ ├── formatter.ts │ │ │ │ ├── middleware/ │ │ │ │ │ └── with-invitation.ts │ │ │ │ ├── stripe.ts │ │ │ │ ├── trpc/ │ │ │ │ │ ├── client.tsx │ │ │ │ │ ├── query-client.ts │ │ │ │ │ ├── server.tsx │ │ │ │ │ └── shared.ts │ │ │ │ └── utils.ts │ │ │ ├── next-auth.d.ts │ │ │ ├── proxy.ts │ │ │ └── scripts/ │ │ │ ├── README.md │ │ │ └── export-blog-post-metrics.ts │ │ └── tsconfig.json │ ├── docs/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── astro.config.mjs │ │ ├── package.json │ │ ├── public/ │ │ │ ├── fonts/ │ │ │ │ ├── CommitMono-400-Italic.otf │ │ │ │ ├── CommitMono-400-Regular.otf │ │ │ │ ├── CommitMono-700-Italic.otf │ │ │ │ └── CommitMono-700-Regular.otf │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── Footer.astro │ │ │ │ ├── Head.astro │ │ │ │ ├── Hero.astro │ │ │ │ ├── SiteTitle.astro │ │ │ │ ├── Status.astro │ │ │ │ └── utils.ts │ │ │ ├── content/ │ │ │ │ ├── config.ts │ │ │ │ └── docs/ │ │ │ │ ├── 404.md │ │ │ │ ├── concept/ │ │ │ │ │ ├── best-practices-status-page.mdx │ │ │ │ │ ├── getting-started.mdx │ │ │ │ │ ├── latency-vs-response-time.mdx │ │ │ │ │ ├── uptime-calculation-and-values.mdx │ │ │ │ │ ├── uptime-monitoring-as-code.mdx │ │ │ │ │ └── uptime-monitoring.mdx │ │ │ │ ├── guides/ │ │ │ │ │ ├── getting-started.mdx │ │ │ │ │ ├── how-deploy-status-page-cf-pages.mdx │ │ │ │ │ ├── how-to-add-svg-status-badge.mdx │ │ │ │ │ ├── how-to-deploy-probes-cloudflare-containers.mdx │ │ │ │ │ ├── how-to-export-metrics-to-otlp-endpoint.mdx │ │ │ │ │ ├── how-to-monitor-mcp-server.mdx │ │ │ │ │ ├── how-to-run-synthetic-test-github-action.mdx │ │ │ │ │ ├── how-to-use-react-widget.mdx │ │ │ │ │ ├── self-host-status-page-only.mdx │ │ │ │ │ └── self-hosting-openstatus.mdx │ │ │ │ ├── help/ │ │ │ │ │ └── support.mdx │ │ │ │ ├── index.mdx │ │ │ │ ├── monitoring/ │ │ │ │ │ └── overview.mdx │ │ │ │ ├── reference/ │ │ │ │ │ ├── cli-reference.mdx │ │ │ │ │ ├── dns-monitor.mdx │ │ │ │ │ ├── http-monitor.mdx │ │ │ │ │ ├── incident.mdx │ │ │ │ │ ├── location.mdx │ │ │ │ │ ├── notification.mdx │ │ │ │ │ ├── page-components.mdx │ │ │ │ │ ├── private-location.mdx │ │ │ │ │ ├── status-page.mdx │ │ │ │ │ ├── status-report.mdx │ │ │ │ │ ├── subscriber.mdx │ │ │ │ │ ├── tcp-monitor.mdx │ │ │ │ │ └── terraform.mdx │ │ │ │ ├── reference.mdx │ │ │ │ ├── sdk/ │ │ │ │ │ └── nodejs/ │ │ │ │ │ ├── authentication.mdx │ │ │ │ │ ├── error-handling.mdx │ │ │ │ │ ├── getting-started.mdx │ │ │ │ │ ├── health-service.mdx │ │ │ │ │ ├── index.mdx │ │ │ │ │ ├── maintenance-service.mdx │ │ │ │ │ ├── monitor-service.mdx │ │ │ │ │ ├── notification-service.mdx │ │ │ │ │ ├── reference.mdx │ │ │ │ │ ├── status-page-service.mdx │ │ │ │ │ ├── status-report-service.mdx │ │ │ │ │ └── typescript-tips.mdx │ │ │ │ └── tutorial/ │ │ │ │ ├── get-started-with-openstatus-cli.mdx │ │ │ │ ├── getting-started.mdx │ │ │ │ ├── how-to-configure-status-page.mdx │ │ │ │ ├── how-to-create-monitor.mdx │ │ │ │ ├── how-to-create-private-location.mdx │ │ │ │ ├── how-to-create-status-page.mdx │ │ │ │ └── how-to-setup-slack-agent.mdx │ │ │ ├── custom.css │ │ │ ├── env.d.ts │ │ │ └── global.css │ │ └── tsconfig.json │ ├── private-location/ │ │ ├── .air.toml │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── .golangci.yml │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── cmd/ │ │ │ └── server/ │ │ │ └── main.go │ │ ├── dofigen.yml │ │ ├── fly.toml │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ ├── database/ │ │ │ │ ├── database.go │ │ │ │ └── models.go │ │ │ ├── logs/ │ │ │ │ ├── logs.go │ │ │ │ └── logs_test.go │ │ │ ├── models/ │ │ │ │ └── assertions.go │ │ │ ├── server/ │ │ │ │ ├── db_testdata │ │ │ │ ├── errors.go │ │ │ │ ├── ingest_common.go │ │ │ │ ├── ingest_dns.go │ │ │ │ ├── ingest_dns_test.go │ │ │ │ ├── ingest_http.go │ │ │ │ ├── ingest_http_test.go │ │ │ │ ├── ingest_tcp.go │ │ │ │ ├── ingest_tcp_test.go │ │ │ │ ├── monitors.go │ │ │ │ ├── monitors_test.go │ │ │ │ ├── routes.go │ │ │ │ ├── server.go │ │ │ │ ├── validation.go │ │ │ │ └── validation_test.go │ │ │ └── tinybird/ │ │ │ ├── client.go │ │ │ └── client_test.go │ │ ├── justfile │ │ └── proto/ │ │ └── private_location/ │ │ └── v1/ │ │ ├── assertions.pb.go │ │ ├── dns_monitor.pb.go │ │ ├── http_monitor.pb.go │ │ ├── private_location.connect.go │ │ ├── private_location.pb.go │ │ └── tcp_monitor.pb.go │ ├── railway-proxy/ │ │ ├── Dockerfile │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── screenshot-service/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── fly.toml │ │ ├── package.json │ │ ├── src/ │ │ │ ├── env.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── server/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── CONNECTRPC_SPEC.md │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── bunfig.toml │ │ ├── docker-compose.yaml │ │ ├── dofigen.yml │ │ ├── env.ts │ │ ├── fly.sh │ │ ├── fly.toml │ │ ├── log/ │ │ │ └── fly.toml │ │ ├── package.json │ │ ├── src/ │ │ │ ├── env.ts │ │ │ ├── index.ts │ │ │ ├── libs/ │ │ │ │ ├── checker/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── clients.ts │ │ │ │ ├── errors/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── openapi-error-responses.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── middlewares/ │ │ │ │ │ ├── auth.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plan.ts │ │ │ │ │ └── track.ts │ │ │ │ └── test/ │ │ │ │ └── preload.ts │ │ │ ├── routes/ │ │ │ │ ├── public/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── status.test.ts │ │ │ │ │ ├── status.ts │ │ │ │ │ └── unsubscribe.ts │ │ │ │ ├── rpc/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.ts │ │ │ │ │ │ ├── error.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── logging.ts │ │ │ │ │ │ └── validation.ts │ │ │ │ │ ├── router.ts │ │ │ │ │ └── services/ │ │ │ │ │ ├── health/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── maintenance/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── maintenance.test.ts │ │ │ │ │ │ ├── converters.ts │ │ │ │ │ │ ├── errors.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── monitor.test.ts │ │ │ │ │ │ ├── converters/ │ │ │ │ │ │ │ ├── assertions.ts │ │ │ │ │ │ │ ├── comparators.ts │ │ │ │ │ │ │ ├── defaults.ts │ │ │ │ │ │ │ ├── enums.ts │ │ │ │ │ │ │ ├── headers.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── monitors.ts │ │ │ │ │ │ │ └── regions.ts │ │ │ │ │ │ ├── errors.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── limits.ts │ │ │ │ │ │ └── validators.ts │ │ │ │ │ ├── notification/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── notification.test.ts │ │ │ │ │ │ ├── converters.ts │ │ │ │ │ │ ├── errors.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── limits.ts │ │ │ │ │ │ └── test-providers.ts │ │ │ │ │ ├── status-page/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── status-page.test.ts │ │ │ │ │ │ ├── converters.ts │ │ │ │ │ │ ├── errors.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── limits.ts │ │ │ │ │ └── status-report/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── status-report.test.ts │ │ │ │ │ ├── converters.ts │ │ │ │ │ ├── errors.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── slack/ │ │ │ │ │ ├── agent.test.ts │ │ │ │ │ ├── agent.ts │ │ │ │ │ ├── blocks.test.ts │ │ │ │ │ ├── blocks.ts │ │ │ │ │ ├── confirmation-store.test.ts │ │ │ │ │ ├── confirmation-store.ts │ │ │ │ │ ├── handler.test.ts │ │ │ │ │ ├── handler.ts │ │ │ │ │ ├── index.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interactions.test.ts │ │ │ │ │ ├── interactions.ts │ │ │ │ │ ├── oauth.test.ts │ │ │ │ │ ├── oauth.ts │ │ │ │ │ ├── tools/ │ │ │ │ │ │ ├── add-status-report-update.ts │ │ │ │ │ │ ├── create-maintenance.ts │ │ │ │ │ │ ├── create-status-report.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── list-maintenances.ts │ │ │ │ │ │ ├── list-status-pages.ts │ │ │ │ │ │ ├── list-status-reports.ts │ │ │ │ │ │ ├── resolve-status-report.ts │ │ │ │ │ │ ├── tools.test.ts │ │ │ │ │ │ └── update-status-report.ts │ │ │ │ │ ├── verify.test.ts │ │ │ │ │ ├── verify.ts │ │ │ │ │ └── workspace-resolver.ts │ │ │ │ └── v1/ │ │ │ │ ├── check/ │ │ │ │ │ ├── http/ │ │ │ │ │ │ ├── post.test.ts │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ └── schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── incidents/ │ │ │ │ │ ├── get.test.ts │ │ │ │ │ ├── get.ts │ │ │ │ │ ├── get_all.test.ts │ │ │ │ │ ├── get_all.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── put.test.ts │ │ │ │ │ ├── put.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── index.ts │ │ │ │ ├── maintenances/ │ │ │ │ │ ├── get.test.ts │ │ │ │ │ ├── get.ts │ │ │ │ │ ├── get_all.test.ts │ │ │ │ │ ├── get_all.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post.test.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ ├── put.test.ts │ │ │ │ │ ├── put.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── monitors/ │ │ │ │ │ ├── delete.test.ts │ │ │ │ │ ├── delete.ts │ │ │ │ │ ├── get.test.ts │ │ │ │ │ ├── get.ts │ │ │ │ │ ├── get_all.test.ts │ │ │ │ │ ├── get_all.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post.test.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ ├── post_dns.test.ts │ │ │ │ │ ├── post_dns.ts │ │ │ │ │ ├── post_http.test.ts │ │ │ │ │ ├── post_http.ts │ │ │ │ │ ├── post_tcp.test.ts │ │ │ │ │ ├── post_tcp.ts │ │ │ │ │ ├── put.test.ts │ │ │ │ │ ├── put.ts │ │ │ │ │ ├── put_dns.test.ts │ │ │ │ │ ├── put_dns.ts │ │ │ │ │ ├── put_http.test.ts │ │ │ │ │ ├── put_http.ts │ │ │ │ │ ├── put_tcp.test.ts │ │ │ │ │ ├── put_tcp.ts │ │ │ │ │ ├── results/ │ │ │ │ │ │ ├── get.test.ts │ │ │ │ │ │ └── get.ts │ │ │ │ │ ├── run/ │ │ │ │ │ │ ├── post.test.ts │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ └── schema.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ ├── summary/ │ │ │ │ │ │ ├── get.test.ts │ │ │ │ │ │ ├── get.ts │ │ │ │ │ │ └── schema.ts │ │ │ │ │ ├── trigger/ │ │ │ │ │ │ ├── post.test.ts │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ └── schema.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── notifications/ │ │ │ │ │ ├── get.test.ts │ │ │ │ │ ├── get.ts │ │ │ │ │ ├── get_all.test.ts │ │ │ │ │ ├── get_all.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post.test.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── pageSubscribers/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post.test.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── pages/ │ │ │ │ │ ├── get.test.ts │ │ │ │ │ ├── get.ts │ │ │ │ │ ├── get_all.test.ts │ │ │ │ │ ├── get_all.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post.test.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ ├── put.test.ts │ │ │ │ │ ├── put.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── statusReportUpdates/ │ │ │ │ │ ├── get.test.ts │ │ │ │ │ ├── get.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post.test.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── statusReports/ │ │ │ │ │ ├── delete.test.ts │ │ │ │ │ ├── delete.ts │ │ │ │ │ ├── get.test.ts │ │ │ │ │ ├── get.ts │ │ │ │ │ ├── get_all.test.ts │ │ │ │ │ ├── get_all.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post.test.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ ├── subscriber-filtering.integration.test.ts │ │ │ │ │ └── update/ │ │ │ │ │ ├── post.test.ts │ │ │ │ │ └── post.ts │ │ │ │ ├── utils.ts │ │ │ │ └── whoami/ │ │ │ │ ├── get.test.ts │ │ │ │ ├── get.ts │ │ │ │ ├── index.ts │ │ │ │ └── schema.ts │ │ │ ├── types/ │ │ │ │ └── index.ts │ │ │ └── utils/ │ │ │ ├── audit-log.ts │ │ │ ├── not-empty.ts │ │ │ ├── page-component.ts │ │ │ └── random-promise.ts │ │ ├── static/ │ │ │ ├── openapi-v1.json │ │ │ └── openapi.yaml │ │ └── tsconfig.json │ ├── ssh-server/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── banner.txt │ │ ├── fly.toml │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── status-page/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── components.json │ │ ├── docker-compose.yaml │ │ ├── dofigen.yml │ │ ├── env.ts │ │ ├── instrumentation-client.ts │ │ ├── next-env.d.ts │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── public/ │ │ │ └── fonts/ │ │ │ ├── CommitMono-400-Italic.otf │ │ │ ├── CommitMono-400-Regular.otf │ │ │ ├── CommitMono-700-Italic.otf │ │ │ └── CommitMono-700-Regular.otf │ │ ├── sentry.edge.config.ts │ │ ├── sentry.server.config.ts │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── (public)/ │ │ │ │ │ ├── client.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── search-params.ts │ │ │ │ ├── (status-page)/ │ │ │ │ │ └── [domain]/ │ │ │ │ │ ├── (auth)/ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── login/ │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ ├── section-magic-link.tsx │ │ │ │ │ │ │ └── section-password.tsx │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── (public)/ │ │ │ │ │ │ ├── badge/ │ │ │ │ │ │ │ ├── route.tsx │ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ ├── events/ │ │ │ │ │ │ │ ├── (list)/ │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ │ │ ├── (view)/ │ │ │ │ │ │ │ │ ├── maintenance/ │ │ │ │ │ │ │ │ │ └── [id]/ │ │ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ │ └── report/ │ │ │ │ │ │ │ │ └── [id]/ │ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── layout.tsx │ │ │ │ │ │ ├── feed/ │ │ │ │ │ │ │ ├── [type]/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ └── json/ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── manage/ │ │ │ │ │ │ │ ├── [token]/ │ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── layout.tsx │ │ │ │ │ │ ├── monitors/ │ │ │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ └── search-params.ts │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ ├── unsubscribe/ │ │ │ │ │ │ │ └── [token]/ │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── verify/ │ │ │ │ │ │ └── [token]/ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── layout.tsx │ │ │ │ ├── api/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── [...nextauth]/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── trpc/ │ │ │ │ │ ├── edge/ │ │ │ │ │ │ └── [trpc]/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── lambda/ │ │ │ │ │ └── [trpc]/ │ │ │ │ │ └── route.ts │ │ │ │ ├── global-error.tsx │ │ │ │ ├── globals.css │ │ │ │ ├── layout.tsx │ │ │ │ ├── metadata.ts │ │ │ │ ├── not-found.tsx │ │ │ │ └── react-table.d.ts │ │ │ ├── components/ │ │ │ │ ├── button/ │ │ │ │ │ ├── button-back.tsx │ │ │ │ │ └── button-copy-link.tsx │ │ │ │ ├── chart/ │ │ │ │ │ ├── chart-area-percentiles.tsx │ │ │ │ │ ├── chart-bar-uptime.tsx │ │ │ │ │ ├── chart-legend-badge.tsx │ │ │ │ │ ├── chart-line-region.tsx │ │ │ │ │ ├── chart-line-regions.tsx │ │ │ │ │ └── chart-tooltip-number.tsx │ │ │ │ ├── common/ │ │ │ │ │ ├── kbd.tsx │ │ │ │ │ └── link.tsx │ │ │ │ ├── content/ │ │ │ │ │ ├── empty-state.tsx │ │ │ │ │ ├── metric-card.tsx │ │ │ │ │ ├── process-message.tsx │ │ │ │ │ ├── section.tsx │ │ │ │ │ └── timestamp-hover-card.tsx │ │ │ │ ├── date-picker.tsx │ │ │ │ ├── forms/ │ │ │ │ │ ├── form-card.tsx │ │ │ │ │ ├── form-email.tsx │ │ │ │ │ ├── form-manage-subscription.tsx │ │ │ │ │ ├── form-password.tsx │ │ │ │ │ └── form-subscribe-email.tsx │ │ │ │ ├── icons/ │ │ │ │ │ ├── discord.tsx │ │ │ │ │ ├── github.tsx │ │ │ │ │ ├── google.tsx │ │ │ │ │ ├── opsgenie.tsx │ │ │ │ │ ├── pagerduty.tsx │ │ │ │ │ └── slack.tsx │ │ │ │ ├── nav/ │ │ │ │ │ ├── footer.tsx │ │ │ │ │ └── header.tsx │ │ │ │ ├── password-wrapper.tsx │ │ │ │ ├── popover/ │ │ │ │ │ └── popover-quantile.tsx │ │ │ │ ├── status-page/ │ │ │ │ │ ├── floating-button.tsx │ │ │ │ │ ├── floating-theme.tsx │ │ │ │ │ ├── messages.ts │ │ │ │ │ ├── status-banner.tsx │ │ │ │ │ ├── status-blank.tsx │ │ │ │ │ ├── status-charts.tsx │ │ │ │ │ ├── status-events.tsx │ │ │ │ │ ├── status-feed.tsx │ │ │ │ │ ├── status-monitor-tabs.tsx │ │ │ │ │ ├── status-monitor.tsx │ │ │ │ │ ├── status-tracker-group.tsx │ │ │ │ │ ├── status-tracker.tsx │ │ │ │ │ ├── status-updates.tsx │ │ │ │ │ ├── status.tsx │ │ │ │ │ └── utils.ts │ │ │ │ ├── tailwind-indicator.tsx │ │ │ │ ├── themes/ │ │ │ │ │ ├── theme-dropdown.tsx │ │ │ │ │ ├── theme-palette-picker.tsx │ │ │ │ │ ├── theme-provider.tsx │ │ │ │ │ ├── theme-select.tsx │ │ │ │ │ └── theme-sidebar.tsx │ │ │ │ └── ui/ │ │ │ │ └── data-table/ │ │ │ │ ├── data-table-action-bar.tsx │ │ │ │ ├── data-table-column-header.tsx │ │ │ │ ├── data-table-faceted-filter.tsx │ │ │ │ ├── data-table-pagination.tsx │ │ │ │ ├── data-table-skeleton.tsx │ │ │ │ ├── data-table-toobar.tsx │ │ │ │ ├── data-table-view-options.tsx │ │ │ │ └── data-table.tsx │ │ │ ├── data/ │ │ │ │ ├── icons.ts │ │ │ │ ├── incidents.client.ts │ │ │ │ ├── incidents.ts │ │ │ │ ├── invitations.ts │ │ │ │ ├── maintenances.client.ts │ │ │ │ ├── maintenances.ts │ │ │ │ ├── members.ts │ │ │ │ ├── metrics.client.ts │ │ │ │ ├── monitor-tags.ts │ │ │ │ ├── monitors.client.ts │ │ │ │ ├── monitors.ts │ │ │ │ ├── plans.ts │ │ │ │ ├── region-metrics.client.ts │ │ │ │ ├── region-metrics.ts │ │ │ │ ├── region-percentile.ts │ │ │ │ ├── regions.ts │ │ │ │ ├── response-logs.ts │ │ │ │ ├── status-codes.ts │ │ │ │ ├── status-pages.client.ts │ │ │ │ ├── status-pages.ts │ │ │ │ ├── status-report-updates.client.ts │ │ │ │ ├── status-reports.client.ts │ │ │ │ └── status-reports.ts │ │ │ ├── hooks/ │ │ │ │ └── use-pathname-prefix.ts │ │ │ ├── instrumentation.ts │ │ │ ├── lib/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── adapter.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── providers.ts │ │ │ │ ├── base-url.ts │ │ │ │ ├── chart.ts │ │ │ │ ├── composition.ts │ │ │ │ ├── domain.ts │ │ │ │ ├── formatter.ts │ │ │ │ ├── protected.ts │ │ │ │ ├── server-actions.ts │ │ │ │ ├── trpc/ │ │ │ │ │ ├── client.tsx │ │ │ │ │ ├── query-client.ts │ │ │ │ │ ├── server.tsx │ │ │ │ │ └── shared.ts │ │ │ │ └── utils.ts │ │ │ ├── next-auth.d.ts │ │ │ └── proxy.ts │ │ ├── tsconfig.json │ │ └── turbo.json │ ├── web/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── components.json │ │ ├── env.ts │ │ ├── instrumentation-client.ts │ │ ├── next-env.d.ts │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public/ │ │ │ ├── assets/ │ │ │ │ └── posts/ │ │ │ │ ├── global-latency-monitoring-benchmark-hono-hetzner/ │ │ │ │ │ └── hetzner.json │ │ │ │ ├── hono-vercel-fluid-compute/ │ │ │ │ │ ├── hono-cold.json │ │ │ │ │ └── hono-warm.json │ │ │ │ ├── monitoring-latency/ │ │ │ │ │ ├── cloudflare.json │ │ │ │ │ ├── fly.json │ │ │ │ │ ├── koyeb.json │ │ │ │ │ ├── railway.json │ │ │ │ │ └── render.json │ │ │ │ └── monitoring-vercel/ │ │ │ │ ├── vercel-cold.json │ │ │ │ ├── vercel-edge.json │ │ │ │ ├── vercel-roulette.json │ │ │ │ └── vercel-warm.json │ │ │ └── llms.txt │ │ ├── sentry.edge.config.ts │ │ ├── sentry.server.config.ts │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── (landing)/ │ │ │ │ │ ├── (redirect)/ │ │ │ │ │ │ ├── bsky/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── cal/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── discord/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── github/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── linkedin/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── schema.json/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── twitter/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── youtube/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── blog/ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── feed.xml/ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── changelog/ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── feed.xml/ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── compare/ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── content-box.tsx │ │ │ │ │ ├── content-category.tsx │ │ │ │ │ ├── content-list.tsx │ │ │ │ │ ├── content-metadata.tsx │ │ │ │ │ ├── content-pagination.tsx │ │ │ │ │ ├── guides/ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── oss-friends/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── play/ │ │ │ │ │ │ ├── checker/ │ │ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ ├── search-params.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── curl/ │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ ├── severity-matrix/ │ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── uptime-sla/ │ │ │ │ │ │ ├── client.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── status/ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── utils.ts │ │ │ │ │ └── use-case/ │ │ │ │ │ ├── [slug]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── api/ │ │ │ │ │ ├── callback/ │ │ │ │ │ │ └── pagerduty/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── checker/ │ │ │ │ │ │ ├── cron/ │ │ │ │ │ │ │ ├── 10m/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── 1h/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── 1m/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── 30m/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── 30s/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── 5m/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── _cron.ts │ │ │ │ │ │ │ └── _sentry.ts │ │ │ │ │ │ ├── test/ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ └── tcp/ │ │ │ │ │ │ │ ├── route.ts │ │ │ │ │ │ │ └── schema.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── internal/ │ │ │ │ │ │ └── email/ │ │ │ │ │ │ ├── feedback/ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ ├── route.ts │ │ │ │ │ │ └── team-invite/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── markdown/ │ │ │ │ │ │ └── [[...path]]/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── og/ │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ ├── background.tsx │ │ │ │ │ │ │ ├── basic-layout.tsx │ │ │ │ │ │ │ ├── status-check.tsx │ │ │ │ │ │ │ └── tracker.tsx │ │ │ │ │ │ ├── checker/ │ │ │ │ │ │ │ └── route.tsx │ │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ │ └── route.tsx │ │ │ │ │ │ ├── page/ │ │ │ │ │ │ │ └── route.tsx │ │ │ │ │ │ ├── post/ │ │ │ │ │ │ │ └── route.tsx │ │ │ │ │ │ ├── route.tsx │ │ │ │ │ │ ├── status/ │ │ │ │ │ │ │ └── route.tsx │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── search/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── test/ │ │ │ │ │ │ └── timeout/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── trpc/ │ │ │ │ │ │ ├── edge/ │ │ │ │ │ │ │ └── [trpc]/ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ └── lambda/ │ │ │ │ │ │ └── [trpc]/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── upload/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── webhook/ │ │ │ │ │ └── stripe/ │ │ │ │ │ └── route.ts │ │ │ │ ├── global-error.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ ├── robots.ts │ │ │ │ └── sitemap.ts │ │ │ ├── components/ │ │ │ │ ├── dev-mode-container.tsx │ │ │ │ ├── icon-cloud-provider.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── loading-animation.tsx │ │ │ │ ├── tailwind-indicator.tsx │ │ │ │ └── theme-provider.tsx │ │ │ ├── config/ │ │ │ │ └── socials.ts │ │ │ ├── content/ │ │ │ │ ├── cmdk.tsx │ │ │ │ ├── component-highlighter.tsx │ │ │ │ ├── convert.ts │ │ │ │ ├── copy-button.tsx │ │ │ │ ├── footer-status.tsx │ │ │ │ ├── footer.tsx │ │ │ │ ├── header.tsx │ │ │ │ ├── highlight-text.tsx │ │ │ │ ├── image-zoom.tsx │ │ │ │ ├── latency-chart-table.tsx │ │ │ │ ├── link.tsx │ │ │ │ ├── listing.ts │ │ │ │ ├── logo-with-context-menu.tsx │ │ │ │ ├── mdx-components/ │ │ │ │ │ ├── button-link.tsx │ │ │ │ │ ├── code.tsx │ │ │ │ │ ├── custom-image.tsx │ │ │ │ │ ├── custom-link.tsx │ │ │ │ │ ├── details.tsx │ │ │ │ │ ├── grid.tsx │ │ │ │ │ ├── heading.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── pre.tsx │ │ │ │ │ ├── status-page-example.tsx │ │ │ │ │ ├── table.tsx │ │ │ │ │ └── tweet.tsx │ │ │ │ ├── mdx.tsx │ │ │ │ ├── nav.tsx │ │ │ │ ├── pages/ │ │ │ │ │ ├── blog/ │ │ │ │ │ │ ├── 2023-year-review.mdx │ │ │ │ │ │ ├── 2026-roadmap.mdx │ │ │ │ │ │ ├── data-table-redesign.mdx │ │ │ │ │ │ ├── deploy-private-locations-raspberry-pi.mdx │ │ │ │ │ │ ├── dynamic-breadcrumb-nextjs.mdx │ │ │ │ │ │ ├── event-analytics-implementation.mdx │ │ │ │ │ │ ├── global-latency-monitoring-benchmark-hono-hetzner.mdx │ │ │ │ │ │ ├── hono-vercel-fluid-compute.mdx │ │ │ │ │ │ ├── how-we-build-our-github-action.mdx │ │ │ │ │ │ ├── introducing-goatstack.mdx │ │ │ │ │ │ ├── introducing-openstatus-cli.mdx │ │ │ │ │ │ ├── introducing-status-page-theme-explorer.mdx │ │ │ │ │ │ ├── live-mode-infinite-query.mdx │ │ │ │ │ │ ├── migrating-from-zod-openapi-to-connectrpc.mdx │ │ │ │ │ │ ├── migration-auth-clerk-to-next-auth.mdx │ │ │ │ │ │ ├── migration-backend-from-vercel-to-fly.mdx │ │ │ │ │ │ ├── migration-planetscale-to-turso.mdx │ │ │ │ │ │ ├── monitoring-latency-cf-workers-fly-koyeb-raylway-render.mdx │ │ │ │ │ │ ├── monitoring-latency-vercel-edge-vs-serverless.mdx │ │ │ │ │ │ ├── new-dashboard-we-are-so-back.mdx │ │ │ │ │ │ ├── nobody-should-hand-code-a-data-table.mdx │ │ │ │ │ │ ├── openstatus-infra.mdx │ │ │ │ │ │ ├── openstatus-light-viewer.mdx │ │ │ │ │ │ ├── openstatus-slack-agent.mdx │ │ │ │ │ │ ├── our-new-pricing-explained.mdx │ │ │ │ │ │ ├── our-producthunt-launch-brutal-reality.mdx │ │ │ │ │ │ ├── pricing-update-july-2024.mdx │ │ │ │ │ │ ├── product-strategy-a-reality-check.mdx │ │ │ │ │ │ ├── q1-2024-update.mdx │ │ │ │ │ │ ├── reflecting-1-year-building-openstatus.mdx │ │ │ │ │ │ ├── rss-app-slack-feed.mdx │ │ │ │ │ │ ├── same-pricing-more-monitors.mdx │ │ │ │ │ │ ├── secure-api-with-unkey.mdx │ │ │ │ │ │ ├── shadcn-component-registry.mdx │ │ │ │ │ │ ├── status-page-addons.mdx │ │ │ │ │ │ ├── status-page-components.mdx │ │ │ │ │ │ ├── status-pages-is-politics.mdx │ │ │ │ │ │ ├── telegram-group-qr-integration.mdx │ │ │ │ │ │ ├── the-first-48-hours.mdx │ │ │ │ │ │ └── vision-2025.mdx │ │ │ │ │ ├── changelog/ │ │ │ │ │ │ ├── auto-resolved-incidents.mdx │ │ │ │ │ │ ├── binary-payload.mdx │ │ │ │ │ │ ├── check-run-api.mdx │ │ │ │ │ │ ├── checker-playground.mdx │ │ │ │ │ │ ├── cli-import-apply.mdx │ │ │ │ │ │ ├── cli-improvement.mdx │ │ │ │ │ │ ├── cli-monitor-template.mdx │ │ │ │ │ │ ├── clone-monitor.mdx │ │ │ │ │ │ ├── curl-builder-playground.mdx │ │ │ │ │ │ ├── dark-theme-support.mdx │ │ │ │ │ │ ├── dashboard-metrics-card.mdx │ │ │ │ │ │ ├── dns-monitoring.mdx │ │ │ │ │ │ ├── docker-checker.mdx │ │ │ │ │ │ ├── follow-redirect.mdx │ │ │ │ │ │ ├── github-action.mdx │ │ │ │ │ │ ├── global-speed-checker-skills.mdx │ │ │ │ │ │ ├── golang-monitor-checker.mdx │ │ │ │ │ │ ├── google-chat-notifications.mdx │ │ │ │ │ │ ├── grafana-oncall-integration.mdx │ │ │ │ │ │ ├── grouped-monitors.mdx │ │ │ │ │ │ ├── individual-status-report-page.mdx │ │ │ │ │ │ ├── json-status-page.mdx │ │ │ │ │ │ ├── latency-quantiles.mdx │ │ │ │ │ │ ├── maintenance-status.mdx │ │ │ │ │ │ ├── monitor-external-name.mdx │ │ │ │ │ │ ├── monitor-tags.mdx │ │ │ │ │ │ ├── monitor-threshold.mdx │ │ │ │ │ │ ├── more-regions.mdx │ │ │ │ │ │ ├── multi-cloud-fly-railway-koyeb.mdx │ │ │ │ │ │ ├── multi-region-monitoring.mdx │ │ │ │ │ │ ├── ntfy-sh-integration.mdx │ │ │ │ │ │ ├── openstatus-cli.mdx │ │ │ │ │ │ ├── openstatus-sdk.mdx │ │ │ │ │ │ ├── opentelemetry.mdx │ │ │ │ │ │ ├── pagerduty-integration.mdx │ │ │ │ │ │ ├── password-protected-status-page.mdx │ │ │ │ │ │ ├── play-checker-improvements.mdx │ │ │ │ │ │ ├── private-location.mdx │ │ │ │ │ │ ├── public-monitors.mdx │ │ │ │ │ │ ├── raycast-integration.mdx │ │ │ │ │ │ ├── request-assertions.mdx │ │ │ │ │ │ ├── response-time-charts.mdx │ │ │ │ │ │ ├── screenshot-incident.mdx │ │ │ │ │ │ ├── slack-agent.mdx │ │ │ │ │ │ ├── slack-discord-improvements.mdx │ │ │ │ │ │ ├── slack-discord-notification.mdx │ │ │ │ │ │ ├── sms-notification.mdx │ │ │ │ │ │ ├── status-page-badge-v2.mdx │ │ │ │ │ │ ├── status-page-badge.mdx │ │ │ │ │ │ ├── status-page-colors-and-more.mdx │ │ │ │ │ │ ├── status-page-component-subscription.mdx │ │ │ │ │ │ ├── status-page-email-authentification.mdx │ │ │ │ │ │ ├── status-page-feed.mdx │ │ │ │ │ │ ├── status-page-monitor-order.mdx │ │ │ │ │ │ ├── status-page-monitor-values-visibility.mdx │ │ │ │ │ │ ├── status-page-redesign-beta.mdx │ │ │ │ │ │ ├── status-page-slack-feed-subscribe.mdx │ │ │ │ │ │ ├── status-page-subscribers.mdx │ │ │ │ │ │ ├── status-page-unsubscribe.mdx │ │ │ │ │ │ ├── status-page-white-label.mdx │ │ │ │ │ │ ├── status-report-location-change.mdx │ │ │ │ │ │ ├── status-update-subscriber.mdx │ │ │ │ │ │ ├── status-widget.mdx │ │ │ │ │ │ ├── tcp-monitoring.mdx │ │ │ │ │ │ ├── team-invites.mdx │ │ │ │ │ │ ├── telegram-bot-integration.mdx │ │ │ │ │ │ ├── terraform-provider.mdx │ │ │ │ │ │ ├── webhook-integration.mdx │ │ │ │ │ │ └── whatsapp-notifications.mdx │ │ │ │ │ ├── compare/ │ │ │ │ │ │ ├── atlassian-statuspage.mdx │ │ │ │ │ │ ├── betterstack.mdx │ │ │ │ │ │ ├── checkly.mdx │ │ │ │ │ │ ├── incidentio.mdx │ │ │ │ │ │ ├── instatus.mdx │ │ │ │ │ │ ├── statusio.mdx │ │ │ │ │ │ ├── uptime-kuma.mdx │ │ │ │ │ │ └── uptime-robot.mdx │ │ │ │ │ ├── guides/ │ │ │ │ │ │ ├── api-service-disruption.mdx │ │ │ │ │ │ ├── best-opensource-status-page-2026.mdx │ │ │ │ │ │ ├── boring-is-better-for-status-pages.mdx │ │ │ │ │ │ ├── database-performance-degradation.mdx │ │ │ │ │ │ ├── deployment-rollback.mdx │ │ │ │ │ │ ├── feature-degradation.mdx │ │ │ │ │ │ ├── http-headers.mdx │ │ │ │ │ │ ├── incident-severity-matrix.mdx │ │ │ │ │ │ ├── network-connectivity-issues.mdx │ │ │ │ │ │ ├── public-postmortem-underrated-marketing.mdx │ │ │ │ │ │ ├── public-vs-private-status-pages.mdx │ │ │ │ │ │ ├── scheduled-maintenance.mdx │ │ │ │ │ │ ├── security-incident-response.mdx │ │ │ │ │ │ ├── sla-vs-slo-vs-sli.mdx │ │ │ │ │ │ ├── top-five-atlassian-statuspage-alternatives.mdx │ │ │ │ │ │ ├── why-every-saas-needs-a-status-page.mdx │ │ │ │ │ │ └── why-uptime-percentage-is-misleading.mdx │ │ │ │ │ ├── home.mdx │ │ │ │ │ ├── product/ │ │ │ │ │ │ ├── status-page.mdx │ │ │ │ │ │ └── uptime-monitoring.mdx │ │ │ │ │ ├── tools/ │ │ │ │ │ │ ├── checker-slug.mdx │ │ │ │ │ │ ├── checker.mdx │ │ │ │ │ │ ├── curl.mdx │ │ │ │ │ │ ├── severity-matrix.mdx │ │ │ │ │ │ └── uptime-sla.mdx │ │ │ │ │ ├── unrelated/ │ │ │ │ │ │ ├── about.mdx │ │ │ │ │ │ ├── not-found.mdx │ │ │ │ │ │ ├── pricing.mdx │ │ │ │ │ │ ├── privacy.mdx │ │ │ │ │ │ ├── registry.mdx │ │ │ │ │ │ ├── subprocessors.mdx │ │ │ │ │ │ └── terms.mdx │ │ │ │ │ └── use-case/ │ │ │ │ │ ├── api-providers.mdx │ │ │ │ │ ├── compliance.mdx │ │ │ │ │ ├── crypto.mdx │ │ │ │ │ └── open-source.mdx │ │ │ │ ├── resolve.ts │ │ │ │ ├── shadcn-registry-example.tsx │ │ │ │ ├── simple-chart.tsx │ │ │ │ ├── sub-nav.tsx │ │ │ │ ├── theme-toggle.tsx │ │ │ │ └── utils.ts │ │ │ ├── data/ │ │ │ │ ├── author.ts │ │ │ │ ├── code-dictionary.ts │ │ │ │ ├── content.ts │ │ │ │ ├── incidents-dictionary.ts │ │ │ │ └── trigger-dictionary.ts │ │ │ ├── env.ts │ │ │ ├── instrumentation.ts │ │ │ ├── lib/ │ │ │ │ ├── checker/ │ │ │ │ │ ├── mock.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── domains.ts │ │ │ │ ├── github.ts │ │ │ │ ├── image-dimensions.ts │ │ │ │ ├── maintenances/ │ │ │ │ │ └── utils.ts │ │ │ │ ├── metadata/ │ │ │ │ │ ├── shared-metadata.ts │ │ │ │ │ └── structured-data.ts │ │ │ │ ├── monitor/ │ │ │ │ │ └── utils.ts │ │ │ │ ├── preferred-settings/ │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ ├── shared.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── ratelimit.ts │ │ │ │ ├── stream.ts │ │ │ │ ├── stripe/ │ │ │ │ │ └── client.ts │ │ │ │ ├── tb.ts │ │ │ │ ├── timezone.ts │ │ │ │ ├── toast.tsx │ │ │ │ └── utils.ts │ │ │ ├── public/ │ │ │ │ └── fonts/ │ │ │ │ ├── CommitMono-400-Italic.otf │ │ │ │ ├── CommitMono-400-Regular.otf │ │ │ │ ├── CommitMono-700-Italic.otf │ │ │ │ └── CommitMono-700-Regular.otf │ │ │ ├── react-table.d.ts │ │ │ ├── styles/ │ │ │ │ └── globals.css │ │ │ ├── trpc/ │ │ │ │ ├── client.ts │ │ │ │ ├── query-client.ts │ │ │ │ ├── rq-client.tsx │ │ │ │ ├── rq-server.ts │ │ │ │ ├── server.ts │ │ │ │ └── shared.ts │ │ │ └── types/ │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ ├── turbo.json │ │ └── vercel.json │ └── workflows/ │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── docker-compose.yaml │ ├── dofigen.yml │ ├── fly.toml │ ├── package.json │ ├── src/ │ │ ├── build-docker.ts │ │ ├── checker/ │ │ │ ├── alerting.test.ts │ │ │ ├── alerting.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── cron/ │ │ │ ├── checker.ts │ │ │ ├── emails.ts │ │ │ ├── index.ts │ │ │ └── monitor.ts │ │ ├── env.ts │ │ ├── incident/ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── db.ts │ │ ├── scripts/ │ │ │ └── tinybird.ts │ │ └── utils/ │ │ └── audit-log.ts │ ├── start.sh │ └── tsconfig.json ├── biome.jsonc ├── bunfig.toml ├── config.openstatus.yaml ├── coolify-deployment.yaml ├── devbox.json ├── docker-compose-lightweight.yaml ├── docker-compose.github-packages.yaml ├── docker-compose.yaml ├── infra/ │ └── openstatus.yaml ├── knip.ts ├── package.json ├── packages/ │ ├── analytics/ │ │ ├── env.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── events.ts │ │ │ ├── index.ts │ │ │ ├── server.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── api/ │ │ ├── env.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── edge.ts │ │ │ ├── env.ts │ │ │ ├── lambda.ts │ │ │ ├── root.ts │ │ │ ├── router/ │ │ │ │ ├── apiKey.ts │ │ │ │ ├── blob.ts │ │ │ │ ├── checker.ts │ │ │ │ ├── domain.ts │ │ │ │ ├── email/ │ │ │ │ │ └── index.ts │ │ │ │ ├── feedback.ts │ │ │ │ ├── import.test.ts │ │ │ │ ├── import.ts │ │ │ │ ├── incident.ts │ │ │ │ ├── integration.ts │ │ │ │ ├── invitation.ts │ │ │ │ ├── maintenance.test.ts │ │ │ │ ├── maintenance.ts │ │ │ │ ├── member.ts │ │ │ │ ├── monitor.test.ts │ │ │ │ ├── monitor.ts │ │ │ │ ├── monitorTag.ts │ │ │ │ ├── notification.test.ts │ │ │ │ ├── notification.ts │ │ │ │ ├── page.ts │ │ │ │ ├── pageComponent.test.ts │ │ │ │ ├── pageComponent.ts │ │ │ │ ├── pageSubscriber.ts │ │ │ │ ├── privateLocation.test.ts │ │ │ │ ├── privateLocation.ts │ │ │ │ ├── statusPage.e2e.test.ts │ │ │ │ ├── statusPage.ts │ │ │ │ ├── statusPage.unsubscribe.test.ts │ │ │ │ ├── statusPage.utils.test.ts │ │ │ │ ├── statusPage.utils.ts │ │ │ │ ├── statusReport.test.ts │ │ │ │ ├── statusReport.ts │ │ │ │ ├── stripe/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── shared.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ └── webhook.ts │ │ │ │ ├── tinybird/ │ │ │ │ │ ├── index.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── user.ts │ │ │ │ ├── utils.ts │ │ │ │ ├── workspace.test.ts │ │ │ │ └── workspace.ts │ │ │ ├── service/ │ │ │ │ ├── apiKey.test.ts │ │ │ │ ├── apiKey.ts │ │ │ │ ├── import.test.ts │ │ │ │ ├── import.ts │ │ │ │ └── telegram-updates.ts │ │ │ ├── test/ │ │ │ │ └── preload.ts │ │ │ └── trpc.ts │ │ └── tsconfig.json │ ├── assertions/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── dictionary.ts │ │ │ ├── index.ts │ │ │ ├── serializing.ts │ │ │ ├── type-guards.ts │ │ │ ├── types.ts │ │ │ └── v1.ts │ │ └── tsconfig.json │ ├── db/ │ │ ├── README.md │ │ ├── drizzle/ │ │ │ ├── 0000_lively_master_chief.sql │ │ │ ├── 0001_brainy_beast.sql │ │ │ ├── 0002_luxuriant_ser_duncan.sql │ │ │ ├── 0003_glamorous_living_mummy.sql │ │ │ ├── 0004_fixed_dakota_north.sql │ │ │ ├── 0005_even_baron_strucker.sql │ │ │ ├── 0006_tired_anita_blake.sql │ │ │ ├── 0007_complex_frog_thor.sql │ │ │ ├── 0008_overjoyed_sunset_bain.sql │ │ │ ├── 0009_small_maximus.sql │ │ │ ├── 0010_lame_songbird.sql │ │ │ ├── 0011_bright_jazinda.sql │ │ │ ├── 0012_tan_magma.sql │ │ │ ├── 0013_tired_paladin.sql │ │ │ ├── 0014_adorable_skaar.sql │ │ │ ├── 0015_bent_sister_grimm.sql │ │ │ ├── 0016_certain_praxagora.sql │ │ │ ├── 0017_loose_maggott.sql │ │ │ ├── 0018_neat_orphan.sql │ │ │ ├── 0019_dashing_malcolm_colcord.sql │ │ │ ├── 0020_flat_bedlam.sql │ │ │ ├── 0021_reflective_nico_minoru.sql │ │ │ ├── 0022_chunky_rockslide.sql │ │ │ ├── 0023_dry_blink.sql │ │ │ ├── 0024_young_proudstar.sql │ │ │ ├── 0025_strong_thunderball.sql │ │ │ ├── 0026_giant_absorbing_man.sql │ │ │ ├── 0027_bizarre_bastion.sql │ │ │ ├── 0028_thin_power_pack.sql │ │ │ ├── 0029_regular_marrow.sql │ │ │ ├── 0030_elite_barracuda.sql │ │ │ ├── 0031_lowly_gabe_jones.sql │ │ │ ├── 0032_hot_swordsman.sql │ │ │ ├── 0033_solid_colossus.sql │ │ │ ├── 0034_serious_shard.sql │ │ │ ├── 0035_open_the_professor.sql │ │ │ ├── 0036_gifted_deathbird.sql │ │ │ ├── 0037_equal_beyonder.sql │ │ │ ├── 0038_foamy_stardust.sql │ │ │ ├── 0039_lonely_jigsaw.sql │ │ │ ├── 0040_narrow_anthem.sql │ │ │ ├── 0041_nasty_jigsaw.sql │ │ │ ├── 0042_great_epoch.sql │ │ │ ├── 0043_low_lily_hollister.sql │ │ │ ├── 0044_illegal_turbo.sql │ │ │ ├── 0045_little_paladin.sql │ │ │ ├── 0046_lucky_tarantula.sql │ │ │ ├── 0047_nifty_roughhouse.sql │ │ │ ├── 0048_neat_tempest.sql │ │ │ ├── 0049_sloppy_inhumans.sql │ │ │ ├── 0050_damp_xorn.sql │ │ │ ├── 0051_fuzzy_red_hulk.sql │ │ │ ├── 0052_illegal_killraven.sql │ │ │ ├── 0053_dark_orphan.sql │ │ │ ├── 0054_bitter_lilandra.sql │ │ │ ├── 0055_spicy_bastion.sql │ │ │ ├── 0056_violet_shotgun.sql │ │ │ ├── 0057_curious_xorn.sql │ │ │ ├── 0058_absent_chameleon.sql │ │ │ └── meta/ │ │ │ ├── 0000_snapshot.json │ │ │ ├── 0001_snapshot.json │ │ │ ├── 0002_snapshot.json │ │ │ ├── 0003_snapshot.json │ │ │ ├── 0004_snapshot.json │ │ │ ├── 0005_snapshot.json │ │ │ ├── 0006_snapshot.json │ │ │ ├── 0007_snapshot.json │ │ │ ├── 0008_snapshot.json │ │ │ ├── 0009_snapshot.json │ │ │ ├── 0010_snapshot.json │ │ │ ├── 0011_snapshot.json │ │ │ ├── 0012_snapshot.json │ │ │ ├── 0013_snapshot.json │ │ │ ├── 0014_snapshot.json │ │ │ ├── 0015_snapshot.json │ │ │ ├── 0016_snapshot.json │ │ │ ├── 0017_snapshot.json │ │ │ ├── 0018_snapshot.json │ │ │ ├── 0019_snapshot.json │ │ │ ├── 0020_snapshot.json │ │ │ ├── 0021_snapshot.json │ │ │ ├── 0022_snapshot.json │ │ │ ├── 0023_snapshot.json │ │ │ ├── 0024_snapshot.json │ │ │ ├── 0025_snapshot.json │ │ │ ├── 0026_snapshot.json │ │ │ ├── 0027_snapshot.json │ │ │ ├── 0028_snapshot.json │ │ │ ├── 0029_snapshot.json │ │ │ ├── 0030_snapshot.json │ │ │ ├── 0031_snapshot.json │ │ │ ├── 0032_snapshot.json │ │ │ ├── 0033_snapshot.json │ │ │ ├── 0034_snapshot.json │ │ │ ├── 0035_snapshot.json │ │ │ ├── 0036_snapshot.json │ │ │ ├── 0037_snapshot.json │ │ │ ├── 0038_snapshot.json │ │ │ ├── 0039_snapshot.json │ │ │ ├── 0040_snapshot.json │ │ │ ├── 0041_snapshot.json │ │ │ ├── 0042_snapshot.json │ │ │ ├── 0043_snapshot.json │ │ │ ├── 0044_snapshot.json │ │ │ ├── 0045_snapshot.json │ │ │ ├── 0046_snapshot.json │ │ │ ├── 0047_snapshot.json │ │ │ ├── 0048_snapshot.json │ │ │ ├── 0049_snapshot.json │ │ │ ├── 0050_snapshot.json │ │ │ ├── 0051_snapshot.json │ │ │ ├── 0052_snapshot.json │ │ │ ├── 0053_snapshot.json │ │ │ ├── 0054_snapshot.json │ │ │ ├── 0055_snapshot.json │ │ │ ├── 0056_snapshot.json │ │ │ ├── 0057_snapshot.json │ │ │ ├── 0058_snapshot.json │ │ │ └── _journal.json │ │ ├── drizzle.config.ts │ │ ├── env.mjs │ │ ├── env.ts │ │ ├── package.json │ │ ├── script/ │ │ │ ├── region-migration.test.ts │ │ │ └── region-migration.ts │ │ ├── src/ │ │ │ ├── db.ts │ │ │ ├── index.ts │ │ │ ├── migrate.mts │ │ │ ├── schema/ │ │ │ │ ├── api-keys/ │ │ │ │ │ ├── api_key.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── applications/ │ │ │ │ │ ├── application.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── check/ │ │ │ │ │ ├── check.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── incidents/ │ │ │ │ │ ├── incident.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── index.ts │ │ │ │ ├── integration.ts │ │ │ │ ├── invitations/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── invitation.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── maintenances/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── maintenance.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── monitor_groups/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── monitor_group.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── monitor_run/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── monitor_run.ts │ │ │ │ ├── monitor_status/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── monitor_status.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── monitor_tags/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── monitor_tag.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── monitors/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── monitor.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── notifications/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── page_component_groups/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── page_component_groups.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── page_components/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── page_components.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── page_subscribers/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── page_subscriber_to_page_component.ts │ │ │ │ │ ├── page_subscribers.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── pages/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── page.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── plan/ │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── private_locations/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── private_locations.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── shared.ts │ │ │ │ ├── status_reports/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── status_reports.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── users/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── user.ts │ │ │ │ │ └── validation.ts │ │ │ │ ├── viewers/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── validation.ts │ │ │ │ │ └── viewer.ts │ │ │ │ └── workspaces/ │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ ├── validation.ts │ │ │ │ └── workspace.ts │ │ │ ├── seed.mts │ │ │ ├── sync-db.ts │ │ │ └── utils/ │ │ │ ├── api-key.test.ts │ │ │ ├── api-key.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── emails/ │ │ ├── emails/ │ │ │ ├── _components/ │ │ │ │ ├── footer.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── styles.ts │ │ │ ├── feedback.tsx │ │ │ ├── followup.tsx │ │ │ ├── monitor-alert.tsx │ │ │ ├── monitor-deactivation.tsx │ │ │ ├── monitor-paused.tsx │ │ │ ├── page-subscription.tsx │ │ │ ├── slack-feedback.tsx │ │ │ ├── status-page-magic-link.tsx │ │ │ ├── status-report.tsx │ │ │ ├── subscribe.tsx │ │ │ ├── team-invitation.tsx │ │ │ ├── team-invite-reminder.tsx │ │ │ └── welcome.tsx │ │ ├── hotfix/ │ │ │ ├── monitor-alert.ts │ │ │ ├── monitor-deactivation.ts │ │ │ └── monitor-paused.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── client.integration.test.tsx │ │ │ ├── client.tsx │ │ │ ├── env.ts │ │ │ ├── index.ts │ │ │ ├── send.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── error/ │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── base-error.ts │ │ │ ├── error-code.ts │ │ │ ├── http-error.ts │ │ │ ├── schema-error.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── header-analysis/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── parser/ │ │ │ │ ├── cache-control.ts │ │ │ │ ├── cf-cache-status.ts │ │ │ │ ├── cf-ray.ts │ │ │ │ ├── fly-request-id.ts │ │ │ │ ├── x-vercel-cache.ts │ │ │ │ └── x-vercel-id.ts │ │ │ ├── regions/ │ │ │ │ ├── cloudflare.ts │ │ │ │ ├── fly.ts │ │ │ │ └── vercel.ts │ │ │ └── types/ │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── icons/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── discord.tsx │ │ │ ├── fly.tsx │ │ │ ├── github.tsx │ │ │ ├── google.tsx │ │ │ ├── grafana.tsx │ │ │ ├── index.tsx │ │ │ ├── koyeb.tsx │ │ │ ├── markdown.tsx │ │ │ ├── opsgenie.tsx │ │ │ ├── pagerduty.tsx │ │ │ ├── railway.tsx │ │ │ ├── slack.tsx │ │ │ ├── statuspage.tsx │ │ │ ├── telegram.tsx │ │ │ └── whatsapp.tsx │ │ └── tsconfig.json │ ├── importers/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── providers/ │ │ │ │ └── statuspage/ │ │ │ │ ├── api-types.ts │ │ │ │ ├── client.test.ts │ │ │ │ ├── client.ts │ │ │ │ ├── fixtures.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mapper.test.ts │ │ │ │ ├── mapper.ts │ │ │ │ ├── provider.test.ts │ │ │ │ └── provider.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── notifications/ │ │ ├── base/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils/ │ │ │ │ ├── colors.ts │ │ │ │ ├── duration.test.ts │ │ │ │ ├── duration.ts │ │ │ │ ├── incident.test.ts │ │ │ │ ├── incident.ts │ │ │ │ ├── message.ts │ │ │ │ └── timestamp.ts │ │ │ └── tsconfig.json │ │ ├── discord/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── embeds.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── mock.ts │ │ │ └── tsconfig.json │ │ ├── email/ │ │ │ ├── README.md │ │ │ ├── env.ts │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── mock.ts │ │ │ └── tsconfig.json │ │ ├── google-chat/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── mock.ts │ │ │ └── tsconfig.json │ │ ├── grafana-oncall/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── schema.ts │ │ │ └── tsconfig.json │ │ ├── ntfy/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── schema.ts │ │ │ └── tsconfig.json │ │ ├── opsgenie/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── schema.ts │ │ │ └── tsconfig.json │ │ ├── pagerduty/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── env.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── schema/ │ │ │ │ └── config.ts │ │ │ └── tsconfig.json │ │ ├── slack/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── blocks.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── mock.ts │ │ │ └── tsconfig.json │ │ ├── telegram/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── schema.ts │ │ │ └── tsconfig.json │ │ ├── twillio-sms/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── env.ts │ │ │ │ ├── index.test.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── twillio-whatsapp/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── env.ts │ │ │ │ ├── index.test.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ └── webhook/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.test.ts │ │ │ ├── index.ts │ │ │ └── schema.ts │ │ └── tsconfig.json │ ├── proto/ │ │ ├── api/ │ │ │ └── openstatus/ │ │ │ ├── health/ │ │ │ │ └── v1/ │ │ │ │ └── health.proto │ │ │ ├── maintenance/ │ │ │ │ └── v1/ │ │ │ │ ├── maintenance.proto │ │ │ │ └── service.proto │ │ │ ├── monitor/ │ │ │ │ └── v1/ │ │ │ │ ├── assertions.proto │ │ │ │ ├── dns_monitor.proto │ │ │ │ ├── http_monitor.proto │ │ │ │ ├── monitor.proto │ │ │ │ ├── service.proto │ │ │ │ └── tcp_monitor.proto │ │ │ ├── notification/ │ │ │ │ └── v1/ │ │ │ │ ├── notification.proto │ │ │ │ ├── providers.proto │ │ │ │ └── service.proto │ │ │ ├── status_page/ │ │ │ │ └── v1/ │ │ │ │ ├── page_component.proto │ │ │ │ ├── page_subscriber.proto │ │ │ │ ├── service.proto │ │ │ │ └── status_page.proto │ │ │ └── status_report/ │ │ │ └── v1/ │ │ │ ├── service.proto │ │ │ └── status_report.proto │ │ ├── base.openapi.yaml │ │ ├── buf.gen.go.yaml │ │ ├── buf.gen.openapi.yaml │ │ ├── buf.gen.ts.yaml │ │ ├── buf.yaml │ │ ├── gen/ │ │ │ ├── openapi.yaml │ │ │ └── ts/ │ │ │ ├── buf/ │ │ │ │ └── validate/ │ │ │ │ └── validate_pb.ts │ │ │ ├── gnostic/ │ │ │ │ └── openapi/ │ │ │ │ └── v3/ │ │ │ │ ├── annotations_pb.ts │ │ │ │ └── openapiv3_pb.ts │ │ │ ├── index.ts │ │ │ └── openstatus/ │ │ │ ├── health/ │ │ │ │ └── v1/ │ │ │ │ ├── health_pb.ts │ │ │ │ └── index.ts │ │ │ ├── maintenance/ │ │ │ │ └── v1/ │ │ │ │ ├── index.ts │ │ │ │ ├── maintenance_pb.ts │ │ │ │ └── service_pb.ts │ │ │ ├── monitor/ │ │ │ │ └── v1/ │ │ │ │ ├── assertions_pb.ts │ │ │ │ ├── dns_monitor_pb.ts │ │ │ │ ├── http_monitor_pb.ts │ │ │ │ ├── index.ts │ │ │ │ ├── monitor_pb.ts │ │ │ │ ├── service_pb.ts │ │ │ │ └── tcp_monitor_pb.ts │ │ │ ├── notification/ │ │ │ │ └── v1/ │ │ │ │ ├── index.ts │ │ │ │ ├── notification_pb.ts │ │ │ │ ├── providers_pb.ts │ │ │ │ └── service_pb.ts │ │ │ ├── status_page/ │ │ │ │ └── v1/ │ │ │ │ ├── index.ts │ │ │ │ ├── page_component_pb.ts │ │ │ │ ├── page_subscriber_pb.ts │ │ │ │ ├── service_pb.ts │ │ │ │ └── status_page_pb.ts │ │ │ └── status_report/ │ │ │ └── v1/ │ │ │ ├── index.ts │ │ │ ├── service_pb.ts │ │ │ └── status_report_pb.ts │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ └── private_location/ │ │ │ └── v1/ │ │ │ ├── assertions.proto │ │ │ ├── dns_monitor.proto │ │ │ ├── http_monitor.proto │ │ │ ├── private_location.proto │ │ │ └── tcp_monitor.proto │ │ ├── justfile │ │ ├── package.json │ │ ├── plan/ │ │ │ ├── PLAN.md │ │ │ └── api.md │ │ ├── scripts/ │ │ │ └── clean-openapi.ts │ │ └── tsconfig.json │ ├── react/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── styles.css │ │ │ ├── utils.ts │ │ │ └── widget.tsx │ │ ├── tsconfig.json │ │ └── tsup.config.js │ ├── regions/ │ │ ├── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── status-fetcher/ │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── fetch-utils.test.ts │ │ │ ├── fetchers/ │ │ │ │ ├── atlassian.test.ts │ │ │ │ ├── betterstack.test.ts │ │ │ │ ├── custom.test.ts │ │ │ │ ├── edge-cases.test.ts │ │ │ │ ├── html.test.ts │ │ │ │ ├── incidentio.test.ts │ │ │ │ └── instatus.test.ts │ │ │ ├── integration.test.ts │ │ │ └── utils.test.ts │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── test-fetchers.ts │ │ ├── src/ │ │ │ ├── data/ │ │ │ │ ├── directory.ts │ │ │ │ └── index.ts │ │ │ ├── fetch-utils.ts │ │ │ ├── fetchers/ │ │ │ │ ├── atlassian.ts │ │ │ │ ├── betterstack.ts │ │ │ │ ├── custom.ts │ │ │ │ ├── html.ts │ │ │ │ ├── incidentio.ts │ │ │ │ ├── index.ts │ │ │ │ └── instatus.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── subscriptions/ │ │ ├── bunfig.toml │ │ ├── package.json │ │ ├── src/ │ │ │ ├── channels/ │ │ │ │ ├── email.test.ts │ │ │ │ ├── email.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── webhook.test.ts │ │ │ │ └── webhook.ts │ │ │ ├── dispatcher.test.ts │ │ │ ├── dispatcher.ts │ │ │ ├── index.ts │ │ │ ├── service.test.ts │ │ │ ├── service.ts │ │ │ ├── test-preload.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── theme-store/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── dracula.ts │ │ │ ├── github.ts │ │ │ ├── index.ts │ │ │ ├── openstatus.ts │ │ │ ├── supabase.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── tinybird/ │ │ ├── README.md │ │ ├── datasources/ │ │ │ ├── audit_log__v0.datasource │ │ │ ├── check_response.datasource │ │ │ ├── check_response_http.datasource │ │ │ ├── dns_response__v0.datasource │ │ │ ├── external_status.datasource │ │ │ ├── mv__dns_status_45d__v0.datasource │ │ │ ├── mv__http_14d.datasource │ │ │ ├── mv__http_14d__v0.datasource │ │ │ ├── mv__http_14d__v1.datasource │ │ │ ├── mv__http_1d__v0.datasource │ │ │ ├── mv__http_1d__v1.datasource │ │ │ ├── mv__http_30d__v0.datasource │ │ │ ├── mv__http_30d__v1.datasource │ │ │ ├── mv__http_7d__v0.datasource │ │ │ ├── mv__http_7d__v1.datasource │ │ │ ├── mv__http_full_14d__v0.datasource │ │ │ ├── mv__http_full_30d__v0.datasource │ │ │ ├── mv__http_status_14d__v0.datasource │ │ │ ├── mv__http_status_45d__v0.datasource │ │ │ ├── mv__http_status_45d__v1.datasource │ │ │ ├── mv__http_status_7d__v0.datasource │ │ │ ├── mv__http_timing_phases_14d.datasource │ │ │ ├── mv__http_timing_phases_14d__v1.datasource │ │ │ ├── mv__http_uptime_30d__v1.datasource │ │ │ ├── mv__http_uptime_7d__v1.datasource │ │ │ ├── mv__http_workspace_30d__v0.datasource │ │ │ ├── mv__tcp_14d__v0.datasource │ │ │ ├── mv__tcp_14d__v1.datasource │ │ │ ├── mv__tcp_1d__v0.datasource │ │ │ ├── mv__tcp_1d__v1.datasource │ │ │ ├── mv__tcp_30d__v0.datasource │ │ │ ├── mv__tcp_30d__v1.datasource │ │ │ ├── mv__tcp_7d__v0.datasource │ │ │ ├── mv__tcp_7d__v1.datasource │ │ │ ├── mv__tcp_full_14d__v0.datasource │ │ │ ├── mv__tcp_full_30d__v0.datasource │ │ │ ├── mv__tcp_status_45d__v0.datasource │ │ │ ├── mv__tcp_status_45d__v1.datasource │ │ │ ├── mv__tcp_status_7d__v0.datasource │ │ │ ├── mv__tcp_uptime_30d__v1.datasource │ │ │ ├── mv__tcp_uptime_7d__v1.datasource │ │ │ ├── mv__tcp_workspace_30d__v0.datasource │ │ │ ├── mv_http_status_14d.datasource │ │ │ ├── ping_response__v8.datasource │ │ │ ├── tcp_response.datasource │ │ │ └── tcp_response__v0.datasource │ │ ├── endpoints/ │ │ │ ├── endpoint__audit_log.pipe │ │ │ ├── endpoint__audit_log__v1.pipe │ │ │ ├── endpoint__dns_get_14d__v0.pipe │ │ │ ├── endpoint__dns_list_14d__v0.pipe │ │ │ ├── endpoint__dns_metrics_14d__v0.pipe │ │ │ ├── endpoint__dns_metrics_1d__v0.pipe │ │ │ ├── endpoint__dns_metrics_7d__v0.pipe │ │ │ ├── endpoint__dns_metrics_latency_1d_multi__v0.pipe │ │ │ ├── endpoint__dns_metrics_latency_7d__v0.pipe │ │ │ ├── endpoint__dns_metrics_regions_14d__v0.pipe │ │ │ ├── endpoint__dns_status_45d__v0.pipe │ │ │ ├── endpoint__dns_uptime_30d__v0.pipe │ │ │ ├── endpoint__http_get_14d__v0.pipe │ │ │ ├── endpoint__http_get_30d.pipe │ │ │ ├── endpoint__http_list_14d.pipe │ │ │ ├── endpoint__http_list_14d__v1.pipe │ │ │ ├── endpoint__http_list_1d.pipe │ │ │ ├── endpoint__http_list_1d__v1.pipe │ │ │ ├── endpoint__http_list_7d.pipe │ │ │ ├── endpoint__http_list_7d__v1.pipe │ │ │ ├── endpoint__http_metrics_14d.pipe │ │ │ ├── endpoint__http_metrics_14d__v1.pipe │ │ │ ├── endpoint__http_metrics_1d.pipe │ │ │ ├── endpoint__http_metrics_1d__v1.pipe │ │ │ ├── endpoint__http_metrics_7d.pipe │ │ │ ├── endpoint__http_metrics_7d__v1.pipe │ │ │ ├── endpoint__http_metrics_by_interval_14d.pipe │ │ │ ├── endpoint__http_metrics_by_interval_1d.pipe │ │ │ ├── endpoint__http_metrics_by_interval_7d.pipe │ │ │ ├── endpoint__http_metrics_by_region_14d.pipe │ │ │ ├── endpoint__http_metrics_by_region_1d.pipe │ │ │ ├── endpoint__http_metrics_by_region_7d.pipe │ │ │ ├── endpoint__http_metrics_global_1d__v0.pipe │ │ │ ├── endpoint__http_metrics_latency_1d__v1.pipe │ │ │ ├── endpoint__http_metrics_latency_1d_multi__v1.pipe │ │ │ ├── endpoint__http_metrics_latency_7d__v1.pipe │ │ │ ├── endpoint__http_metrics_regions_14d__v0.pipe │ │ │ ├── endpoint__http_metrics_regions_1d__v0.pipe │ │ │ ├── endpoint__http_metrics_regions_7d__v0.pipe │ │ │ ├── endpoint__http_status_14d.pipe │ │ │ ├── endpoint__http_status_45d.pipe │ │ │ ├── endpoint__http_status_45d__v1.pipe │ │ │ ├── endpoint__http_status_7d.pipe │ │ │ ├── endpoint__http_timing_phases_14d__v1.pipe │ │ │ ├── endpoint__http_uptime_30d__v1.pipe │ │ │ ├── endpoint__http_uptime_7d__v1.pipe │ │ │ ├── endpoint__http_workspace_30d__v0.pipe │ │ │ ├── endpoint__stats_global.pipe │ │ │ ├── endpoint__tcp_get_14d__v0.pipe │ │ │ ├── endpoint__tcp_get_30d.pipe │ │ │ ├── endpoint__tcp_list_14d.pipe │ │ │ ├── endpoint__tcp_list_14d__v1.pipe │ │ │ ├── endpoint__tcp_list_1d.pipe │ │ │ ├── endpoint__tcp_list_1d__v1.pipe │ │ │ ├── endpoint__tcp_list_7d.pipe │ │ │ ├── endpoint__tcp_list_7d__v1.pipe │ │ │ ├── endpoint__tcp_metrics_14d.pipe │ │ │ ├── endpoint__tcp_metrics_14d__v1.pipe │ │ │ ├── endpoint__tcp_metrics_1d.pipe │ │ │ ├── endpoint__tcp_metrics_1d__v1.pipe │ │ │ ├── endpoint__tcp_metrics_7d.pipe │ │ │ ├── endpoint__tcp_metrics_7d__v1.pipe │ │ │ ├── endpoint__tcp_metrics_by_interval_14d.pipe │ │ │ ├── endpoint__tcp_metrics_by_interval_1d.pipe │ │ │ ├── endpoint__tcp_metrics_by_interval_7d.pipe │ │ │ ├── endpoint__tcp_metrics_by_region_14d.pipe │ │ │ ├── endpoint__tcp_metrics_by_region_1d.pipe │ │ │ ├── endpoint__tcp_metrics_by_region_7d.pipe │ │ │ ├── endpoint__tcp_metrics_global_1d.pipe │ │ │ ├── endpoint__tcp_metrics_latency_1d__v1.pipe │ │ │ ├── endpoint__tcp_metrics_latency_1d_multi__v1.pipe │ │ │ ├── endpoint__tcp_metrics_latency_7d__v1.pipe │ │ │ ├── endpoint__tcp_status_45d.pipe │ │ │ ├── endpoint__tcp_status_45d__v1.pipe │ │ │ ├── endpoint__tcp_status_7d.pipe │ │ │ ├── endpoint__tcp_uptime_30d__v1.pipe │ │ │ ├── endpoint__tcp_uptime_7d__v1.pipe │ │ │ ├── endpoint__tcp_workspace_30d__v0.pipe │ │ │ ├── endpoint_audit_log.pipe │ │ │ └── endpoint_external_status.pipe │ │ ├── package.json │ │ ├── pipes/ │ │ │ ├── __ttl_45d_count_utc_get.pipe │ │ │ ├── aggregate__dns_status_45d__v1.pipe │ │ │ ├── aggregate__http_14d__v1.pipe │ │ │ ├── aggregate__http_1d__v1.pipe │ │ │ ├── aggregate__http_30d__v1.pipe │ │ │ ├── aggregate__http_7d__v1.pipe │ │ │ ├── aggregate__http_full_14d__v0.pipe │ │ │ ├── aggregate__http_full_30d__v0.pipe │ │ │ ├── aggregate__http_status_14d.pipe │ │ │ ├── aggregate__http_status_45d.pipe │ │ │ ├── aggregate__http_status_45d__v1.pipe │ │ │ ├── aggregate__http_status_7d.pipe │ │ │ ├── aggregate__http_timing_phases_14d.pipe │ │ │ ├── aggregate__http_uptime_30d.pipe │ │ │ ├── aggregate__http_uptime_7d__v1.pipe │ │ │ ├── aggregate__http_workspace_30d__v0.pipe │ │ │ ├── aggregate__tcp_14d.pipe │ │ │ ├── aggregate__tcp_14d__v1.pipe │ │ │ ├── aggregate__tcp_1d.pipe │ │ │ ├── aggregate__tcp_1d__v1.pipe │ │ │ ├── aggregate__tcp_30d.pipe │ │ │ ├── aggregate__tcp_30d__v1.pipe │ │ │ ├── aggregate__tcp_7d.pipe │ │ │ ├── aggregate__tcp_7d__v1.pipe │ │ │ ├── aggregate__tcp_full_14d__v0.pipe │ │ │ ├── aggregate__tcp_full_30d__v0.pipe │ │ │ ├── aggregate__tcp_status_45d.pipe │ │ │ ├── aggregate__tcp_status_45d__v1.pipe │ │ │ ├── aggregate__tcp_status_7d.pipe │ │ │ ├── aggregate__tcp_uptime_30d__v1.pipe │ │ │ ├── aggregate__tcp_uptime_7d__v1.pipe │ │ │ ├── aggregate__tcp_workspace_30d__v0.pipe │ │ │ ├── get_result_for_on_demand_check_http.pipe │ │ │ ├── public_status.pipe │ │ │ ├── response_details.pipe │ │ │ ├── response_graph.pipe │ │ │ ├── response_list.pipe │ │ │ └── single_checks_get.pipe │ │ ├── src/ │ │ │ ├── audit-log/ │ │ │ │ ├── README.md │ │ │ │ ├── action-schema.ts │ │ │ │ ├── action-validation.ts │ │ │ │ ├── base-validation.ts │ │ │ │ ├── client.ts │ │ │ │ ├── examples.ts │ │ │ │ └── index.ts │ │ │ ├── client.ts │ │ │ ├── index.ts │ │ │ └── schema.ts │ │ └── tsconfig.json │ ├── tracker/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── blacklist.ts │ │ │ ├── config.ts │ │ │ ├── index.ts │ │ │ ├── mock.ts │ │ │ ├── tracker.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── tsconfig/ │ │ ├── base.json │ │ ├── nextjs.json │ │ ├── package.json │ │ └── react-library.json │ ├── ui/ │ │ ├── REGISTRY.md │ │ ├── components.json │ │ ├── package.json │ │ ├── registry.json │ │ ├── scripts/ │ │ │ ├── copy-to-web.mjs │ │ │ └── transform-imports.mjs │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── blocks/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── status-banner.tsx │ │ │ │ │ ├── status-bar.tsx │ │ │ │ │ ├── status-blank.tsx │ │ │ │ │ ├── status-component-group.tsx │ │ │ │ │ ├── status-component.tsx │ │ │ │ │ ├── status-events.tsx │ │ │ │ │ ├── status-feed.tsx │ │ │ │ │ ├── status-icon.tsx │ │ │ │ │ ├── status-layout.tsx │ │ │ │ │ ├── status-timestamp.tsx │ │ │ │ │ ├── status.types.ts │ │ │ │ │ └── status.utils.ts │ │ │ │ └── ui/ │ │ │ │ ├── alert-dialog.tsx │ │ │ │ ├── alert.tsx │ │ │ │ ├── avatar.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── breadcrumb.tsx │ │ │ │ ├── button-group.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── chart.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── context-menu.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── hover-card.tsx │ │ │ │ ├── input-group.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── kbd.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── qr-code.tsx │ │ │ │ ├── radio-group.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ ├── sidebar.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ └── tooltip.tsx │ │ │ ├── globals.css │ │ │ ├── hooks/ │ │ │ │ ├── use-cookie-state.ts │ │ │ │ ├── use-copy-to-clipboard.ts │ │ │ │ ├── use-debounce-callback.ts │ │ │ │ ├── use-debounce.ts │ │ │ │ ├── use-media-query.ts │ │ │ │ └── use-mobile.ts │ │ │ └── lib/ │ │ │ ├── compose-refs.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── upstash/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── redis/ │ │ │ └── client.ts │ │ └── tsconfig.json │ └── utils/ │ ├── index.ts │ ├── package.json │ └── tsconfig.json ├── pnpm-workspace.yaml ├── process-compose.yaml ├── ralph/ │ ├── .gitignore │ ├── README.md │ ├── afk-ralph.sh │ └── ralph-once.sh ├── turbo.json └── utils/ └── api-bruno/ ├── Monitor Summary.bru ├── OpenApi.bru ├── bruno.json ├── checker.bru ├── environments/ │ ├── local.bru │ └── prod.bru ├── incident_update/ │ └── Get Status Report Update.bru └── incidents/ ├── All Status Reports.bru └── Get Status Report.bru