diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro
index 5b48687..0196911 100644
--- a/src/components/BaseHead.astro
+++ b/src/components/BaseHead.astro
@@ -70,8 +70,8 @@ const socialImageURL = new URL(ogImage ? ogImage : "/social-card.png", Astro.url
{/* RSS auto-discovery */}
-
-
+
+
{/* Webmentions */}
{
diff --git a/src/components/ExperienceTags.astro b/src/components/ExperienceTags.astro
new file mode 100644
index 0000000..c5cd5b9
--- /dev/null
+++ b/src/components/ExperienceTags.astro
@@ -0,0 +1,25 @@
+---
+import { getEntries } from "astro:content";
+import type { CollectionEntry } from "astro:content";
+
+interface Props {
+ experiences: CollectionEntry<"projects" | "writing" | "speaking">["data"]["experiences"];
+}
+
+const { experiences } = Astro.props;
+const entries = experiences.length ? await getEntries(experiences) : [];
+---
+
+{
+ entries.length > 0 && (
+
+ )
+}
diff --git a/src/components/StreamPlayer.astro b/src/components/StreamPlayer.astro
new file mode 100644
index 0000000..3b06e7b
--- /dev/null
+++ b/src/components/StreamPlayer.astro
@@ -0,0 +1,20 @@
+---
+import { streamOrigin } from "@/site.config";
+
+interface Props {
+ videoId: string;
+ title?: string;
+}
+
+const { videoId, title } = Astro.props;
+---
+
+
+
+
diff --git a/src/components/blog/Masthead.astro b/src/components/blog/Masthead.astro
index 10783cd..c89406a 100644
--- a/src/components/blog/Masthead.astro
+++ b/src/components/blog/Masthead.astro
@@ -1,10 +1,11 @@
---
import { Image } from "astro:assets";
import type { CollectionEntry } from "astro:content";
+import ExperienceTags from "@/components/ExperienceTags.astro";
import FormattedDate from "@/components/FormattedDate.astro";
interface Props {
- content: CollectionEntry<"post">;
+ content: CollectionEntry<"writing">;
readingTime: string;
}
@@ -51,34 +52,9 @@ const dateTimeOptions: Intl.DateTimeFormatOptions = {
}
{
- !!data.tags?.length && (
-
-
- {data.tags.map((tag, i) => (
- <>
- {/* prettier-ignore */}
-
- View more blogs with the tag {tag}
- {i < data.tags.length - 1 && ", "}
-
- >
- ))}
+ !!data.experiences?.length && (
+
+
)
}
diff --git a/src/components/blog/PostPreview.astro b/src/components/blog/PostPreview.astro
index b31a712..3ed6830 100644
--- a/src/components/blog/PostPreview.astro
+++ b/src/components/blog/PostPreview.astro
@@ -4,7 +4,7 @@ import type { HTMLTag, Polymorphic } from "astro/types";
import FormattedDate from "@/components/FormattedDate.astro";
type Props
= Polymorphic<{ as: Tag }> & {
- post: CollectionEntry<"post">;
+ post: CollectionEntry<"writing">;
withDesc?: boolean;
};
@@ -14,7 +14,7 @@ const { as: Tag = "div", post, withDesc = false } = Astro.props;
{post.data.draft && (Draft) }
-
+
{post.data.title}
diff --git a/src/components/note/Note.astro b/src/components/note/Note.astro
deleted file mode 100644
index e415692..0000000
--- a/src/components/note/Note.astro
+++ /dev/null
@@ -1,46 +0,0 @@
----
-import { type CollectionEntry, render } from "astro:content";
-import type { HTMLTag, Polymorphic } from "astro/types";
-import FormattedDate from "@/components/FormattedDate.astro";
-
-type Props = Polymorphic<{ as: Tag }> & {
- note: CollectionEntry<"note">;
- isPreview?: boolean | undefined;
-};
-
-const { as: Tag = "div", note, isPreview = false } = Astro.props;
-const { Content } = await render(note);
----
-
-
-
- {
- isPreview ? (
-
- {note.data.title}
-
- ) : (
- <>{note.data.title}>
- )
- }
-
-
-
-
-
-
diff --git a/src/components/project/Project.astro b/src/components/project/Project.astro
new file mode 100644
index 0000000..7beeee3
--- /dev/null
+++ b/src/components/project/Project.astro
@@ -0,0 +1,56 @@
+---
+import { type CollectionEntry, render } from "astro:content";
+import type { HTMLTag, Polymorphic } from "astro/types";
+import ExperienceTags from "@/components/ExperienceTags.astro";
+import FormattedDate from "@/components/FormattedDate.astro";
+
+type Props = Polymorphic<{ as: Tag }> & {
+ project: CollectionEntry<"projects">;
+ isPreview?: boolean | undefined;
+};
+
+const { as: Tag = "div", project, isPreview = false } = Astro.props;
+const { Content } = await render(project);
+const { title, publishDate, link, repo, experiences } = project.data;
+---
+
+
+
+ {
+ isPreview ? (
+
+ {title}
+
+ ) : (
+ <>{title}>
+ )
+ }
+
+
+ {
+ !isPreview && (link || repo) && (
+
+ )
+ }
+
+
+
+ {!isPreview && experiences.length > 0 &&
}
+
diff --git a/src/layouts/BlogPost.astro b/src/layouts/BlogPost.astro
index f5ea60b..14a560c 100644
--- a/src/layouts/BlogPost.astro
+++ b/src/layouts/BlogPost.astro
@@ -8,7 +8,7 @@ import WebMentions from "@/components/blog/webmentions/index.astro";
import BaseLayout from "./Base.astro";
interface Props {
- post: CollectionEntry<"post">;
+ post: CollectionEntry<"writing">;
}
const { post } = Astro.props;