diff --git a/app/changelog/page.tsx b/app/changelog/page.tsx new file mode 100644 index 00000000..7d48a439 --- /dev/null +++ b/app/changelog/page.tsx @@ -0,0 +1,133 @@ +import { GitHubIcon } from '@/components/icons' +import { Badge, Heading, Text } from "@/components/ui"; +import { CHANGELOG_ENTRIES } from "@/lib/changelog-data"; +import { Metadata } from "next"; +import { Header } from "@/components/header"; +import { FooterSmall } from "@/components/footer-small"; +import { getFullUrl } from '@/lib/constants'; + + +export const metadata: Metadata = { + title: "Changelog | GSoC Orgs", + description: "Stay up to date with the latest features, improvements, and fixes for GSoC Orgs.", + alternates: { + canonical: getFullUrl("/changelog"), + }, +}; + +export default function ChangelogPage() { + + const sortedEntries = [...CHANGELOG_ENTRIES].sort((a, b) => b.timeStamp - a.timeStamp); + + // Helper to parse [Text](URL) into Teal Links + const formatChangelogText = (text: string) => { + const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g; + const parts = []; + let lastIndex = 0; + let match; + + while ((match = linkRegex.exec(text)) !== null) { + if (match.index > lastIndex) { + parts.push(text.substring(lastIndex, match.index)); + } + parts.push( + + {match[1]} + + ); + lastIndex = linkRegex.lastIndex; + } + + if (lastIndex < text.length) { + parts.push(text.substring(lastIndex)); + } + + return parts.length > 0 ? parts : text; + }; + + return ( + <> +
+
+ +
+ Changelog + The latest updates and improvements. +
+ +
+ {/* The Timeline Line */} +
+ + {sortedEntries.map((entry) => ( +
+ + {/* Left Column: Date & Version */} +
+
+ + + {entry.version} + +
+
+ {entry.prLinks.map((pr, i) => ( + + + {pr.number} + + ))} +
+
+ + {/* Right Column: Content */} +
+
+ {entry.title} + {entry.summary} +
+ +
    + {entry.changes.map((change, i) => ( +
  • +
    + {formatChangelogText(change.text)} +
  • + ))} +
+ + {/* Mobile PR Link */} +
+ {entry.prLinks.map((pr, i) => ( + + + {pr.number} + + ))} +
+
+
+ ))} +
+ +
+ + + ); +} \ No newline at end of file diff --git a/components/footer-common.tsx b/components/footer-common.tsx index 0c5edaad..be82f36d 100644 --- a/components/footer-common.tsx +++ b/components/footer-common.tsx @@ -134,6 +134,10 @@ export const FOOTER_NAVIGATION_ITEMS = [ title: "Terms and Conditions", href: "/terms-and-conditions", }, + { + title: "Changelog", + href: "/changelog", + }, // { // title: "Blog", // href: "/blog", diff --git a/lib/changelog-data.ts b/lib/changelog-data.ts new file mode 100644 index 00000000..5d9a5546 --- /dev/null +++ b/lib/changelog-data.ts @@ -0,0 +1,51 @@ +export interface ChangelogEntry { + date: string, + timeStamp: number, + version: string, + title: string, + summary: string, + prLinks: { link: string, number: string }[], + changes: { + type: 'feat' | 'fix' | 'docs' | 'style' | 'refactor' | 'perf' | 'test' | 'chore', + text: string + }[], + +} +export const CHANGELOG_ENTRIES: ChangelogEntry[] = [ + { + date: "Jan 29, 2026", + timeStamp: 20260129, + version: "v1.1.0", + title: "Dark Mode & UI Stabilization", + summary: "Refined the dashboard's visual hierarchy by introducing a refined color system and fixing high-contrast issues in dark mode.", + prLinks: [ + { link: "https://github.com/...", number: "#1" }, + { link: "https://github.com/...", number: "#2" }, + { link: "https://github.com/...", number: "#3" }, + ], + + changes: [ + { type: 'fix', text: 'Sidebar background now correctly renders black in dark mode' }, + { type: 'feat', text: 'Added new [filtering system](https://github.com/...) for better organization discovery.' }, + { type: 'refactor', text: 'Standardized border variables across all card components' } + ] + }, + { + date: "Feb 15, 2026", + timeStamp: 20260215, + version: "v1.1.0", + title: "Dark Mode & UI Stabilization", + summary: "Refined the dashboard's visual hierarchy by introducing a refined color system and fixing high-contrast issues in dark mode.", + prLinks: [ + { link: "https://github.com/...", number: "#3" }, + { link: "https://github.com/...", number: "#4" }, + { link: "https://github.com/...", number: "#5" }, + { link: "https://github.com/...", number: "#6" }, + ], + changes: [ + { type: 'fix', text: 'Sidebar background now correctly renders black in dark mode' }, + { type: 'feat', text: ' Added new [filtering system](https://github.com/...) for better organization discovery.' }, + { type: 'refactor', text: 'Standardized border variables across all card components' } + ] + } +]; \ No newline at end of file