personal website (jaspermayone.com)

font upgrades

Changed files
+259 -134
public
src
app
(home)
colophon
concerts
contact
elsewhere
green
keys
[key]
panera
pfp
podroll
portfolio
to
components
styles
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.woff2 public/fonts/CuteNotes/CuteNotes.woff2
+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
··· 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
··· 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
··· 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
··· 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
··· 43 43 /> */} 44 44 45 45 <div className="max-w-lg text-center"> 46 - <p className="inline"> 46 + <p className="inline" style={{ fontFamily: "var(--font-balgin)" }}> 47 47 Uh oh! This page seems to have lost artistic direction. Please try 48 48 to 49 49 </p>{" "}
+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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 145 145 <span 146 146 key={tagIndex} 147 147 className="px-2 py-1 text-xs rounded-full bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300" 148 + style={{ fontFamily: "var(--font-balgin)" }} 148 149 > 149 150 {tag} 150 151 </span>
+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
··· 55 55 > 56 56 <p 57 57 className="text-xs text-center leading-relaxed break-words" 58 - style={{ color: textColor }} 58 + style={{ fontFamily: "var(--font-balgin)", color: textColor }} 59 59 > 60 60 ©{currentYear} Jasper Mayone. Made with &lt;3 in{" "} 61 61 <i>Boston, Massachusetts</i>.
+16 -5
src/components/PageNavigation.tsx
··· 173 173 title={`Go to ${item.slug}`} 174 174 style={ 175 175 item.slug === selectedTab 176 - ? { ...textShadowStyle } 177 - : { color: textColor, ...textShadowStyle } 176 + ? { fontFamily: "var(--font-balgin)", ...textShadowStyle } 177 + : { 178 + fontFamily: "var(--font-balgin)", 179 + color: textColor, 180 + ...textShadowStyle, 181 + } 178 182 } 179 183 > 180 184 /{item.slug} ··· 192 196 title={`see more pages`} 193 197 style={ 194 198 showMoreDropdown 195 - ? { ...textShadowStyle } 196 - : { color: textColor, ...textShadowStyle } 199 + ? { fontFamily: "var(--font-balgin)", ...textShadowStyle } 200 + : { 201 + fontFamily: "var(--font-balgin)", 202 + color: textColor, 203 + ...textShadowStyle, 204 + } 197 205 } 198 206 > 199 207 /more ··· 215 223 handleMenuClick(item.slug); 216 224 setShowMoreDropdown(false); 217 225 }} 218 - style={{ color: textColor }} 226 + style={{ 227 + fontFamily: "var(--font-balgin)", 228 + color: textColor, 229 + }} 219 230 > 220 231 /{item.slug} 221 232 </p>
+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
··· 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 */
+1 -1
tailwind.config.ts
··· 20 20 foreground: "var(--foreground)", 21 21 }, 22 22 fontFamily: { 23 - // "cute-notes": ['"Cute Notes"', "sans-serif"], 24 23 "cute-notes": "var(--font-cuteNotes)", 24 + balgin: "var(--font-balgin)", 25 25 }, 26 26 textDecorationStyle: { 27 27 wavy: "wavy",