Personal Website for @jaspermayone.com jaspermayone.com
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

eslint changes

+170 -170
+51 -40
eslint.config.mjs
··· 14 14 const __filename = fileURLToPath(import.meta.url); 15 15 const __dirname = path.dirname(__filename); 16 16 const compat = new FlatCompat({ 17 - baseDirectory: __dirname, 18 - recommendedConfig: js.configs.recommended, 19 - allConfig: js.configs.all 17 + baseDirectory: __dirname, 18 + recommendedConfig: js.configs.recommended, 19 + allConfig: js.configs.all, 20 20 }); 21 21 22 - export default defineConfig([globalIgnores([ 22 + export default defineConfig([ 23 + globalIgnores([ 23 24 "**/node_modules/", 24 25 "**/.next/", 25 26 "**/.vercel/", ··· 27 28 "**/public/", 28 29 "**/*.config.js", 29 30 "**/*.config.ts", 30 - ]), { 31 - extends: fixupConfigRules(compat.extends( 31 + ]), 32 + { 33 + extends: fixupConfigRules( 34 + compat.extends( 32 35 "eslint:recommended", 33 36 "plugin:@typescript-eslint/recommended", 34 37 "plugin:react/recommended", 35 38 "plugin:react-hooks/recommended", 36 39 "plugin:jsx-a11y/recommended", 37 - "prettier", 38 - )), 40 + "prettier" 41 + ) 42 + ), 39 43 40 44 plugins: { 41 - "@typescript-eslint": fixupPluginRules(typescriptEslint), 42 - react: fixupPluginRules(react), 43 - "react-hooks": fixupPluginRules(reactHooks), 44 - "jsx-a11y": fixupPluginRules(jsxA11Y), 45 + "@typescript-eslint": fixupPluginRules(typescriptEslint), 46 + react: fixupPluginRules(react), 47 + "react-hooks": fixupPluginRules(reactHooks), 48 + "jsx-a11y": fixupPluginRules(jsxA11Y), 45 49 }, 46 50 47 51 languageOptions: { 48 - globals: { 49 - ...globals.browser, 50 - ...globals.node, 51 - }, 52 + globals: { 53 + ...globals.browser, 54 + ...globals.node, 55 + }, 52 56 53 - parser: tsParser, 54 - ecmaVersion: 2021, 55 - sourceType: "module", 57 + parser: tsParser, 58 + ecmaVersion: 2021, 59 + sourceType: "module", 56 60 57 - parserOptions: { 58 - ecmaFeatures: { 59 - jsx: true, 60 - }, 61 + parserOptions: { 62 + ecmaFeatures: { 63 + jsx: true, 61 64 }, 65 + }, 62 66 }, 63 67 64 68 settings: { 65 - react: { 66 - version: "detect", 67 - }, 69 + react: { 70 + version: "detect", 71 + }, 68 72 }, 69 73 70 74 rules: { 71 - "@typescript-eslint/no-unused-vars": ["warn", { 72 - argsIgnorePattern: "^_", 73 - varsIgnorePattern: "^_", 74 - }], 75 + "@typescript-eslint/no-unused-vars": [ 76 + "warn", 77 + { 78 + argsIgnorePattern: "^_", 79 + varsIgnorePattern: "^_", 80 + }, 81 + ], 75 82 76 - "@typescript-eslint/no-explicit-any": "warn", 77 - "react-hooks/rules-of-hooks": "error", 78 - "react-hooks/exhaustive-deps": "warn", 79 - "react/no-unescaped-entities": "warn", 80 - "react/react-in-jsx-scope": "off", 81 - "react/prop-types": "off", 83 + "@typescript-eslint/no-explicit-any": "warn", 84 + "react-hooks/rules-of-hooks": "error", 85 + "react-hooks/exhaustive-deps": "warn", 86 + "react/no-unescaped-entities": "warn", 87 + "react/react-in-jsx-scope": "off", 88 + "react/prop-types": "off", 82 89 83 - "no-console": ["warn", { 84 - allow: ["warn", "error"], 85 - }], 90 + "no-console": [ 91 + "warn", 92 + { 93 + allow: ["warn", "error"], 94 + }, 95 + ], 86 96 }, 87 - }]); 97 + }, 98 + ]);
+8 -8
src/app/(home)/page.tsx
··· 72 72 Wentworth Institute of Technology 73 73 </Link>{" "} 74 74 in Boston, Massachusetts. When not in school or at work, 75 - Jasper's hobbies include reading, being in the great outdoors, 76 - photography, computer programming, cooking, and running away to 77 - join the circus. 75 + Jasper&apos;s hobbies include reading, being in the great 76 + outdoors, photography, computer programming, cooking, and 77 + running away to join the circus. 78 78 </p> 79 79 <p className="text-sm text-gray-600 dark:text-white/70"> 80 80 An avid organizer and big picture thinker, you can often find ··· 87 87 adventures, both close to home and abroad. 88 88 </p> 89 89 <p className="text-sm text-gray-600 dark:text-white/70"> 90 - Recently they've been focusing their time (outside of their 90 + Recently they&apos;ve been focusing their time (outside of their 91 91 degree) on{" "} 92 92 <Link 93 93 className="lnk" ··· 103 103 </p> 104 104 105 105 <p className="text-sm text-gray-600 dark:text-white/70"> 106 - Previously, Jasper's adventures included working at{" "} 106 + Previously, Jasper&apos;s adventures included working at{" "} 107 107 <Link 108 108 className="lnk" 109 109 href="https://mlh.io/?utm_source=jaspermayone.com&utm_medium=referral" ··· 114 114 </Link>{" "} 115 115 as the Summer 2025 engineering intern, a month-long trip to 116 116 Rwanda, where they filmed a documentary and managed production 117 - for their fellow students' films. They also played a key role in 118 - the Waitsfield Elementary PTA's Annual Ski & Skate sale, 119 - co-coordinated large scale climate conferences called “See 117 + for their fellow students&apos; films. They also played a key 118 + role in the Waitsfield Elementary PTA&apos;s Annual Ski & Skate 119 + sale, co-coordinated large scale climate conferences called “See 120 120 Change Sessions” with thousands of attendees, and enjoyed 121 121 concerts by AJR, Sammy Rae & the Friends, and Lake Street Dive. 122 122 </p>
+2 -2
src/app/api/og/route.tsx
··· 32 32 } 33 33 34 34 return generateOGImage(data); 35 - } catch (e: any) { 36 - console.log(`${e.message}`); 35 + } catch (e: unknown) { 36 + console.error(`OG image generation failed:`, e); 37 37 return new Response(`Failed to generate the image`, { 38 38 status: 500, 39 39 });
+3 -3
src/app/concerts/page.tsx
··· 132 132 className="mb-4 text-xl font-bold text-gray-800 dark:text-white" 133 133 style={{ fontFamily: "var(--font-balgin)" }} 134 134 > 135 - Concerts I've Attended 135 + Concerts I&apos;ve Attended 136 136 </h1> 137 137 138 138 <p className="mb-6 text-gray-600 dark:text-white/70"> 139 - A running list of live shows and concerts I've been to over the 140 - years. 139 + A running list of live shows and concerts I&apos;ve been to over 140 + the years. 141 141 </p> 142 142 143 143 <div className="space-y-8">
+1 -1
src/app/contact/page.tsx
··· 124 124 </Link> 125 125 </p> 126 126 <p className="text-gray-600 dark:text-white/70"> 127 - Want my phone number? Let's be friends first! I promise I 127 + Want my phone number? Let&apos;s be friends first! I promise I 128 128 respond super quick on the other platforms 😁 129 129 </p> 130 130
+1 -1
src/app/elsewhere/page.tsx
··· 114 114 My appearances elsewhere. 115 115 </h1> 116 116 <p className="mb-6 text-gray-600 italic dark:text-white/70"> 117 - a list of output or writings on sites other than one's own 117 + a list of output or writings on sites other than one&apos;s own 118 118 </p> 119 119 120 120 {sortedAppearances.length === 0 ? (
+4 -4
src/app/green/page.tsx
··· 71 71 72 72 <div className="space-y-4"> 73 73 <p className="text-gray-600 dark:text-white/70"> 74 - I love the environment! I'm a big fan of green energy and 75 - sustainability. I'm always looking for ways to reduce my carbon 76 - footprint and make a positive impact on the planet. 74 + I love the environment! I&apos;m a big fan of green energy and 75 + sustainability. I&apos;m always looking for ways to reduce my 76 + carbon footprint and make a positive impact on the planet. 77 77 </p> 78 78 79 79 {/* Carbon Rating Card */} ··· 135 135 136 136 <p className="mb-2 text-sm text-gray-600 dark:text-gray-400"> 137 137 This website produces minimal carbon emissions with just{" "} 138 - <strong>0.17 grams of CO₂</strong> per page view. That's 138 + <strong>0.17 grams of CO₂</strong> per page view. That&apos;s 139 139 excellent for web sustainability! 140 140 </p> 141 141
+4 -4
src/app/panera/page.tsx
··· 93 93 fontWeight: 600, 94 94 }} 95 95 > 96 - Jasper's Panera Bread Order 96 + Jasper&apos;s Panera Bread Order 97 97 </div> 98 98 <p 99 99 className="mx-auto max-w-2xl text-gray-600" 100 100 style={{ lineHeight: "1.6", fontFamily: "var(--font-balgin)" }} 101 101 > 102 102 Inspired by people creating /chipotle pages with their Chipotle 103 - order for when their friends get them Chipotle, here's what I 104 - usually get at Panera in case anyone wants to get me Panera and 105 - is wondering what to get. 103 + order for when their friends get them Chipotle, here&apos;s what 104 + I usually get at Panera in case anyone wants to get me Panera 105 + and is wondering what to get. 106 106 </p> 107 107 </div> 108 108 </div>
+1 -1
src/app/pfp/page.tsx
··· 106 106 </h1> 107 107 108 108 <p className="mb-5 text-gray-600 dark:text-white/70"> 109 - Here's all the profile photos I've used over the years 109 + Here&apos;s all the profile photos I&apos;ve used over the years 110 110 </p> 111 111 112 112 <div className="grid grid-cols-4 gap-4 md:grid-cols-5 lg:grid-cols-6">
+1 -1
src/app/portfolio/page.tsx
··· 109 109 <main className="m-5 flex-1"> 110 110 <div className="mb-8"> 111 111 <p className="mb-3 text-gray-700 dark:text-white/70"> 112 - A collection of projects I've worked on, ranging from web 112 + A collection of projects I&apos;ve worked on, ranging from web 113 113 applications to creative tools and experiments. 114 114 </p> 115 115 </div>
+2 -2
src/app/verify/page.tsx
··· 444 444 <p className="mt-4 text-sm text-gray-500 dark:text-gray-400"> 445 445 If you have questions about my identity at these{" "} 446 446 <b>or any other addresses</b>, you can email me at any of the ones 447 - you see above to verify it's me. I also sign my emails with my GPG 448 - key (listed below) whenever possible. 447 + you see above to verify it&apos;s me. I also sign my emails with 448 + my GPG key (listed below) whenever possible. 449 449 </p> 450 450 </div> 451 451 </section>
+2 -2
src/components/email.tsx
··· 68 68 {/* h2 with custom .ul class */} 69 69 <h2 className={styles.lightUl}>Newsletter</h2> 70 70 <p className="mb-4 text-sm text-gray-700 dark:text-white/70"> 71 - Subscribe to my newsletter to get <i>occasioal</i> updates on what I'm 72 - up to. 71 + Subscribe to my newsletter to get <i>occasioal</i> updates on what 72 + I&apos;m up to. 73 73 </p> 74 74 75 75 {!submitted ? (
+2 -1
src/components/ui/button.tsx
··· 35 35 ); 36 36 37 37 export interface ButtonProps 38 - extends React.ButtonHTMLAttributes<HTMLButtonElement>, 38 + extends 39 + React.ButtonHTMLAttributes<HTMLButtonElement>, 39 40 VariantProps<typeof buttonVariants> { 40 41 asChild?: boolean; 41 42 }
+82 -84
src/lib/og-image.tsx
··· 50 50 const colors = getColors(type); 51 51 52 52 return new ImageResponse( 53 - ( 53 + <div 54 + style={{ 55 + height: "100%", 56 + width: "100%", 57 + display: "flex", 58 + flexDirection: "column", 59 + alignItems: "center", 60 + justifyContent: "center", 61 + backgroundColor: colors.bg, 62 + padding: "40px", 63 + fontFamily: 64 + 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', 65 + }} 66 + > 54 67 <div 55 68 style={{ 56 - height: "100%", 57 - width: "100%", 58 69 display: "flex", 59 70 flexDirection: "column", 60 71 alignItems: "center", 61 72 justifyContent: "center", 62 - backgroundColor: colors.bg, 63 - padding: "40px", 64 - fontFamily: 65 - 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', 73 + border: `2px solid ${colors.border}`, 74 + borderRadius: "16px", 75 + padding: "50px", 76 + backgroundColor: colors.cardBg, 77 + boxShadow: "0 25px 50px rgba(0, 0, 0, 0.4)", 78 + width: "90%", 79 + height: "80%", 80 + textAlign: "center", 66 81 }} 67 82 > 68 - <div 83 + <h1 69 84 style={{ 70 - display: "flex", 71 - flexDirection: "column", 72 - alignItems: "center", 73 - justifyContent: "center", 74 - border: `2px solid ${colors.border}`, 75 - borderRadius: "16px", 76 - padding: "50px", 77 - backgroundColor: colors.cardBg, 78 - boxShadow: "0 25px 50px rgba(0, 0, 0, 0.4)", 79 - width: "90%", 80 - height: "80%", 85 + fontSize: title.length > 20 ? "64px" : "80px", 86 + fontWeight: "bold", 87 + color: "#ffffff", 88 + marginBottom: "16px", 81 89 textAlign: "center", 90 + borderBottom: `4px solid ${colors.accent}`, 91 + paddingBottom: "12px", 92 + maxWidth: "100%", 93 + lineHeight: 1.1, 82 94 }} 83 95 > 84 - <h1 96 + {title} 97 + </h1> 98 + 99 + {subtitle && ( 100 + <div 85 101 style={{ 86 - fontSize: title.length > 20 ? "64px" : "80px", 87 - fontWeight: "bold", 88 - color: "#ffffff", 89 - marginBottom: "16px", 102 + fontSize: "36px", 103 + color: "#e2e8f0", 90 104 textAlign: "center", 91 - borderBottom: `4px solid ${colors.accent}`, 92 - paddingBottom: "12px", 93 - maxWidth: "100%", 94 - lineHeight: 1.1, 105 + maxWidth: "800px", 106 + lineHeight: 1.3, 107 + marginBottom: description ? "16px" : "24px", 95 108 }} 96 109 > 97 - {title} 98 - </h1> 99 - 100 - {subtitle && ( 101 - <div 102 - style={{ 103 - fontSize: "36px", 104 - color: "#e2e8f0", 105 - textAlign: "center", 106 - maxWidth: "800px", 107 - lineHeight: 1.3, 108 - marginBottom: description ? "16px" : "24px", 109 - }} 110 - > 111 - {subtitle} 112 - </div> 113 - )} 114 - 115 - {description && ( 116 - <div 117 - style={{ 118 - fontSize: "24px", 119 - color: "#94a3b8", 120 - textAlign: "center", 121 - maxWidth: "700px", 122 - lineHeight: 1.4, 123 - marginBottom: "24px", 124 - }} 125 - > 126 - {description} 127 - </div> 128 - )} 110 + {subtitle} 111 + </div> 112 + )} 129 113 114 + {description && ( 130 115 <div 131 116 style={{ 132 - fontSize: "20px", 133 - color: colors.accent, 134 - marginTop: "auto", 117 + fontSize: "24px", 118 + color: "#94a3b8", 135 119 textAlign: "center", 136 - display: "flex", 137 - alignItems: "center", 138 - gap: "8px", 120 + maxWidth: "700px", 121 + lineHeight: 1.4, 122 + marginBottom: "24px", 139 123 }} 140 124 > 141 - <div 142 - style={{ 143 - width: "8px", 144 - height: "8px", 145 - borderRadius: "50%", 146 - backgroundColor: colors.accent, 147 - }} 148 - /> 149 - jaspermayone.com 150 - <div 151 - style={{ 152 - width: "8px", 153 - height: "8px", 154 - borderRadius: "50%", 155 - backgroundColor: colors.accent, 156 - }} 157 - /> 125 + {description} 158 126 </div> 127 + )} 128 + 129 + <div 130 + style={{ 131 + fontSize: "20px", 132 + color: colors.accent, 133 + marginTop: "auto", 134 + textAlign: "center", 135 + display: "flex", 136 + alignItems: "center", 137 + gap: "8px", 138 + }} 139 + > 140 + <div 141 + style={{ 142 + width: "8px", 143 + height: "8px", 144 + borderRadius: "50%", 145 + backgroundColor: colors.accent, 146 + }} 147 + /> 148 + jaspermayone.com 149 + <div 150 + style={{ 151 + width: "8px", 152 + height: "8px", 153 + borderRadius: "50%", 154 + backgroundColor: colors.accent, 155 + }} 156 + /> 159 157 </div> 160 158 </div> 161 - ), 159 + </div>, 162 160 { 163 161 width: 1200, 164 162 height: 630,
+6 -16
tsconfig.json
··· 1 1 { 2 2 "compilerOptions": { 3 3 "target": "ES2017", 4 - "lib": [ 5 - "dom", 6 - "dom.iterable", 7 - "esnext" 8 - ], 4 + "lib": ["dom", "dom.iterable", "esnext"], 9 5 "allowJs": true, 10 6 "skipLibCheck": true, 11 7 "strict": true, ··· 24 20 } 25 21 ], 26 22 "paths": { 27 - "@/*": [ 28 - "./src/*" 29 - ], 30 - "@public/*": [ 31 - "./public/*" 32 - ] 33 - }, 23 + "@/*": ["./src/*"], 24 + "@public/*": ["./public/*"] 25 + } 34 26 // "baseUrl": "src/" 35 27 }, 36 28 "include": [ ··· 40 32 ".next/types/**/*.ts", 41 33 ".next/dev/types/**/*.ts" 42 34 ], 43 - "exclude": [ 44 - "node_modules" 45 - ] 46 - } 35 + "exclude": ["node_modules"] 36 + }