aboutsummaryrefslogtreecommitdiffstats
path: root/src/pages/members
diff options
context:
space:
mode:
authorNikhil M Warrier <nikhilmw.dev@gmail.com>2026-03-03 09:00:53 +0530
committerNikhil M Warrier <nikhilmw.dev@gmail.com>2026-03-03 09:00:53 +0530
commitc1c7ca70783cbb38cf35fe0c9fb05dd626f46c08 (patch)
tree2941afd019e4e073f195929ede6792a6d45af5dd /src/pages/members
parentb1cc6aef5d01b59daf64d12a8e9264324540d8b7 (diff)
Rename Author to Member, add Codeberg icons
Diffstat (limited to 'src/pages/members')
-rw-r--r--src/pages/members/[...id].astro58
-rw-r--r--src/pages/members/index.astro27
2 files changed, 85 insertions, 0 deletions
diff --git a/src/pages/members/[...id].astro b/src/pages/members/[...id].astro
new file mode 100644
index 0000000..8010365
--- /dev/null
+++ b/src/pages/members/[...id].astro
@@ -0,0 +1,58 @@
+---
+import BlogCard from '@/components/BlogCard.astro'
+import Breadcrumbs from '@/components/Breadcrumbs.astro'
+import MemberCard from '@/components/MemberCard.astro'
+import PageHead from '@/components/PageHead.astro'
+import Layout from '@/layouts/Layout.astro'
+import { getAllMembers, getPostsByAuthor } from '@/lib/data-utils'
+
+export async function getStaticPaths() {
+ const members = await getAllMembers()
+ return members.map((member) => ({
+ params: { id: member.id },
+ props: { member },
+ }))
+}
+
+const { member } = Astro.props
+const memberPosts = await getPostsByAuthor(member.id)
+---
+
+<Layout class="max-w-3xl">
+ <PageHead
+ slot="head"
+ title={`${member.data.name} (Member)`}
+ description={member.data.bio || `Profile of ${member.data.name}.`}
+ noindex
+ />
+ <Breadcrumbs
+ items={[
+ { href: '/members', label: 'Members', icon: 'lucide:users' },
+ { label: member.data.name, icon: 'lucide:user' },
+ ]}
+ />
+
+ <section>
+ <MemberCard member={member} />
+ </section>
+ <section class="flex flex-col gap-y-4">
+ <h2 class="text-2xl font-medium">Posts by {member.data.name}</h2>
+ {
+ memberPosts.length > 0 ? (
+ <ul class="flex flex-col gap-4">
+ {memberPosts
+ .filter((post) => !post.data.draft)
+ .map((post) => (
+ <li>
+ <BlogCard entry={post} />
+ </li>
+ ))}
+ </ul>
+ ) : (
+ <p class="text-muted-foreground">
+ No posts available from this member.
+ </p>
+ )
+ }
+ </section>
+</Layout>
diff --git a/src/pages/members/index.astro b/src/pages/members/index.astro
new file mode 100644
index 0000000..04e6d45
--- /dev/null
+++ b/src/pages/members/index.astro
@@ -0,0 +1,27 @@
+---
+import Breadcrumbs from '@/components/Breadcrumbs.astro'
+import MemberCard from '@/components/MemberCard.astro'
+import PageHead from '@/components/PageHead.astro'
+import Layout from '@/layouts/Layout.astro'
+import { getAllMembers } from '@/lib/data-utils'
+
+const members = await getAllMembers()
+---
+
+<Layout class="max-w-3xl">
+ <PageHead slot="head" title="Members" />
+ <Breadcrumbs items={[{ label: 'Members', icon: 'lucide:users' }]} />
+ {
+ members.length > 0 ? (
+ <ul class="flex flex-col gap-4">
+ {members.map((member) => (
+ <li>
+ <MemberCard member={member} />
+ </li>
+ ))}
+ </ul>
+ ) : (
+ <p class="text-muted-foreground text-center">No members found.</p>
+ )
+ }
+</Layout>