import { createFileRoute, Link } from "@tanstack/react-router"; import { getDashboard, respondOrgInvitation } from "~/fns/account"; import { getProNudge } from "~/fns/pro"; import { ProNudge } from "~/components/billing/ProNudge"; import { useAction } from "~/hooks/use-action"; import { useEmailUnverified } from "~/hooks/use-viewer"; import { exploreRepos } from "~/fns/repos"; import { ActivityFeed } from "~/components/ActivityFeed"; import { Landing } from "~/components/marketing/Landing"; import { PageContainer } from "~/ui/PageContainer"; import { Panel } from "~/ui/Panel"; import { Button, buttonClass } from "~/ui/Button"; import { seo } from "~/utils/seo"; import { SITE_DESCRIPTION } from "~/lib/og"; export const Route = createFileRoute("/")({ loader: async ({ context }) => { if (context.viewer) { const [dashboard, nudge] = await Promise.all([getDashboard(), getProNudge()]); return { kind: "dashboard" as const, ...dashboard, proNudge: nudge.show }; } return { kind: "landing" as const, ...(await exploreRepos({ data: { page: 1 } })) }; }, head: ({ match }) => ({ meta: seo({ origin: match.context.publicUrl, path: "/", title: "gitfor ยท Open-source Git hosting, code review and CI", description: SITE_DESCRIPTION, }), }), component: HomePage, }); function InvitationRow({ org, role, invitedBy }: { org: string; role: string; invitedBy: string | null }) { const action = useAction(respondOrgInvitation); const unverified = useEmailUnverified(); return (