This is a Next.js catalog site for Agora Voice AI recipes. Recipe implementations live in separate GitHub repositories; this repo stores catalog metadata, fetches each recipe's markdown during build, and renders static recipe pages.
npm run devOpen http://localhost:3000.
See CONTRIBUTING.md for the full submission flow. In short:
- Fork this repo and create a branch from
staging. - Create
content/recipes/<slug>/recipe.json. - Use
templates/recipe.jsonas the starting point. - Set
mainRepoUrlto the implementation repository. - Set
recipeUrlto the GitHubblobURL for the markdown recipe file. - Run:
npm run buildThe build runs npm run recipes:build, which fetches the configured markdown, expands relative markdown links to absolute GitHub links, and writes generated artifacts under content/generated/recipes/.
The deployed catalog exposes a versioned, read-only API for official tooling:
GET /api/v1/recipes?type=all|ai|rtc
GET /api/v1/recipes/<slug>
List responses contain compact recipe metadata. Detail responses additionally
include recipeRawUrl and primaryPrompt, which the Agora CLI can return as
setup guidance after cloning a recipe. Every response includes
schemaVersion: 1; consumers must reject unsupported schema versions.
Only recipes whose author is exactly Agora are exposed. When present, the
cli.env object is the source of truth for the example file, target file, and
credential variable names; the CLI does not guess these values from the
recipe's language or checked-out files.
{
"title": "Python Quickstart",
"tagline": "Build a basic Agora Conversational AI agent in Python.",
"description": "Set up the Python quickstart agent, configure credentials, and run a minimal voice AI workflow.",
"tags": ["voice-ai"],
"platforms": ["Python"],
"useCases": ["Quickstart", "Voice AI"],
"capabilities": ["Conversational AI", "Voice Agent", "Python"],
"mainRepoUrl": "https://github.com/OWNER/REPO",
"recipeUrl": "https://github.com/OWNER/REPO/blob/main/docs/ai/RECIPE.md",
"author": "Agora",
"updated": "2026-05-28",
"difficulty": "Beginner"
}difficulty must be Beginner, Intermediate, or Advanced.
tags must contain at least one supported recipe type: voice-ai or rtc.
For content-only changes:
npm run buildFor TypeScript, React, styling, or routing changes:
npm run lint
npm run buildPrivate recipe repositories cannot be fetched by the unauthenticated build script. Make the repo public or expect the generated artifact to contain a fetch error for that recipe's markdown.