--- import BaseLayout from "@/layouts/BaseLayout.astro"; import contribData from "@/data/contributions.json"; interface Contribution { project: string; projectUrl: string; platform: string; type: string; kind: string; title: string; url: string; date: string; status?: string; description?: string; relatedIssue?: string; } const contributions = (contribData as Contribution[]).sort( (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime(), ); const totalCount = contributions.length; const projects = [...new Set(contributions.map((c) => c.project))]; const types = [...new Set(contributions.map((c) => c.type))]; const kinds = [...new Set(contributions.map((c) => c.kind))]; const platforms = [...new Set(contributions.map((c) => c.platform))]; const mergedCount = contributions.filter((c) => c.status === "merged").length; function fmtDate(iso: string) { const d = new Date(iso); return `${d.getDate()} ${d.toLocaleString("en-US", { month: "short" })} ${d.getFullYear()}`; } const typeLabels: Record = { code: "Code", docs: "Docs", infra: "Infra", }; const kindLabels: Record = { pr: "PR", issue: "Issue", commit: "Commit", patch: "Patch", }; const statusColors: Record = { merged: "badge-merged", open: "badge-open", closed: "badge-closed", }; const platformIcons: Record = { github: ``, gitlab: ``, sourceware: ``, gerrit: ``, other: ``, }; function platformIcon(p: string): string { return platformIcons[p] ?? platformIcons.other; } const collectionLd = { "@context": "https://schema.org", "@type": "CollectionPage", name: "Open Source Contributions", description: "Open source contributions across GitHub, GitLab, Sourceware, and other platforms.", url: "https://avinal.space/contributions", author: { "@type": "Person", name: "Avinal Kumar", url: "https://avinal.space", }, }; ---

Contributions

A curated selection of my open source contributions across projects and platforms. This list represents only a portion of my overall work — PRs, patches, commits, and issues that I consider meaningful.

{totalCount} contributions
{projects.length} projects
{mergedCount} merged
{platforms.length} platforms
{contributions.map((c) => (
{typeLabels[c.type] ?? c.type}
{fmtDate(c.date)} {c.project}

{c.title}

{c.status && ( {c.status} )} {kindLabels[c.kind] ?? c.kind}
{c.description &&

{c.description}

} {c.relatedIssue && ( Related issue )}
))}