2026-02-24 21:47:18 +00:00

110 lines
4.1 KiB
TypeScript

import Link from "next/link";
import { PageSchema } from "../../components/page-schema";
import { SiteFooter } from "../../components/site-footer";
import { SiteHeader } from "../../components/site-header";
import { siteInfo } from "../../data/site";
export const metadata = {
title: "Blog",
description: "Insights on financial control, audit readiness, and ledger automation.",
keywords: siteInfo.keywords
};
const posts = [
{
title: "Why 'Audit-Ready' Matters More Than Ever",
excerpt:
"As regulatory scrutiny increases, the ability to produce a clean, traceable ledger is becoming a competitive advantage.",
date: "Oct 24, 2023",
readTime: "5 min read",
slug: "audit-ready-matters"
},
{
title: "The Hidden Cost of Spreadsheet Chaos",
excerpt:
"Manual reconciliation isn't just slow—it's a liability. Here's how to move to a system of record.",
date: "Oct 12, 2023",
readTime: "4 min read",
slug: "spreadsheet-chaos"
},
{
title: "Automating the Month-End Close",
excerpt:
"How to use rules and categories to reduce your close time from days to hours.",
date: "Sep 28, 2023",
readTime: "6 min read",
slug: "automating-month-end"
}
];
export default function BlogPage() {
const schema = [
{
"@context": "https://schema.org",
"@type": "WebPage",
name: "LedgerOne Blog",
description: "Insights on financial control, audit readiness, and ledger automation.",
url: `${siteInfo.url}/blog`
},
{
"@context": "https://schema.org",
"@type": "Blog",
blogPost: posts.map((post) => ({
"@type": "BlogPosting",
headline: post.title,
description: post.excerpt,
datePublished: post.date,
url: `${siteInfo.url}/blog/${post.slug}`
}))
}
];
return (
<div className="min-h-screen bg-background font-sans text-foreground flex flex-col">
<SiteHeader />
<main className="flex-1 pt-32 pb-24 relative overflow-hidden">
<div className="absolute inset-0 mesh-gradient -z-10 opacity-40" />
<div className="max-w-7xl mx-auto px-6 lg:px-8">
<div className="text-center max-w-3xl mx-auto mb-16 animate-slide-up">
<h1 className="text-4xl font-bold tracking-tight text-foreground sm:text-5xl">
Insights for modern finance teams.
</h1>
<p className="mt-6 text-lg text-muted-foreground">
Best practices for financial control, audit readiness, and automation.
</p>
</div>
<div className="grid md:grid-cols-3 gap-8">
{posts.map((post) => (
<Link key={post.slug} href={`/blog/${post.slug}`} className="group">
<div className="glass-panel h-full rounded-2xl p-8 shadow-sm transition-all hover:shadow-md hover:-translate-y-1">
<div className="flex items-center gap-3 text-xs text-muted-foreground mb-4">
<time dateTime={post.date}>{post.date}</time>
<span></span>
<span>{post.readTime}</span>
</div>
<h3 className="text-xl font-bold text-foreground group-hover:text-primary transition-colors mb-3">
{post.title}
</h3>
<p className="text-muted-foreground text-sm leading-relaxed">
{post.excerpt}
</p>
<div className="mt-6 flex items-center text-primary font-medium text-sm">
Read article
<svg className="ml-2 w-4 h-4 transition-transform group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg>
</div>
</div>
</Link>
))}
</div>
</div>
</main>
<SiteFooter />
<PageSchema schema={schema} />
</div>
);
}