Personal Website for @jaspermayone.com jaspermayone.com

switch canonical domain from www to non-www

+195 -195
+1 -1
next-sitemap.config.js
··· 1 /** @type {import('next-sitemap').IConfig} */ 2 module.exports = { 3 - siteUrl: process.env.SITE_URL || "https://www.jaspermayone.com", 4 generateRobotsTxt: false, // Using Next.js native robots.ts instead 5 generateIndexSitemap: true, 6 exclude: ["/icon.png", "/robots.txt", "/blank", "/api/*"],
··· 1 /** @type {import('next-sitemap').IConfig} */ 2 module.exports = { 3 + siteUrl: process.env.SITE_URL || "https://jaspermayone.com", 4 generateRobotsTxt: false, // Using Next.js native robots.ts instead 5 generateIndexSitemap: true, 6 exclude: ["/icon.png", "/robots.txt", "/blank", "/api/*"],
+2 -2
public/robots.txt
··· 3 Allow: / 4 5 # Host 6 - Host: https://www.jaspermayone.com 7 8 # Sitemaps 9 - Sitemap: https://www.jaspermayone.com/sitemap.xml
··· 3 Allow: / 4 5 # Host 6 + Host: https://jaspermayone.com 7 8 # Sitemaps 9 + Sitemap: https://jaspermayone.com/sitemap.xml
+16 -16
public/sitemap.xml
··· 1 <?xml version="1.0" encoding="UTF-8"?> 2 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"> 3 - <url><loc>https://www.jaspermayone.com</loc><lastmod>2025-12-02T01:54:21.434Z</lastmod><changefreq>weekly</changefreq><priority>1</priority></url> 4 - <url><loc>https://www.jaspermayone.com/colophon</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 5 - <url><loc>https://www.jaspermayone.com/concerts</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 6 - <url><loc>https://www.jaspermayone.com/contact</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>1</priority></url> 7 - <url><loc>https://www.jaspermayone.com/elsewhere</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 8 - <url><loc>https://www.jaspermayone.com/green</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 9 - <url><loc>https://www.jaspermayone.com/keys/gpg</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 10 - <url><loc>https://www.jaspermayone.com/keys/ssh</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 11 - <url><loc>https://www.jaspermayone.com/now</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 12 - <url><loc>https://www.jaspermayone.com/panera</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 13 - <url><loc>https://www.jaspermayone.com/pfp</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 14 - <url><loc>https://www.jaspermayone.com/podroll</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 15 - <url><loc>https://www.jaspermayone.com/portfolio</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>1</priority></url> 16 - <url><loc>https://www.jaspermayone.com/to</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 17 - <url><loc>https://www.jaspermayone.com/uses</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 18 - <url><loc>https://www.jaspermayone.com/verify</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 19 </urlset>
··· 1 <?xml version="1.0" encoding="UTF-8"?> 2 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"> 3 + <url><loc>https://jaspermayone.com</loc><lastmod>2025-12-02T01:54:21.434Z</lastmod><changefreq>weekly</changefreq><priority>1</priority></url> 4 + <url><loc>https://jaspermayone.com/colophon</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 5 + <url><loc>https://jaspermayone.com/concerts</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 6 + <url><loc>https://jaspermayone.com/contact</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>1</priority></url> 7 + <url><loc>https://jaspermayone.com/elsewhere</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 8 + <url><loc>https://jaspermayone.com/green</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 9 + <url><loc>https://jaspermayone.com/keys/gpg</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 10 + <url><loc>https://jaspermayone.com/keys/ssh</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 11 + <url><loc>https://jaspermayone.com/now</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 12 + <url><loc>https://jaspermayone.com/panera</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 13 + <url><loc>https://jaspermayone.com/pfp</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 14 + <url><loc>https://jaspermayone.com/podroll</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 15 + <url><loc>https://jaspermayone.com/portfolio</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>1</priority></url> 16 + <url><loc>https://jaspermayone.com/to</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 17 + <url><loc>https://jaspermayone.com/uses</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url> 18 + <url><loc>https://jaspermayone.com/verify</loc><lastmod>2025-12-02T01:54:21.435Z</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> 19 </urlset>
+1 -1
public/sitemap_index.xml
··· 1 <?xml version="1.0" encoding="UTF-8"?> 2 <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 3 - <sitemap><loc>https://www.jaspermayone.com/sitemap.xml</loc></sitemap> 4 </sitemapindex>
··· 1 <?xml version="1.0" encoding="UTF-8"?> 2 <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 3 + <sitemap><loc>https://jaspermayone.com/sitemap.xml</loc></sitemap> 4 </sitemapindex>
+1 -1
src/app/(home)/layout.tsx
··· 2 3 export const metadata: Metadata = { 4 alternates: { 5 - canonical: "https://www.jaspermayone.com", 6 }, 7 }; 8
··· 2 3 export const metadata: Metadata = { 4 alternates: { 5 + canonical: "https://jaspermayone.com", 6 }, 7 }; 8
+8 -8
src/app/blank/page.tsx
··· 5 title: "Blank", 6 description: "A page intentionally left blank", 7 alternates: { 8 - canonical: "https://www.jaspermayone.com/blank", 9 }, 10 }; 11 ··· 14 "@graph": [ 15 { 16 "@type": "WebPage", 17 - "@id": "https://www.jaspermayone.com/blank#webpage", 18 - url: "https://www.jaspermayone.com/blank", 19 name: "Blank Page - Jasper Mayone", 20 description: "A page intentionally left blank", 21 isPartOf: { 22 - "@id": "https://www.jaspermayone.com/#website", 23 }, 24 about: { 25 - "@id": "https://www.jaspermayone.com/#person", 26 }, 27 breadcrumb: { 28 "@type": "BreadcrumbList", 29 - "@id": "https://www.jaspermayone.com/blank#breadcrumb", 30 itemListElement: [ 31 { 32 "@type": "ListItem", 33 position: 1, 34 name: "Home", 35 - item: "https://www.jaspermayone.com", 36 }, 37 { 38 "@type": "ListItem", 39 position: 2, 40 name: "Blank", 41 - item: "https://www.jaspermayone.com/blank", 42 }, 43 ], 44 },
··· 5 title: "Blank", 6 description: "A page intentionally left blank", 7 alternates: { 8 + canonical: "https://jaspermayone.com/blank", 9 }, 10 }; 11 ··· 14 "@graph": [ 15 { 16 "@type": "WebPage", 17 + "@id": "https://jaspermayone.com/blank#webpage", 18 + url: "https://jaspermayone.com/blank", 19 name: "Blank Page - Jasper Mayone", 20 description: "A page intentionally left blank", 21 isPartOf: { 22 + "@id": "https://jaspermayone.com/#website", 23 }, 24 about: { 25 + "@id": "https://jaspermayone.com/#person", 26 }, 27 breadcrumb: { 28 "@type": "BreadcrumbList", 29 + "@id": "https://jaspermayone.com/blank#breadcrumb", 30 itemListElement: [ 31 { 32 "@type": "ListItem", 33 position: 1, 34 name: "Home", 35 + item: "https://jaspermayone.com", 36 }, 37 { 38 "@type": "ListItem", 39 position: 2, 40 name: "Blank", 41 + item: "https://jaspermayone.com/blank", 42 }, 43 ], 44 },
+11 -11
src/app/colophon/page.tsx
··· 9 description: 10 "A comprehensive look at the evolution, tools, and technologies that power this website.", 11 alternates: { 12 - canonical: "https://www.jaspermayone.com/colophon", 13 }, 14 }; 15 ··· 73 "@graph": [ 74 { 75 "@type": "WebPage", 76 - "@id": "https://www.jaspermayone.com/colophon#webpage", 77 - url: "https://www.jaspermayone.com/colophon", 78 name: "Colophon - Jasper Mayone", 79 description: 80 "A comprehensive look at the evolution, tools, and technologies that power this website.", 81 isPartOf: { 82 - "@id": "https://www.jaspermayone.com/#website", 83 }, 84 about: { 85 - "@id": "https://www.jaspermayone.com/#person", 86 }, 87 mainEntity: { 88 - "@id": "https://www.jaspermayone.com/colophon#tech-stack", 89 }, 90 breadcrumb: { 91 "@type": "BreadcrumbList", 92 - "@id": "https://www.jaspermayone.com/colophon#breadcrumb", 93 itemListElement: [ 94 { 95 "@type": "ListItem", 96 position: 1, 97 name: "Home", 98 - item: "https://www.jaspermayone.com", 99 }, 100 { 101 "@type": "ListItem", 102 position: 2, 103 name: "Colophon", 104 - item: "https://www.jaspermayone.com/colophon", 105 }, 106 ], 107 }, 108 }, 109 { 110 "@type": "ItemList", 111 - "@id": "https://www.jaspermayone.com/colophon#tech-stack", 112 name: "Website Technology Stack", 113 description: "Technologies and frameworks powering jaspermayone.com", 114 numberOfItems: techStack.length, ··· 126 }, 127 { 128 "@type": "ItemList", 129 - "@id": "https://www.jaspermayone.com/colophon#dev-tools", 130 name: "Development Tools", 131 description: "Tools used for developing jaspermayone.com", 132 numberOfItems: devTools.length,
··· 9 description: 10 "A comprehensive look at the evolution, tools, and technologies that power this website.", 11 alternates: { 12 + canonical: "https://jaspermayone.com/colophon", 13 }, 14 }; 15 ··· 73 "@graph": [ 74 { 75 "@type": "WebPage", 76 + "@id": "https://jaspermayone.com/colophon#webpage", 77 + url: "https://jaspermayone.com/colophon", 78 name: "Colophon - Jasper Mayone", 79 description: 80 "A comprehensive look at the evolution, tools, and technologies that power this website.", 81 isPartOf: { 82 + "@id": "https://jaspermayone.com/#website", 83 }, 84 about: { 85 + "@id": "https://jaspermayone.com/#person", 86 }, 87 mainEntity: { 88 + "@id": "https://jaspermayone.com/colophon#tech-stack", 89 }, 90 breadcrumb: { 91 "@type": "BreadcrumbList", 92 + "@id": "https://jaspermayone.com/colophon#breadcrumb", 93 itemListElement: [ 94 { 95 "@type": "ListItem", 96 position: 1, 97 name: "Home", 98 + item: "https://jaspermayone.com", 99 }, 100 { 101 "@type": "ListItem", 102 position: 2, 103 name: "Colophon", 104 + item: "https://jaspermayone.com/colophon", 105 }, 106 ], 107 }, 108 }, 109 { 110 "@type": "ItemList", 111 + "@id": "https://jaspermayone.com/colophon#tech-stack", 112 name: "Website Technology Stack", 113 description: "Technologies and frameworks powering jaspermayone.com", 114 numberOfItems: techStack.length, ··· 126 }, 127 { 128 "@type": "ItemList", 129 + "@id": "https://jaspermayone.com/colophon#dev-tools", 130 name: "Development Tools", 131 description: "Tools used for developing jaspermayone.com", 132 numberOfItems: devTools.length,
+10 -10
src/app/concerts/page.tsx
··· 10 description: 11 "A chronological list of concerts and live performances attended by Jasper Mayone.", 12 alternates: { 13 - canonical: "https://www.jaspermayone.com/concerts", 14 }, 15 }; 16 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 - "@id": "https://www.jaspermayone.com/concerts#webpage", 31 - url: "https://www.jaspermayone.com/concerts", 32 name: "Concerts - Jasper Mayone", 33 description: 34 "A chronological list of concerts and live performances attended by Jasper Mayone.", 35 isPartOf: { 36 - "@id": "https://www.jaspermayone.com/#website", 37 }, 38 about: { 39 - "@id": "https://www.jaspermayone.com/#person", 40 }, 41 mainEntity: { 42 - "@id": "https://www.jaspermayone.com/concerts#concert-list", 43 }, 44 breadcrumb: { 45 "@type": "BreadcrumbList", 46 - "@id": "https://www.jaspermayone.com/concerts#breadcrumb", 47 itemListElement: [ 48 { 49 "@type": "ListItem", 50 position: 1, 51 name: "Home", 52 - item: "https://www.jaspermayone.com", 53 }, 54 { 55 "@type": "ListItem", 56 position: 2, 57 name: "Concerts", 58 - item: "https://www.jaspermayone.com/concerts", 59 }, 60 ], 61 }, 62 }, 63 { 64 "@type": "ItemList", 65 - "@id": "https://www.jaspermayone.com/concerts#concert-list", 66 name: "Concerts Attended by Jasper Mayone", 67 description: 68 "A chronological list of live music performances attended by Jasper Mayone",
··· 10 description: 11 "A chronological list of concerts and live performances attended by Jasper Mayone.", 12 alternates: { 13 + canonical: "https://jaspermayone.com/concerts", 14 }, 15 }; 16 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 + "@id": "https://jaspermayone.com/concerts#webpage", 31 + url: "https://jaspermayone.com/concerts", 32 name: "Concerts - Jasper Mayone", 33 description: 34 "A chronological list of concerts and live performances attended by Jasper Mayone.", 35 isPartOf: { 36 + "@id": "https://jaspermayone.com/#website", 37 }, 38 about: { 39 + "@id": "https://jaspermayone.com/#person", 40 }, 41 mainEntity: { 42 + "@id": "https://jaspermayone.com/concerts#concert-list", 43 }, 44 breadcrumb: { 45 "@type": "BreadcrumbList", 46 + "@id": "https://jaspermayone.com/concerts#breadcrumb", 47 itemListElement: [ 48 { 49 "@type": "ListItem", 50 position: 1, 51 name: "Home", 52 + item: "https://jaspermayone.com", 53 }, 54 { 55 "@type": "ListItem", 56 position: 2, 57 name: "Concerts", 58 + item: "https://jaspermayone.com/concerts", 59 }, 60 ], 61 }, 62 }, 63 { 64 "@type": "ItemList", 65 + "@id": "https://jaspermayone.com/concerts#concert-list", 66 name: "Concerts Attended by Jasper Mayone", 67 description: 68 "A chronological list of live music performances attended by Jasper Mayone",
+7 -7
src/app/contact/page.tsx
··· 18 "professional inquiries", 19 ], 20 alternates: { 21 - canonical: "https://www.jaspermayone.com/contact", 22 }, 23 }; 24 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 - "@id": "https://www.jaspermayone.com/contact#webpage", 31 - url: "https://www.jaspermayone.com/contact", 32 name: "Contact - Jasper Mayone", 33 description: 34 "Contact Jasper Mayone - Email, Signal, and verified communication channels for professional inquiries and collaboration.", 35 isPartOf: { 36 - "@id": "https://www.jaspermayone.com/#website", 37 }, 38 about: { 39 - "@id": "https://www.jaspermayone.com/#person", 40 }, 41 breadcrumb: { 42 "@type": "BreadcrumbList", ··· 45 "@type": "ListItem", 46 position: 1, 47 name: "Home", 48 - item: "https://www.jaspermayone.com", 49 }, 50 { 51 "@type": "ListItem", 52 position: 2, 53 name: "Contact", 54 - item: "https://www.jaspermayone.com/contact", 55 }, 56 ], 57 },
··· 18 "professional inquiries", 19 ], 20 alternates: { 21 + canonical: "https://jaspermayone.com/contact", 22 }, 23 }; 24 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 + "@id": "https://jaspermayone.com/contact#webpage", 31 + url: "https://jaspermayone.com/contact", 32 name: "Contact - Jasper Mayone", 33 description: 34 "Contact Jasper Mayone - Email, Signal, and verified communication channels for professional inquiries and collaboration.", 35 isPartOf: { 36 + "@id": "https://jaspermayone.com/#website", 37 }, 38 about: { 39 + "@id": "https://jaspermayone.com/#person", 40 }, 41 breadcrumb: { 42 "@type": "BreadcrumbList", ··· 45 "@type": "ListItem", 46 position: 1, 47 name: "Home", 48 + item: "https://jaspermayone.com", 49 }, 50 { 51 "@type": "ListItem", 52 position: 2, 53 name: "Contact", 54 + item: "https://jaspermayone.com/contact", 55 }, 56 ], 57 },
+11 -11
src/app/elsewhere/page.tsx
··· 11 description: 12 "A list of Jasper Mayone's writings, contributions, and appearances on sites other than this one.", 13 alternates: { 14 - canonical: "https://www.jaspermayone.com/elsewhere", 15 }, 16 }; 17 ··· 20 "@graph": [ 21 { 22 "@type": "WebPage", 23 - "@id": "https://www.jaspermayone.com/elsewhere#webpage", 24 - url: "https://www.jaspermayone.com/elsewhere", 25 name: "Elsewhere - Jasper Mayone", 26 description: 27 "A list of Jasper Mayone's writings, contributions, and appearances on sites other than this one.", 28 isPartOf: { 29 - "@id": "https://www.jaspermayone.com/#website", 30 }, 31 about: { 32 - "@id": "https://www.jaspermayone.com/#person", 33 }, 34 mainEntity: { 35 - "@id": "https://www.jaspermayone.com/elsewhere#appearances", 36 }, 37 breadcrumb: { 38 "@type": "BreadcrumbList", 39 - "@id": "https://www.jaspermayone.com/elsewhere#breadcrumb", 40 itemListElement: [ 41 { 42 "@type": "ListItem", 43 position: 1, 44 name: "Home", 45 - item: "https://www.jaspermayone.com", 46 }, 47 { 48 "@type": "ListItem", 49 position: 2, 50 name: "Elsewhere", 51 - item: "https://www.jaspermayone.com/elsewhere", 52 }, 53 ], 54 }, 55 }, 56 { 57 "@type": "ItemList", 58 - "@id": "https://www.jaspermayone.com/elsewhere#appearances", 59 name: "Appearances and Writings by Jasper Mayone", 60 description: 61 "Writings, contributions, and appearances on sites other than jaspermayone.com", ··· 79 contributor: { 80 "@type": "Person", 81 name: "Jasper Mayone", 82 - "@id": "https://www.jaspermayone.com/#person", 83 }, 84 }), 85 },
··· 11 description: 12 "A list of Jasper Mayone's writings, contributions, and appearances on sites other than this one.", 13 alternates: { 14 + canonical: "https://jaspermayone.com/elsewhere", 15 }, 16 }; 17 ··· 20 "@graph": [ 21 { 22 "@type": "WebPage", 23 + "@id": "https://jaspermayone.com/elsewhere#webpage", 24 + url: "https://jaspermayone.com/elsewhere", 25 name: "Elsewhere - Jasper Mayone", 26 description: 27 "A list of Jasper Mayone's writings, contributions, and appearances on sites other than this one.", 28 isPartOf: { 29 + "@id": "https://jaspermayone.com/#website", 30 }, 31 about: { 32 + "@id": "https://jaspermayone.com/#person", 33 }, 34 mainEntity: { 35 + "@id": "https://jaspermayone.com/elsewhere#appearances", 36 }, 37 breadcrumb: { 38 "@type": "BreadcrumbList", 39 + "@id": "https://jaspermayone.com/elsewhere#breadcrumb", 40 itemListElement: [ 41 { 42 "@type": "ListItem", 43 position: 1, 44 name: "Home", 45 + item: "https://jaspermayone.com", 46 }, 47 { 48 "@type": "ListItem", 49 position: 2, 50 name: "Elsewhere", 51 + item: "https://jaspermayone.com/elsewhere", 52 }, 53 ], 54 }, 55 }, 56 { 57 "@type": "ItemList", 58 + "@id": "https://jaspermayone.com/elsewhere#appearances", 59 name: "Appearances and Writings by Jasper Mayone", 60 description: 61 "Writings, contributions, and appearances on sites other than jaspermayone.com", ··· 79 contributor: { 80 "@type": "Person", 81 name: "Jasper Mayone", 82 + "@id": "https://jaspermayone.com/#person", 83 }, 84 }), 85 },
+7 -7
src/app/green/page.tsx
··· 9 title: "Green", 10 description: "How I try to live sustainably.", 11 alternates: { 12 - canonical: "https://www.jaspermayone.com/green", 13 }, 14 }; 15 ··· 18 "@graph": [ 19 { 20 "@type": "WebPage", 21 - "@id": "https://www.jaspermayone.com/green#webpage", 22 - url: "https://www.jaspermayone.com/green", 23 name: "Green - Jasper Mayone", 24 description: "How I try to live sustainably.", 25 isPartOf: { 26 - "@id": "https://www.jaspermayone.com/#website", 27 }, 28 about: { 29 - "@id": "https://www.jaspermayone.com/#person", 30 }, 31 breadcrumb: { 32 "@type": "BreadcrumbList", ··· 35 "@type": "ListItem", 36 position: 1, 37 name: "Home", 38 - item: "https://www.jaspermayone.com", 39 }, 40 { 41 "@type": "ListItem", 42 position: 2, 43 name: "Green", 44 - item: "https://www.jaspermayone.com/green", 45 }, 46 ], 47 },
··· 9 title: "Green", 10 description: "How I try to live sustainably.", 11 alternates: { 12 + canonical: "https://jaspermayone.com/green", 13 }, 14 }; 15 ··· 18 "@graph": [ 19 { 20 "@type": "WebPage", 21 + "@id": "https://jaspermayone.com/green#webpage", 22 + url: "https://jaspermayone.com/green", 23 name: "Green - Jasper Mayone", 24 description: "How I try to live sustainably.", 25 isPartOf: { 26 + "@id": "https://jaspermayone.com/#website", 27 }, 28 about: { 29 + "@id": "https://jaspermayone.com/#person", 30 }, 31 breadcrumb: { 32 "@type": "BreadcrumbList", ··· 35 "@type": "ListItem", 36 position: 1, 37 name: "Home", 38 + item: "https://jaspermayone.com", 39 }, 40 { 41 "@type": "ListItem", 42 position: 2, 43 name: "Green", 44 + item: "https://jaspermayone.com/green", 45 }, 46 ], 47 },
+9 -9
src/app/keys/[key]/page.tsx
··· 34 title: `${key.toUpperCase()} Key`, 35 description: `Public ${key.toUpperCase()} key for Jasper Mayone`, 36 alternates: { 37 - canonical: `https://www.jaspermayone.com/keys/${key}`, 38 }, 39 }; 40 } ··· 53 const { title, fingerprint, key: keyData, fileExtension } = record; 54 const directURL = buildDirectURL(title); 55 const downloadURL = buildDownloadURL(title, fileExtension); 56 - const fullDirectURL = `https://www.jaspermayone.com${directURL}`; 57 58 const sshImportCommand = `curl -s ${fullDirectURL} >> ~/.ssh/authorized_keys`; 59 const gpgImportCommand = `curl -s ${fullDirectURL} | gpg --import`; ··· 63 "@graph": [ 64 { 65 "@type": "WebPage", 66 - "@id": `https://www.jaspermayone.com/keys/${title}#webpage`, 67 - url: `https://www.jaspermayone.com/keys/${title}`, 68 name: `${title.toUpperCase()} Key - Jasper Mayone`, 69 description: `Public ${title.toUpperCase()} key for Jasper Mayone`, 70 isPartOf: { 71 - "@id": "https://www.jaspermayone.com/#website", 72 }, 73 about: { 74 - "@id": "https://www.jaspermayone.com/#person", 75 }, 76 breadcrumb: { 77 "@type": "BreadcrumbList", ··· 80 "@type": "ListItem", 81 position: 1, 82 name: "Home", 83 - item: "https://www.jaspermayone.com", 84 }, 85 { 86 "@type": "ListItem", 87 position: 2, 88 name: "Keys", 89 - item: "https://www.jaspermayone.com/keys", 90 }, 91 { 92 "@type": "ListItem", 93 position: 3, 94 name: title.toUpperCase(), 95 - item: `https://www.jaspermayone.com/keys/${title}`, 96 }, 97 ], 98 },
··· 34 title: `${key.toUpperCase()} Key`, 35 description: `Public ${key.toUpperCase()} key for Jasper Mayone`, 36 alternates: { 37 + canonical: `https://jaspermayone.com/keys/${key}`, 38 }, 39 }; 40 } ··· 53 const { title, fingerprint, key: keyData, fileExtension } = record; 54 const directURL = buildDirectURL(title); 55 const downloadURL = buildDownloadURL(title, fileExtension); 56 + const fullDirectURL = `https://jaspermayone.com${directURL}`; 57 58 const sshImportCommand = `curl -s ${fullDirectURL} >> ~/.ssh/authorized_keys`; 59 const gpgImportCommand = `curl -s ${fullDirectURL} | gpg --import`; ··· 63 "@graph": [ 64 { 65 "@type": "WebPage", 66 + "@id": `https://jaspermayone.com/keys/${title}#webpage`, 67 + url: `https://jaspermayone.com/keys/${title}`, 68 name: `${title.toUpperCase()} Key - Jasper Mayone`, 69 description: `Public ${title.toUpperCase()} key for Jasper Mayone`, 70 isPartOf: { 71 + "@id": "https://jaspermayone.com/#website", 72 }, 73 about: { 74 + "@id": "https://jaspermayone.com/#person", 75 }, 76 breadcrumb: { 77 "@type": "BreadcrumbList", ··· 80 "@type": "ListItem", 81 position: 1, 82 name: "Home", 83 + item: "https://jaspermayone.com", 84 }, 85 { 86 "@type": "ListItem", 87 position: 2, 88 name: "Keys", 89 + item: "https://jaspermayone.com/keys", 90 }, 91 { 92 "@type": "ListItem", 93 position: 3, 94 name: title.toUpperCase(), 95 + item: `https://jaspermayone.com/keys/${title}`, 96 }, 97 ], 98 },
+22 -22
src/app/layout.tsx
··· 34 default: "Jasper Mayone", 35 }, 36 alternates: { 37 - canonical: "https://www.jaspermayone.com", 38 }, 39 description: `A ${age}-year-old college student from rural Vermont, currently residing in Boston, while attending Wentworth Institute of Technology as a computer science major. When not in school or at work, Jasper's hobbies include reading, being in the great outdoors, photography, computer programming, cooking, and running away to join the circus.`, 40 applicationName: "Jasper Mayone", ··· 42 authors: [ 43 { 44 name: "Jasper Mayone", 45 - url: "https://www.jaspermayone.com", 46 }, 47 ], 48 creator: "Jasper Mayone", 49 publisher: "Jasper Mayone", 50 - metadataBase: new URL("https://www.jaspermayone.com"), 51 52 // Enhanced Open Graph 53 openGraph: { 54 title: "Jasper Mayone", 55 description: `A ${age}-year-old college student from rural Vermont, currently residing in Boston, while attending Wentworth Institute of Technology as a computer science major. When not in school or at work, Jasper's hobbies include reading, being in the great outdoors, photography, computer programming, cooking, and running away to join the circus.`, 56 - url: "https://www.jaspermayone.com", 57 siteName: "Jasper Mayone", 58 type: "website", 59 locale: "en_US", ··· 104 "@graph": [ 105 { 106 "@type": "Person", 107 - "@id": "https://www.jaspermayone.com/#person", 108 name: "Jasper Mayone", 109 givenName: "Jasper", 110 familyName: "Mayone", 111 gender: "male", 112 pronouns: "he/they", 113 description: `A ${age}-year-old post college student from rural Vermont. Circus performer, coder, and photographer pursuing a major in Computer Science at Wentworth Institute of Technology in Boston.`, 114 - url: "https://www.jaspermayone.com", 115 birthPlace: { 116 "@type": "Place", 117 name: "Vermont", ··· 176 }, 177 ], 178 sameAs: [ 179 - "https://www.jaspermayone.com", 180 "https://github.com/jaspermayone", 181 "https://bsky.app/profile/jaspermayone.com", 182 "https://www.linkedin.com/in/jaspermayone", ··· 191 }, 192 { 193 "@type": "WebSite", 194 - "@id": "https://www.jaspermayone.com/#website", 195 - url: "https://www.jaspermayone.com", 196 name: "Jasper Mayone - Personal Website", 197 alternateName: "Jasper Mayone Portfolio", 198 description: `Personal website of Jasper Mayone - a ${age}-year-old circus performer, coder, and photographer from rural Vermont`, 199 about: { 200 - "@id": "https://www.jaspermayone.com/#person", 201 }, 202 author: { 203 - "@id": "https://www.jaspermayone.com/#person", 204 }, 205 creator: { 206 - "@id": "https://www.jaspermayone.com/#person", 207 }, 208 publisher: { 209 - "@id": "https://www.jaspermayone.com/#person", 210 }, 211 inLanguage: "en-US", 212 copyrightHolder: { 213 - "@id": "https://www.jaspermayone.com/#person", 214 }, 215 }, 216 { 217 "@type": "WebPage", 218 - "@id": "https://www.jaspermayone.com/#webpage", 219 - url: "https://www.jaspermayone.com", 220 name: "Jasper Mayone - Circus Artist, Coder & Photographer", 221 description: `Meet Jasper Mayone, a ${age}-year-old circus performer, software developer, and photographer from rural Vermont. Currently pursuing a major in Computer Science at Wentworth Institute of Technology in Boston.`, 222 isPartOf: { 223 - "@id": "https://www.jaspermayone.com/#website", 224 }, 225 about: { 226 - "@id": "https://www.jaspermayone.com/#person", 227 }, 228 mainEntity: { 229 - "@id": "https://www.jaspermayone.com/#person", 230 }, 231 breadcrumb: { 232 "@type": "BreadcrumbList", ··· 235 "@type": "ListItem", 236 position: 1, 237 name: "Home", 238 - item: "https://www.jaspermayone.com", 239 }, 240 ], 241 }, ··· 428 <a className="u-email" href="mailto:me@jaspermayone.com"> 429 me@jaspermayone.com 430 </a> 431 - <a className="u-url" href="https://www.jaspermayone.com" rel="me"> 432 jaspermayone.com 433 </a> 434 <a className="u-url" href="https://github.com/jaspermayone" rel="me"> ··· 717 </code>{" "} 718 {/* SSH key */} 719 {/* === UNIQUE IDENTIFIER === */} 720 - <data className="u-uid uid" value="https://www.jaspermayone.com"> 721 {/* Unique identifier, preferably canonical URL */} 722 </data> 723 {/* === BIOGRAPHICAL NOTE === */}
··· 34 default: "Jasper Mayone", 35 }, 36 alternates: { 37 + canonical: "https://jaspermayone.com", 38 }, 39 description: `A ${age}-year-old college student from rural Vermont, currently residing in Boston, while attending Wentworth Institute of Technology as a computer science major. When not in school or at work, Jasper's hobbies include reading, being in the great outdoors, photography, computer programming, cooking, and running away to join the circus.`, 40 applicationName: "Jasper Mayone", ··· 42 authors: [ 43 { 44 name: "Jasper Mayone", 45 + url: "https://jaspermayone.com", 46 }, 47 ], 48 creator: "Jasper Mayone", 49 publisher: "Jasper Mayone", 50 + metadataBase: new URL("https://jaspermayone.com"), 51 52 // Enhanced Open Graph 53 openGraph: { 54 title: "Jasper Mayone", 55 description: `A ${age}-year-old college student from rural Vermont, currently residing in Boston, while attending Wentworth Institute of Technology as a computer science major. When not in school or at work, Jasper's hobbies include reading, being in the great outdoors, photography, computer programming, cooking, and running away to join the circus.`, 56 + url: "https://jaspermayone.com", 57 siteName: "Jasper Mayone", 58 type: "website", 59 locale: "en_US", ··· 104 "@graph": [ 105 { 106 "@type": "Person", 107 + "@id": "https://jaspermayone.com/#person", 108 name: "Jasper Mayone", 109 givenName: "Jasper", 110 familyName: "Mayone", 111 gender: "male", 112 pronouns: "he/they", 113 description: `A ${age}-year-old post college student from rural Vermont. Circus performer, coder, and photographer pursuing a major in Computer Science at Wentworth Institute of Technology in Boston.`, 114 + url: "https://jaspermayone.com", 115 birthPlace: { 116 "@type": "Place", 117 name: "Vermont", ··· 176 }, 177 ], 178 sameAs: [ 179 + "https://jaspermayone.com", 180 "https://github.com/jaspermayone", 181 "https://bsky.app/profile/jaspermayone.com", 182 "https://www.linkedin.com/in/jaspermayone", ··· 191 }, 192 { 193 "@type": "WebSite", 194 + "@id": "https://jaspermayone.com/#website", 195 + url: "https://jaspermayone.com", 196 name: "Jasper Mayone - Personal Website", 197 alternateName: "Jasper Mayone Portfolio", 198 description: `Personal website of Jasper Mayone - a ${age}-year-old circus performer, coder, and photographer from rural Vermont`, 199 about: { 200 + "@id": "https://jaspermayone.com/#person", 201 }, 202 author: { 203 + "@id": "https://jaspermayone.com/#person", 204 }, 205 creator: { 206 + "@id": "https://jaspermayone.com/#person", 207 }, 208 publisher: { 209 + "@id": "https://jaspermayone.com/#person", 210 }, 211 inLanguage: "en-US", 212 copyrightHolder: { 213 + "@id": "https://jaspermayone.com/#person", 214 }, 215 }, 216 { 217 "@type": "WebPage", 218 + "@id": "https://jaspermayone.com/#webpage", 219 + url: "https://jaspermayone.com", 220 name: "Jasper Mayone - Circus Artist, Coder & Photographer", 221 description: `Meet Jasper Mayone, a ${age}-year-old circus performer, software developer, and photographer from rural Vermont. Currently pursuing a major in Computer Science at Wentworth Institute of Technology in Boston.`, 222 isPartOf: { 223 + "@id": "https://jaspermayone.com/#website", 224 }, 225 about: { 226 + "@id": "https://jaspermayone.com/#person", 227 }, 228 mainEntity: { 229 + "@id": "https://jaspermayone.com/#person", 230 }, 231 breadcrumb: { 232 "@type": "BreadcrumbList", ··· 235 "@type": "ListItem", 236 position: 1, 237 name: "Home", 238 + item: "https://jaspermayone.com", 239 }, 240 ], 241 }, ··· 428 <a className="u-email" href="mailto:me@jaspermayone.com"> 429 me@jaspermayone.com 430 </a> 431 + <a className="u-url" href="https://jaspermayone.com" rel="me"> 432 jaspermayone.com 433 </a> 434 <a className="u-url" href="https://github.com/jaspermayone" rel="me"> ··· 717 </code>{" "} 718 {/* SSH key */} 719 {/* === UNIQUE IDENTIFIER === */} 720 + <data className="u-uid uid" value="https://jaspermayone.com"> 721 {/* Unique identifier, preferably canonical URL */} 722 </data> 723 {/* === BIOGRAPHICAL NOTE === */}
+11 -11
src/app/now/page.tsx
··· 17 "real-time updates", 18 ], 19 alternates: { 20 - canonical: "https://www.jaspermayone.com/now", 21 }, 22 }; 23 ··· 26 "@graph": [ 27 { 28 "@type": "WebPage", 29 - "@id": "https://www.jaspermayone.com/now#webpage", 30 - url: "https://www.jaspermayone.com/now", 31 name: "Now - Jasper Mayone", 32 description: 33 "Real-time status updates from Jasper Mayone - current activities, projects, and location updates via automated system.", 34 isPartOf: { 35 - "@id": "https://www.jaspermayone.com/#website", 36 }, 37 about: { 38 - "@id": "https://www.jaspermayone.com/#person", 39 }, 40 breadcrumb: { 41 "@type": "BreadcrumbList", ··· 44 "@type": "ListItem", 45 position: 1, 46 name: "Home", 47 - item: "https://www.jaspermayone.com", 48 }, 49 { 50 "@type": "ListItem", 51 position: 2, 52 name: "Now", 53 - item: "https://www.jaspermayone.com/now", 54 }, 55 ], 56 }, 57 }, 58 { 59 "@type": "Blog", 60 - "@id": "https://www.jaspermayone.com/now#blog", 61 - url: "https://www.jaspermayone.com/now", 62 name: "Now Updates - Jasper Mayone", 63 description: "Real-time status updates and current activities", 64 author: { 65 - "@id": "https://www.jaspermayone.com/#person", 66 }, 67 publisher: { 68 - "@id": "https://www.jaspermayone.com/#person", 69 }, 70 inLanguage: "en-US", 71 },
··· 17 "real-time updates", 18 ], 19 alternates: { 20 + canonical: "https://jaspermayone.com/now", 21 }, 22 }; 23 ··· 26 "@graph": [ 27 { 28 "@type": "WebPage", 29 + "@id": "https://jaspermayone.com/now#webpage", 30 + url: "https://jaspermayone.com/now", 31 name: "Now - Jasper Mayone", 32 description: 33 "Real-time status updates from Jasper Mayone - current activities, projects, and location updates via automated system.", 34 isPartOf: { 35 + "@id": "https://jaspermayone.com/#website", 36 }, 37 about: { 38 + "@id": "https://jaspermayone.com/#person", 39 }, 40 breadcrumb: { 41 "@type": "BreadcrumbList", ··· 44 "@type": "ListItem", 45 position: 1, 46 name: "Home", 47 + item: "https://jaspermayone.com", 48 }, 49 { 50 "@type": "ListItem", 51 position: 2, 52 name: "Now", 53 + item: "https://jaspermayone.com/now", 54 }, 55 ], 56 }, 57 }, 58 { 59 "@type": "Blog", 60 + "@id": "https://jaspermayone.com/now#blog", 61 + url: "https://jaspermayone.com/now", 62 name: "Now Updates - Jasper Mayone", 63 description: "Real-time status updates and current activities", 64 author: { 65 + "@id": "https://jaspermayone.com/#person", 66 }, 67 publisher: { 68 + "@id": "https://jaspermayone.com/#person", 69 }, 70 inLanguage: "en-US", 71 },
+9 -9
src/app/open-source/page.tsx
··· 18 "foss", 19 ], 20 alternates: { 21 - canonical: "https://www.jaspermayone.com/open-source", 22 }, 23 }; 24 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 - "@id": "https://www.jaspermayone.com/open-source#webpage", 31 - url: "https://www.jaspermayone.com/open-source", 32 name: "Open Source - Jasper Mayone", 33 description: 34 "Jasper Mayone's open source contributions, maintained projects, and hosted services.", 35 isPartOf: { 36 - "@id": "https://www.jaspermayone.com/#website", 37 }, 38 about: { 39 - "@id": "https://www.jaspermayone.com/#person", 40 }, 41 mainEntity: { 42 - "@id": "https://www.jaspermayone.com/open-source#projects", 43 }, 44 breadcrumb: { 45 "@type": "BreadcrumbList", ··· 48 "@type": "ListItem", 49 position: 1, 50 name: "Home", 51 - item: "https://www.jaspermayone.com", 52 }, 53 { 54 "@type": "ListItem", 55 position: 2, 56 name: "Open Source", 57 - item: "https://www.jaspermayone.com/open-source", 58 }, 59 ], 60 }, 61 }, 62 { 63 "@type": "ItemList", 64 - "@id": "https://www.jaspermayone.com/open-source#projects", 65 name: "Open Source Projects", 66 numberOfItems: maintainedProjects.length, 67 itemListElement: maintainedProjects.map((project, index) => ({
··· 18 "foss", 19 ], 20 alternates: { 21 + canonical: "https://jaspermayone.com/open-source", 22 }, 23 }; 24 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 + "@id": "https://jaspermayone.com/open-source#webpage", 31 + url: "https://jaspermayone.com/open-source", 32 name: "Open Source - Jasper Mayone", 33 description: 34 "Jasper Mayone's open source contributions, maintained projects, and hosted services.", 35 isPartOf: { 36 + "@id": "https://jaspermayone.com/#website", 37 }, 38 about: { 39 + "@id": "https://jaspermayone.com/#person", 40 }, 41 mainEntity: { 42 + "@id": "https://jaspermayone.com/open-source#projects", 43 }, 44 breadcrumb: { 45 "@type": "BreadcrumbList", ··· 48 "@type": "ListItem", 49 position: 1, 50 name: "Home", 51 + item: "https://jaspermayone.com", 52 }, 53 { 54 "@type": "ListItem", 55 position: 2, 56 name: "Open Source", 57 + item: "https://jaspermayone.com/open-source", 58 }, 59 ], 60 }, 61 }, 62 { 63 "@type": "ItemList", 64 + "@id": "https://jaspermayone.com/open-source#projects", 65 name: "Open Source Projects", 66 numberOfItems: maintainedProjects.length, 67 itemListElement: maintainedProjects.map((project, index) => ({
+7 -7
src/app/panera/page.tsx
··· 9 description: 10 "What I usually get at Panera, in case anyone wants to get me Panera.", 11 alternates: { 12 - canonical: "https://www.jaspermayone.com/panera", 13 }, 14 }; 15 ··· 18 "@graph": [ 19 { 20 "@type": "WebPage", 21 - "@id": "https://www.jaspermayone.com/panera#webpage", 22 - url: "https://www.jaspermayone.com/panera", 23 name: "Panera - Jasper Mayone", 24 description: 25 "What I usually get at Panera, in case anyone wants to get me Panera.", 26 isPartOf: { 27 - "@id": "https://www.jaspermayone.com/#website", 28 }, 29 about: { 30 - "@id": "https://www.jaspermayone.com/#person", 31 }, 32 breadcrumb: { 33 "@type": "BreadcrumbList", ··· 36 "@type": "ListItem", 37 position: 1, 38 name: "Home", 39 - item: "https://www.jaspermayone.com", 40 }, 41 { 42 "@type": "ListItem", 43 position: 2, 44 name: "Panera", 45 - item: "https://www.jaspermayone.com/panera", 46 }, 47 ], 48 },
··· 9 description: 10 "What I usually get at Panera, in case anyone wants to get me Panera.", 11 alternates: { 12 + canonical: "https://jaspermayone.com/panera", 13 }, 14 }; 15 ··· 18 "@graph": [ 19 { 20 "@type": "WebPage", 21 + "@id": "https://jaspermayone.com/panera#webpage", 22 + url: "https://jaspermayone.com/panera", 23 name: "Panera - Jasper Mayone", 24 description: 25 "What I usually get at Panera, in case anyone wants to get me Panera.", 26 isPartOf: { 27 + "@id": "https://jaspermayone.com/#website", 28 }, 29 about: { 30 + "@id": "https://jaspermayone.com/#person", 31 }, 32 breadcrumb: { 33 "@type": "BreadcrumbList", ··· 36 "@type": "ListItem", 37 position: 1, 38 name: "Home", 39 + item: "https://jaspermayone.com", 40 }, 41 { 42 "@type": "ListItem", 43 position: 2, 44 name: "Panera", 45 + item: "https://jaspermayone.com/panera", 46 }, 47 ], 48 },
+12 -12
src/app/pfp/page.tsx
··· 14 title: "PFPs", 15 description: "All the profile photos I've used over the years.", 16 alternates: { 17 - canonical: "https://www.jaspermayone.com/pfp", 18 }, 19 }; 20 ··· 31 "@graph": [ 32 { 33 "@type": "WebPage", 34 - "@id": "https://www.jaspermayone.com/pfp#webpage", 35 - url: "https://www.jaspermayone.com/pfp", 36 name: "Profile Photos - Jasper Mayone", 37 description: "All the profile photos I've used over the years.", 38 isPartOf: { 39 - "@id": "https://www.jaspermayone.com/#website", 40 }, 41 about: { 42 - "@id": "https://www.jaspermayone.com/#person", 43 }, 44 mainEntity: { 45 - "@id": "https://www.jaspermayone.com/pfp#gallery", 46 }, 47 breadcrumb: { 48 "@type": "BreadcrumbList", 49 - "@id": "https://www.jaspermayone.com/pfp#breadcrumb", 50 itemListElement: [ 51 { 52 "@type": "ListItem", 53 position: 1, 54 name: "Home", 55 - item: "https://www.jaspermayone.com", 56 }, 57 { 58 "@type": "ListItem", 59 position: 2, 60 name: "Profile Photos", 61 - item: "https://www.jaspermayone.com/pfp", 62 }, 63 ], 64 }, 65 }, 66 { 67 "@type": "ImageGallery", 68 - "@id": "https://www.jaspermayone.com/pfp#gallery", 69 name: "Jasper Mayone Profile Photos", 70 description: 71 "A collection of profile photos used by Jasper Mayone over the years", 72 author: { 73 - "@id": "https://www.jaspermayone.com/#person", 74 }, 75 image: profilePhotos.map((photo, index) => ({ 76 "@type": "ImageObject", 77 name: photo.name, 78 - contentUrl: `https://www.jaspermayone.com${photo.src}`, 79 position: index + 1, 80 })), 81 },
··· 14 title: "PFPs", 15 description: "All the profile photos I've used over the years.", 16 alternates: { 17 + canonical: "https://jaspermayone.com/pfp", 18 }, 19 }; 20 ··· 31 "@graph": [ 32 { 33 "@type": "WebPage", 34 + "@id": "https://jaspermayone.com/pfp#webpage", 35 + url: "https://jaspermayone.com/pfp", 36 name: "Profile Photos - Jasper Mayone", 37 description: "All the profile photos I've used over the years.", 38 isPartOf: { 39 + "@id": "https://jaspermayone.com/#website", 40 }, 41 about: { 42 + "@id": "https://jaspermayone.com/#person", 43 }, 44 mainEntity: { 45 + "@id": "https://jaspermayone.com/pfp#gallery", 46 }, 47 breadcrumb: { 48 "@type": "BreadcrumbList", 49 + "@id": "https://jaspermayone.com/pfp#breadcrumb", 50 itemListElement: [ 51 { 52 "@type": "ListItem", 53 position: 1, 54 name: "Home", 55 + item: "https://jaspermayone.com", 56 }, 57 { 58 "@type": "ListItem", 59 position: 2, 60 name: "Profile Photos", 61 + item: "https://jaspermayone.com/pfp", 62 }, 63 ], 64 }, 65 }, 66 { 67 "@type": "ImageGallery", 68 + "@id": "https://jaspermayone.com/pfp#gallery", 69 name: "Jasper Mayone Profile Photos", 70 description: 71 "A collection of profile photos used by Jasper Mayone over the years", 72 author: { 73 + "@id": "https://jaspermayone.com/#person", 74 }, 75 image: profilePhotos.map((photo, index) => ({ 76 "@type": "ImageObject", 77 name: photo.name, 78 + contentUrl: `https://jaspermayone.com${photo.src}`, 79 position: index + 1, 80 })), 81 },
+10 -10
src/app/podroll/page.tsx
··· 10 title: "Podroll", 11 description: "Podcasts I recommend.", 12 alternates: { 13 - canonical: "https://www.jaspermayone.com/podroll", 14 }, 15 }; 16 ··· 19 "@graph": [ 20 { 21 "@type": "WebPage", 22 - "@id": "https://www.jaspermayone.com/podroll#webpage", 23 - url: "https://www.jaspermayone.com/podroll", 24 name: "Podroll - Jasper Mayone", 25 description: "Podcasts I recommend.", 26 isPartOf: { 27 - "@id": "https://www.jaspermayone.com/#website", 28 }, 29 about: { 30 - "@id": "https://www.jaspermayone.com/#person", 31 }, 32 mainEntity: { 33 - "@id": "https://www.jaspermayone.com/podroll#podcast-list", 34 }, 35 breadcrumb: { 36 "@type": "BreadcrumbList", 37 - "@id": "https://www.jaspermayone.com/podroll#breadcrumb", 38 itemListElement: [ 39 { 40 "@type": "ListItem", 41 position: 1, 42 name: "Home", 43 - item: "https://www.jaspermayone.com", 44 }, 45 { 46 "@type": "ListItem", 47 position: 2, 48 name: "Podroll", 49 - item: "https://www.jaspermayone.com/podroll", 50 }, 51 ], 52 }, 53 }, 54 { 55 "@type": "ItemList", 56 - "@id": "https://www.jaspermayone.com/podroll#podcast-list", 57 name: "Recommended Podcasts", 58 description: "Podcasts recommended by Jasper Mayone", 59 numberOfItems: podcasts.length,
··· 10 title: "Podroll", 11 description: "Podcasts I recommend.", 12 alternates: { 13 + canonical: "https://jaspermayone.com/podroll", 14 }, 15 }; 16 ··· 19 "@graph": [ 20 { 21 "@type": "WebPage", 22 + "@id": "https://jaspermayone.com/podroll#webpage", 23 + url: "https://jaspermayone.com/podroll", 24 name: "Podroll - Jasper Mayone", 25 description: "Podcasts I recommend.", 26 isPartOf: { 27 + "@id": "https://jaspermayone.com/#website", 28 }, 29 about: { 30 + "@id": "https://jaspermayone.com/#person", 31 }, 32 mainEntity: { 33 + "@id": "https://jaspermayone.com/podroll#podcast-list", 34 }, 35 breadcrumb: { 36 "@type": "BreadcrumbList", 37 + "@id": "https://jaspermayone.com/podroll#breadcrumb", 38 itemListElement: [ 39 { 40 "@type": "ListItem", 41 position: 1, 42 name: "Home", 43 + item: "https://jaspermayone.com", 44 }, 45 { 46 "@type": "ListItem", 47 position: 2, 48 name: "Podroll", 49 + item: "https://jaspermayone.com/podroll", 50 }, 51 ], 52 }, 53 }, 54 { 55 "@type": "ItemList", 56 + "@id": "https://jaspermayone.com/podroll#podcast-list", 57 name: "Recommended Podcasts", 58 description: "Podcasts recommended by Jasper Mayone", 59 numberOfItems: podcasts.length,
+12 -12
src/app/portfolio/page.tsx
··· 19 "coding portfolio", 20 ], 21 alternates: { 22 - canonical: "https://www.jaspermayone.com/portfolio", 23 }, 24 }; 25 ··· 28 "@graph": [ 29 { 30 "@type": "WebPage", 31 - "@id": "https://www.jaspermayone.com/portfolio#webpage", 32 - url: "https://www.jaspermayone.com/portfolio", 33 name: "Portfolio - Jasper Mayone", 34 description: 35 "A collection of projects and work by Jasper Mayone - web applications, tools, and creative endeavors.", 36 isPartOf: { 37 - "@id": "https://www.jaspermayone.com/#website", 38 }, 39 about: { 40 - "@id": "https://www.jaspermayone.com/#person", 41 }, 42 mainEntity: { 43 - "@id": "https://www.jaspermayone.com/portfolio#projects", 44 }, 45 breadcrumb: { 46 "@type": "BreadcrumbList", 47 - "@id": "https://www.jaspermayone.com/portfolio#breadcrumb", 48 itemListElement: [ 49 { 50 "@type": "ListItem", 51 position: 1, 52 name: "Home", 53 - item: "https://www.jaspermayone.com", 54 }, 55 { 56 "@type": "ListItem", 57 position: 2, 58 name: "Portfolio", 59 - item: "https://www.jaspermayone.com/portfolio", 60 }, 61 ], 62 }, 63 }, 64 { 65 "@type": "ItemList", 66 - "@id": "https://www.jaspermayone.com/portfolio#projects", 67 name: "Portfolio Projects", 68 description: "Software projects and creative work by Jasper Mayone", 69 numberOfItems: projects.length, ··· 82 ...(project.image && { 83 image: project.image.startsWith("http") 84 ? project.image 85 - : `https://www.jaspermayone.com${project.image}`, 86 }), 87 ...(project.tags && { keywords: project.tags.join(", ") }), 88 author: { 89 - "@id": "https://www.jaspermayone.com/#person", 90 }, 91 }, 92 })),
··· 19 "coding portfolio", 20 ], 21 alternates: { 22 + canonical: "https://jaspermayone.com/portfolio", 23 }, 24 }; 25 ··· 28 "@graph": [ 29 { 30 "@type": "WebPage", 31 + "@id": "https://jaspermayone.com/portfolio#webpage", 32 + url: "https://jaspermayone.com/portfolio", 33 name: "Portfolio - Jasper Mayone", 34 description: 35 "A collection of projects and work by Jasper Mayone - web applications, tools, and creative endeavors.", 36 isPartOf: { 37 + "@id": "https://jaspermayone.com/#website", 38 }, 39 about: { 40 + "@id": "https://jaspermayone.com/#person", 41 }, 42 mainEntity: { 43 + "@id": "https://jaspermayone.com/portfolio#projects", 44 }, 45 breadcrumb: { 46 "@type": "BreadcrumbList", 47 + "@id": "https://jaspermayone.com/portfolio#breadcrumb", 48 itemListElement: [ 49 { 50 "@type": "ListItem", 51 position: 1, 52 name: "Home", 53 + item: "https://jaspermayone.com", 54 }, 55 { 56 "@type": "ListItem", 57 position: 2, 58 name: "Portfolio", 59 + item: "https://jaspermayone.com/portfolio", 60 }, 61 ], 62 }, 63 }, 64 { 65 "@type": "ItemList", 66 + "@id": "https://jaspermayone.com/portfolio#projects", 67 name: "Portfolio Projects", 68 description: "Software projects and creative work by Jasper Mayone", 69 numberOfItems: projects.length, ··· 82 ...(project.image && { 83 image: project.image.startsWith("http") 84 ? project.image 85 + : `https://jaspermayone.com${project.image}`, 86 }), 87 ...(project.tags && { keywords: project.tags.join(", ") }), 88 author: { 89 + "@id": "https://jaspermayone.com/#person", 90 }, 91 }, 92 })),
+1 -1
src/app/robots.ts
··· 36 disallow: ["/wp-admin/"], 37 }, 38 ], 39 - sitemap: "https://www.jaspermayone.com/sitemap_index.xml", 40 }; 41 }
··· 36 disallow: ["/wp-admin/"], 37 }, 38 ], 39 + sitemap: "https://jaspermayone.com/sitemap_index.xml", 40 }; 41 }
+9 -9
src/app/slashes/page.tsx
··· 18 "slashpages", 19 ], 20 alternates: { 21 - canonical: "https://www.jaspermayone.com/slashes", 22 }, 23 }; 24 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 - "@id": "https://www.jaspermayone.com/slashes#webpage", 31 - url: "https://www.jaspermayone.com/slashes", 32 name: "Slashes - Jasper Mayone", 33 description: 34 "A directory of all slash pages on jaspermayone.com - top-level URLs that may be of interest.", 35 isPartOf: { 36 - "@id": "https://www.jaspermayone.com/#website", 37 }, 38 about: { 39 - "@id": "https://www.jaspermayone.com/#person", 40 }, 41 breadcrumb: { 42 "@type": "BreadcrumbList", ··· 45 "@type": "ListItem", 46 position: 1, 47 name: "Home", 48 - item: "https://www.jaspermayone.com", 49 }, 50 { 51 "@type": "ListItem", 52 position: 2, 53 name: "Slashes", 54 - item: "https://www.jaspermayone.com/slashes", 55 }, 56 ], 57 }, 58 }, 59 { 60 "@type": "ItemList", 61 - "@id": "https://www.jaspermayone.com/slashes#list", 62 name: "Slash Pages Directory", 63 description: "Top-level URL pages on jaspermayone.com", 64 numberOfItems: slashPages.length, ··· 69 "@type": "WebPage", 70 name: page.name, 71 description: page.description, 72 - url: `https://www.jaspermayone.com/${page.slug}`, 73 }, 74 })), 75 },
··· 18 "slashpages", 19 ], 20 alternates: { 21 + canonical: "https://jaspermayone.com/slashes", 22 }, 23 }; 24 ··· 27 "@graph": [ 28 { 29 "@type": "WebPage", 30 + "@id": "https://jaspermayone.com/slashes#webpage", 31 + url: "https://jaspermayone.com/slashes", 32 name: "Slashes - Jasper Mayone", 33 description: 34 "A directory of all slash pages on jaspermayone.com - top-level URLs that may be of interest.", 35 isPartOf: { 36 + "@id": "https://jaspermayone.com/#website", 37 }, 38 about: { 39 + "@id": "https://jaspermayone.com/#person", 40 }, 41 breadcrumb: { 42 "@type": "BreadcrumbList", ··· 45 "@type": "ListItem", 46 position: 1, 47 name: "Home", 48 + item: "https://jaspermayone.com", 49 }, 50 { 51 "@type": "ListItem", 52 position: 2, 53 name: "Slashes", 54 + item: "https://jaspermayone.com/slashes", 55 }, 56 ], 57 }, 58 }, 59 { 60 "@type": "ItemList", 61 + "@id": "https://jaspermayone.com/slashes#list", 62 name: "Slash Pages Directory", 63 description: "Top-level URL pages on jaspermayone.com", 64 numberOfItems: slashPages.length, ··· 69 "@type": "WebPage", 70 name: page.name, 71 description: page.description, 72 + url: `https://jaspermayone.com/${page.slug}`, 73 }, 74 })), 75 },
+1 -1
src/app/to/page.tsx
··· 6 title: "Links - Jasper Mayone", 7 description: "All my redirect links and social media profiles", 8 alternates: { 9 - canonical: "https://www.jaspermayone.com/to", 10 }, 11 }; 12
··· 6 title: "Links - Jasper Mayone", 7 description: "All my redirect links and social media profiles", 8 alternates: { 9 + canonical: "https://jaspermayone.com/to", 10 }, 11 }; 12
+10 -10
src/app/uses/page.tsx
··· 16 "jasper mayone tools", 17 ], 18 alternates: { 19 - canonical: "https://www.jaspermayone.com/uses", 20 }, 21 }; 22 ··· 25 "@graph": [ 26 { 27 "@type": "WebPage", 28 - "@id": "https://www.jaspermayone.com/uses#webpage", 29 - url: "https://www.jaspermayone.com/uses", 30 name: "Uses - Jasper Mayone", 31 description: 32 "Tools and software I use daily for development, productivity, and creative work - from code editors to project management apps.", 33 isPartOf: { 34 - "@id": "https://www.jaspermayone.com/#website", 35 }, 36 about: { 37 - "@id": "https://www.jaspermayone.com/#person", 38 }, 39 mainEntity: { 40 - "@id": "https://www.jaspermayone.com/uses#tools-list", 41 }, 42 breadcrumb: { 43 "@type": "BreadcrumbList", 44 - "@id": "https://www.jaspermayone.com/uses#breadcrumb", 45 itemListElement: [ 46 { 47 "@type": "ListItem", 48 position: 1, 49 name: "Home", 50 - item: "https://www.jaspermayone.com", 51 }, 52 { 53 "@type": "ListItem", 54 position: 2, 55 name: "Uses", 56 - item: "https://www.jaspermayone.com/uses", 57 }, 58 ], 59 }, 60 }, 61 { 62 "@type": "ItemList", 63 - "@id": "https://www.jaspermayone.com/uses#tools-list", 64 name: "Tools and Software Used by Jasper Mayone", 65 description: 66 "Daily tools and software for development, productivity, and creative work",
··· 16 "jasper mayone tools", 17 ], 18 alternates: { 19 + canonical: "https://jaspermayone.com/uses", 20 }, 21 }; 22 ··· 25 "@graph": [ 26 { 27 "@type": "WebPage", 28 + "@id": "https://jaspermayone.com/uses#webpage", 29 + url: "https://jaspermayone.com/uses", 30 name: "Uses - Jasper Mayone", 31 description: 32 "Tools and software I use daily for development, productivity, and creative work - from code editors to project management apps.", 33 isPartOf: { 34 + "@id": "https://jaspermayone.com/#website", 35 }, 36 about: { 37 + "@id": "https://jaspermayone.com/#person", 38 }, 39 mainEntity: { 40 + "@id": "https://jaspermayone.com/uses#tools-list", 41 }, 42 breadcrumb: { 43 "@type": "BreadcrumbList", 44 + "@id": "https://jaspermayone.com/uses#breadcrumb", 45 itemListElement: [ 46 { 47 "@type": "ListItem", 48 position: 1, 49 name: "Home", 50 + item: "https://jaspermayone.com", 51 }, 52 { 53 "@type": "ListItem", 54 position: 2, 55 name: "Uses", 56 + item: "https://jaspermayone.com/uses", 57 }, 58 ], 59 }, 60 }, 61 { 62 "@type": "ItemList", 63 + "@id": "https://jaspermayone.com/uses#tools-list", 64 name: "Tools and Software Used by Jasper Mayone", 65 description: 66 "Daily tools and software for development, productivity, and creative work",
+7 -7
src/app/verify/page.tsx
··· 49 "security", 50 ], 51 alternates: { 52 - canonical: "https://www.jaspermayone.com/verify", 53 }, 54 }; 55 ··· 78 "@graph": [ 79 { 80 "@type": "WebPage", 81 - "@id": "https://www.jaspermayone.com/verify#webpage", 82 - url: "https://www.jaspermayone.com/verify", 83 name: "Verify - Jasper Mayone", 84 description: 85 "Verify Jasper Mayone's identity across domains, email addresses, social accounts, and cryptographic keys for secure communication.", 86 isPartOf: { 87 - "@id": "https://www.jaspermayone.com/#website", 88 }, 89 about: { 90 - "@id": "https://www.jaspermayone.com/#person", 91 }, 92 breadcrumb: { 93 "@type": "BreadcrumbList", ··· 96 "@type": "ListItem", 97 position: 1, 98 name: "Home", 99 - item: "https://www.jaspermayone.com", 100 }, 101 { 102 "@type": "ListItem", 103 position: 2, 104 name: "Verify", 105 - item: "https://www.jaspermayone.com/verify", 106 }, 107 ], 108 },
··· 49 "security", 50 ], 51 alternates: { 52 + canonical: "https://jaspermayone.com/verify", 53 }, 54 }; 55 ··· 78 "@graph": [ 79 { 80 "@type": "WebPage", 81 + "@id": "https://jaspermayone.com/verify#webpage", 82 + url: "https://jaspermayone.com/verify", 83 name: "Verify - Jasper Mayone", 84 description: 85 "Verify Jasper Mayone's identity across domains, email addresses, social accounts, and cryptographic keys for secure communication.", 86 isPartOf: { 87 + "@id": "https://jaspermayone.com/#website", 88 }, 89 about: { 90 + "@id": "https://jaspermayone.com/#person", 91 }, 92 breadcrumb: { 93 "@type": "BreadcrumbList", ··· 96 "@type": "ListItem", 97 position: 1, 98 name: "Home", 99 + item: "https://jaspermayone.com", 100 }, 101 { 102 "@type": "ListItem", 103 position: 2, 104 name: "Verify", 105 + item: "https://jaspermayone.com/verify", 106 }, 107 ], 108 },