From 19c947b4e401dacb3474e33841e06f5666d9d2ac Mon Sep 17 00:00:00 2001 From: ashishsinghbora <135435891+ashishsinghbora@users.noreply.github.com> Date: Sat, 26 Sep 2026 00:59:05 +0530 Subject: [PATCH] feat(sprint-7): robots.txt, dynamic sitemap, passport JSON export, and Schema.org JSON-LD --- src/app/api/people/[username]/export/route.ts | 32 +++++++++++++++++ src/app/people/[username]/page.tsx | 26 ++++++++++++++ src/app/robots.ts | 14 ++++++++ src/app/sitemap.ts | 36 +++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 src/app/api/people/[username]/export/route.ts create mode 100644 src/app/robots.ts create mode 100644 src/app/sitemap.ts diff --git a/src/app/api/people/[username]/export/route.ts b/src/app/api/people/[username]/export/route.ts new file mode 100644 index 0000000..8f60c58 --- /dev/null +++ b/src/app/api/people/[username]/export/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; +import { getContributorPassport } from "@/lib/passport"; +import { verifySessionToken, COOKIE_NAME } from "@/lib/auth/session"; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ username: string }> } +) { + const { username } = await params; + const token = request.cookies.get(COOKIE_NAME)?.value; + const sessionUser = token ? await verifySessionToken(token) : null; + + const passport = await getContributorPassport(username, sessionUser?.id); + + if ("notFound" in passport) { + return NextResponse.json({ error: "Contributor not found" }, { status: 404 }); + } + + if ("isPrivate" in passport) { + return NextResponse.json( + { error: "Contributor passport is private" }, + { status: 403 } + ); + } + + return NextResponse.json({ + platform: "TechNexusOrg", + schemaVersion: "1.0.0", + exportedAt: new Date().toISOString(), + passport, + }); +} diff --git a/src/app/people/[username]/page.tsx b/src/app/people/[username]/page.tsx index 025ef67..70cb8e0 100644 --- a/src/app/people/[username]/page.tsx +++ b/src/app/people/[username]/page.tsx @@ -87,6 +87,23 @@ export default async function ContributorPassportPage({ return (
+ {/* Schema.org Person JSON-LD */} +