From e7aaa9d932ae10cc9571ef15b2417f929224dd06 Mon Sep 17 00:00:00 2001 From: holkexyz Date: Tue, 7 Apr 2026 09:14:06 -1000 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20fix=20GEO=20audit=20issues=20?= =?UTF-8?q?=E2=80=94=20SSR=20landing=20page,=20structured=20data,=20crawl?= =?UTF-8?q?=20infra,=20about=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix critical SSR bailout: split HomeClient into server-rendered LandingPage with client islands (FAQ accordion, CTA/hero sign-in buttons) so AI crawlers see actual content instead of a blank loading spinner - Add JSON-LD structured data: Organization (Hypercerts Foundation with sameAs), WebSite, SoftwareApplication, and FAQPage schemas - Add robots.ts, sitemap.ts, and public/llms.txt for crawler discovery - Add OG/Twitter Card meta tags, canonical URLs, and page-specific metadata to all public pages (terms, privacy, dsa, about) - Add security headers (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy) via next.config.ts - Create /about page (~800 words) with AT Protocol explainer, Hypercerts Foundation background, and social links - Add About link to both landing and global footers - Add hero description paragraph for AI citability Co-Authored-By: Claude Opus 4.6 (1M context) --- next.config.ts | 16 ++ public/llms.txt | 26 ++ src/app/about/page.tsx | 235 ++++++++++++++++++ src/app/dsa/page.tsx | 15 ++ src/app/globals.css | 12 + src/app/layout.tsx | 79 +++++- src/app/page.tsx | 87 ++++++- src/app/privacy/page.tsx | 15 ++ src/app/robots.ts | 13 + src/app/sitemap.ts | 36 +++ src/app/terms/page.tsx | 15 ++ src/components/landing/hero-signin-button.tsx | 15 ++ src/components/landing/home-client.tsx | 83 ++----- src/components/landing/landing-page.tsx | 71 ++++++ .../landing/sections/faq-accordion.tsx | 45 ++++ .../landing/sections/faq-content.tsx | 43 ++++ .../landing/sections/ready-cta-button.tsx | 15 ++ .../landing/sections/ready-cta-content.tsx | 24 ++ src/components/layout/footer.tsx | 1 + 19 files changed, 776 insertions(+), 70 deletions(-) create mode 100644 public/llms.txt create mode 100644 src/app/about/page.tsx create mode 100644 src/app/robots.ts create mode 100644 src/app/sitemap.ts create mode 100644 src/components/landing/hero-signin-button.tsx create mode 100644 src/components/landing/landing-page.tsx create mode 100644 src/components/landing/sections/faq-accordion.tsx create mode 100644 src/components/landing/sections/faq-content.tsx create mode 100644 src/components/landing/sections/ready-cta-button.tsx create mode 100644 src/components/landing/sections/ready-cta-content.tsx diff --git a/next.config.ts b/next.config.ts index 769064fa..364eb096 100644 --- a/next.config.ts +++ b/next.config.ts @@ -10,6 +10,22 @@ const nextConfig: NextConfig = { }, ], }, + async headers() { + return [ + { + source: "/(.*)", + headers: [ + { key: "X-Content-Type-Options", value: "nosniff" }, + { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" }, + { key: "X-Frame-Options", value: "DENY" }, + { + key: "Permissions-Policy", + value: "camera=(), microphone=(), geolocation=()", + }, + ], + }, + ]; + }, async redirects() { return [ { diff --git a/public/llms.txt b/public/llms.txt new file mode 100644 index 00000000..55d052f7 --- /dev/null +++ b/public/llms.txt @@ -0,0 +1,26 @@ +# Certified + +> Certified is a passwordless identity platform built on AT Protocol, operated by the Hypercerts Foundation. It lets users create a single account that works across partner applications with full data portability and no vendor lock-in. + +## Main + +- [Home](https://certified.app): Create your Certified identity and use one account across partner apps +- [About](https://certified.app/about): About Certified and the Hypercerts Foundation +- [Terms of Service](https://certified.app/terms): Service terms for Certified and certified.one infrastructure +- [Privacy Policy](https://certified.app/privacy): Data processing practices, GDPR compliance, cookie policy +- [DSA Compliance](https://certified.app/dsa): Digital Services Act compliance information + +## About + +- [Hypercerts Foundation](https://hypercerts.org): Parent organization building open-source protocols for impact funding +- [GitHub](https://github.com/hypercerts-org): Open source repositories for Certified and related projects +- [Twitter](https://x.com/hypercerts): Hypercerts on X/Twitter +- [LinkedIn](https://www.linkedin.com/company/hypercerts): Hypercerts on LinkedIn +- [Bluesky](https://bsky.app/profile/hypercerts.org): Hypercerts on Bluesky + +## Partner Apps + +- [Ma Earth](https://maearth.com): Collective funding for regenerating Earth +- [GainForest](https://gainforest.earth): AI-powered forest monitoring and conservation rewards +- [Simocracy](https://simocracy.org): Democratic governance with verifiable identity +- [Hyperboards](https://hyperboards.org): Visual leaderboards for impact contributions diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 00000000..5eb065fb --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,235 @@ +import type { Metadata } from "next"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "About", + description: + "Certified is a passwordless identity platform built on AT Protocol, operated by the Hypercerts Foundation. Learn how Certified works, who builds it, and why portable identity matters.", + alternates: { canonical: "https://certified.app/about" }, + openGraph: { + title: "About — Certified", + description: + "Certified is a passwordless identity platform built on AT Protocol, operated by the Hypercerts Foundation.", + url: "https://certified.app/about", + }, +}; + +export default function AboutPage() { + return ( +
+
+

+ About Certified +

+ +
+
+

What is Certified?

+

+ Certified is a passwordless identity platform built on{" "} + + AT Protocol + + , the open standard behind Bluesky and a growing ecosystem of decentralized + applications. It lets you create a single account that works across every partner + app — no passwords, no vendor lock-in, and full control over your data. +

+

+ When you sign up for Certified, you get an AT Protocol identity and a Personal Data + Server (PDS) hosted at certified.one. Your profile, preferences, + and activity travel with you to every app that supports Certified — currently + including Ma Earth, GainForest, Simocracy, and Hyperboards. +

+
+ +
+

How does it work?

+

+ Sign-in is passwordless: you enter your email, receive a one-time code, and + you're in. Behind the scenes, Certified issues an AT Protocol identity tied to + your account. That identity is cryptographically verifiable and portable — it works + the same whether you're on certified.app, a partner application, or any future + service that speaks AT Protocol. +

+

+ Your data lives on your Personal Data Server. Applications read from it with your + permission. If you ever want to leave, you can export everything or migrate your + identity to a different PDS provider — no data is locked inside Certified. +

+
+ +
+

What is AT Protocol?

+

+ AT Protocol (Authenticated Transfer Protocol) is an open, federated protocol for + building social and identity applications. Unlike centralized platforms where one + company controls your account, AT Protocol separates identity from the application + layer. Your identity is yours — verifiable, portable, and independent of any single + service. +

+

+ Certified builds on AT Protocol to provide a managed, user-friendly entry point: you + get the benefits of decentralized identity without needing to understand the + underlying protocol or run your own infrastructure. +

+
+ +
+

+ Who operates Certified? +

+

+ Certified is operated by the{" "} + + Hypercerts Foundation + + , a Delaware nonstock corporation founded in February 2023. The Foundation develops + open infrastructure for the hypercerts ecosystem — tools and protocols that help + track, fund, and reward positive impact. +

+

+ Certified was created because the hypercerts ecosystem needed a portable identity + layer: a way for users to move between applications while keeping their profile, + contributions, and reputation intact. Rather than build a proprietary login system, + the Foundation chose AT Protocol as the foundation — making Certified interoperable + with a growing network of decentralized applications. +

+
+ +
+

+ How is Certified different from "Sign in with Google"? +

+

+ Both Certified and "Sign in with Google" let you use one account across + multiple apps. The key difference is ownership and portability: +

+
    +
  • + With Google: Google controls your identity. If Google suspends + your account or changes their terms, you lose access to every app you signed into. + Your data stays with each individual app. +
  • +
  • + With Certified: Your identity is an AT Protocol identity — it's + cryptographically yours. You can export your data, migrate to another provider, or + even self-host. No single company can revoke your identity. +
  • +
+
+ +
+

Open source

+

+ Every component of Certified is open source. The application code, the PDS + infrastructure, and the protocol it builds on are all publicly auditable. You can + review the source on{" "} + + GitHub + + . +

+

+ Security through transparency, not obscurity. If you find an issue, you can report + it directly or submit a fix. +

+
+ +
+

Infrastructure

+

+ The Personal Data Servers operated by Certified are hosted on cloud infrastructure + located within the European Union. The service is designed to comply with GDPR and + the Digital Services Act. +

+

+ For more details, see our{" "} + + Privacy Policy + {" "} + and{" "} + + DSA Compliance + {" "} + page. +

+
+ +
+

Contact

+

+ Hypercerts Foundation +
+ 1209 Orange St. +
+ Wilmington, DE 19801 +
+ United States +

+

+ Email:{" "} + + support@hypercerts.org + +

+

+ + Twitter/X + + {" · "} + + LinkedIn + + {" · "} + + Bluesky + + {" · "} + + GitHub + +

+
+
+
+
+ ); +} diff --git a/src/app/dsa/page.tsx b/src/app/dsa/page.tsx index 7093a92b..665e5f31 100644 --- a/src/app/dsa/page.tsx +++ b/src/app/dsa/page.tsx @@ -1,3 +1,18 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Digital Services Act — Compliance Information", + description: + "DSA compliance information for Certified, operated by the Hypercerts Foundation. Includes notice-and-action procedures and contact information.", + alternates: { canonical: "https://certified.app/dsa" }, + openGraph: { + title: "DSA Compliance — Certified", + description: + "Digital Services Act compliance information for Certified, operated by the Hypercerts Foundation.", + url: "https://certified.app/dsa", + }, +}; + export default function DsaPage() { return (
diff --git a/src/app/globals.css b/src/app/globals.css index 1c6f4aaf..a9c3cf69 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -427,6 +427,18 @@ h1, h2, h3, h4, h5, h6 { margin-bottom: 48px; } +.hero__description { + color: var(--color-dark-gray); + font-size: 0.95rem; + line-height: 1.7; + font-weight: 400; + max-width: 560px; + margin-left: auto; + margin-right: auto; + margin-bottom: 32px; + opacity: 0.7; +} + .hero__actions { display: flex; gap: 24px; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 9fbbadfb..64862f32 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -32,8 +32,75 @@ const instrumentSerif = Instrument_Serif({ }); export const metadata: Metadata = { - title: "Certified", + title: { + default: "Certified", + template: "%s — Certified", + }, description: "Your identity, everywhere.", + metadataBase: new URL("https://certified.app"), + openGraph: { + siteName: "Certified", + locale: "en_US", + type: "website", + images: [ + { + url: "/assets/certified-hero-1200x630.png", + width: 1200, + height: 630, + alt: "Certified — One account, any app", + }, + ], + }, + twitter: { + card: "summary_large_image", + images: ["/assets/certified-hero-1200x630.png"], + }, +}; + +const organizationJsonLd = { + "@context": "https://schema.org", + "@type": "Organization", + name: "Hypercerts Foundation", + legalName: "Hypercerts Foundation", + url: "https://hypercerts.org", + logo: "https://certified.app/assets/certified_brandmark_black.png", + description: + "A Delaware nonstock corporation that develops open infrastructure for the hypercerts ecosystem, operating the Certified identity platform.", + foundingDate: "2023-02-03", + address: { + "@type": "PostalAddress", + streetAddress: "1209 Orange St.", + addressLocality: "Wilmington", + addressRegion: "DE", + postalCode: "19801", + addressCountry: "US", + }, + contactPoint: { + "@type": "ContactPoint", + email: "legal@hypercerts.org", + contactType: "legal", + }, + sameAs: [ + "https://github.com/hypercerts-org", + "https://x.com/hypercerts", + "https://www.linkedin.com/company/hypercerts", + "https://bsky.app/profile/hypercerts.org", + ], +}; + +const websiteJsonLd = { + "@context": "https://schema.org", + "@type": "WebSite", + name: "Certified", + url: "https://certified.app", + description: + "Create your Certified identity and use one account across partner apps. No passwords, no lock-in.", + publisher: { + "@type": "Organization", + name: "Hypercerts Foundation", + url: "https://hypercerts.org", + }, + inLanguage: "en", }; export default function RootLayout({ @@ -43,6 +110,16 @@ export default function RootLayout({ }>) { return ( + +