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 ( + +