81 lines · 3.0 KB
import { createFileRoute, Link } from "@tanstack/react-router";
import { CtaBand } from "~/components/marketing/CtaBand";
import { MarketingHero } from "~/components/marketing/MarketingHero";
import { FEATURE_CATALOG } from "~/lib/marketing/catalog";
import { featurePage } from "~/lib/marketing/features";
import { buttonClass } from "~/ui/Button";
import { PageContainer } from "~/ui/PageContainer";
import { TextLink } from "~/ui/TextLink";
import { seo } from "~/utils/seo";

export const Route = createFileRoute("/features/")({
  head: ({ match }) => ({
    meta: seo({
      origin: match.context.publicUrl,
      path: "/features",
      title: "Features · gitfor",
      description: "Code hosting, review, CI/CD, planning, a browser editor, security scanning and site hosting.",
    }),
  }),
  component: FeaturesPage,
});

function FeaturesPage() {
  return (
    <>
      <MarketingHero
        title="What is gitfor?"
        lede="An open-source forge: Git hosting with code review, CI/CD, planning, a browser editor, security scanning and site hosting. Here is everything it does, grouped by area."
        actions={
          <>
            <Link to="/signup" className={buttonClass("primary")}>
              Create an account
            </Link>
            <Link to="/self-host" className={buttonClass("secondary")}>
              Self-host gitfor
            </Link>
          </>
        }
      />
      <PageContainer className="space-y-20 pb-24">