Content Updates with projects and experience

This commit is contained in:
Greg Kilmer
2026-07-04 18:03:38 -04:00
parent 1e8f5f1f01
commit 35d561525f
29 changed files with 347 additions and 148 deletions
+33 -24
View File
@@ -12,20 +12,20 @@
*
* Page transitions use Astro's <ClientRouter /> (View Transitions API).
*/
import '@/styles/global.css';
import "@/styles/global.css";
// Self-hosted fonts (woff2, variable). Avoids external requests for perf + privacy.
import '@fontsource-variable/inter';
import '@fontsource-variable/plus-jakarta-sans';
import '@fontsource-variable/jetbrains-mono';
import "@fontsource-variable/inter";
import "@fontsource-variable/plus-jakarta-sans";
import "@fontsource-variable/jetbrains-mono";
import { ClientRouter } from 'astro:transitions';
import NavBar from '@components/nav/NavBar.astro';
import Footer from '@components/layout/Footer.astro';
import { themeInitScript } from '@/scripts/theme-init';
import { siteIdentity } from '@lib/site';
import { ClientRouter } from "astro:transitions";
import NavBar from "@components/nav/NavBar.astro";
import Footer from "@components/layout/Footer.astro";
import { themeInitScript } from "@/scripts/theme-init";
import { siteIdentity } from "@lib/site";
type Surface = 'neutral' | 'professional' | 'interest';
type Surface = "neutral" | "professional" | "interest";
interface Props {
title?: string;
@@ -38,23 +38,29 @@ interface Props {
const {
title,
description = 'Greg Kilmer is a software developer, maker, and tabletop gamemaster based in Philadelphia. This is where his professional and personal worlds meet.',
surface = 'neutral',
description = "Greg Kilmer is a software developer, maker, and tabletop gamemaster based in Philadelphia. This is where his professional and personal worlds meet.",
surface = "neutral",
ogImage,
} = Astro.props;
// True on the Home page. Used to switch the NavBar's view-transition-name so
// the Home hero can morph into / out of the nav bar (expand/collapse effect).
const isHome = Astro.url.pathname === '/';
const isHome = Astro.url.pathname === "/";
const fullTitle = title
? `${title} | ${siteIdentity.name}`
: `${siteIdentity.name} — Developer. Maker. Storyteller.`;
const canonical = new URL(Astro.url.pathname, Astro.site ?? 'https://patiun.com');
const canonical = new URL(
Astro.url.pathname,
Astro.site ?? "https://patiun.com",
);
const ogImageUrl = ogImage
? new URL(ogImage, Astro.site ?? 'https://patiun.com').toString()
: new URL('/images/hero-portrait.jpg', Astro.site ?? 'https://patiun.com').toString();
? new URL(ogImage, Astro.site ?? "https://patiun.com").toString()
: new URL(
"/images/hero-portrait.jpg",
Astro.site ?? "https://patiun.com",
).toString();
---
<!doctype html>
@@ -84,7 +90,7 @@ const ogImageUrl = ogImage
{ogImageUrl && <meta property="og:image" content={ogImageUrl} />}
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<!-- Theme boot: blocking inline script prevents flash of the wrong theme.
Dark mode is currently forced (light mode deferred), so this just pins
@@ -96,7 +102,7 @@ const ogImageUrl = ogImage
Loaded as a module so it self-initializes on load + on View Transitions
(it listens for astro:page-load internally). -->
<script>
import '@/scripts/reveal-init';
import "@/scripts/reveal-init";
</script>
<!-- View Transitions flash-killer. The incoming page is snapshotted with its
@@ -105,18 +111,21 @@ const ogImageUrl = ogImage
<html> around the swap so global.css forces reveals visible mid-flight,
then lets the observer take over for scroll reveals on the new page. -->
<script is:inline>
document.addEventListener('astro:before-swap', () => {
document.documentElement.classList.add('vt-transitioning');
document.addEventListener("astro:before-swap", () => {
document.documentElement.classList.add("vt-transitioning");
});
document.addEventListener('astro:after-swap', () => {
document.documentElement.classList.remove('vt-transitioning');
document.addEventListener("astro:after-swap", () => {
document.documentElement.classList.remove("vt-transitioning");
});
</script>
<ClientRouter />
</head>
<body data-surface={surface} data-page={isHome ? 'home' : 'other'}>
<a href="#main" class="sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[100] focus:rounded-lg focus:bg-(--color-amber) focus:px-4 focus:py-2 focus:text-(--color-ink)">
<body data-surface={surface} data-page={isHome ? "home" : "other"}>
<a
href="#main"
class="sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[100] focus:rounded-lg focus:bg-(--color-amber) focus:px-4 focus:py-2 focus:text-(--color-ink)"
>
Skip to content
</a>