summaryrefslogtreecommitdiff
path: root/src/pages/micro
diff options
context:
space:
mode:
authorDawid Rycerz <dawid@rycerz.xyz>2026-01-13 15:31:19 +0100
committerDawid Rycerz <dawid@rycerz.xyz>2026-01-13 15:39:07 +0100
commit52411f6cb9efc10dd683096b34e5c279a11f7e0a (patch)
treefd5e71902fbebe2e3f014c7ebb5f153fc8c7d1e7 /src/pages/micro
parent26ffc44ee72522891b4fdacac15134dfcf9c4859 (diff)
Rework how tags are working and make them native
Diffstat (limited to 'src/pages/micro')
-rw-r--r--src/pages/micro/[...page].astro10
-rw-r--r--src/pages/micro/rss.xml.ts6
-rw-r--r--src/pages/micro/tags/[tag]/[...page].astro71
-rw-r--r--src/pages/micro/tags/index.astro36
4 files changed, 10 insertions, 113 deletions
diff --git a/src/pages/micro/[...page].astro b/src/pages/micro/[...page].astro
index 8e7e814..d11d9ce 100644
--- a/src/pages/micro/[...page].astro
+++ b/src/pages/micro/[...page].astro
@@ -9,8 +9,10 @@ import PageLayout from "@/layouts/Base.astro";
export const getStaticPaths = (async ({ paginate }) => {
const MAX_MICRO_PER_PAGE = 10;
- // Get only Pleroma posts
- const allMicro = await getCollection("micro").catch(() => []); // Fallback to empty array if micro collection fails
+ // Get only Pleroma posts tagged with "micro"
+ const allMicro = await getCollection("micro", ({ data }) => data.tags?.includes("micro")).catch(
+ () => [],
+ ); // Fallback to empty array if micro collection fails
// Sort all micro posts
const allMicroPosts = allMicro.sort(
@@ -52,11 +54,11 @@ const paginationProps = {
<section>
<h1 class="title mb-6 flex items-center gap-3">
Micro
- <a class="text-accent" href="/micro/tags/" title="Browse micro tags">
+ <a class="text-accent" href="/tags/" title="Browse all tags">
<span class="sr-only">Browse tags</span>
<Icon aria-hidden="true" class="h-6 w-6" focusable="false" name="mdi:tag-multiple" />
</a>
- <a class="text-accent" href="/micro/rss.xml" target="_blank">
+ <a class="text-accent" href="/tags/micro/rss.xml" target="_blank">
<span class="sr-only">RSS feed</span>
<Icon aria-hidden="true" class="h-6 w-6" focusable="false" name="mdi:rss" />
</a>
diff --git a/src/pages/micro/rss.xml.ts b/src/pages/micro/rss.xml.ts
index 37d7d39..9356341 100644
--- a/src/pages/micro/rss.xml.ts
+++ b/src/pages/micro/rss.xml.ts
@@ -4,8 +4,10 @@ import type { APIContext } from "astro";
import { siteConfig } from "@/site.config";
export const GET = async (context: APIContext) => {
- // Get only Pleroma posts
- const allMicro = await getCollection("micro").catch(() => []); // Fallback to empty array if micro collection fails
+ // Get only Pleroma posts tagged with "micro"
+ const allMicro = await getCollection("micro", ({ data }) => data.tags?.includes("micro")).catch(
+ () => [],
+ ); // Fallback to empty array if micro collection fails
// Sort all micro posts
const allMicroPosts = allMicro.sort(
diff --git a/src/pages/micro/tags/[tag]/[...page].astro b/src/pages/micro/tags/[tag]/[...page].astro
deleted file mode 100644
index 3f78663..0000000
--- a/src/pages/micro/tags/[tag]/[...page].astro
+++ /dev/null
@@ -1,71 +0,0 @@
----
-import { getCollection } from "astro:content";
-import type { GetStaticPaths, InferGetStaticPropsType } from "astro";
-import { Icon } from "astro-icon/components";
-import Note from "@/components/note/Note.astro";
-import Pagination from "@/components/Paginator.astro";
-import PageLayout from "@/layouts/Base.astro";
-import { getUniqueMicroTags, sortMicroEntries } from "@/utils/micro";
-
-export const getStaticPaths = (async ({ paginate }) => {
- const allMicroPosts = await getCollection("micro");
- const sortedPosts = sortMicroEntries(allMicroPosts);
- const uniqueTags = getUniqueMicroTags(sortedPosts);
-
- return uniqueTags.flatMap((tag) => {
- const postsWithTag = sortedPosts.filter((post) => post.data.tags?.includes(tag));
- return paginate(postsWithTag, {
- pageSize: 10,
- params: { tag },
- });
- });
-}) satisfies GetStaticPaths;
-
-type Props = InferGetStaticPropsType<typeof getStaticPaths>;
-
-const { page } = Astro.props as Props;
-const { tag } = Astro.params;
-
-const meta = {
- description: `View all micro posts with the tag - ${tag}`,
- title: `Micro posts about ${tag}`,
-};
-
-const paginationProps = {
- ...(page.url.prev && {
- prevUrl: {
- text: "← Previous Page",
- url: page.url.prev,
- },
- }),
- ...(page.url.next && {
- nextUrl: {
- text: "Next Page →",
- url: page.url.next,
- },
- }),
-};
----
-
-<PageLayout meta={meta}>
- <nav class="mb-8" aria-label="Breadcrumbs">
- <ul class="flex items-center">
- <li class="flex items-center">
- <a class="text-accent" href="/micro/tags/">Micro Tags</a>
- <Icon aria-hidden="true" name="mdi:chevron-right" class="mx-1.5" />
- </li>
- <li aria-current="page" class=""><span aria-hidden="true">#</span>{tag}</li>
- </ul>
- </nav>
- <h1 class="title capitalize">Micro posts about {tag}</h1>
- <ul class="mt-6 space-y-8 text-start">
- {
- page.data.map((note) => (
- <li class="">
- <Note note={note} as="h2" isPreview />
- </li>
- ))
- }
- </ul>
- <Pagination {...paginationProps} />
-</PageLayout>
diff --git a/src/pages/micro/tags/index.astro b/src/pages/micro/tags/index.astro
deleted file mode 100644
index 8d39b8a..0000000
--- a/src/pages/micro/tags/index.astro
+++ /dev/null
@@ -1,36 +0,0 @@
----
-import { getCollection } from "astro:content";
-import PageLayout from "@/layouts/Base.astro";
-import { getUniqueMicroTagsWithCount } from "@/utils/micro";
-
-const allMicroPosts = await getCollection("micro");
-const allTags = getUniqueMicroTagsWithCount(allMicroPosts);
-
-const meta = {
- description: "A list of all the topics I've written about in my micro posts",
- title: "Micro Tags",
-};
----
-
-<PageLayout meta={meta}>
- <h1 class="title mb-6">Micro Tags</h1>
- <ul class="space-y-6">
- {
- allTags.map(([tag, val]) => (
- <li class="flex items-center gap-x-2">
- <a
- class="cactus-link inline-block"
- data-astro-prefetch
- href={`/micro/tags/${tag}/`}
- title={`View micro posts with the tag: ${tag}`}
- >
- &#35;{tag}
- </a>
- <span class="inline-block">
- - {val} Post{val > 1 && "s"}
- </span>
- </li>
- ))
- }
- </ul>
-</PageLayout>