diff --git a/apps/docs/app/[lang]/resources/page.tsx b/apps/docs/app/[lang]/resources/page.tsx new file mode 100644 index 000000000..d12fea730 --- /dev/null +++ b/apps/docs/app/[lang]/resources/page.tsx @@ -0,0 +1,73 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { translations } from "@/geistdocs"; +import { type Resource, resources, type ResourceKind } from "@/lib/resources/data"; + +const title = "Resources"; +const description = "Guides, templates, and examples to help you build with eve."; + +const kindClassName: Record = { + Community: "border-transparent bg-gray-300 text-gray-1000", + Example: "border-transparent bg-gray-300 text-gray-1000", + Guide: "border-transparent bg-gray-300 text-gray-1000", + Reference: "border-transparent bg-gray-300 text-gray-1000", + Template: "border-transparent bg-gray-300 text-gray-1000", +}; + +export const metadata: Metadata = { + title, + description, +}; + +export const generateStaticParams = () => Object.keys(translations).map((lang) => ({ lang })); + +const ResourceCard = ({ resource }: { resource: Resource }) => { + const isExternal = resource.href.startsWith("https://"); + const className = + "flex h-full flex-col gap-3 rounded-xl border border-gray-alpha-400 bg-background-100 p-6 no-underline shadow-none transition-colors hover:bg-gray-100 dark:bg-gray-100 dark:hover:bg-gray-200"; + const content = ( + <> + + {resource.kind} + +

+ {resource.title} +

+

{resource.description}

+ + ); + + if (isExternal) { + return ( + + {content} + + ); + } + + return ( + + {content} + + ); +}; + +const ResourcesPage = () => ( +
+
+

+ {title} +

+

{description}

+
+
+ {resources.map((resource) => ( + + ))} +
+
+); + +export default ResourcesPage; diff --git a/apps/docs/app/sitemap.ts b/apps/docs/app/sitemap.ts index 6477d871d..57780200e 100644 --- a/apps/docs/app/sitemap.ts +++ b/apps/docs/app/sitemap.ts @@ -32,6 +32,11 @@ export default function sitemap(): MetadataRoute.Sitemap { priority: 1, url: url("/"), }, + { + changeFrequency: "weekly", + priority: 0.5, + url: url("/resources"), + }, ...pages, ]; } diff --git a/apps/docs/geistdocs.tsx b/apps/docs/geistdocs.tsx index bf7f574e0..fc8299ba1 100644 --- a/apps/docs/geistdocs.tsx +++ b/apps/docs/geistdocs.tsx @@ -21,6 +21,10 @@ export const nav = [ label: "Integrations", href: "/integrations", }, + { + label: "Resources", + href: "/resources", + }, { label: "GitHub", href: `https://github.com/${github.owner}/${github.repo}/`, diff --git a/apps/docs/lib/resources/data.ts b/apps/docs/lib/resources/data.ts new file mode 100644 index 000000000..7d24bdc55 --- /dev/null +++ b/apps/docs/lib/resources/data.ts @@ -0,0 +1,60 @@ +export type ResourceKind = "Community" | "Example" | "Guide" | "Reference" | "Template"; + +export interface Resource { + description: string; + href: string; + kind: ResourceKind; + title: string; +} + +export const resources: Resource[] = [ + { + kind: "Guide", + title: "Build your first agent", + description: + "Follow the tutorial from a first agent through warehouse tools, spend approval, and a deployable chat UI.", + href: "/docs/tutorial/first-agent", + }, + { + kind: "Guide", + title: "Frontend guides", + description: + "Use React, Vue, Svelte, Next.js, Nuxt, or SvelteKit helpers to put a durable eve session behind your own UI.", + href: "/docs/guides/frontend/overview", + }, + { + kind: "Guide", + title: "TypeScript client", + description: + "Drive the default HTTP channel from scripts, tests, backend jobs, or custom server-side integrations.", + href: "/docs/guides/client/overview", + }, + { + kind: "Template", + title: "Eve Chat Template", + description: + "A persisted Next.js chat template for Eve, built with shadcn/ui, Tailwind CSS, Streamdown, Better Auth, Drizzle, Neon, and Upstash Redis.", + href: "https://vercel.com/templates/eve/eve-chat-template", + }, + { + kind: "Template", + title: "Eve Slack Agent", + description: + "A Slack agent template with webhook handling, Vercel Connect, a starter agent, and an example tool ready to deploy on Vercel.", + href: "https://vercel.com/templates/eve/eve-slack-agent", + }, + { + kind: "Example", + title: "Weather Agent Fixture", + description: + "A small representative eve app with agent config, instructions, a typed weather tool, and a markdown skill.", + href: "https://github.com/vercel/eve/tree/main/apps/fixtures/weather-agent", + }, + { + kind: "Reference", + title: "Eve Knowledge Base", + description: + "Vercel's Eve hub with getting-started guides, build guides, templates, docs, integrations, and community links.", + href: "https://vercel.com/kb/eve", + }, +];