From f25db707d78fca9629573c53cc70b3bf74077b64 Mon Sep 17 00:00:00 2001 From: Waleed Date: Sun, 30 Nov 2025 10:46:18 -0800 Subject: [PATCH] feat(statuspage): added statuspage, updated list of tools in footer, renamed routes (#2139) * feat(statuspage): added statuspage, updated list of tools in footer, renamed routes * ack PR comments --- apps/sim/app/(landing)/actions/github.ts | 4 +- .../footer/components/compliance-badges.tsx | 26 ++ .../components/footer/components/index.ts | 6 + .../components/footer/components/logo.tsx | 17 ++ .../footer/components/social-links.tsx | 44 ++++ .../footer/components/status-indicator.tsx | 40 +++ .../app/(landing)/components/footer/consts.ts | 96 +++++++ .../(landing)/components/footer/footer.tsx | 249 ++++-------------- apps/sim/app/(landing)/components/nav/nav.tsx | 2 +- .../app/api/{github-stars => stars}/route.ts | 0 apps/sim/app/api/status/route.ts | 97 +++++++ apps/sim/app/api/status/types.ts | 48 ++++ .../app/api/{wand-generate => wand}/route.ts | 0 .../w/[workflowId]/hooks/use-wand.ts | 2 +- apps/sim/components/icons.tsx | 52 +++- apps/sim/hooks/queries/status.ts | 42 +++ apps/sim/lib/logs/get-trigger-options.ts | 10 +- apps/sim/lib/logs/search-suggestions.ts | 11 +- 18 files changed, 521 insertions(+), 225 deletions(-) create mode 100644 apps/sim/app/(landing)/components/footer/components/compliance-badges.tsx create mode 100644 apps/sim/app/(landing)/components/footer/components/index.ts create mode 100644 apps/sim/app/(landing)/components/footer/components/logo.tsx create mode 100644 apps/sim/app/(landing)/components/footer/components/social-links.tsx create mode 100644 apps/sim/app/(landing)/components/footer/components/status-indicator.tsx create mode 100644 apps/sim/app/(landing)/components/footer/consts.ts rename apps/sim/app/api/{github-stars => stars}/route.ts (100%) create mode 100644 apps/sim/app/api/status/route.ts create mode 100644 apps/sim/app/api/status/types.ts rename apps/sim/app/api/{wand-generate => wand}/route.ts (100%) create mode 100644 apps/sim/hooks/queries/status.ts diff --git a/apps/sim/app/(landing)/actions/github.ts b/apps/sim/app/(landing)/actions/github.ts index efd28a2124..527f29ea44 100644 --- a/apps/sim/app/(landing)/actions/github.ts +++ b/apps/sim/app/(landing)/actions/github.ts @@ -1,12 +1,12 @@ import { createLogger } from '@/lib/logs/console/logger' -const DEFAULT_STARS = '15.4k' +const DEFAULT_STARS = '18.6k' const logger = createLogger('GitHubStars') export async function getFormattedGitHubStars(): Promise { try { - const response = await fetch('/api/github-stars', { + const response = await fetch('/api/stars', { headers: { 'Cache-Control': 'max-age=3600', // Cache for 1 hour }, diff --git a/apps/sim/app/(landing)/components/footer/components/compliance-badges.tsx b/apps/sim/app/(landing)/components/footer/components/compliance-badges.tsx new file mode 100644 index 0000000000..3288fee422 --- /dev/null +++ b/apps/sim/app/(landing)/components/footer/components/compliance-badges.tsx @@ -0,0 +1,26 @@ +import Image from 'next/image' +import Link from 'next/link' +import { HIPAABadgeIcon } from '@/components/icons' + +export default function ComplianceBadges() { + return ( +
+ {/* SOC2 badge */} + + SOC2 Compliant + + {/* HIPAA badge */} + + + +
+ ) +} diff --git a/apps/sim/app/(landing)/components/footer/components/index.ts b/apps/sim/app/(landing)/components/footer/components/index.ts new file mode 100644 index 0000000000..2f9863a65e --- /dev/null +++ b/apps/sim/app/(landing)/components/footer/components/index.ts @@ -0,0 +1,6 @@ +import ComplianceBadges from './compliance-badges' +import Logo from './logo' +import SocialLinks from './social-links' +import StatusIndicator from './status-indicator' + +export { ComplianceBadges, Logo, SocialLinks, StatusIndicator } diff --git a/apps/sim/app/(landing)/components/footer/components/logo.tsx b/apps/sim/app/(landing)/components/footer/components/logo.tsx new file mode 100644 index 0000000000..f9c2ec12cd --- /dev/null +++ b/apps/sim/app/(landing)/components/footer/components/logo.tsx @@ -0,0 +1,17 @@ +import Image from 'next/image' +import Link from 'next/link' + +export default function Logo() { + return ( + + Sim - Workflows for LLMs + + ) +} diff --git a/apps/sim/app/(landing)/components/footer/components/social-links.tsx b/apps/sim/app/(landing)/components/footer/components/social-links.tsx new file mode 100644 index 0000000000..ccc6ef8d70 --- /dev/null +++ b/apps/sim/app/(landing)/components/footer/components/social-links.tsx @@ -0,0 +1,44 @@ +import { DiscordIcon, GithubIcon, LinkedInIcon, xIcon as XIcon } from '@/components/icons' + +export default function SocialLinks() { + return ( +
+ + + + + + + + +
+ ) +} diff --git a/apps/sim/app/(landing)/components/footer/components/status-indicator.tsx b/apps/sim/app/(landing)/components/footer/components/status-indicator.tsx new file mode 100644 index 0000000000..7f6de994a3 --- /dev/null +++ b/apps/sim/app/(landing)/components/footer/components/status-indicator.tsx @@ -0,0 +1,40 @@ +'use client' + +import Link from 'next/link' +import { StatusDotIcon } from '@/components/icons' +import type { StatusType } from '@/app/api/status/types' +import { useStatus } from '@/hooks/queries/status' + +const STATUS_COLORS: Record = { + operational: 'text-[#10B981] hover:text-[#059669]', + degraded: 'text-[#F59E0B] hover:text-[#D97706]', + outage: 'text-[#EF4444] hover:text-[#DC2626]', + maintenance: 'text-[#3B82F6] hover:text-[#2563EB]', + loading: 'text-muted-foreground hover:text-foreground', + error: 'text-muted-foreground hover:text-foreground', +} + +export default function StatusIndicator() { + const { data, isLoading, isError } = useStatus() + + const status = isLoading ? 'loading' : isError ? 'error' : data?.status || 'error' + const message = isLoading + ? 'Checking Status...' + : isError + ? 'Status Unknown' + : data?.message || 'Status Unknown' + const statusUrl = data?.url || 'https://status.sim.ai' + + return ( + +