Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
3 changes: 2 additions & 1 deletion src/content/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ async function getCollectionsData() {
await ensureCacheDir();

const speakersBuffer = await fetchWithCache(
"https://gist.github.com/egeakman/469f9abb23a787df16d8787f438dfdb6/raw/62d2b7e77c1b078a0e27578c72598a505f9fafbf/speakers.json",
"https://gist.githubusercontent.com/nikoshell/d8efd41f90961cc6298519c0eec04843/raw/d13a7b1d35f61be1773404e7faf8395dd4862313/speakers.json",
"speakers.json"
);

Expand Down Expand Up @@ -148,6 +148,7 @@ const speakers = defineCollection({
gitx: z.string().nullable(),
linkedin_url: z.string().url().nullable(),
mastodon_url: z.string().url().nullable(),
bluesky_url: z.string().url().nullable(),
twitter_url: z.string().url().nullable(),
}),
});
Expand Down
19 changes: 19 additions & 0 deletions src/pages/speaker/[slug].astro
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ function getTwitterUsername(url: string): string | undefined {
return (username ?? url).startsWith("@") ? username : `@${username}`;
}

// Get @username from Twitter URL
function getBlueskyUsername(url: string): string | undefined {
const username = url.split("/").pop();
return (username ?? url).startsWith("@") ? username : `@${username}`;
}

// Get @[email protected] from Mastodon URL
function getMastodonUsername(url: string): string | null {
const match = url.match(/https?:\/\/([^\/]+)\/@([^\/]+)(\/|\?|$)/);
Expand Down Expand Up @@ -197,6 +203,19 @@ function getGitHosting(url: string): string | undefined {
</dd>
</>
)}
{entry.data.bluesky_url && (
<>
<dt class="font-bold">Bluesky</dt>
<dd>
<a
href={entry.data.bluesky_url}
class="text-primary underline hover:text-primary-hover"
>
{getBlueskyUsername(entry.data.bluesky_url)}
</a>
</dd>
</>
)}
</dl>
</div>
) : null
Expand Down