recipe-manager

Helps add, edit, validate, and manage recipe data in recipes.js. Use this when the user wants to create new recipes, modify existing ones, fix recipe formatting, or validate recipe structure.

242 stars

Best use case

recipe-manager is best used when you need a repeatable AI agent workflow instead of a one-off prompt. It is especially useful for teams working in multi. Helps add, edit, validate, and manage recipe data in recipes.js. Use this when the user wants to create new recipes, modify existing ones, fix recipe formatting, or validate recipe structure.

Helps add, edit, validate, and manage recipe data in recipes.js. Use this when the user wants to create new recipes, modify existing ones, fix recipe formatting, or validate recipe structure.

Users should expect a more consistent workflow output, faster repeated execution, and less time spent rewriting prompts from scratch.

Practical example

Example input

Use the "recipe-manager" skill to help with this workflow task. Context: Helps add, edit, validate, and manage recipe data in recipes.js. Use this when the user wants to create new recipes, modify existing ones, fix recipe formatting, or validate recipe structure.

Example output

A structured workflow result with clearer steps, more consistent formatting, and an output that is easier to reuse in the next run.

When to use this skill

  • Use this skill when you want a reusable workflow rather than writing the same prompt again and again.

When not to use this skill

  • Do not use this when you only need a one-off answer and do not need a reusable workflow.
  • Do not use it if you cannot install or maintain the related files, repository context, or supporting tools.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/recipe-manager/SKILL.md --create-dirs "https://raw.githubusercontent.com/aiskillstore/marketplace/main/skills/adamfehse/recipe-manager/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/recipe-manager/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How recipe-manager Compares

Feature / Agentrecipe-managerStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Helps add, edit, validate, and manage recipe data in recipes.js. Use this when the user wants to create new recipes, modify existing ones, fix recipe formatting, or validate recipe structure.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Recipe Manager Skill

## Your Role

You specialize in managing recipe data for CookMode V2. You help users create, edit, and maintain recipe entries in the `recipes.js` file following the established schema and patterns.

## When to Use This Skill

Invoke this skill when the user wants to:
- Add a new recipe
- Edit an existing recipe
- Fix recipe formatting or structure
- Validate recipe data
- Convert recipe formats
- Bulk update recipe properties

## Recipe Data Schema (Structured Object Format)

### Standard Recipe Structure

```javascript
'recipe-slug': {
    name: 'Display Name',
    category: 'Entree' | 'Side' | 'Soup' | 'Dessert',
    components: {
        'Component Name': [
            {
                amount: number | string,    // 2, 0.5, '1/4', '1/3'
                unit: string,              // 'cup', 'tbsp', 'oz', 'lb', etc.
                ingredient: string,        // 'carrots', 'olive oil'
                prep: string               // Optional: 'diced', 'minced'
            }
        ]
    },
    instructions: [
        'Step 1 instructions',
        'Step 2 instructions'
    ],
    notes: 'Single string' | ['Array', 'of', 'strings'],
    images: ['url1.jpg', 'url2.jpg'] // optional
}
```

### Required Fields
- `name` (string): Display name of the recipe
- `category` (string): One of: Entree, Side, Soup, Dessert
- `components` (object): Ingredient lists grouped by component (array of objects)
- `instructions` (array): Step-by-step cooking instructions

### Optional Fields
- `notes` (string or array): Additional tips or information
- `images` (array): URLs to recipe photos

## Ingredient Object Structure

### Required Fields (per ingredient)
- `amount`: Number or fraction string
  - Numbers: `2`, `0.5`, `1.5`
  - Fractions: `'1/2'`, `'1/4'`, `'1/3'`
- `unit`: Unit of measurement
  - Volume: `'cup'`, `'tbsp'`, `'tsp'`
  - Weight: `'oz'`, `'lb'`, `'g'`, `'kg'`
  - Count: `'large'`, `'medium'`, `'small'`, `'cloves'`, `'whole'`
  - Other: `'recipe'`, `'pinch'`, `'dash'`
- `ingredient`: The ingredient name
  - Descriptive: `'all-purpose flour'`, `'cremini mushrooms'`
  - Simple: `'carrots'`, `'garlic'`, `'olive oil'`

### Optional Fields (per ingredient)
- `prep`: Preparation instructions
  - Cutting: `'diced'`, `'minced'`, `'sliced'`, `'chopped'`
  - State: `'softened'`, `'melted'`, `'room temperature'`
  - Additional: `'divided'`, `'plus more to taste'`, `'Pinot Noir recommended'`

