{
"id": "io.kich.recipe.recipe",
"defs": {
"tag": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string",
"description": "Tag identifier"
},
"name": {
"type": "string",
"description": "Tag display name"
}
}
},
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"name",
"servings",
"createdAt"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Source URL of the recipe"
},
"name": {
"type": "string",
"description": "Recipe name"
},
"tags": {
"type": "array",
"items": {
"ref": "#tag",
"type": "ref"
},
"description": "Tags for categorizing the recipe"
},
"images": {
"type": "array",
"items": {
"type": "blob",
"accept": [
"image/*"
]
},
"maxLength": 10,
"description": "Recipe images as blobs (hero first; preferred over imageUrl)"
},
"source": {
"type": "string",
"description": "Source name (book, magazine, blog)"
},
"imageUrl": {
"type": "string",
"format": "uri",
"description": "[Deprecated] Image URL for the recipe. Use images blob array instead. Kept for legacy fallback."
},
"servings": {
"type": "integer",
"default": 1,
"description": "Number of servings this recipe makes"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When this recipe was created"
},
"createdBy": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Reference to the user who created this recipe"
},
"embedding": {
"type": "string",
"description": "Vector embedding for semantic similarity search (1024 dimensions, stored as JSON array of numbers)"
},
"isPrivate": {
"type": "boolean",
"default": false,
"description": "Whether this recipe is private (only visible to household members)"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "When this recipe was last updated"
},
"description": {
"type": "string",
"description": "Recipe description"
},
"ingredients": {
"type": "array",
"items": {
"ref": "#ingredient",
"type": "ref"
},
"description": "Recipe ingredients"
},
"variationOf": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Optional reference to the original recipe this is a variation of (for attribution and variation discovery)"
},
"instructions": {
"type": "array",
"items": {
"ref": "#instructionStep",
"type": "ref"
},
"description": "Cooking instructions as an array of steps"
},
"cookTimeMinutes": {
"type": "integer",
"description": "Cooking time in minutes"
},
"prepTimeMinutes": {
"type": "integer",
"description": "Preparation time in minutes"
}
}
}
},
"ingredient": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for this ingredient"
},
"name": {
"type": "string",
"description": "Ingredient name"
},
"grams": {
"type": "integer",
"description": "[Deprecated] Amount needed in grams. Use measuredAmount/measuredUnit instead."
},
"group": {
"type": "string",
"description": "Optional group name for organizing ingredients (e.g., 'For the sauce:', 'For the pasta:')"
},
"notes": {
"type": "string",
"description": "Optional notes about this ingredient (e.g., original quantity)"
},
"isDetached": {
"type": "boolean",
"default": false,
"description": "Whether this ingredient is detached (doesn't count towards recipe completeness)"
},
"isOptional": {
"type": "boolean",
"default": false,
"description": "Whether this ingredient is optional"
},
"measuredUnit": {
"type": "string",
"description": "Measured unit (g, kg, oz, lb, ml)"
},
"heuristicUnit": {
"type": "string",
"description": "Heuristic unit from parsed ingredient text (e.g., cup, cookies)"
},
"measuredAmount": {
"type": "integer",
"description": "Measured amount needed (e.g., 250, 1.5)"
},
"heuristicAmount": {
"type": "integer",
"description": "Heuristic amount from parsed ingredient text (e.g., 2 in \"2 cups\")"
}
}
},
"instructionStep": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for this instruction step"
},
"value": {
"type": "string",
"description": "Instruction text"
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "A recipe record containing cooking instructions, ingredients, and metadata."
}