--- title: Changelog description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. keywords: [ Jan, Customizable Intelligence, LLM, local AI, privacy focus, free and open source, private and offline, conversational AI, no-subscription fee, large language models, architecture, ] --- import Changelog from "@/components/Changelog" import fs from 'fs' import path from 'path' import matter from 'gray-matter' import { format } from 'date-fns' export const getStaticProps = async() => { const getChangelog = await fs.readdirSync(path.join(process.cwd(), 'src/pages/changelog')).filter((file) => { return path.extname(file).toLowerCase() === ".mdx" && !file.startsWith('index') }) const changelog = [] for (const item of getChangelog) { const content = fs.readFileSync(path.join(process.cwd(), `src/pages/changelog/${item}`), "utf8") const frontmatter = matter(content) if(!frontmatter.data.unlisted) { changelog.push({ url: item.replace('.mdx', ''), title: frontmatter?.data?.title || '', ogImage: frontmatter?.data?.ogImage || null, version: frontmatter?.data?.version || null, description: frontmatter?.data?.description || null, date: String(frontmatter?.data?.date) || null, }) } changelog.sort((a, b) => new Date(b.date) - new Date(a.date)) } return { props: { ssg: changelog }, } }