diff options
| author | Arslaan Pathan <[email protected]> | 2026-08-31 17:00:12 +1200 |
|---|---|---|
| committer | Arslaan Pathan <[email protected]> | 2026-08-31 17:00:12 +1200 |
| commit | 5936aedd3d853514a31ebece23175255fb2415c3 (patch) | |
| tree | 829560cffbbb4fde805319c08f984667e498eaf5 /app/insights | |
| download | the-agentic-cloud-5936aedd3d853514a31ebece23175255fb2415c3.tar.xz the-agentic-cloud-5936aedd3d853514a31ebece23175255fb2415c3.zip | |
Initial commit
Diffstat (limited to 'app/insights')
| -rw-r--r-- | app/insights/[slug]/page.tsx | 52 | ||||
| -rw-r--r-- | app/insights/page.tsx | 48 |
2 files changed, 100 insertions, 0 deletions
diff --git a/app/insights/[slug]/page.tsx b/app/insights/[slug]/page.tsx new file mode 100644 index 0000000..d654ff0 --- /dev/null +++ b/app/insights/[slug]/page.tsx @@ -0,0 +1,52 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { notFound } from "next/navigation"; +import { Eyebrow, Section } from "@/components/section"; +import { posts } from "@/lib/content"; + +type Props = { params: Promise<{ slug: string }> }; + +export async function generateStaticParams() { + return posts.map((p) => ({ slug: p.slug })); +} + +export async function generateMetadata({ params }: Props): Promise<Metadata> { + const { slug } = await params; + const post = posts.find((p) => p.slug === slug); + if (!post) return { title: "Insight" }; + return { title: post.title, description: post.dek }; +} + +export default async function InsightPostPage({ params }: Props) { + const { slug } = await params; + const post = posts.find((p) => p.slug === slug); + if (!post) notFound(); + + return ( + <Section className="pt-16 md:pt-24" innerClassName="max-w-2xl"> + <Link + href="/insights" + className="text-sm text-muted-foreground hover:text-primary" + > + ← Insights + </Link> + <Eyebrow className="mt-8"> + {post.date} · {post.reading} + </Eyebrow> + <h1 className="mt-4 font-heading text-4xl leading-tight md:text-5xl"> + {post.title} + </h1> + <p className="mt-4 text-lg leading-relaxed text-muted-foreground"> + {post.dek} + </p> + <div className="mt-10 space-y-5 text-[15px] leading-relaxed text-foreground/90"> + {post.paragraphs.map((para) => ( + <p key={para.slice(0, 40)}>{para}</p> + ))} + </div> + <p className="mt-12 text-sm text-muted-foreground"> + {post.tags.join(" · ")} + </p> + </Section> + ); +} diff --git a/app/insights/page.tsx b/app/insights/page.tsx new file mode 100644 index 0000000..3d48dcc --- /dev/null +++ b/app/insights/page.tsx @@ -0,0 +1,48 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { CtaBand } from "@/components/cta-band"; +import { Eyebrow, Section } from "@/components/section"; +import { posts } from "@/lib/content"; + +export const metadata: Metadata = { + title: "Insights", + description: + "Essays from The Agentic Cloud on agentic runtimes, attention-free fabrics, and FedRAMP High afterlives.", +}; + +export default function InsightsPage() { + return ( + <> + <Section className="pt-16 md:pt-24"> + <Eyebrow>Insights</Eyebrow> + <h1 className="mt-4 max-w-3xl font-heading text-4xl leading-tight md:text-6xl"> + Writing for the architecture review, not the feed. + </h1> + <p className="mt-5 max-w-2xl text-base leading-relaxed text-muted-foreground md:text-lg"> + The thesis, the runtime, and the trust plane — at a length that + survives a change-control board. + </p> + </Section> + <Section className="pt-0"> + <div className="divide-y divide-white/10 border-y border-white/10"> + {posts.map((p) => ( + <Link + key={p.slug} + href={`/insights/${p.slug}`} + className="block py-8 transition-colors hover:bg-white/5" + > + <p className="font-mono text-[11px] text-muted-foreground"> + {p.date} · {p.reading} · {p.tags.join(" · ")} + </p> + <h2 className="mt-2 font-heading text-3xl">{p.title}</h2> + <p className="mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground"> + {p.dek} + </p> + </Link> + ))} + </div> + </Section> + <CtaBand /> + </> + ); +} |
