import { Suspense } from "react";
import {
ArrowUpRight,
CheckCircle,
FileCode,
GitBranch,
GitPullRequest,
Github,
Upload,
Zap,
} from "lucide-react";
import type { Metadata } from "next";
import { getAllCategories, getCategoryCounts, getIconCount } from "@/lib/icons";
import { SidebarShell } from "@/components/layout/sidebar-shell";
import { SubmitForm } from "@/components/submit/submit-form";
export const metadata: Metadata = {
title: "Submit an Icon - Add Your Brand SVG",
description:
"Every brand deserves a place. Submit your brand SVG icon to theSVG, the open-source brand icon library. No gatekeeping, community-driven.",
openGraph: {
title: "Submit an Icon | theSVG",
description: "Submit your brand SVG to the open-source icon library.",
siteName: "theSVG",
},
alternates: { canonical: "https://thesvg.org/submit" },
};
export default function SubmitPage() {
const categories = getAllCategories();
const categoryCounts = getCategoryCounts();
const iconCount = getIconCount();
return (
Every brand deserves a place. No gatekeeping. Drop your SVG, fill in the details,
and submit directly via GitHub.
Drop your SVG to validate and submit via GitHub
Submit an Icon
How it works
SVG Requirements
{[
"Valid SVG/XML markup",
"Under 50KB file size",
"No embedded scripts or external references",
"viewBox attribute present",
"Gradients and multi-color SVGs welcome",
"You have the right to redistribute the icon",
].map((req) => (
Icon Entry Schema
{`{
"slug": "your-brand",
"title": "Your Brand",
"aliases": [],
"hex": "FF5733",
"categories": ["Software"],
"variants": {
"default": "/icons/your-brand/default.svg",
"mono": "/icons/your-brand/mono.svg",
"dark": "/icons/your-brand/dark.svg"
},
"license": "MIT",
"url": "https://yourbrand.com"
}`}
Quick Submit
{description}