From 7c37a72a5eabde5d4af5f144b63c4e3e56558273 Mon Sep 17 00:00:00 2001 From: Alex Frantz Date: Sun, 27 Sep 2026 01:31:46 -0400 Subject: [PATCH] seo improvements --- index.html | 64 +++----- public/favicon.svg | 5 + public/fonts/open-sans-latin-ext-italic.woff2 | Bin 0 -> 37752 bytes public/fonts/open-sans-latin-ext-normal.woff2 | Bin 0 -> 35156 bytes public/fonts/open-sans-latin-italic.woff2 | Bin 0 -> 50216 bytes public/fonts/open-sans-latin-normal.woff2 | Bin 0 -> 48320 bytes public/robots.txt | 4 +- public/site.webmanifest | 17 ++ server.js | 77 ++++++++- src/assets/main.css | 60 ++++++- src/components/BlogRow.tsx | 27 ++-- src/components/EmailLink.tsx | 32 ++++ src/components/Footer.tsx | 14 +- src/components/Header.tsx | 47 +++--- src/components/InitialDataProvider.tsx | 16 ++ src/components/Layout.tsx | 2 +- src/components/ProjectCard.tsx | 50 +++--- src/components/fantasy/PlayerCell.tsx | 5 +- src/components/fantasy/TeamRow.tsx | 14 +- src/components/info/GameComponent.tsx | 10 +- src/components/info/MusicComponent.tsx | 28 +++- src/components/modules/PictureCarousel.tsx | 90 ++++++++--- src/components/modules/ScoreModule.tsx | 32 ++-- src/components/modules/StatModule.tsx | 11 +- src/data/projects.ts | 70 +++++++++ src/entry-client.tsx | 11 +- src/entry-server.tsx | 54 +++++-- src/pages/App.tsx | 146 ++++-------------- src/pages/Home.tsx | 116 ++++++++++++++ src/pages/NotFound.tsx | 41 +++++ src/pages/Pictures.tsx | 34 +++- src/pages/ProjectDetail.tsx | 68 ++++++++ src/pages/Projects.tsx | 45 ++++++ src/pages/Sports.tsx | 46 +++++- src/routes.tsx | 115 ++++++++++++++ src/utils/blogFeed.ts | 42 +++++ src/utils/initialData.ts | 28 ++++ src/utils/resolveMeta.ts | 38 +++++ src/utils/seo.ts | 105 +++++++++++++ src/utils/site.ts | 27 ++++ src/utils/structuredData.ts | 121 +++++++++++++++ vite.config.ts | 15 ++ 42 files changed, 1412 insertions(+), 315 deletions(-) create mode 100644 public/favicon.svg create mode 100644 public/fonts/open-sans-latin-ext-italic.woff2 create mode 100644 public/fonts/open-sans-latin-ext-normal.woff2 create mode 100644 public/fonts/open-sans-latin-italic.woff2 create mode 100644 public/fonts/open-sans-latin-normal.woff2 create mode 100644 public/site.webmanifest create mode 100644 src/components/EmailLink.tsx create mode 100644 src/components/InitialDataProvider.tsx create mode 100644 src/data/projects.ts create mode 100644 src/pages/Home.tsx create mode 100644 src/pages/NotFound.tsx create mode 100644 src/pages/ProjectDetail.tsx create mode 100644 src/pages/Projects.tsx create mode 100644 src/routes.tsx create mode 100644 src/utils/blogFeed.ts create mode 100644 src/utils/initialData.ts create mode 100644 src/utils/resolveMeta.ts create mode 100644 src/utils/seo.ts create mode 100644 src/utils/site.ts create mode 100644 src/utils/structuredData.ts diff --git a/index.html b/index.html index 4da9af0..bc8245a 100644 --- a/index.html +++ b/index.html @@ -2,58 +2,36 @@ - - - + + + + + + + - - - - - - + + + - - - - - - - - - - - - - alex + + diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..02fad02 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/fonts/open-sans-latin-ext-italic.woff2 b/public/fonts/open-sans-latin-ext-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bc2aea0dc7b395272e43e8fbb8bbbae8bf988bb7 GIT binary patch literal 37752 zcmV(|K+(TZx_odD{lzio9s8kh#sor#Dl^ zM(R2D%xJK20Azj}%>MuX&rKR~R7tqZv;_rgZ-4)vYz|nN97d!OB~;ioI1+A2Ehi(5 zW~y^rP*EykMU+aLDU3dE6h_}yu^dy!VeUH`OyRz@C66H|Uu;fcYQyf7FAok`qR!|K zO;bVPOleD7dX%>)XdBO0af+a`aM<-%e9*@EWNWCjhDwXs2y+-ygg6mFCX4d$((q@) zd!Ie@OJ<9|=qbMF6v9JJdU!?p!{+Otl60HCMlS5YBYgiGSj8ijYlr1yQ7!&kmc!_5 zq&=F`>J@b!?|=5G4>o0>P!!#yh4fDmN7FyU3b#M6_Z+A3oR9*J&gd3mG#je(3?mqzT^U zxA)ujj-(0%LP&z}B;8b4&-gsKRei>+daTXq_A)~{aWqIlfFK$y1PG>6ull{c?Ou1z zeOuSls8}&PZS&vVfdME3!CJcgs5n{tjJn4if(&htD5YD%!s#?^k+-^L zHg5Kd`in@P^P+3Brkqhh0Z9QtKtPZZ!B`^)_-*zsb%0Dog?`W~V4;Yj5&}{JQU+om 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�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 z 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 UcvwA;rb=>|#XkJ7)1Uxcaa}zt{ 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 J(Lr?p007wi)93&I literal 0 HcmV?d00001 diff --git a/public/fonts/open-sans-latin-normal.woff2 b/public/fonts/open-sans-latin-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b5d54e7629057f310f8ef458e67ba2f568032139 GIT binary patch literal 48320 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 literal 0 HcmV?d00001 diff --git a/public/robots.txt b/public/robots.txt index 6bd9971..51dca72 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,4 +1,6 @@ # allow all crawlers idc User-Agent: * -Disallow: \ No newline at end of file +Disallow: + +Sitemap: https://alexav.gg/sitemap.xml diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..4e1cf0c --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,17 @@ +{ + "name": "Alex Frantz", + "short_name": "Alex", + "description": "Senior QA engineer at Medal.tv, based in Western New York.", + "start_url": "/", + "display": "minimal-ui", + "background_color": "#000000", + "theme_color": "#000000", + "icons": [ + { + "src": "/favicon.svg", + "sizes": "any", + "type": "image/svg+xml", + "purpose": "any" + } + ] +} diff --git a/server.js b/server.js index bd11b87..86386a2 100644 --- a/server.js +++ b/server.js @@ -30,7 +30,24 @@ if (!isProduction) { const compression = (await import("compression")).default; const sirv = (await import("sirv")).default; app.use(compression()); - app.use(base, sirv(clientDir, { extensions: [] })); + app.use( + base, + sirv(clientDir, { + extensions: [], + setHeaders(res, pathname) { + if (pathname.startsWith("/assets/")) { + // vite hashes these filenames, so the content can never change + // under a given url + res.setHeader("Cache-Control", "public, max-age=31536000, immutable"); + } else if (pathname.startsWith("/fonts/")) { + // stable but unhashed, so cache for a while rather than forever + res.setHeader("Cache-Control", "public, max-age=2592000"); + } else { + res.setHeader("Cache-Control", "public, max-age=3600"); + } + }, + }), + ); // a hashed asset that sirv did not find is genuinely gone, usually a stale // cached document asking for a previous build. 404 it here, otherwise it // falls through to the catch-all and answers a .js request with html @@ -43,26 +60,74 @@ if (!isProduction) { }); } +/** load the SSR bundle, from source in dev and from the build in production */ +async function loadServerEntry() { + if (!isProduction) { + return await vite.ssrLoadModule("/src/entry-server.tsx"); + } + return await import("./dist/server/entry-server.js"); +} + +/** + * Strip the deploy base from a request url, always leaving a rooted path. + * The previous `originalUrl.replace(base, "")` dropped the leading slash when + * base was "/", which would hand the router a relative location. + */ +function stripBase(originalUrl) { + if (!originalUrl) return "/"; + if (base === "/") return originalUrl; + if (originalUrl.startsWith(base)) { + const rest = originalUrl.slice(base.length); + return rest.startsWith("/") ? rest : `/${rest}`; + } + return originalUrl; +} + +// generated from the route table rather than checked in, so it cannot go stale +app.get(`${base.replace(/\/$/, "")}/sitemap.xml`, async (req, res) => { + try { + const { renderSitemap } = await loadServerEntry(); + res + .status(200) + .set({ + "Content-Type": "application/xml; charset=utf-8", + "Cache-Control": "public, max-age=3600", + }) + .send(renderSitemap()); + } catch (e) { + vite?.ssrFixStacktrace(e); + console.error(e.stack); + res.status(500).end(); + } +}); + app.use("*all", async (req, res) => { try { - const url = req.originalUrl.replace(base, ""); + const url = stripBase(req.originalUrl); let template; - let render; if (!isProduction) { template = await fs.readFile(path.resolve(root, "index.html"), "utf-8"); template = await vite.transformIndexHtml(url, template); - render = (await vite.ssrLoadModule("/src/entry-server.tsx")).render; } else { template = templateHtml; - render = (await import("./dist/server/entry-server.js")).render; } + const { render } = await loadServerEntry(); const rendered = await render(url); const html = template ?.replace("", rendered.head ?? "") .replace("", rendered.html ?? ""); - res.status(200).set({ "Content-Type": "text/html" }).send(html); + + res + .status(rendered.statusCode ?? 200) + .set({ + "Content-Type": "text/html", + // short shared cache window; the page embeds live-ish data + "Cache-Control": + "public, max-age=0, s-maxage=60, stale-while-revalidate=300", + }) + .send(html); } catch (e) { vite?.ssrFixStacktrace(e); console.log(e.stack); diff --git a/src/assets/main.css b/src/assets/main.css index dc69f2d..03c95fc 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -1,7 +1,65 @@ @import "tailwindcss"; +/* Open Sans, self-hosted. previously a render-blocking stylesheet request to + fonts.googleapis.com plus a second hop to fonts.gstatic.com for the files. + latin + latin-ext only; regenerate from Google Fonts if more subsets are + ever needed. */ +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 300 800; + font-display: swap; + src: url("/fonts/open-sans-latin-ext-italic.woff2") format("woff2"); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, + U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, + U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 300 800; + font-display: swap; + src: url("/fonts/open-sans-latin-italic.woff2") format("woff2"); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, + U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, + U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 300 800; + font-display: swap; + src: url("/fonts/open-sans-latin-ext-normal.woff2") format("woff2"); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, + U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, + U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 300 800; + font-display: swap; + src: url("/fonts/open-sans-latin-normal.woff2") format("woff2"); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, + U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, + U+2215, U+FEFF, U+FFFD; +} + body { - font-family: "Open Sans", sans-serif; + font-family: + "Open Sans", + ui-sans-serif, + system-ui, + -apple-system, + "Segoe UI", + sans-serif; background-color: black; ::-webkit-scrollbar { diff --git a/src/components/BlogRow.tsx b/src/components/BlogRow.tsx index 31468c6..b627609 100644 --- a/src/components/BlogRow.tsx +++ b/src/components/BlogRow.tsx @@ -1,18 +1,23 @@ import ErrorState from "./ErrorState"; import { useState, useEffect } from "react"; import type { BlogPost } from "../utils/types"; +import { useInitialData } from "../utils/initialData"; +import { PROFILES } from "../utils/site"; export default function BlogRow() { - const [post, setPost] = useState(null); + // seeded from the SSR payload so the post is in the served HTML, then + // refreshed on the client to pick up anything published since + const { posts } = useInitialData(); + const [post, setPost] = useState(posts?.[0] ?? null); useEffect(() => { - fetch("https://blog.alexav.gg/api/posts", { + fetch(`${PROFILES.blog}/api/posts`, { method: "GET", }).then(async (res) => { if (res.ok) { try { const data = await res.json(); - setPost(data[0]); + if (Array.isArray(data) && data[0]) setPost(data[0]); } catch (e) { console.error("An error occurred fetching blog posts!", e); } @@ -22,18 +27,20 @@ export default function BlogRow() { if (post) { return ( - + ); } else return ; } diff --git a/src/components/EmailLink.tsx b/src/components/EmailLink.tsx new file mode 100644 index 0000000..57ba40d --- /dev/null +++ b/src/components/EmailLink.tsx @@ -0,0 +1,32 @@ +import { useState } from "react"; +import { AUTHOR_EMAIL } from "../utils/site"; + +/** + * A real `mailto:` anchor. The old `href="#"` + onClick version was a crawl + * dead-end and unusable by keyboard, so the address is the href now and the + * copy-to-clipboard is layered on top as an enhancement. + */ +export default function EmailLink({ className = "" }: { className?: string }) { + const [copied, setCopied] = useState(false); + + return ( + { + if (!navigator.clipboard) return; + e.preventDefault(); + navigator.clipboard.writeText(AUTHOR_EMAIL).then( + () => { + setCopied(true); + setTimeout(() => setCopied(false), 1500); + }, + () => {}, + ); + }} + > + {copied ? "copied!" : AUTHOR_EMAIL} + + ); +} diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index c9a79b4..106fdd2 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,14 +1,10 @@ +import EmailLink from "./EmailLink"; + export default function Footer() { return ( - + ); } diff --git a/src/components/Header.tsx b/src/components/Header.tsx index a3eae3a..e1ee757 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,32 +1,39 @@ +import { Link } from "react-router-dom"; +import EmailLink from "./EmailLink"; +import { PROFILES } from "../utils/site"; + export default function Header() { return ( -
-

- Alex / dev + QA -

-
+
+ {/* site chrome, not the page topic — this was an

on every page */} +

+ + Alex / dev + QA + +

+

-
+ + + ); } diff --git a/src/components/InitialDataProvider.tsx b/src/components/InitialDataProvider.tsx new file mode 100644 index 0000000..24f63e2 --- /dev/null +++ b/src/components/InitialDataProvider.tsx @@ -0,0 +1,16 @@ +import type { ReactNode } from "react"; +import { InitialDataContext, type InitialData } from "../utils/initialData"; + +export default function InitialDataProvider({ + value, + children, +}: { + value: InitialData; + children: ReactNode; +}) { + return ( + + {children} + + ); +} diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 3ecfef6..41ca539 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -3,7 +3,7 @@ import Header from "./Header"; export default function Layout({ children }: { children: ReactNode }) { return ( -
+
{children}
diff --git a/src/components/ProjectCard.tsx b/src/components/ProjectCard.tsx index dffc3fa..157b03c 100644 --- a/src/components/ProjectCard.tsx +++ b/src/components/ProjectCard.tsx @@ -1,44 +1,36 @@ -interface ProjectCardProps { - title: string; - description: string; - link: string; - pills: string[]; -} -interface PillProps { - name: string; +import { Link } from "react-router-dom"; +import type { Project } from "../data/projects"; + +function Pill({ name }: { name: string }) { + return ( +
+ {name} +
+ ); } -export default function ProjectCard({ - title, - description, - link, - pills, -}: ProjectCardProps) { - const Pill = ({ name }: PillProps) => { - return ( -
- {name} -
- ); - }; - +export default function ProjectCard({ project }: { project: Project }) { return (
-

{description}

+

{project.description}

- {pills.map((v, k) => { - return ; - })} + {project.pills.map((v) => ( + + ))}
diff --git a/src/components/fantasy/PlayerCell.tsx b/src/components/fantasy/PlayerCell.tsx index a2d3064..6ce3470 100644 --- a/src/components/fantasy/PlayerCell.tsx +++ b/src/components/fantasy/PlayerCell.tsx @@ -16,7 +16,10 @@ export default function PlayerCell({ player }: { player: NFLPlayer | null }) { return (
-

{player.full_name}

+ {/* a player name is data, not a document section — this was an

, + and with a full roster per team it produced most of the page's + heading elements */} +

{player.full_name}

{player?.position} · {player?.team} {injuryStatus && "·"}{" "} {player?.injury_status && ( diff --git a/src/components/fantasy/TeamRow.tsx b/src/components/fantasy/TeamRow.tsx index 8ef7c33..8c1235a 100644 --- a/src/components/fantasy/TeamRow.tsx +++ b/src/components/fantasy/TeamRow.tsx @@ -8,20 +8,26 @@ export function TeamRow({ roster: NFLMatchupState; isWinning?: boolean; }) { + const teamName = roster?.owner.metadata.team_name; + return (

{teamName -

- {roster?.owner.metadata.team_name} | +

+ {teamName} | {roster?.points}pt -

+

diff --git a/src/components/info/GameComponent.tsx b/src/components/info/GameComponent.tsx index b68440a..f37a4a0 100644 --- a/src/components/info/GameComponent.tsx +++ b/src/components/info/GameComponent.tsx @@ -1,6 +1,5 @@ import { useState, useEffect } from "react"; -import ErrorState from "../ErrorState"; -import { Gamepad } from "lucide-react"; +import { PROFILES } from "../../utils/site"; type GameObject = { currentlyPlaying: CurrentlyPlaying; @@ -35,7 +34,12 @@ export default function GameComponent() { }, []); return ( - +
diff --git a/src/components/info/MusicComponent.tsx b/src/components/info/MusicComponent.tsx index 69d3640..a6a8ada 100644 --- a/src/components/info/MusicComponent.tsx +++ b/src/components/info/MusicComponent.tsx @@ -24,16 +24,28 @@ export default function MusicComponent() { }, []); return ( - +
- v.size === "medium")[0]["url"] || - music?.images[0].url - } - className="border-green-500 border-2" - /> + {music && ( + v.size === "medium")[0]["url"] || + music.images[0].url + } + alt={`${music.title} by ${music.artist} album artwork`} + width={64} + height={64} + loading="lazy" + decoding="async" + className="border-green-500 border-2 h-16 w-16 object-cover" + /> + )}

{music?.title}

{music?.artist}

diff --git a/src/components/modules/PictureCarousel.tsx b/src/components/modules/PictureCarousel.tsx index 7aec84d..12bc984 100644 --- a/src/components/modules/PictureCarousel.tsx +++ b/src/components/modules/PictureCarousel.tsx @@ -1,31 +1,77 @@ -const images = [ - "https://storage.alexav.gg/content/1b81a43e-7b6b-4969-944a-f2f334405477.jpg", - "https://storage.alexav.gg/content/91bce3da-36c3-497f-aaa9-b782d60c9cd7.jpg", - "https://storage.alexav.gg/content/8ce1c14f-864e-4915-bff4-4cbf73247023.jpg", - "https://storage.alexav.gg/content/6687d643-fb69-42f6-8480-51869cdb7efb.jpg", - "https://storage.alexav.gg/content/f8252684-eb5a-4344-baa1-46f4eab46916.jpg", - "https://storage.alexav.gg/content/363308c8-ecb6-4b2f-8dba-1c7f7f26f087.jpg", - "https://storage.alexav.gg/content/1aca5645-0d3d-43bf-a7b7-bd34bcc374b4.png", - "https://storage.alexav.gg/content/1f822215-0768-424d-893a-13bcd10aa98b.jpg", - "https://storage.alexav.gg/content/de890eaf-fc73-42a4-9fbe-a62313394a4c.jpg", - "https://storage.alexav.gg/content/d057af80-3d03-45ca-88b2-680c1e7c63c1.jpg", - "https://storage.alexav.gg/content/1d717aab-3058-405a-b04d-324d7ab3e658.jpg", - "https://storage.alexav.gg/content/2f36c1dd-eaf8-4fd3-a3cd-1d25fe8f5a07.jpg", +// alt text lives next to each src so descriptions cannot drift from the image. +// the alt values below are placeholders — replace them with what is actually +// in each photo, since that is what makes them findable in image search +const images: { src: string; alt: string }[] = [ + { + src: "https://storage.alexav.gg/content/1b81a43e-7b6b-4969-944a-f2f334405477.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/91bce3da-36c3-497f-aaa9-b782d60c9cd7.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/8ce1c14f-864e-4915-bff4-4cbf73247023.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/6687d643-fb69-42f6-8480-51869cdb7efb.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/f8252684-eb5a-4344-baa1-46f4eab46916.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/363308c8-ecb6-4b2f-8dba-1c7f7f26f087.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/1aca5645-0d3d-43bf-a7b7-bd34bcc374b4.png", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/1f822215-0768-424d-893a-13bcd10aa98b.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/de890eaf-fc73-42a4-9fbe-a62313394a4c.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/d057af80-3d03-45ca-88b2-680c1e7c63c1.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/1d717aab-3058-405a-b04d-324d7ab3e658.jpg", + alt: "A photo from Alex's camera roll", + }, + { + src: "https://storage.alexav.gg/content/2f36c1dd-eaf8-4fd3-a3cd-1d25fe8f5a07.jpg", + alt: "A photo from Alex's camera roll", + }, ]; export default function PictureCarousel() { return ( -
- {images.map((v, k) => { +
    + {images.map((image, k) => { return ( - +
  • + {image.alt} +
  • ); })} -
+ ); } diff --git a/src/components/modules/ScoreModule.tsx b/src/components/modules/ScoreModule.tsx index 6913de2..cbbb78a 100644 --- a/src/components/modules/ScoreModule.tsx +++ b/src/components/modules/ScoreModule.tsx @@ -30,7 +30,15 @@ function TeamRow({ return (
- + {`${homeTeam.name} { if ( @@ -42,6 +50,10 @@ function TeamRow({ } }} width={width} + height={80} + loading="lazy" + decoding="async" + alt={`${awayTeam.name} logo`} className="object-cover h-20" src={awayTeam.logo} /> @@ -84,17 +96,7 @@ export default function ScoreModule() { console.error("Failed to fetch Sabres score; " + res.statusText); } } - async function fetchYankeesScore() { - const res = await fetch("https://api.alexav.gg/v4/sports/scores/yankees"); - if (res.ok) { - const data = await res.json(); - setYankeesScore(data); - } else { - console.error("Failed to fetch Yankees score; " + res.statusText); - } - } - fetchYankeesScore(); fetchBillsScore(); fetchSabresScore(); }, []); @@ -119,14 +121,6 @@ export default function ScoreModule() { venue={billsScore.venue} /> )} - {yankeesScore?.homeTeam && yankeesScore.awayTeam && ( - - )} {warpath && (
@@ -61,6 +65,11 @@ export default function StatModule() { {data?.title
diff --git a/src/data/projects.ts b/src/data/projects.ts new file mode 100644 index 0000000..86237aa --- /dev/null +++ b/src/data/projects.ts @@ -0,0 +1,70 @@ +export type Project = { + slug: string; + title: string; + /** one-line summary, used on cards and as the meta description */ + description: string; + /** where the source lives */ + link: string; + pills: string[]; + /** paragraphs of prose for the detail page */ + body: string[]; +}; + +export const PROJECTS: Project[] = [ + { + slug: "led-matrix-scoreboard", + title: "LED Matrix Scoreboard", + description: + "A physical scoreboard driven by an LED matrix, pulls live sports data and renders pixel by pixel.", + link: "https://git.alexav.gg/alex/scoreboard", + pills: ["Python", "Raspberry Pi", "Hardware"], + body: [ + "I wanted live scores on a wall instead of on a phone, so I built a physical scoreboard: a Raspberry Pi driving an RGB LED matrix, polling live sports data and drawing the result pixel by pixel.", + "The interesting constraint is the display itself. An LED matrix has no text rendering, no layout engine, and very few pixels to spend, so every score, team abbreviation, and clock has to be composed by hand and kept legible from across a room. The Python service handles fetching and caching the game state, then hands a frame to the matrix driver.", + "Written in Python and running on a Raspberry Pi. The source is on my Gitea instance if you want to build one.", + ], + }, + { + slug: "subber", + title: "Subber", + description: + "Keeps track of your subscriptions and generates clear metrics for you to manage.", + link: "https://github.com/azpha/subber", + pills: ["TypeScript", "Tailwind", "Prisma"], + body: [ + "Subber tracks recurring subscriptions and turns them into metrics you can actually act on — what you are paying monthly versus annually, and where the money is going.", + "The problem with most subscription trackers is that they are a list. A list tells you what you signed up for; it does not tell you what it costs you over a year, or which renewals are about to land in the same week. Subber is built around the aggregate view first and the list second.", + "TypeScript throughout, Prisma for the data layer, and Tailwind for the interface.", + ], + }, + { + slug: "snapchat-memory-extractor", + title: "Snapchat Memory Extractor", + description: + "Extracts your Snapchat memories from your data export in a cleaner format than their horrible index.html.", + link: "https://github.com/azpha/snapchat-memory-extractor", + pills: ["Python", "Automation"], + body: [ + "When you request your data from Snapchat, your memories arrive as an enormous index.html full of links rather than as files you can actually keep. This tool takes that export and pulls the memories out into a sane folder of real media files.", + "It is the kind of small, unglamorous automation that saves an afternoon of clicking. Point it at the export, let it walk the index, and it resolves and downloads each memory for you.", + "Written in Python with no heavy dependencies, so it runs anywhere you can get a Python interpreter.", + ], + }, + { + slug: "homelab", + title: "Homelab", + description: + "My tinkering sandbox. Full CI/CD pipeline for people to learn & take inspiration from.", + link: "https://git.alexav.gg/alex/homelab", + pills: ["Docker", "Ansible", "Python", "Automation"], + body: [ + "My homelab is where everything else on this site actually runs — this website, my Gitea instance, my analytics, my personal API. The whole thing is defined as code and deployed through its own CI/CD pipeline.", + "I keep the repository public because homelab writeups tend to stop at the hardware photos, and the useful part is the boring middle: how services get configured, how deploys happen, how it recovers when something breaks. Docker for the services, Ansible for the configuration, Python for the glue.", + "Take whatever is useful. It is a sandbox, so expect it to change.", + ], + }, +]; + +export function findProject(slug: string | undefined) { + return PROJECTS.find((p) => p.slug === slug); +} diff --git a/src/entry-client.tsx b/src/entry-client.tsx index 03a9727..3e30316 100644 --- a/src/entry-client.tsx +++ b/src/entry-client.tsx @@ -2,10 +2,19 @@ import { hydrateRoot } from "react-dom/client"; import { BrowserRouter } from "react-router-dom"; import "./assets/main.css"; import App from "./pages/App.tsx"; +import InitialDataProvider from "./components/InitialDataProvider"; +import { INITIAL_DATA_GLOBAL, type InitialData } from "./utils/initialData"; + +const initialData: InitialData = + (window as unknown as Record)[ + INITIAL_DATA_GLOBAL + ] ?? {}; hydrateRoot( document.getElementById("root")!, - + + + , ); diff --git a/src/entry-server.tsx b/src/entry-server.tsx index 183e114..80eaa28 100644 --- a/src/entry-server.tsx +++ b/src/entry-server.tsx @@ -1,17 +1,53 @@ import { renderToString } from "react-dom/server"; -import * as RouterExports from "react-router-dom"; import App from "./pages/App"; +import { StaticRouter } from "react-router-dom"; +import { resolveMeta, normalizePath } from "./utils/resolveMeta"; +import { renderHead } from "./utils/seo"; +import { fetchPosts } from "./utils/blogFeed"; +import { sitemapPaths } from "./routes"; +import { absoluteUrl } from "./utils/site"; +import InitialDataProvider from "./components/InitialDataProvider"; +import { serializeInitialData, type InitialData } from "./utils/initialData"; -// Vite's SSR runner resolves react-router-dom to its CommonJS build, so the -// named exports land on `.default`; fall back to the namespace when not. -const { StaticRouter } = - (RouterExports as { default?: typeof RouterExports }).default ?? RouterExports; +export async function render(url: string) { + const location = normalizePath(url); + const { meta, status } = resolveMeta(location); + + // fetched here rather than in a useEffect so the content is in the served + // html. memoized in blogFeed, and it never throws. + const posts = await fetchPosts(); + const data: InitialData = { posts: posts.slice(0, 3) }; -export function render(url: string) { const html = renderToString( - - + + + + , ); - return { html }; + + return { + html, + // the data script goes in the head so it runs before the deferred client + // module reads it, and so it cannot cause a hydration mismatch inside #root + head: `${renderHead(meta)}\n ${serializeInitialData(data)}`, + statusCode: status, + }; +} + +/** + * sitemap.xml, generated from the same route table the router uses, so it can + * never list a url that does not exist or miss one that does. No lastmod: + * fabricated dates are worse than none, and Google ignores unreliable ones. + */ +export function renderSitemap() { + const urls = sitemapPaths() + .map((path) => ` ${absoluteUrl(path)}`) + .join("\n"); + + return ` + +${urls} + +`; } diff --git a/src/pages/App.tsx b/src/pages/App.tsx index af675b3..abbf3d8 100644 --- a/src/pages/App.tsx +++ b/src/pages/App.tsx @@ -1,122 +1,40 @@ +import { useEffect } from "react"; +import { Routes, Route, useLocation } from "react-router-dom"; import Layout from "../components/Layout"; -import ProjectCard from "../components/ProjectCard"; -import FantasyStatus from "../components/FantasyStatus"; -import PictureCarousel from "../components/modules/PictureCarousel"; -import Footer from "../components/Footer"; -import BlogRow from "../components/BlogRow"; -import GameComponent from "../components/info/GameComponent"; -import MusicComponent from "../components/info/MusicComponent"; +import { routes } from "../routes"; +import { resolveMeta } from "../utils/resolveMeta"; + +/** + * SSR sets the title in the document head; this keeps it correct after a + * client-side navigation, which never re-runs that head injection. + */ +function TitleSync() { + const { pathname } = useLocation(); + + useEffect(() => { + const { meta } = resolveMeta(pathname); + document.title = meta.title; + + const canonical = document.querySelector( + 'link[rel="canonical"]', + ); + if (canonical) { + canonical.href = new URL(meta.path, window.location.origin).href; + } + }, [pathname]); + + return null; +} export default function App() { return ( -
-
-

HI, I'M ALEX

-

- I write software sometimes, then I spend twice as long breaking it -

-
-
-

- My day job is Senior QA at{" "} - - Medal.tv - {" "} - ( - - we're hiring! - - ), then by night I play with my homelab rack or write some mediocre - JavaScript. -

-

- Based in Western New York (go bills, go sabres). Working on learning - Java, C#. Pointless software for funzies is my passion. -

-
- -
- -

- - LATEST BLOG POST - -

- - -
- -

THINGS I'VE BUILT

-
- - - - -
- -
- -

MY ACTIVITIES

- -
- - -
- -
-
-

Fantasy

- -
-
-

- My Life, Pictured -

- -
-
- -
- -
-
+ + + {routes.map((route) => ( + + ))} + ); } diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx new file mode 100644 index 0000000..7e28948 --- /dev/null +++ b/src/pages/Home.tsx @@ -0,0 +1,116 @@ +import { Link } from "react-router-dom"; +import ProjectCard from "../components/ProjectCard"; +import FantasyStatus from "../components/FantasyStatus"; +import PictureCarousel from "../components/modules/PictureCarousel"; +import Footer from "../components/Footer"; +import BlogRow from "../components/BlogRow"; +import GameComponent from "../components/info/GameComponent"; +import MusicComponent from "../components/info/MusicComponent"; +import EmailLink from "../components/EmailLink"; +import { PROJECTS } from "../data/projects"; +import { PROFILES } from "../utils/site"; + +export default function Home() { + return ( +
+
+

HI, I'M ALEX

+

+ I write software sometimes, then I spend twice as long breaking it +

+
+
+

+ My day job is Senior QA at{" "} + + Medal.tv + {" "} + ( + + we're hiring! + + ), then by night I play with my{" "} + + homelab rack + {" "} + or write some mediocre JavaScript. +

+

+ Based in Western New York (go bills, go sabres). Working on learning + Java, C#. Pointless software for funzies is my passion. You can see{" "} + + what my teams are doing + {" "} + or reach me at . +

+
+ +
+ +
+

+ + LATEST BLOG POST + +

+ +
+ +
+ +
+

+ THINGS I'VE BUILT +

+
+ {PROJECTS.map((project) => ( + + ))} +
+
+ +
+ +
+

+ MY ACTIVITIES +

+ +
+ + +
+ +
+
+

Fantasy

+ +
+
+

+ My Life, Pictured +

+ +
+
+
+ +
+ +
+
+ ); +} diff --git a/src/pages/NotFound.tsx b/src/pages/NotFound.tsx new file mode 100644 index 0000000..02dd785 --- /dev/null +++ b/src/pages/NotFound.tsx @@ -0,0 +1,41 @@ +import { Link } from "react-router-dom"; +import Footer from "../components/Footer"; + +export default function NotFound() { + return ( +
+
+

404

+

+ There's nothing here +

+

+ That page doesn't exist — it may have moved, or it may never have + existed in the first place. +

+
+ +
    +
  • + + Home + +
  • +
  • + + Projects + +
  • +
  • + + Sports + +
  • +
+ +
+ +
+
+ ); +} diff --git a/src/pages/Pictures.tsx b/src/pages/Pictures.tsx index 9c086b1..f1e5355 100644 --- a/src/pages/Pictures.tsx +++ b/src/pages/Pictures.tsx @@ -1,10 +1,34 @@ +import { Link } from "react-router-dom"; import PictureCarousel from "../components/modules/PictureCarousel"; -export default function PicturesPage() { +import Footer from "../components/Footer"; + +export default function Pictures() { return ( -
-
- +
+
+

MY LIFE, PICTURED

+

Pictures

+

+ A rolling selection of photos from my camera roll — Western New York, + the homelab, and whatever else I pointed a camera at. +

-
+ +
+ + + +
+ +

+ + < Back home + +

+ +
+ +
+ ); } diff --git a/src/pages/ProjectDetail.tsx b/src/pages/ProjectDetail.tsx new file mode 100644 index 0000000..5ad97b4 --- /dev/null +++ b/src/pages/ProjectDetail.tsx @@ -0,0 +1,68 @@ +import { Link, useParams } from "react-router-dom"; +import Footer from "../components/Footer"; +import NotFound from "./NotFound"; +import { findProject } from "../data/projects"; + +export default function ProjectDetail() { + const { slug } = useParams(); + const project = findProject(slug); + + if (!project) return ; + + return ( +
+ + +
+

+ {project.title} +

+
+ {project.pills.map((pill) => ( +
+ {pill} +
+ ))} +
+
+ +
+ {project.body.map((paragraph, i) => ( +

{paragraph}

+ ))} +
+ + + +
+ +

+ + < All projects + +

+ +
+ +
+
+ ); +} diff --git a/src/pages/Projects.tsx b/src/pages/Projects.tsx new file mode 100644 index 0000000..3550202 --- /dev/null +++ b/src/pages/Projects.tsx @@ -0,0 +1,45 @@ +import { Link } from "react-router-dom"; +import ProjectCard from "../components/ProjectCard"; +import Footer from "../components/Footer"; +import { PROJECTS } from "../data/projects"; + +export default function Projects() { + return ( +
+
+

THINGS I'VE BUILT

+

Projects

+

+ Mostly pointless software, built for the fun of building it — a + physical scoreboard, a subscription tracker, a data-export scraper, + and the homelab that runs all of this. +

+
+ +
+ +
+

+ ALL PROJECTS +

+
+ {PROJECTS.map((project) => ( + + ))} +
+
+ +
+ +

+ + < Back home + +

+ +
+ +
+
+ ); +} diff --git a/src/pages/Sports.tsx b/src/pages/Sports.tsx index 8d4e6ab..2761d39 100644 --- a/src/pages/Sports.tsx +++ b/src/pages/Sports.tsx @@ -1,19 +1,49 @@ +import { Link } from "react-router-dom"; import FantasyStatus from "../components/FantasyStatus"; import ScoreModule from "../components/modules/ScoreModule"; +import Footer from "../components/Footer"; export default function Sports() { return ( -
-
+
+
+

GO BILLS, GO SABRES

+

Sports

+

+ Live scores for the Buffalo Bills, Buffalo Sabres and New York + Yankees, plus however badly my fantasy team is doing this week. +

+
+ +
+ +
+

+ LATEST SCORES +

-
+ -
+
-
-

fantasy

+
+

+ FANTASY +

-
-
+ + +
+ +

+ + < Back home + +

+ +
+ +
+ ); } diff --git a/src/routes.tsx b/src/routes.tsx new file mode 100644 index 0000000..2ae1b60 --- /dev/null +++ b/src/routes.tsx @@ -0,0 +1,115 @@ +import type { ReactElement } from "react"; +import Home from "./pages/Home"; +import Projects from "./pages/Projects"; +import ProjectDetail from "./pages/ProjectDetail"; +import Sports from "./pages/Sports"; +import Pictures from "./pages/Pictures"; +import NotFound from "./pages/NotFound"; +import { PROJECTS, findProject } from "./data/projects"; +import type { PageMeta } from "./utils/seo"; +import { + profilePageGraph, + projectListGraph, + projectGraph, +} from "./utils/structuredData"; + +type Params = Record; + +export type AppRoute = { + path: string; + element: ReactElement; + /** + * Head metadata for the route. Returns null when the path matched but the + * resource does not exist (an unknown project slug), which the server turns + * into a real 404 rather than a soft one. + */ + meta: (params: Params) => PageMeta | null; + /** concrete urls to list in the sitemap; omit to exclude the route */ + sitemapPaths?: () => string[]; +}; + +export const NOT_FOUND_META: PageMeta = { + title: "Page not found — Alex Frantz", + description: "That page doesn't exist.", + path: "/404", + noindex: true, +}; + +export const routes: AppRoute[] = [ + { + path: "/", + element: , + sitemapPaths: () => ["/"], + meta: () => ({ + title: "Alex Frantz — Senior QA Engineer & Developer", + description: + "Senior QA engineer at Medal.tv, based in Western New York. I write software, then spend twice as long breaking it — homelab, JavaScript and Python projects.", + path: "/", + type: "profile", + jsonLd: profilePageGraph(), + }), + }, + { + path: "/projects", + element: , + sitemapPaths: () => ["/projects"], + meta: () => ({ + title: "Projects — Alex Frantz", + description: + "The things I've built: an LED matrix scoreboard, a subscription tracker, a Snapchat export extractor, and the homelab that runs all of it.", + path: "/projects", + jsonLd: projectListGraph(PROJECTS), + }), + }, + { + path: "/projects/:slug", + element: , + sitemapPaths: () => PROJECTS.map((p) => `/projects/${p.slug}`), + meta: (params) => { + const project = findProject(params.slug); + if (!project) return null; + + return { + title: `${project.title} — Alex Frantz`, + description: project.description, + path: `/projects/${project.slug}`, + type: "article", + jsonLd: projectGraph(project), + }; + }, + }, + { + path: "/sports", + element: , + sitemapPaths: () => ["/sports"], + meta: () => ({ + title: "Bills, Sabres & Yankees Scores — Alex Frantz", + description: + "Live Buffalo Bills, Buffalo Sabres and New York Yankees scores, plus how my fantasy football matchup is going this week.", + path: "/sports", + }), + }, + { + path: "/pictures", + element: , + sitemapPaths: () => ["/pictures"], + meta: () => ({ + title: "Pictures — Alex Frantz", + description: + "Photos from my camera roll: Western New York, the homelab rack, and whatever else I pointed a camera at.", + path: "/pictures", + }), + }, + { + // the in-app catch-all. the server independently answers 404 for anything + // that lands here, so this never becomes a soft 404 + path: "*", + element: , + meta: () => NOT_FOUND_META, + }, +]; + +/** every indexable url, for sitemap.xml */ +export function sitemapPaths(): string[] { + return routes.flatMap((route) => route.sitemapPaths?.() ?? []); +} diff --git a/src/utils/blogFeed.ts b/src/utils/blogFeed.ts new file mode 100644 index 0000000..b22df78 --- /dev/null +++ b/src/utils/blogFeed.ts @@ -0,0 +1,42 @@ +import type { BlogPost } from "./types"; + +const FEED_URL = "https://blog.alexav.gg/api/posts"; +const TTL_MS = 5 * 60 * 1000; + +let cache: { at: number; posts: BlogPost[] } | null = null; + +/** + * Server-side fetch of the blog index, memoized for a few minutes so a crawl + * does not hammer blog.alexav.gg. Never throws — a dead feed should degrade to + * an empty section, not a 500. + */ +export async function fetchPosts(): Promise { + if (cache && Date.now() - cache.at < TTL_MS) return cache.posts; + + try { + const res = await fetch(FEED_URL, { + signal: AbortSignal.timeout(3000), + }); + if (!res.ok) throw new Error(`feed responded ${res.status}`); + + const data = (await res.json()) as BlogPost[]; + // project down to the fields the ui uses. the api also returns the full + // post body and internal ids, and all of that would otherwise be inlined + // into every html response + const posts = (Array.isArray(data) ? data : []).map( + ({ id, title, description, slug, createdAt }) => ({ + id, + title, + description, + slug, + createdAt, + }), + ); + cache = { at: Date.now(), posts }; + return posts; + } catch (e) { + console.error("Failed to fetch blog posts during SSR:", e); + // serve the stale copy rather than nothing if we ever had one + return cache?.posts ?? []; + } +} diff --git a/src/utils/initialData.ts b/src/utils/initialData.ts new file mode 100644 index 0000000..5159238 --- /dev/null +++ b/src/utils/initialData.ts @@ -0,0 +1,28 @@ +import { createContext, useContext } from "react"; +import type { BlogPost } from "./types"; + +export type InitialData = { + posts?: BlogPost[]; +}; + +/** + * Data fetched during SSR and handed to the client, so content that used to + * appear only after a `useEffect` is present in the served HTML. Passed + * through context rather than a module global, because a module global on the + * server would be shared between concurrent requests. + */ +export const InitialDataContext = createContext({}); + +export function useInitialData() { + return useContext(InitialDataContext); +} + +export const INITIAL_DATA_GLOBAL = "__INITIAL_DATA__"; + +/** the inside a json string would close the tag early; escaping the + // slash keeps the json valid while making the sequence un-parseable + const json = JSON.stringify(data).replace(/window.${INITIAL_DATA_GLOBAL}=${json}`; +} diff --git a/src/utils/resolveMeta.ts b/src/utils/resolveMeta.ts new file mode 100644 index 0000000..9f526fe --- /dev/null +++ b/src/utils/resolveMeta.ts @@ -0,0 +1,38 @@ +import { matchRoutes } from "react-router-dom"; +import { routes, NOT_FOUND_META, type AppRoute } from "../routes"; +import type { PageMeta } from "./seo"; + +export type Resolved = { meta: PageMeta; status: 200 | 404 }; + +/** + * Map a request url to its head metadata and http status. Shared by the server + * (which needs the status) and the client (which needs the title on + * navigation), so the two can never disagree about what a url is. + */ +export function resolveMeta(url: string): Resolved { + const pathname = normalizePath(url); + + const matches = matchRoutes( + routes.map((route) => ({ path: route.path, meta: route.meta })), + pathname, + ); + const match = matches?.[matches.length - 1]; + if (!match) return { meta: NOT_FOUND_META, status: 404 }; + + const route = match.route as unknown as AppRoute; + // the in-app catch-all resolves, but it is still a miss + if (route.path === "*") return { meta: NOT_FOUND_META, status: 404 }; + + // meta() returns null when the path shape matched but the resource does not + // exist, e.g. /projects/not-a-real-slug + const meta = route.meta(match.params); + if (!meta) return { meta: NOT_FOUND_META, status: 404 }; + + return { meta, status: 200 }; +} + +export function normalizePath(url: string) { + const pathname = url.split("?")[0].split("#")[0]; + if (!pathname) return "/"; + return pathname.startsWith("/") ? pathname : `/${pathname}`; +} diff --git a/src/utils/seo.ts b/src/utils/seo.ts new file mode 100644 index 0000000..8d04011 --- /dev/null +++ b/src/utils/seo.ts @@ -0,0 +1,105 @@ +import { + SITE_NAME, + SITE_LOCALE, + DEFAULT_OG_IMAGE, + DEFAULT_OG_IMAGE_ALT, + absoluteUrl, +} from "./site"; + +export type PageMeta = { + /** full text, already including any " — Alex Frantz" suffix */ + title: string; + description: string; + /** site-relative path, used for the canonical and og:url */ + path: string; + image?: string; + imageAlt?: string; + imageWidth?: number; + imageHeight?: number; + /** og:type, defaults to "website" */ + type?: string; + noindex?: boolean; + /** one or more JSON-LD objects to emit as ld+json */ + jsonLd?: object[]; +}; + +/** escape a value for interpolation into a double-quoted html attribute */ +function attr(value: string) { + return value + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, """); +} + +/** escape for text content, e.g. inside <title> */ +function text(value: string) { + return value + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">"); +} + +// </script> inside a json string would close the tag early. escaping the +// slash keeps the json valid while making the sequence un-parseable as a tag +function jsonLdPayload(data: object) { + return JSON.stringify(data).replace(/</g, "\u003c"); +} + +/** + * Build the per-route <head> fragment injected at the `<!--app-head-->` + * placeholder in index.html. Plain string building rather than a helmet-style + * library, because SSR already owns the document head. + */ +export function renderHead(meta: PageMeta): string { + const canonical = absoluteUrl(meta.path); + const image = meta.image ?? DEFAULT_OG_IMAGE; + const imageAlt = meta.imageAlt ?? DEFAULT_OG_IMAGE_ALT; + const type = meta.type ?? "website"; + + // a noindex page should not claim a canonical url of its own + const canonicalTags = meta.noindex + ? [] + : [ + `<link rel="canonical" href="${attr(canonical)}" />`, + `<meta property="og:url" content="${attr(canonical)}" />`, + ]; + + const tags: string[] = [ + `<title>${text(meta.title)}`, + ``, + ...canonicalTags, + meta.noindex + ? `` + : ``, + + ``, + ``, + ``, + ``, + ``, + ``, + ``, + + ``, + ``, + ``, + ``, + ``, + ]; + + if (meta.imageWidth && meta.imageHeight) { + tags.push( + ``, + ``, + ); + } + + for (const block of meta.jsonLd ?? []) { + tags.push( + ``, + ); + } + + return tags.join("\n "); +} diff --git a/src/utils/site.ts b/src/utils/site.ts new file mode 100644 index 0000000..8503b63 --- /dev/null +++ b/src/utils/site.ts @@ -0,0 +1,27 @@ +// the public origin, in one place. previously hardcoded in four separate +// places in index.html, which is why nothing could build a canonical url +export const SITE_ORIGIN = "https://alexav.gg"; + +export const SITE_NAME = "Alex Frantz"; +export const SITE_LOCALE = "en_US"; +export const AUTHOR_EMAIL = "alex@alexav.gg"; + +export const DEFAULT_OG_IMAGE = + "https://storage.alexav.gg/content/picturev2.jpg"; +export const DEFAULT_OG_IMAGE_ALT = "Alex Frantz"; + +// external properties, kept together so the JSON-LD `sameAs` graph and the +// rendered links cannot drift apart +export const PROFILES = { + github: "https://github.com/azpha", + blog: "https://blog.alexav.gg", + medal: "https://medal.tv/u/alexav", + gitea: "https://git.alexav.gg/alex", +} as const; + +/** absolute url for a site-relative path, with no trailing slash */ +export function absoluteUrl(path: string) { + if (path === "/" || path === "") return SITE_ORIGIN; + const withSlash = path.startsWith("/") ? path : `/${path}`; + return SITE_ORIGIN + withSlash.replace(/\/+$/, ""); +} diff --git a/src/utils/structuredData.ts b/src/utils/structuredData.ts new file mode 100644 index 0000000..e0773fd --- /dev/null +++ b/src/utils/structuredData.ts @@ -0,0 +1,121 @@ +import { + SITE_ORIGIN, + SITE_NAME, + AUTHOR_EMAIL, + PROFILES, + absoluteUrl, +} from "./site"; +import type { Project } from "../data/projects"; + +const PERSON_ID = `${SITE_ORIGIN}/#alex`; + +/** the Person + WebSite graph, the main signal for a name-query result */ +export function personGraph(): object[] { + return [ + { + "@context": "https://schema.org", + "@type": "Person", + "@id": PERSON_ID, + name: "Alex Frantz", + alternateName: ["alexav", "Alexavier Frantz"], + url: SITE_ORIGIN, + email: `mailto:${AUTHOR_EMAIL}`, + jobTitle: "Senior QA Engineer", + worksFor: { + "@type": "Organization", + name: "Medal.tv", + url: "https://medal.tv", + }, + address: { + "@type": "PostalAddress", + addressRegion: "NY", + addressCountry: "US", + addressLocality: "Western New York", + }, + knowsAbout: [ + "Quality Assurance", + "Test Automation", + "JavaScript", + "TypeScript", + "React", + "Python", + "Java", + "C#", + "Docker", + "Homelab infrastructure", + ], + sameAs: [PROFILES.github, PROFILES.blog, PROFILES.medal, PROFILES.gitea], + }, + { + "@context": "https://schema.org", + "@type": "WebSite", + "@id": `${SITE_ORIGIN}/#website`, + url: SITE_ORIGIN, + name: SITE_NAME, + publisher: { "@id": PERSON_ID }, + inLanguage: "en-US", + }, + ]; +} + +/** ProfilePage wrapper for the homepage, which is primarily about a person */ +export function profilePageGraph(): object[] { + return [ + ...personGraph(), + { + "@context": "https://schema.org", + "@type": "ProfilePage", + url: SITE_ORIGIN, + mainEntity: { "@id": PERSON_ID }, + }, + ]; +} + +export function projectListGraph(projects: Project[]): object[] { + return [ + { + "@context": "https://schema.org", + "@type": "CollectionPage", + url: absoluteUrl("/projects"), + name: "Projects", + about: { "@id": PERSON_ID }, + mainEntity: { + "@type": "ItemList", + itemListElement: projects.map((project, index) => ({ + "@type": "ListItem", + position: index + 1, + url: absoluteUrl(`/projects/${project.slug}`), + name: project.title, + })), + }, + }, + ]; +} + +export function projectGraph(project: Project): object[] { + return [ + { + "@context": "https://schema.org", + "@type": "SoftwareSourceCode", + name: project.title, + description: project.description, + url: absoluteUrl(`/projects/${project.slug}`), + codeRepository: project.link, + programmingLanguage: project.pills, + author: { "@id": PERSON_ID }, + }, + { + "@context": "https://schema.org", + "@type": "BreadcrumbList", + itemListElement: [ + { + "@type": "ListItem", + position: 1, + name: "Projects", + item: absoluteUrl("/projects"), + }, + { "@type": "ListItem", position: 2, name: project.title }, + ], + }, + ]; +} diff --git a/vite.config.ts b/vite.config.ts index 4ff4f8f..0b8fd3b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,4 +5,19 @@ import tailwindcss from "@tailwindcss/vite"; // https://vite.dev/config/ export default defineConfig({ plugins: [react(), tailwindcss()], + ssr: { + // react-router-dom's "node" export condition points at its CommonJS build, + // so SSR would otherwise get a module whose named exports all hang off + // `.default` — every `import { Routes } from "react-router-dom"` throws at + // request time in dev. "module-sync" selects the ESM entry instead. + resolve: { + conditions: [ + "module-sync", + "module", + "browser", + "development|production", + ], + externalConditions: ["module-sync", "node", "import"], + }, + }, });