Files
awesome-copilot/.schemas/cookbook.schema.json
Aaron Powell b8d93a0344 feat(website): add samples/cookbook page with recipe browser
Integrates the cookbook/ folder into the website's Samples page:

Data Structure:
- Add cookbook/cookbook.yml manifest defining cookbooks and recipes
- Add .schemas/cookbook.schema.json for validation
- Add COOKBOOK_DIR constant to eng/constants.mjs

Build Integration:
- Add generateSamplesData() to generate samples.json from cookbook.yml
- Include recipe variants with file paths for each language
- Add samples count to manifest.json

Website UI:
- Create samples.ts with FuzzySearch, language/tag filtering
- Replace placeholder samples.astro with functional recipe browser
- Recipe cards with language indicators and action buttons
- Language tabs for switching between implementations
- View Recipe/View Example buttons open modal
- GitHub link for each recipe

Features:
- Search recipes by name/description
- Filter by programming language (Node.js, Python, .NET, Go)
- Filter by tags (multi-select with Choices.js)
- 5 recipes across 4 languages = 20 recipe variants
2026-02-02 15:11:12 +11:00

100 lines
3.2 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Cookbook Manifest",
"description": "Schema for cookbook.yml manifest defining cookbooks and recipes",
"type": "object",
"required": ["cookbooks"],
"properties": {
"cookbooks": {
"type": "array",
"description": "List of cookbooks",
"items": {
"type": "object",
"required": ["id", "name", "description", "path", "languages", "recipes"],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the cookbook",
"pattern": "^[a-z0-9-]+$"
},
"name": {
"type": "string",
"description": "Display name for the cookbook"
},
"description": {
"type": "string",
"description": "Brief description of the cookbook"
},
"path": {
"type": "string",
"description": "Relative path to the cookbook folder"
},
"featured": {
"type": "boolean",
"description": "Whether this cookbook should be featured",
"default": false
},
"languages": {
"type": "array",
"description": "Programming languages supported by this cookbook",
"items": {
"type": "object",
"required": ["id", "name"],
"properties": {
"id": {
"type": "string",
"description": "Language identifier (folder name)",
"pattern": "^[a-z0-9-]+$"
},
"name": {
"type": "string",
"description": "Display name for the language"
},
"icon": {
"type": "string",
"description": "Emoji icon for the language"
},
"extension": {
"type": "string",
"description": "File extension for runnable examples",
"pattern": "^\\.[a-z]+$"
}
}
}
},
"recipes": {
"type": "array",
"description": "List of recipes in this cookbook",
"items": {
"type": "object",
"required": ["id", "name", "description"],
"properties": {
"id": {
"type": "string",
"description": "Recipe identifier (matches markdown filename without extension)",
"pattern": "^[a-z0-9-]+$"
},
"name": {
"type": "string",
"description": "Display name for the recipe"
},
"description": {
"type": "string",
"description": "Brief description of what the recipe covers"
},
"tags": {
"type": "array",
"description": "Tags for filtering and categorization",
"items": {
"type": "string"
}
}
}
}
}
}
}
}
}
}