Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/components/Header.astro
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,17 @@ const currentPath = Astro.url?.pathname ?? "/";
projects
</Link>
</li>
<li aria-hidden="true" class="text-black/40 dark:text-white/40">
/
</li>
<li>
<Link
href="/about"
aria-current={currentPath.startsWith("/about") ? "page" : undefined}
>
about
</Link>
</li>
</ul>
</nav>
</div>
Expand Down
54 changes: 54 additions & 0 deletions src/pages/about.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
import PageLayout from "@layouts/PageLayout.astro";
import Container from "@components/Container.astro";
import Link from "@components/Link.astro";
import { SITE, SOCIALS } from "@consts";
import { getHomeOGData } from "@lib/opengraph";

const ogData = getHomeOGData(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Generate page-specific OpenGraph metadata

Using getHomeOGData here causes /about to publish homepage OpenGraph fields (title/description are hardcoded in src/lib/opengraph.ts), and Head.astro prefers provided ogData over the page props, so sharing /about will show homepage preview text instead of About-page metadata. This impacts SEO/social previews specifically when the About URL is crawled or shared.

Useful? React with 👍 / 👎.

Astro.url.toString(),
Astro.site?.toString() || ""
);
---

<PageLayout title="About" description="About Dispatches and its author" ogData={ogData}>
<Container>
<div class="space-y-10">
<h1 class="animate font-semibold text-black dark:text-white">
About
</h1>

<div class="space-y-4">
<section class="animate space-y-4">
<h2 class="font-semibold text-black dark:text-white">About Dispatches</h2>
<article class="prose dark:prose-invert">
<p>
<em>Dispatches</em> is where I publish technical writing on topics of personal interest.
During this initial phase, much of the content will be "refurbished-and-expanded": older
personal notes or explanations, updated and expanded where necessary.
</p>
<p>
Expect a focus on Swift, lower-level iOS work, and—as of late—agentic coding assistants.
</p>
</article>
</section>

<section class="animate space-y-4">
<h2 class="font-semibold text-black dark:text-white">Connect</h2>
<article>
<p class="mb-4">Feel free to reach out:</p>
<ul class="flex flex-wrap gap-2">
{SOCIALS.map(SOCIAL => (
<li class="flex gap-x-2 text-nowrap">
<Link href={SOCIAL.HREF} external aria-label={`${SITE.NAME} on ${SOCIAL.NAME}`}>
{SOCIAL.NAME}
</Link>
</li>
))}
</ul>
</article>
</section>
</div>
</div>
</Container>
</PageLayout>
Loading