From 29ebada7a60bef10369a4cb21cbd89c9dd52fb03 Mon Sep 17 00:00:00 2001 From: sajeetharan Date: Thu, 6 Aug 2026 22:36:14 +0530 Subject: [PATCH] feat: enhance developer sharing functionality with Open Graph support and new share page design --- app/layout.jsx | 112 ++++++++++++++++++++++++++++++++- app/manifest.js | 19 ++++++ app/opengraph-image.jsx | 73 +++++++++++++++++++++ app/page.jsx | 28 ++++++++- app/robots.js | 14 +++++ app/share/[login]/page.jsx | 90 ++++++++++++++++++++++++++ app/sitemap.js | 50 +++++++++++++++ components/DetailPanel.jsx | 26 +++++--- public/llms.txt | 35 +++++++++++ styles/main.css | 126 +++++++++++++++++++++++++++++++++++++ 10 files changed, 560 insertions(+), 13 deletions(-) create mode 100644 app/manifest.js create mode 100644 app/opengraph-image.jsx create mode 100644 app/robots.js create mode 100644 app/share/[login]/page.jsx create mode 100644 app/sitemap.js create mode 100644 public/llms.txt diff --git a/app/layout.jsx b/app/layout.jsx index 0043f8a..bb734d1 100644 --- a/app/layout.jsx +++ b/app/layout.jsx @@ -1,9 +1,113 @@ import { Analytics } from '@vercel/analytics/react'; import '../styles/main.css'; +const siteUrl = process.env.NEXT_PUBLIC_SITE_URL + || (process.env.VERCEL_PROJECT_PRODUCTION_URL ? `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}` : 'https://dev-globe-viz.vercel.app'); +const title = 'DevGlobe — Where Developers and AI Agents Connect'; +const description = 'Discover developer identities, expertise, rankings, and connections worldwide on an interactive 3D globe.'; +const githubUrl = 'https://github.com/sajeetharan/devglobe'; + +const structuredData = { + '@context': 'https://schema.org', + '@graph': [ + { + '@type': 'WebSite', + '@id': `${siteUrl}/#website`, + url: siteUrl, + name: 'DevGlobe', + alternateName: 'Dev Globe', + description, + inLanguage: 'en', + publisher: { '@id': `${siteUrl}/#organization` }, + }, + { + '@type': 'Organization', + '@id': `${siteUrl}/#organization`, + name: 'DevGlobe', + url: siteUrl, + logo: { + '@type': 'ImageObject', + url: `${siteUrl}/devglobe.png`, + }, + sameAs: [githubUrl], + }, + { + '@type': 'WebApplication', + '@id': `${siteUrl}/#application`, + name: 'DevGlobe', + url: siteUrl, + description, + applicationCategory: 'DeveloperApplication', + operatingSystem: 'Any', + browserRequirements: 'Requires JavaScript and a WebGL-capable browser', + isAccessibleForFree: true, + offers: { + '@type': 'Offer', + price: 0, + priceCurrency: 'USD', + }, + featureList: [ + 'Interactive global developer discovery', + 'Developer rankings by open-source impact', + 'Country and language leaderboards', + 'GitHub and Stack Overflow contribution profiles', + 'Semantic and hybrid developer search', + 'Shareable developer identity cards', + ], + about: [ + { '@type': 'Thing', name: 'Software developers' }, + { '@type': 'Thing', name: 'Open source software' }, + { '@type': 'Thing', name: 'AI coding agents' }, + ], + }, + ], +}; + export const metadata = { - title: 'DevGlobe — Visualizing the World\'s Top Open-Source Contributors', - description: 'Interactive 3D globe visualization of top GitHub developers. 26,000+ developers ranked by stars, commits, repo reach & StackOverflow reputation.', + metadataBase: new URL(siteUrl), + applicationName: 'DevGlobe', + title, + description, + alternates: { canonical: '/' }, + authors: [{ name: 'DevGlobe Contributors', url: githubUrl }], + creator: 'DevGlobe', + publisher: 'DevGlobe', + category: 'technology', + keywords: [ + 'developer network', + 'open source developers', + 'developer discovery', + 'AI coding agents', + 'GitHub developers', + 'developer rankings', + 'global developer community', + ], + manifest: '/manifest.webmanifest', + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + 'max-image-preview': 'large', + 'max-snippet': -1, + 'max-video-preview': -1, + }, + }, + openGraph: { + title, + description, + url: '/', + siteName: 'DevGlobe', + type: 'website', + images: [{ url: '/opengraph-image', width: 1200, height: 630, alt: 'DevGlobe global developer network' }], + }, + twitter: { + card: 'summary_large_image', + title, + description, + images: ['/opengraph-image'], + }, }; export default function RootLayout({ children }) { @@ -33,6 +137,10 @@ export default function RootLayout({ children }) { /> +