import { createFileRoute, Link } from "@tanstack/react-router";
import { MarketingHero } from "~/components/marketing/MarketingHero";
import { LOCAL_DEV, SELF_HOST_REQUIREMENTS, SELF_HOST_STEPS } from "~/lib/marketing/self-host";
import { SOURCE_URL } from "~/lib/marketing/site";
import { buttonClass } from "~/ui/Button";
import { CodeBlock } from "~/ui/CodeBlock";
import { PageContainer } from "~/ui/PageContainer";
import { Panel } from "~/ui/Panel";
import { ExternalLink } from "~/ui/TextLink";
import { seo } from "~/utils/seo";
export const Route = createFileRoute("/self-host")({
head: ({ match }) => ({
meta: seo({
origin: match.context.publicUrl,
path: "/self-host",
title: "Self-host · gitfor",
description: "Run your own gitfor instance: requirements, setup, deploy and runners.",
}),
}),
component: SelfHostPage,
});
function SelfHostPage() {
return (
<>
<MarketingHero
title="Self-host gitfor"
lede="gitfor is open source under 0BSD. Deploy it to your own Cloudflare account, and your repositories, issues, logs and artifacts are stored there."
actions={
<>
<a href={SOURCE_URL} rel="noreferrer" className={buttonClass("primary")}>
View the source
</a>
<Link to="/features" className={buttonClass("secondary")}>
See the features
</Link>
</>
}
/>