public/fonts/Balgin/BalginText-Light.otf
public/fonts/Balgin/BalginText-Light.otf
This is a binary file and will not be displayed.
public/fonts/CuteNotes.ttf
public/fonts/CuteNotes/CuteNotes.ttf
public/fonts/CuteNotes.ttf
public/fonts/CuteNotes/CuteNotes.ttf
public/fonts/CuteNotes.woff2
public/fonts/CuteNotes/CuteNotes.woff2
public/fonts/CuteNotes.woff2
public/fonts/CuteNotes/CuteNotes.woff2
+3
-1
src/app/(home)/page.tsx
+3
-1
src/app/(home)/page.tsx
···
57
57
<div className="flex flex-col justify-center">
58
58
<div className="space-y-4">
59
59
<p className="font-medium text-xl">
60
-
Jasper Mayone [<i>he/they</i>]{" "}
60
+
<span style={{ fontFamily: "var(--font-balgin)" }}>
61
+
Jasper Mayone [<i>he/they</i>]
62
+
</span>{" "}
61
63
<span className="text-gray-700 dark:text-white/70 font-normal">
62
64
is a 19-year-old college student from rural Vermont, currently
63
65
residing in Boston.
+32
-8
src/app/colophon/page.tsx
+32
-8
src/app/colophon/page.tsx
···
121
121
<main className="flex-1">
122
122
<div className="max-w-4xl mx-auto px-6 py-12">
123
123
<div className="mb-16">
124
-
<h1 className="text-4xl font-bold mb-4 text-gray-900 dark:text-white">
124
+
<h1
125
+
className="text-4xl font-bold mb-4 text-gray-900 dark:text-white"
126
+
style={{ fontFamily: "var(--font-balgin)" }}
127
+
>
125
128
Colophon
126
129
</h1>
127
130
<p className="text-lg text-gray-600 dark:text-gray-300">
···
131
134
132
135
{/* Site History Section */}
133
136
<section className="mb-16">
134
-
<h2 className="text-2xl font-bold mb-6 text-gray-900 dark:text-white">
137
+
<h2
138
+
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
139
+
style={{ fontFamily: "var(--font-balgin)" }}
140
+
>
135
141
Site History
136
142
</h2>
137
143
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
···
152
158
153
159
{/* Technology Stack Section */}
154
160
<section className="mb-16">
155
-
<h2 className="text-2xl font-bold mb-6 text-gray-900 dark:text-white">
161
+
<h2
162
+
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
163
+
style={{ fontFamily: "var(--font-balgin)" }}
164
+
>
156
165
Technology Stack
157
166
</h2>
158
167
<div className="grid lg:grid-cols-2 gap-6">
···
165
174
<h3 className="text-lg font-bold text-gray-900 dark:text-white">
166
175
{tech.name}
167
176
</h3>
168
-
<span className="px-3 py-1 text-sm font-medium text-gray-600 dark:text-gray-300 bg-gray-100 dark:bg-gray-800 rounded-full">
177
+
<span
178
+
className="px-3 py-1 text-sm font-medium text-gray-600 dark:text-gray-300 bg-gray-100 dark:bg-gray-800 rounded-full"
179
+
style={{ fontFamily: "var(--font-balgin)" }}
180
+
>
169
181
{tech.category}
170
182
</span>
171
183
</div>
···
179
191
180
192
{/* Hosting & Deployment Section */}
181
193
<section className="mb-16">
182
-
<h2 className="text-2xl font-bold mb-6 text-gray-900 dark:text-white">
194
+
<h2
195
+
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
196
+
style={{ fontFamily: "var(--font-balgin)" }}
197
+
>
183
198
Hosting & Deployment
184
199
</h2>
185
200
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
···
199
214
, which provides seamless deployment from GitHub, automatic
200
215
HTTPS, and global CDN distribution.
201
216
</p>
202
-
<div className="flex flex-wrap gap-2">
217
+
<div
218
+
className="flex flex-wrap gap-2"
219
+
style={{ fontFamily: "var(--font-balgin)" }}
220
+
>
203
221
<span className="px-3 py-1 text-sm font-medium text-gray-600 dark:text-gray-300 bg-gray-100 dark:bg-gray-800 rounded-full">
204
222
GitHub Integration
205
223
</span>
···
215
233
216
234
{/* Development Tools Section */}
217
235
<section className="mb-16">
218
-
<h2 className="text-2xl font-bold mb-6 text-gray-900 dark:text-white">
236
+
<h2
237
+
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
238
+
style={{ fontFamily: "var(--font-balgin)" }}
239
+
>
219
240
Development Tools
220
241
</h2>
221
242
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
···
236
257
237
258
{/* Hardware Section */}
238
259
<section className="mb-16">
239
-
<h2 className="text-2xl font-bold mb-6 text-gray-900 dark:text-white">
260
+
<h2
261
+
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
262
+
style={{ fontFamily: "var(--font-balgin)" }}
263
+
>
240
264
Hardware
241
265
</h2>
242
266
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
+20
-5
src/app/concerts/page.tsx
+20
-5
src/app/concerts/page.tsx
···
77
77
<MENU pageFirstWord="Concerts" />
78
78
<main className="flex-1">
79
79
<div className="mx-5 mt-4 mb-4">
80
-
<h1 className="text-xl font-bold mb-4 text-gray-800 dark:text-white">
80
+
<h1
81
+
className="text-xl font-bold mb-4 text-gray-800 dark:text-white"
82
+
style={{ fontFamily: "var(--font-balgin)" }}
83
+
>
81
84
Concerts I've Attended
82
85
</h1>
83
86
···
89
92
<div className="space-y-8">
90
93
{sortedConcerts.map((yearGroup) => (
91
94
<div key={yearGroup.year}>
92
-
<h2 className="text-lg font-semibold mb-3 text-gray-900 dark:text-white">
95
+
<h2
96
+
className="text-lg font-semibold mb-3 text-gray-900 dark:text-white"
97
+
style={{ fontFamily: "var(--font-balgin)" }}
98
+
>
93
99
{yearGroup.year}
94
100
</h2>
95
101
<ul className="space-y-3">
···
104
110
{concert.headliner}
105
111
</div>
106
112
{concert.openers && concert.openers.length > 0 && (
107
-
<div className="text-sm text-gray-600 dark:text-gray-400">
113
+
<div
114
+
className="text-sm text-gray-600 dark:text-gray-400"
115
+
style={{ fontFamily: "var(--font-balgin)" }}
116
+
>
108
117
with {concert.openers.join(", ")}
109
118
</div>
110
119
)}
111
120
{concert.tour && (
112
-
<div className="text-sm text-gray-600 dark:text-gray-400">
121
+
<div
122
+
className="text-sm text-gray-600 dark:text-gray-400"
123
+
style={{ fontFamily: "var(--font-balgin)" }}
124
+
>
113
125
{concert.tour}
114
126
</div>
115
127
)}
···
120
132
</div>
121
133
)}
122
134
{concert.setlist && (
123
-
<div className="text-xs mt-1">
135
+
<div
136
+
className="text-xs mt-1"
137
+
style={{ fontFamily: "var(--font-balgin)" }}
138
+
>
124
139
<a
125
140
href={concert.setlist}
126
141
target="_blank"
+4
-1
src/app/contact/page.tsx
+4
-1
src/app/contact/page.tsx
···
101
101
<MENU pageFirstWord="Contact" />
102
102
<main className="flex-1">
103
103
<div className="mx-5 mt-4 mb-4">
104
-
<h1 className="text-xl font-bold mb-4 text-gray-800 dark:text-white">
104
+
<h1
105
+
className="text-xl font-bold mb-4 text-gray-800 dark:text-white"
106
+
style={{ fontFamily: "var(--font-balgin)" }}
107
+
>
105
108
Get in Touch
106
109
</h1>
107
110
+13
-4
src/app/elsewhere/page.tsx
+13
-4
src/app/elsewhere/page.tsx
···
71
71
<MENU pageFirstWord="Elsewhere" />
72
72
<main className="flex-1">
73
73
<div className="mx-5 mt-4 mb-4">
74
-
<h1 className="text-xl font-bold mb-2 text-gray-800 dark:text-white">
75
-
/elsewhere or /appearances
74
+
<h1
75
+
className="text-xl font-bold mb-2 text-gray-800 dark:text-white"
76
+
style={{ fontFamily: "var(--font-balgin)" }}
77
+
>
78
+
My appearances elsewhere.
76
79
</h1>
77
80
<p className="text-gray-600 dark:text-white/70 mb-6 italic">
78
81
a list of output or writings on sites other than one's own
···
97
100
<div className="flex items-start justify-between gap-4">
98
101
<div className="flex-1 min-w-0">
99
102
<div className="flex items-start gap-2 mb-1">
100
-
<h2 className="font-semibold text-gray-900 dark:text-white group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
103
+
<h2
104
+
className="font-semibold text-gray-900 dark:text-white group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors"
105
+
style={{ fontFamily: "var(--font-balgin)" }}
106
+
>
101
107
{appearance.title}
102
108
</h2>
103
109
<ArrowUpRight className="w-4 h-4 text-gray-400 group-hover:text-blue-600 dark:group-hover:text-blue-400 flex-shrink-0 mt-0.5" />
···
110
116
{appearance.type && (
111
117
<>
112
118
<span>•</span>
113
-
<span className="px-2 py-0.5 text-xs rounded-full bg-gray-100 dark:bg-gray-700">
119
+
<span
120
+
className="px-2 py-0.5 text-xs rounded-full bg-gray-100 dark:bg-gray-700"
121
+
style={{ fontFamily: "var(--font-balgin)" }}
122
+
>
114
123
{appearance.type}
115
124
</span>
116
125
</>
+1
-1
src/app/error.tsx
+1
-1
src/app/error.tsx
+24
-6
src/app/green/page.tsx
+24
-6
src/app/green/page.tsx
···
62
62
<MENU pageFirstWord="Green" />
63
63
<main className="flex-1">
64
64
<div className="mx-5 mt-4 mb-4">
65
-
<h1 className="text-xl font-bold mb-4 text-gray-800 dark:text-white">
65
+
<h1
66
+
className="text-xl font-bold mb-4 text-gray-800 dark:text-white"
67
+
style={{ fontFamily: "var(--font-balgin)" }}
68
+
>
66
69
Living Green
67
70
</h1>
68
71
···
76
79
{/* Carbon Rating Card */}
77
80
<div className="border border-gray-200 dark:border-gray-700 rounded-lg p-6 bg-white dark:bg-gray-800/20">
78
81
<div className="flex items-center justify-between mb-4">
79
-
<h2 className="text-lg font-semibold text-gray-800 dark:text-white">
82
+
<h2
83
+
className="text-lg font-semibold text-gray-800 dark:text-white"
84
+
style={{ fontFamily: "var(--font-balgin)" }}
85
+
>
80
86
Website Carbon Rating
81
87
</h2>
82
88
<div className="flex items-center justify-center w-12 h-12 rounded-full bg-green-100 dark:bg-green-900/30">
83
-
<span className="text-2xl font-bold text-green-700 dark:text-green-400">
89
+
<span
90
+
className="text-2xl font-bold text-green-700 dark:text-green-400"
91
+
style={{ fontFamily: "var(--font-balgin)" }}
92
+
>
84
93
A
85
94
</span>
86
95
</div>
···
88
97
89
98
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 mb-4">
90
99
<div className="text-center p-3 rounded-md bg-gray-50 dark:bg-gray-700/30">
91
-
<div className="text-2xl font-bold text-gray-900 dark:text-white">
100
+
<div
101
+
className="text-2xl font-bold text-gray-900 dark:text-white"
102
+
style={{ fontFamily: "var(--font-balgin)" }}
103
+
>
92
104
0.17g
93
105
</div>
94
106
<div className="text-xs text-gray-600 dark:text-gray-400">
···
97
109
</div>
98
110
99
111
<div className="text-center p-3 rounded-md bg-gray-50 dark:bg-gray-700/30">
100
-
<div className="text-2xl font-bold text-gray-900 dark:text-white">
112
+
<div
113
+
className="text-2xl font-bold text-gray-900 dark:text-white"
114
+
style={{ fontFamily: "var(--font-balgin)" }}
115
+
>
101
116
20.7kg
102
117
</div>
103
118
<div className="text-xs text-gray-600 dark:text-gray-400">
···
106
121
</div>
107
122
108
123
<div className="text-center p-3 rounded-md bg-gray-50 dark:bg-gray-700/30">
109
-
<div className="text-2xl font-bold text-gray-900 dark:text-white">
124
+
<div
125
+
className="text-2xl font-bold text-gray-900 dark:text-white"
126
+
style={{ fontFamily: "var(--font-balgin)" }}
127
+
>
110
128
0.47
111
129
</div>
112
130
<div className="text-xs text-gray-600 dark:text-gray-400">
+78
-73
src/app/keys/[key]/page.tsx
+78
-73
src/app/keys/[key]/page.tsx
···
1
-
// app/keys/[key]/page.tsx
2
1
import FOOTER from "@/components/FOOTER";
3
2
import MENU from "@/components/MENU";
4
3
import { Button } from "@/components/ui/button";
···
56
55
const downloadURL = buildDownloadURL(title, fileExtension);
57
56
const fullDirectURL = `https://www.jaspermayone.com${directURL}`;
58
57
59
-
// Create import commands
60
58
const sshImportCommand = `curl -s ${fullDirectURL} >> ~/.ssh/authorized_keys`;
61
59
const gpgImportCommand = `curl -s ${fullDirectURL} | gpg --import`;
62
60
63
-
// Create structured data with breadcrumbs
64
61
const keyPageSchema = {
65
62
"@context": "https://schema.org",
66
63
"@graph": [
···
118
115
pageSecondWord="~"
119
116
pageThirdWord={`${title}`}
120
117
/>
121
-
<main>
122
-
<div className="max-w-4xl mx-auto px-3 py-6">
123
-
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
124
-
{/* Key Details */}
125
-
<div className="mb-5">
126
-
<h2 className="text-xl font-bold mb-4 text-gray-900 dark:text-white">
127
-
Key Details
128
-
</h2>
129
-
<div className="space-y-4">
130
-
<div>
131
-
<span className="font-medium text-gray-900 dark:text-white">
132
-
Fingerprint:
133
-
</span>
134
-
<p className="text-gray-600 dark:text-gray-300 font-mono text-sm mt-1 break-all">
118
+
<main className="min-h-screen">
119
+
<div
120
+
className="max-w-4xl mx-auto px-4 py-8 md:py-12"
121
+
style={{ fontFamily: "var(--font-balgin)" }}
122
+
>
123
+
{/* Header */}
124
+
<div className="mb-8">
125
+
<h1 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-2">
126
+
{title.toUpperCase()} Key
127
+
</h1>
128
+
<p className="text-gray-600 dark:text-gray-400">
129
+
Public {title.toUpperCase()} key for secure authentication
130
+
</p>
131
+
</div>
132
+
133
+
{/* Quick Actions Card */}
134
+
<div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl p-6 mb-6 shadow-sm">
135
+
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-4">
136
+
Quick Actions
137
+
</h2>
138
+
<div className="flex flex-col sm:flex-row gap-3">
139
+
<CopyButton label="Copy Key" valueToCopy={keyData} />
140
+
<Link href={downloadURL} className="flex-1 sm:flex-initial">
141
+
<Button variant="outline" className="w-full">
142
+
Download Key
143
+
</Button>
144
+
</Link>
145
+
</div>
146
+
</div>
147
+
148
+
{/* Key Details Card */}
149
+
<div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl p-6 mb-6 shadow-sm">
150
+
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-5">
151
+
Key Information
152
+
</h2>
153
+
154
+
<div className="space-y-5">
155
+
<div>
156
+
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
157
+
Fingerprint
158
+
</label>
159
+
<div className="bg-gray-50 dark:bg-gray-900 px-4 py-3 rounded-lg border border-gray-200 dark:border-gray-700">
160
+
<code className="text-sm font-mono text-gray-800 dark:text-gray-200 break-all">
135
161
{fingerprint}
136
-
</p>
137
-
</div>
138
-
<div>
139
-
<span className="font-medium text-gray-900 dark:text-white">
140
-
Direct link:
141
-
</span>
142
-
<p className="mt-1">
143
-
<Link href={directURL} className="lnk break-all">
144
-
{directURL}
145
-
</Link>
146
-
</p>
162
+
</code>
147
163
</div>
148
164
</div>
149
-
</div>
150
165
151
-
{/* Actions */}
152
-
<div className="border-t border-gray-200 dark:border-gray-700 pt-6 mb-8">
153
-
<h3 className="text-lg font-semibold mb-4 text-gray-900 dark:text-white">
154
-
Actions
155
-
</h3>
156
-
<div className="flex flex-col sm:flex-row gap-4">
157
-
<CopyButton label="Copy public key" valueToCopy={keyData} />
158
-
<Link href={downloadURL}>
159
-
<Button variant="outline" className="w-full sm:w-auto">
160
-
<span className="mr-2">📥</span>
161
-
Download public key
162
-
</Button>
163
-
</Link>
166
+
<div>
167
+
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
168
+
Direct Link
169
+
</label>
170
+
<div className="bg-gray-50 dark:bg-gray-900 px-4 py-3 rounded-lg border border-gray-200 dark:border-gray-700">
171
+
<Link
172
+
href={directURL}
173
+
className="text-sm text-blue-600 dark:text-blue-400 hover:underline break-all font-mono"
174
+
>
175
+
{fullDirectURL}
176
+
</Link>
177
+
</div>
164
178
</div>
165
179
</div>
180
+
</div>
166
181
167
-
{/* Import Command */}
168
-
<div className="border-t border-gray-200 dark:border-gray-700 pt-6">
169
-
<h3 className="text-lg font-semibold mb-3 text-gray-900 dark:text-white">
182
+
{/* Import Command Card */}
183
+
{(title === "ssh" || title === "gpg") && (
184
+
<div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl p-6 shadow-sm">
185
+
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-3">
170
186
Import Command
171
-
</h3>
172
-
<p className="text-sm text-gray-600 dark:text-gray-400 mb-3">
173
-
Copy and run this command to import the key:
187
+
</h2>
188
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">
189
+
Run this command in your terminal to import the key:
174
190
</p>
175
-
{title === "ssh" ? (
176
-
<div className="space-y-3">
177
-
<div className="bg-gray-100 dark:bg-gray-900 p-3 rounded border overflow-x-auto">
178
-
<code className="text-xs whitespace-nowrap block font-mono text-gray-800 dark:text-gray-200">
179
-
{sshImportCommand}
180
-
</code>
181
-
</div>
182
-
<CopyButton
183
-
label="Copy SSH import command"
184
-
valueToCopy={sshImportCommand}
185
-
/>
191
+
192
+
<div className="space-y-3">
193
+
<div className="bg-gray-900 dark:bg-black p-4 rounded-lg border border-gray-700 overflow-x-auto">
194
+
<code className="text-sm font-mono text-green-400 block whitespace-nowrap">
195
+
{title === "ssh" ? sshImportCommand : gpgImportCommand}
196
+
</code>
186
197
</div>
187
-
) : title === "gpg" ? (
188
-
<div className="space-y-3">
189
-
<div className="bg-gray-100 dark:bg-gray-900 p-3 rounded border overflow-x-auto">
190
-
<code className="text-xs whitespace-nowrap block font-mono text-gray-800 dark:text-gray-200">
191
-
{gpgImportCommand}
192
-
</code>
193
-
</div>
194
-
<CopyButton
195
-
label="Copy GPG import command"
196
-
valueToCopy={gpgImportCommand}
197
-
/>
198
-
</div>
199
-
) : null}
198
+
<CopyButton
199
+
label={`Copy ${title.toUpperCase()} Import Command`}
200
+
valueToCopy={
201
+
title === "ssh" ? sshImportCommand : gpgImportCommand
202
+
}
203
+
/>
204
+
</div>
200
205
</div>
201
-
</div>
206
+
)}
202
207
</div>
203
208
</main>
204
209
<FOOTER />
+20
-6
src/app/layout.tsx
+20
-6
src/app/layout.tsx
···
1
+
import { ThemeProvider } from "@/components/theme-provider";
2
+
import { ThemeUpdater } from "@/components/theme-updater";
1
3
import { redirects } from "@/lib/defs";
2
4
import "@/styles/globals.css";
3
-
import { ThemeProvider } from "@/components/theme-provider";
4
-
import { ThemeUpdater } from "@/components/theme-updater";
5
5
import { SpeedInsights } from "@vercel/speed-insights/next";
6
6
import type { Metadata, Viewport } from "next";
7
+
import { ViewTransitions } from "next-view-transitions";
7
8
import localFont from "next/font/local";
8
9
import Script from "next/script";
9
-
import { ViewTransitions } from "next-view-transitions";
10
10
11
11
const cuteNotes = localFont({
12
12
src: [
13
13
{
14
-
path: "../../public/fonts/CuteNotes.ttf",
14
+
path: "../../public/fonts/CuteNotes/CuteNotes.ttf",
15
15
style: "normal",
16
16
},
17
17
],
18
18
variable: "--font-cuteNotes",
19
+
});
20
+
21
+
const balgin = localFont({
22
+
src: [
23
+
{
24
+
path: "../../public/fonts/Balgin/BalginText-Light.otf",
25
+
style: "normal",
26
+
},
27
+
],
28
+
variable: "--font-balgin",
19
29
});
20
30
21
31
export const metadata: Metadata = {
···
318
328
children: React.ReactNode;
319
329
}>) {
320
330
return (
321
-
<html lang="en" className={cuteNotes.variable} suppressHydrationWarning>
331
+
<html
332
+
lang="en"
333
+
className={`${cuteNotes.variable} ${balgin.variable}`}
334
+
suppressHydrationWarning
335
+
>
322
336
<head>
323
337
<meta charSet="utf-8" />
324
338
<meta name="og:type" content="website" />
···
383
397
384
398
<link rel="manifest" href="/site.webmanifest" />
385
399
</head>
386
-
<body className={`${cuteNotes.variable} font-sans`}>
400
+
<body className={`${cuteNotes.variable} ${balgin.variable} font-sans`}>
387
401
<ThemeProvider
388
402
attribute="class"
389
403
defaultTheme="system"
+4
-4
src/app/panera/page.tsx
+4
-4
src/app/panera/page.tsx
···
1
+
import FOOTER from "@/components/FOOTER";
2
+
import MENU from "@/components/MENU";
1
3
import { PaneraCard } from "@/components/PaneraCard";
2
-
import Image from "next/image";
3
4
import { Metadata } from "next";
4
-
import MENU from "@/components/MENU";
5
-
import FOOTER from "@/components/FOOTER";
6
5
import Script from "next/script";
7
6
8
7
export const metadata: Metadata = {
···
89
88
<div
90
89
className="text-3xl font-bold mb-4"
91
90
style={{
91
+
fontFamily: "var(--font-balgin)",
92
92
color: "#051402",
93
93
fontWeight: 600,
94
94
}}
···
97
97
</div>
98
98
<p
99
99
className="text-gray-600 max-w-2xl mx-auto"
100
-
style={{ lineHeight: "1.6" }}
100
+
style={{ lineHeight: "1.6", fontFamily: "var(--font-balgin)" }}
101
101
>
102
102
Inspired by people creating /chipotle pages with their Chipotle
103
103
order for when their friends get them Chipotle, here's what I
+4
-1
src/app/pfp/page.tsx
+4
-1
src/app/pfp/page.tsx
···
70
70
<MENU pageFirstWord="PFPs" />
71
71
<main className="flex-1">
72
72
<div className="mx-5 mt-4 mb-4">
73
-
<h1 className="text-xl font-bold mb-4 text-gray-800 dark:text-white">
73
+
<h1
74
+
className="text-xl font-bold underline mb-4 text-gray-800 dark:text-white"
75
+
style={{ fontFamily: "var(--font-balgin)" }}
76
+
>
74
77
Profile Photos
75
78
</h1>
76
79
+4
-1
src/app/podroll/page.tsx
+4
-1
src/app/podroll/page.tsx
···
102
102
<MENU pageFirstWord="Podcasts" />
103
103
<main className="flex-1">
104
104
<div className="mx-5 mt-4 mb-4">
105
-
<h1 className="text-xl font-bold mb-2 text-gray-800 dark:text-white">
105
+
<h1
106
+
className="text-xl font-bold mb-2 text-gray-800 dark:text-white"
107
+
style={{ fontFamily: "var(--font-balgin)" }}
108
+
>
106
109
Recommended Podcasts
107
110
</h1>
108
111
+1
src/app/portfolio/page.tsx
+1
src/app/portfolio/page.tsx
+6
-1
src/app/to/page.tsx
+6
-1
src/app/to/page.tsx
···
16
16
return (
17
17
<div className="min-h-screen bg-background text-foreground">
18
18
<div className="container mx-auto px-4 py-8">
19
-
<h1 className="text-3xl font-bold mb-8">All /to Routes</h1>
19
+
<h1
20
+
className="text-3xl font-bold mb-8"
21
+
style={{ fontFamily: "var(--font-balgin)" }}
22
+
>
23
+
All /to Routes
24
+
</h1>
20
25
21
26
<div className="grid gap-4">
22
27
{toRoutes.map((redirect) => (
+1
-1
src/components/FOOTER.tsx
+1
-1
src/components/FOOTER.tsx
+21
-6
src/components/PostList.tsx
+21
-6
src/components/PostList.tsx
···
1
1
"use client";
2
2
3
-
import { formatRelative, format } from "date-fns";
3
+
import { formatRelative } from "date-fns";
4
4
import { formatInTimeZone } from "date-fns-tz";
5
-
import { useState, useEffect } from "react";
5
+
import { useEffect, useState } from "react";
6
6
7
7
interface Post {
8
8
text: string;
···
65
65
<div className="space-y-3">
66
66
<div className="flex items-center justify-center py-8">
67
67
<div className="animate-spin rounded-full h-6 w-6 border-b-2 border-gray-600"></div>
68
-
<span className="ml-3 text-gray-600">Loading updates...</span>
68
+
<span
69
+
className="ml-3 text-gray-600"
70
+
style={{ fontFamily: "var(--font-balgin)" }}
71
+
>
72
+
Loading updates...
73
+
</span>
69
74
</div>
70
75
</div>
71
76
);
···
76
81
<div className="space-y-3">
77
82
<div className="flex items-center justify-center py-8">
78
83
<div className="text-red-600">
79
-
<p className="font-medium">Failed to load updates</p>
84
+
<p
85
+
className="font-medium"
86
+
style={{ fontFamily: "var(--font-balgin)" }}
87
+
>
88
+
Failed to load updates
89
+
</p>
80
90
<p className="text-sm mt-1">{error}</p>
81
91
</div>
82
92
</div>
···
91
101
<div className="space-y-3">
92
102
{postsToShow.map((post, index) => (
93
103
<div key={index} className="flex items-start gap-3">
94
-
<div className="w-2 h-2 bg-gray-400 rounded-full mt-2 flex-shrink-0"></div>
104
+
<div className="w-2 h-2 bg-gray-400 rounded-full mt-2 shrink-0"></div>
95
105
<div className="flex-1">
96
-
<p className="text-gray-800">{post.text}</p>
106
+
<p
107
+
className="text-gray-800"
108
+
style={{ fontFamily: "var(--font-balgin)" }}
109
+
>
110
+
{post.text}
111
+
</p>
97
112
<p className="text-xs text-gray-500 mt-1">
98
113
{formatTimeAgo(post.createdAt)}
99
114
</p>
+6
-9
src/styles/globals.css
+6
-9
src/styles/globals.css
···
14
14
--background-end-rgb: 0, 0, 0;
15
15
}
16
16
17
-
@font-face {
18
-
font-family: "Cute Notes";
19
-
src:
20
-
url("/fonts/CuteNotes.woff2") format("woff2"),
21
-
url("/fonts/CuteNotes.woff") format("woff");
22
-
font-weight: normal;
23
-
font-style: normal;
24
-
font-display: swap;
25
-
}
17
+
/* Fonts are loaded via Next.js localFont in layout.tsx */
26
18
27
19
body {
28
20
/* font-family: "Cute Notes", sans-serif; */
···
55
47
color: #56ba8e;
56
48
text-decoration: underline wavy;
57
49
transition: color 0.3s ease;
50
+
font-family: var(--font-balgin), sans-serif;
58
51
}
59
52
60
53
.lnk:hover {
61
54
color: light-dark(#003e73, #aad5fb);
55
+
}
56
+
57
+
a {
58
+
font-family: var(--font-balgin), sans-serif;
62
59
}
63
60
64
61
/* View Transitions API Styles */