aboutsummaryrefslogtreecommitdiff
path: root/app/insights
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-08-31 17:00:12 +1200
committerArslaan Pathan <[email protected]>2026-08-31 17:00:12 +1200
commit5936aedd3d853514a31ebece23175255fb2415c3 (patch)
tree829560cffbbb4fde805319c08f984667e498eaf5 /app/insights
downloadthe-agentic-cloud-5936aedd3d853514a31ebece23175255fb2415c3.tar.xz
the-agentic-cloud-5936aedd3d853514a31ebece23175255fb2415c3.zip
Initial commit
Diffstat (limited to 'app/insights')
-rw-r--r--app/insights/[slug]/page.tsx52
-rw-r--r--app/insights/page.tsx48
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 />
+ </>
+ );
+}