### Examples

```javascript
// Simple ingredient
{ amount: 2, unit: 'cups', ingredient: 'flour' }

// With preparation
{ amount: 1, unit: 'large', ingredient: 'onion', prep: 'diced' }

// Fraction amount
{ amount: '1/4', unit: 'tsp', ingredient: 'salt' }

// Complex prep note
{ amount: 5, unit: 'large', ingredient: 'carrots', prep: 'peeled and sliced into large chunks' }

// Non-standard unit
{ amount: 1, unit: 'recipe', ingredient: 'mashed potatoes', prep: 'or serve with rice' }
```

### Scaling Logic (New)
Much simpler with object format!

```javascript
function scaleIngredient(ingredientObj, multiplier) {
    const scaledAmount = parseAmount(ingredientObj.amount) * multiplier;
    return {
        ...ingredientObj,
        amount: scaledAmount
    };
}

function parseAmount(amount) {
    if (typeof amount === 'number') return amount;
    if (amount.includes('/')) {
        const [num, den] = amount.split('/').map(Number);
        return num / den;
    }
    return parseFloat(amount);
}
```

### Display Formatting

```javascript
function formatIngredient(obj, orderCount = 1) {
    const scaledAmount = parseAmount(obj.amount) * orderCount;
    const prep = obj.prep ? `, ${obj.prep}` : '';
    return `${scaledAmount.toFixed(2)} ${obj.unit} ${obj.ingredient}${prep}`;
}

// Examples:
// { amount: 2, unit: 'cups', ingredient: 'flour' }
// → "2.00 cups flour"

// { amount: 1, unit: 'large', ingredient: 'onion', prep: 'diced' }
// → "1.00 large onion, diced"

// { amount: '1/4', unit: 'tsp', ingredient: 'salt', prep: 'plus more to taste' }
// → "0.25 tsp salt, plus more to taste"
```

## Category Order

Recipes display in this category order:
1. Entree
2. Side
3. Soup
4. Dessert

Defined in `/js/components/RecipeGrid.js:20`

## Notes Field Handling

The `RecipeModal.js` component handles notes in two formats:

1. **String**: Renders as single paragraph
2. **Array**: Renders each item as separate paragraph

```javascript
// Single note
notes: "Use a hand mixer for whipped texture."

// Multiple notes
notes: [
    "Use a hand mixer for whipped texture.",
    "Pairs well with mushroom bourguignon."
]
```

## Component Groups

Common component patterns:
- **Simple recipes**: Single component (e.g., 'Ingredients')
- **Complex recipes**: Multiple components (e.g., 'Dough', 'Filling', 'Topping')
- **Sauces**: Often separate component (e.g., 'Base', 'Sauce')

## Validation Checklist

When adding/editing recipes, verify:

- [ ] Slug is kebab-case (lowercase, hyphens)
- [ ] Name is human-readable
- [ ] Category is one of: Entree, Side, Soup, Dessert
- [ ] All ingredients are objects with `amount`, `unit`, `ingredient` fields
- [ ] `amount` is a number or fraction string ('1/2', '1/4')
- [ ] `unit` is a string (never empty)
- [ ] `ingredient` is a string (never empty)
- [ ] `prep` is optional string
- [ ] Components object has at least one entry
- [ ] Each component has array of ingredient objects
- [ ] Instructions array has at least one step
- [ ] Notes field is string OR array (not object)
- [ ] Images are valid URLs (if provided)
- [ ] No trailing commas in arrays/objects
- [ ] Proper JavaScript syntax

## Common Tasks

### Adding a New Recipe

1. Create kebab-case slug
2. Follow schema structure (object format)
3. Ensure all ingredients have `amount`, `unit`, `ingredient` fields
4. Add optional `prep` field for preparation notes
5. Add to appropriate category
6. Validate syntax

### Converting String Format to Object Format

**Old string format**:
```javascript
'2 cups all-purpose flour, sifted'
```

**New object format**:
```javascript
{ amount: 2, unit: 'cups', ingredient: 'all-purpose flour', prep: 'sifted' }
```

**Use ChatGPT/Claude to batch convert**:
> "Convert these recipe ingredients to structured format with amount, unit, ingredient, prep fields"

