diff --git a/www/public/favicon.ico b/www/public/favicon.ico new file mode 100644 index 0000000..299ae7d Binary files /dev/null and b/www/public/favicon.ico differ diff --git a/www/public/thumbnail.jpg b/www/public/thumbnail.jpg new file mode 100644 index 0000000..9524f5a Binary files /dev/null and b/www/public/thumbnail.jpg differ diff --git a/www/src/app/layout.tsx b/www/src/app/layout.tsx index 338d4f2..c86c28d 100644 --- a/www/src/app/layout.tsx +++ b/www/src/app/layout.tsx @@ -1,3 +1,4 @@ +import { constructMetadata } from '@/lib/utils' import Footer from '@/components/Footer' import Navbar from '@/components/Navbar' import Providers from '@/components/Providers' @@ -8,10 +9,7 @@ import './globals.css' const recursive = Recursive({ subsets: ['latin'] }) -export const metadata: Metadata = { - title: 'Fast, Open-Source Profanity API', - description: 'A project made by JoshTriedCoding', -} +export const metadata = constructMetadata() export const viewport: Viewport = { maximumScale: 1, // Disable auto-zoom on mobile Safari, credit to https://github.com/ai-ng diff --git a/www/src/components/Demo.tsx b/www/src/components/Demo.tsx index 4ac7f8e..8801464 100644 --- a/www/src/components/Demo.tsx +++ b/www/src/components/Demo.tsx @@ -38,7 +38,7 @@ const Demo = () => {
{ if (e.key === 'Enter') mutate({ message }) @@ -49,9 +49,23 @@ const Demo = () => { />
diff --git a/www/src/lib/utils.ts b/www/src/lib/utils.ts index d084cca..89ac876 100644 --- a/www/src/lib/utils.ts +++ b/www/src/lib/utils.ts @@ -1,6 +1,51 @@ import { type ClassValue, clsx } from "clsx" import { twMerge } from "tailwind-merge" +import { Metadata } from "next" export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } + +export function constructMetadata({ + title = 'Fast, Open-Source Profanity API', + description = 'A project made by JoshTriedCoding', + image = '/thumbnail.jpg', + icons = '/favicon.ico', + noIndex = false, +}: { + title?: string + description?: string + image?: string + icons?: string + noIndex?: boolean +} = {}): Metadata { + return { + title, + description, + openGraph: { + title, + description, + images: [ + { + url: image, + }, + ], + }, + twitter: { + card: 'summary_large_image', + title, + description, + images: [image], + creator: '@joshtriedcoding', + }, + icons, + metadataBase: new URL('https://www.profanity.dev'), + themeColor: '#FFF', + ...(noIndex && { + robots: { + index: false, + follow: false, + }, + }), + } +}