Consistency fixes: - Extract getThisWeekRange/getThisMonthRange to shared lib/utils/dateRanges.ts (removed 4 identical copy-pasted definitions) - Add error boundaries for behavior, cdn, search, pagespeed pages (4 new error.tsx files — previously fell through to generic parent error) - Add "View setup guide" CTA to empty states on journeys and behavior pages (previously showed text with no actionable button) - Fix non-lazy useState initializer in funnel detail page - Fix Bot & Spam settings header from text-xl to text-2xl (matches all other sections) - Add useMinimumLoading to PageSpeed skeleton (consistent with all other pages) Cleanup: - Remove 438 redundant dark: class prefixes (app is dark-mode only) text-neutral-500 dark:text-neutral-400 → text-neutral-400 (206 occurrences) text-neutral-900 dark:text-white → text-white (232 occurrences) - Remove dead @stripe/react-stripe-js and @stripe/stripe-js packages (billing migrated to Polar, no code imports Stripe) - Remove duplicate motion package (framer-motion is the one actually used)
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import fs from 'fs'
|
|
import path from 'path'
|
|
import ReactMarkdown from 'react-markdown'
|
|
import type { Metadata } from 'next'
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Changelog - Pulse',
|
|
description: 'Release history and notable changes for Pulse, privacy-first web analytics.',
|
|
}
|
|
|
|
/**
|
|
* Reads CHANGELOG.md from the project root and renders it on the /changelog page.
|
|
* Content is loaded at build time; redeploy to show new releases.
|
|
*/
|
|
export default function ChangelogPage() {
|
|
const changelogPath = path.join(process.cwd(), 'CHANGELOG.md')
|
|
const content = fs.readFileSync(changelogPath, 'utf-8')
|
|
|
|
return (
|
|
<div className="mx-auto max-w-3xl px-4 sm:px-6 py-8">
|
|
<h1 className="text-4xl md:text-5xl font-bold tracking-tight text-white mb-2">
|
|
Changelog
|
|
</h1>
|
|
<p className="text-neutral-600 dark:text-neutral-400 mb-8 text-sm">
|
|
Release history and notable changes. We use{' '}
|
|
<a
|
|
href="https://keepachangelog.com/en/1.1.0/"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="text-brand-orange hover:underline"
|
|
>
|
|
Keep a Changelog
|
|
</a>{' '}
|
|
and <strong>0.x.y</strong> versioning while in initial development.
|
|
</p>
|
|
<article
|
|
className="prose prose-neutral dark:prose-invert max-w-none
|
|
prose-headings:font-semibold prose-headings:tracking-tight
|
|
prose-a:text-brand-orange prose-a:no-underline hover:prose-a:underline
|
|
prose-ul:my-4 prose-li:my-0.5"
|
|
>
|
|
<ReactMarkdown>{content}</ReactMarkdown>
|
|
</article>
|
|
</div>
|
|
)
|
|
}
|