### Converting Recipes

When importing from external sources:
1. Extract name, category, ingredients, instructions
2. Group ingredients into components
3. Format ingredients with quantities first
4. Convert steps to array
5. Add to recipes.js

## File Location

**recipes.js**: `/Users/adamfehse/Documents/gitrepos/cookmodeV2/recipes.js`

This file is loaded as a global `window.RECIPES` object and accessed by:
- `App.js` - Passes to RecipeGrid and RecipeModal
- `RecipeGrid.js` - Displays cards and filters
- `RecipeModal.js` - Shows full recipe details

## Best Practices

1. **Keep it simple**: Pico CSS philosophy applies to data too
2. **Consistent formatting**: Follow existing patterns
3. **Clear component names**: 'Sauce', 'Dough', 'Filling' not 'Component 1'
4. **Precise quantities**: Include unit of measure
5. **Actionable instructions**: Each step should be clear

## Example: Adding a New Recipe (New Object Format)

```javascript
'chocolate-chip-cookies': {
    name: 'Chocolate Chip Cookies',
    category: 'Dessert',
    components: {
        'Dough': [
            { amount: 2, unit: 'cups', ingredient: 'all-purpose flour' },
            { amount: 1, unit: 'tsp', ingredient: 'baking soda' },
            { amount: 0.5, unit: 'tsp', ingredient: 'salt' },
            { amount: 1, unit: 'cup', ingredient: 'butter', prep: 'softened' },
            { amount: 0.75, unit: 'cup', ingredient: 'granulated sugar' },
            { amount: 0.75, unit: 'cup', ingredient: 'brown sugar' },
            { amount: 2, unit: 'large', ingredient: 'eggs' },
            { amount: 2, unit: 'tsp', ingredient: 'vanilla extract' }
        ],
        'Mix-ins': [
            { amount: 2, unit: 'cups', ingredient: 'chocolate chips' }
        ]
    },
    instructions: [
        'Preheat oven to 375°F.',
        'Mix flour, baking soda, and salt in a bowl.',
        'Cream butter and sugars until fluffy.',
        'Beat in eggs and vanilla.',
        'Gradually blend in flour mixture.',
        'Stir in chocolate chips.',
        'Drop rounded tablespoons onto ungreased cookie sheets.',
        'Bake 9-11 minutes or until golden brown.'
    ],
    notes: 'For chewier cookies, slightly underbake and let cool on baking sheet.'
}
```

### ChatGPT Conversion Prompt

Use this to convert existing recipes:

```
Convert this recipe to JavaScript object format with the following structure:
- amount: number or fraction string ('1/2', '1/4')
- unit: string (cup, tbsp, tsp, oz, lb, etc.)
- ingredient: string (the ingredient name)
- prep: string (optional, preparation notes like 'diced', 'softened')

[Paste recipe here]
```

Remember: Keep recipes cook-friendly and maintainable!

Related Skills

backlog-manager

242
from aiskillstore/marketplace

需求池管理。用户随时抛出想法/痛点,AI 负责追问、整理、合并、归档到需求池文件。用户准备开新版本时,协助从池中筛选。痛点驱动,不做提前排期。

risk-manager

242
from aiskillstore/marketplace

Monitor portfolio risk, R-multiples, and position limits. Creates hedging strategies, calculates expectancy, and implements stop-losses. Use PROACTIVELY for risk assessment, trade tracking, or portfolio protection.

context-manager

242
from aiskillstore/marketplace

Elite AI context engineering specialist mastering dynamic context management, vector databases, knowledge graphs, and intelligent memory systems. Orchestrates context across multi-agent workflows, enterprise AI systems, and long-running projects with 2024/2025 best practices. Use PROACTIVELY for complex AI orchestration.

azure-resource-manager-sql-dotnet

242
from aiskillstore/marketplace

Azure Resource Manager SDK for Azure SQL in .NET. Use for MANAGEMENT PLANE operations: creating/managing SQL servers, databases, elastic pools, firewall rules, and failover groups via Azure Resource Manager. NOT for data plane operations (executing queries) - use Microsoft.Data.SqlClient for that. Triggers: "SQL server", "create SQL database", "manage SQL resources", "ARM SQL", "SqlServerResource", "provision Azure SQL", "elastic pool", "firewall rule".

azure-resource-manager-redis-dotnet

242
from aiskillstore/marketplace

