tangled
alpha
login
or
join now
jaspermayone.com
/
website
Personal Website for @jaspermayone.com
jaspermayone.com
0
fork
atom
overview
issues
pulls
pipelines
switch canonical domain from www to non-www
jaspermayone.com
1 month ago
2109bf11
aa2623a5
+195
-195
24 changed files
expand all
collapse all
unified
split
next-sitemap.config.js
public
robots.txt
sitemap.xml
sitemap_index.xml
src
app
(home)
layout.tsx
blank
page.tsx
colophon
page.tsx
concerts
page.tsx
contact
page.tsx
elsewhere
page.tsx
green
page.tsx
keys
[key]
page.tsx
layout.tsx
now
page.tsx
open-source
page.tsx
panera
page.tsx
pfp
page.tsx
podroll
page.tsx
portfolio
page.tsx
robots.ts
slashes
page.tsx
to
page.tsx
uses
page.tsx
verify
page.tsx
+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
},