/// <reference types="vite/client" />
import type { QueryClient } from "@tanstack/react-query";
import { HeadContent, Scripts, createRootRouteWithContext, useRouter, useRouterState } from "@tanstack/react-router";
import * as React from "react";
import { DefaultCatchBoundary } from "~/components/DefaultCatchBoundary";
import { NotFound } from "~/components/NotFound";
import { SiteHeader } from "~/components/SiteHeader";
import { SiteFooter } from "~/components/SiteFooter";
import { HovercardLayer } from "~/components/HovercardLayer";
import { AccountNotices } from "~/components/AccountNotices";
import { UpsellDialog } from "~/components/billing/UpsellDialog";
import { DisabledAccountNotice } from "~/components/DisabledAccountNotice";
import { reachableWhileDisabled } from "~/lib/account-disable";
import { getSession } from "~/fns/auth";
import appCss from "~/styles/app.css?url";
import { seo } from "~/utils/seo";
import { capturePageview, identifyViewer, initAnalytics, onNavigate } from "~/lib/analytics";
export const Route = createRootRouteWithContext<{ queryClient: QueryClient }>()({
beforeLoad: async () => {
const session = await getSession();
return {
viewer: session.viewer,
unreadNotifications: session.unreadNotifications,
analytics: session.analytics,
disabled: session.disabled,
};
},
head: () => ({
meta: [
{ charSet: "utf-8" },
{ name: "viewport", content: "width=device-width, initial-scale=1" },
{ name: "theme-color", content: "#030712" },
...seo({
title: "gitfor · Open-source Git hosting, code review and CI",
description:
"gitfor hosts Git repositories with pull requests, Actions-style CI, issues, security scanning and sites. Open source under 0BSD, and you can run your own instance.",
}),
],
links: [