Azure Resource Manager SDK for Redis in .NET. Use for MANAGEMENT PLANE operations: creating/managing Azure Cache for Redis instances, firewall rules, access keys, patch schedules, linked servers (geo-replication), and private endpoints via Azure Resource Manager. NOT for data plane operations (get/set keys, pub/sub) - use StackExchange.Redis for that. Triggers: "Redis cache", "create Redis", "manage Redis", "ARM Redis", "RedisResource", "provision Redis", "Azure Cache for Redis".

azure-resource-manager-postgresql-dotnet

242
from aiskillstore/marketplace

Azure PostgreSQL Flexible Server SDK for .NET. Database management for PostgreSQL Flexible Server deployments. Use for creating servers, databases, firewall rules, configurations, backups, and high availability. Triggers: "PostgreSQL", "PostgreSqlFlexibleServer", "PostgreSQL Flexible Server", "Azure Database for PostgreSQL", "PostgreSQL database management", "PostgreSQL firewall", "PostgreSQL backup", "Postgres".

azure-resource-manager-playwright-dotnet

242
from aiskillstore/marketplace

Azure Resource Manager SDK for Microsoft Playwright Testing in .NET. Use for MANAGEMENT PLANE operations: creating/managing Playwright Testing workspaces, checking name availability, and managing workspace quotas via Azure Resource Manager. NOT for running Playwright tests - use Azure.Developer.MicrosoftPlaywrightTesting.NUnit for that. Triggers: "Playwright workspace", "create Playwright Testing workspace", "manage Playwright resources", "ARM Playwright", "PlaywrightWorkspaceResource", "provision Playwright Testing".

azure-resource-manager-cosmosdb-dotnet

242
from aiskillstore/marketplace

Azure Resource Manager SDK for Cosmos DB in .NET. Use for MANAGEMENT PLANE operations: creating/managing Cosmos DB accounts, databases, containers, throughput settings, and RBAC via Azure Resource Manager. NOT for data plane operations (CRUD on documents) - use Microsoft.Azure.Cosmos for that. Triggers: "Cosmos DB account", "create Cosmos account", "manage Cosmos resources", "ARM Cosmos", "CosmosDBAccountResource", "provision Cosmos DB".

agent-manager-skill

242
from aiskillstore/marketplace

Manage multiple local CLI agents via tmux sessions (start/stop/monitor/assign) with cron-friendly scheduling.

notebooklm-manager

242
from aiskillstore/marketplace

This skill should be used when the user wants to interact with NotebookLM notebooks via Claude Code's Chrome integration. Trigger phrases: "Query my NotebookLM", "Ask my notebook about X", "query [id] about X", "list my notebooks", "add notebook URL", "show notebook details", "search notebooks for X", "Check my docs", "what does my [topic] notebook say about", "remove notebook", "delete notebook", "disable notebook", "enable notebook". Also triggers when user: (1) mentions NotebookLM explicitly, (2) shares NotebookLM URL (https://notebooklm.google.com/notebook/...). Do NOT use for: general web searches, local file reading, or non-NotebookLM documentation queries. Requires: claude --chrome with claude-in-chrome MCP.

home-assistant-manager

242
from aiskillstore/marketplace

Expert-level Home Assistant configuration management with efficient deployment workflows (git and rapid scp iteration), remote CLI access via SSH and hass-cli, automation verification protocols, log analysis, reload vs restart optimization, and comprehensive Lovelace dashboard management for tablet-optimized UIs. Includes template patterns, card types, debugging strategies, and real-world examples.

ghe-thread-manager

242
from aiskillstore/marketplace

Use this skill when the user expresses ANY intent related to issue/thread management: - Switching issues: "let's work on X", "switch to #Y", "go to the auth issue" - Checking status: "what are we working on?", "current issue?", "status?" - Background work: "what's in background?", "any features ready?", "check progress" - Starting development: "implement X", "add feature", "fix bug Y", "build a..." - Joining reviews: "let me see the review", "check that feature", "join #X" - Pausing/resuming: "pause this", "come back later", "resume #X" - Stopping transcription: "stop tracking", "don't record this", "private mode" - Resuming last session: "what were we working on?", "resume last issue", "continue where we left off" - Any natural expression of wanting to change focus or check work status This skill interprets natural language - users should NOT memorize commands. For the full GHE workflow protocol, see skill: github-elements-tracking