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); ---- - - 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) && ( +
+ {link && ( + + Visit → + + )} + {repo && ( + + Source → + + )} +
+ ) + } +
+ +
+ {!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;