Skip to content

Commit a0cb839

Browse files
calliclesclaude
andauthored
Add SEO/GEO metadata: sitemap, robots.txt, manifest, and apple-icon (#2)
- app/sitemap.ts: Dynamic sitemap for public pages (/, /privacy, /terms) - app/robots.ts: Robots.txt allowing public pages, disallowing auth/admin/api routes - app/manifest.ts: Web App Manifest for PWA support with brand icons and theme color - app/apple-icon.tsx: 180x180 Apple touch icon matching the existing favicon style https://claude.ai/code/session_01BeZ2aVShBK6KnCi1tjRmkS Co-authored-by: Claude <noreply@anthropic.com>
1 parent 48f9a69 commit a0cb839

4 files changed

Lines changed: 109 additions & 0 deletions

File tree

app/apple-icon.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { ImageResponse } from "next/og"
2+
3+
export const size = {
4+
width: 180,
5+
height: 180,
6+
}
7+
8+
export const contentType = "image/png"
9+
10+
export default function AppleIcon() {
11+
return new ImageResponse(
12+
<div
13+
style={{
14+
display: "flex",
15+
width: "100%",
16+
height: "100%",
17+
borderRadius: 40,
18+
alignItems: "center",
19+
justifyContent: "center",
20+
fontSize: 110,
21+
fontWeight: 700,
22+
background: "linear-gradient(135deg, #1fbf95, #45e1b8)",
23+
color: "#041018",
24+
fontFamily: "Arial",
25+
}}
26+
>
27+
C
28+
</div>,
29+
{
30+
...size,
31+
}
32+
)
33+
}

app/manifest.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import type { MetadataRoute } from "next"
2+
3+
export default function manifest(): MetadataRoute.Manifest {
4+
return {
5+
name: "CLA Bot by fiveonefour",
6+
short_name: "CLA Bot",
7+
description:
8+
"Automate Contributor License Agreements for your GitHub organization. Install the GitHub App, upload your CLA in Markdown, and automatically check every pull request.",
9+
start_url: "/",
10+
display: "standalone",
11+
background_color: "#041018",
12+
theme_color: "#1fbf95",
13+
icons: [
14+
{
15+
src: "/brand/cla-bot-github-app-logo-512.png",
16+
sizes: "512x512",
17+
type: "image/png",
18+
purpose: "any",
19+
},
20+
{
21+
src: "/brand/cla-bot-github-app-logo-512.png",
22+
sizes: "512x512",
23+
type: "image/png",
24+
purpose: "maskable",
25+
},
26+
{
27+
src: "/brand/cla-bot-github-app-logo.png",
28+
sizes: "1024x1024",
29+
type: "image/png",
30+
purpose: "any",
31+
},
32+
],
33+
}
34+
}

app/robots.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { MetadataRoute } from "next"
2+
3+
const BASE_URL = "https://cla.fiveonefour.com"
4+
5+
export default function robots(): MetadataRoute.Robots {
6+
return {
7+
rules: [
8+
{
9+
userAgent: "*",
10+
allow: ["/", "/privacy", "/terms"],
11+
disallow: ["/admin/", "/contributor/", "/dashboard/", "/auth/", "/api/", "/sign/"],
12+
},
13+
],
14+
sitemap: `${BASE_URL}/sitemap.xml`,
15+
}
16+
}

app/sitemap.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import type { MetadataRoute } from "next"
2+
3+
const BASE_URL = "https://cla.fiveonefour.com"
4+
5+
export default function sitemap(): MetadataRoute.Sitemap {
6+
return [
7+
{
8+
url: BASE_URL,
9+
lastModified: new Date(),
10+
changeFrequency: "weekly",
11+
priority: 1,
12+
},
13+
{
14+
url: `${BASE_URL}/privacy`,
15+
lastModified: new Date(),
16+
changeFrequency: "monthly",
17+
priority: 0.5,
18+
},
19+
{
20+
url: `${BASE_URL}/terms`,
21+
lastModified: new Date(),
22+
changeFrequency: "monthly",
23+
priority: 0.5,
24+
},
25+
]
26+
}

0 commit comments

Comments
 (0)