Alchemy RecipeIntermediateworkflow

Game design document creation from concept

Published

Creating a game design document (GDD) from scratch is tedious work. You start with a concept, sketch out mechanics, describe art direction, define characters, outline story beats, and then organise everything into a coherent structure that your team can actually use. Most game developers do this manually: writing in Google Docs, creating separate Figma boards for visual concepts, and hoping everything stays in sync across tools.... For more on this, see Architecture design document creation from code repositories.

What if you could feed a single game concept into a workflow and have it emerge as a fully structured design document with diagrams and mechanical breakdowns already assembled? No copy-pasting between tools. No manual formatting. Just concept in, polished GDD out.

This Alchemy workflow chains together Bhava-AI for narrative and mechanical design generation, Diagram for visual architecture creation, and Ludo-AI for gameplay mechanics fleshing, orchestrated through n8n. The entire process runs without you touching anything between the initial prompt and the final output....... For more on this, see Dora AI vs v0 vs Diagram: AI Web Design and UI Generation.... For more on this, see Technical architecture diagram generation from codebase d....

The Automated Workflow

This workflow solves a specific problem: taking a raw game concept and producing a structured GDD with supporting diagrams and mechanics breakdowns. We'll use n8n as the orchestrator because it handles complex data transformation cleanly and integrates well with all three tools.

Architecture Overview

The workflow follows this sequence:

  1. Accept a game concept as input (via webhook or form submission)
  2. Send the concept to Bhava-AI for narrative structure and high-level design
  3. Parse Bhava-AI's output and simultaneously request visual diagrams from Diagram
  4. Feed results into Ludo-AI for mechanical depth and balance considerations
  5. Aggregate all outputs into a final markdown GDD
  6. Deliver the result via email or store to cloud storage

Step 1:

Triggering the Workflow

Set up an n8n webhook node to receive incoming game concepts:


POST /webhook/game-concept
Content-Type: application/json

{
  "game_name": "Stellar Harvest",
  "concept": "A top-down farming sim set on a generation ship. Players manage crops in hydroponic bays whilst managing social relationships with crew members.",
  "target_platform": "PC/Switch",
  "target_audience": "Cosy game enthusiasts, aged 18-35"
}

Configure the webhook in n8n with these settings:

  • Authentication: none (or use a simple API key if deployed publicly)
  • HTTP Method: POST
  • Response Mode: "On Received"

The webhook node passes the entire payload to the next step unchanged.

Step 2:

Generate Narrative and Design Structure with Bhava-AI

Bhava-AI excels at producing structured narrative design and mechanical outlines. Create an HTTP request node in n8n configured like this:


POST https://api.bhava-ai.com/v1/game-design
Authorization: Bearer YOUR_BHAVA_API_KEY
Content-Type: application/json

{
  "mode": "game_design_document",
  "concept": "{{ $json.concept }}",
  "game_name": "{{ $json.game_name }}",
  "platform": "{{ $json.target_platform }}",
  "audience": "{{ $json.target_audience }}",
  "sections": [
    "narrative_premise",
    "core_mechanics",
    "progression_systems",
    "character_overview",
    "art_direction_brief"
  ],
  "format": "json"
}

Bhava-AI returns a structured JSON response. Store this in a variable called bhava_output. The response typically looks like:

{
  "narrative_premise": "On the generation ship Meridian, players inherit a neglected hydroponic section...",
  "core_mechanics": [
    {
      "name": "Crop Management",
      "description": "Plant, water, and harvest crops with seasonal mechanics..."
    },
    {
      "name": "Relationship Dynamics",
      "description": "Daily interactions unlock crew backstories..."
    }
  ],
  "progression_systems": {
    "unlocks": "New crop varieties unlock through story milestones",
    "economy": "Crops provide currency for ship upgrades"
  },
  "character_overview": [...],
  "art_direction_brief": "Soft colour palette, pixel art style, warm lighting"
}

Add error handling here. If Bhava-AI returns a 429 (rate limit) or 5xx error, use n8n's retry logic:


{
  "maxRetries": 3,
  "retryDelay": 5000,
  "retryOn": [429, 500, 502, 503]
}

Step 3:

Generate Visual Diagrams with Diagram

While Bhava-AI processes narrative, trigger a parallel request to Diagram for visual architecture diagrams. Use n8n's parallel execution by creating a separate HTTP request node at the same level:


POST https://api.diagram.com/v1/generate
Authorization: Bearer YOUR_DIAGRAM_API_KEY
Content-Type: application/json

{
  "diagram_type": "system_architecture",
  "title": "{{ $json.game_name }} - Game Systems",
  "elements": [
    {
      "name": "Crop Management System",
      "connections": ["Progression", "Economy"]
    },
    {
      "name": "Relationship System",
      "connections": ["Narrative", "Progression"]
    },
    {
      "name": "Economy System",
      "connections": ["Progression"]
    }
  ],
  "output_format": "svg"
}

Store the returned SVG diagram URL in diagram_output. Diagram returns a URL pointing to a hosted SVG file, which you can embed directly in the final GDD.

Step 4:

Deepen Mechanics with Ludo-AI

After Bhava-AI completes, feed its core mechanics into Ludo-AI for balance analysis and mechanical depth:


POST https://api.ludo-ai.com/v1/mechanics-analysis
Authorization: Bearer YOUR_LUDO_API_KEY
Content-Type: application/json

{
  "game_title": "{{ $json.game_name }}",
  "mechanics": "{{ $json.bhava_output.core_mechanics }}",
  "progression_system": "{{ $json.bhava_output.progression_systems }}",
  "analysis_focus": [
    "balance_implications",
    "feedback_loops",
    "difficulty_curves",
    "replayability_factors"
  ],
  "output_format": "detailed_analysis"
}

Ludo-AI returns deep mechanical analysis suitable for design discussions:

{
  "balance_assessment": "Relationship system provides soft progression without pressure...",
  "feedback_loops": {
    "positive_loops": ["Successful harvests → more currency → better tools → faster harvests"],
    "negative_loops": ["Neglected relationships → fewer story unlocks → reduced progression motivation"]
  },
  "difficulty_curve": "Gentle early game with optional challenges mid-game",
  "replayability": "Multiple relationship paths and crop variety combinations support varied playthroughs"
}

Store this as ludo_output.

Step 5:

Aggregate into Final GDD

Create a "Function" node (or code node) in n8n to assemble everything into markdown:

const gdd = `# Game Design Document: ${item.json.game_name}

## Concept
${item.json.concept}

## Narrative Premise
${item.json.bhava_output.narrative_premise}

## Core Mechanics
${item.json.bhava_output.core_mechanics.map(m => `

### ${m.name}
${m.description}
`).join('\n')}

## Systems Architecture
![System Diagram](${item.json.diagram_output.url})

## Progression & Economy
${item.json.bhava_output.progression_systems.unlocks}

Economy: ${item.json.bhava_output.progression_systems.economy}

## Character Overview
${item.json.bhava_output.character_overview.map(c => `
- **${c.name}**: ${c.role}`).join('\n')}

## Art Direction
${item.json.bhava_output.art_direction_brief}

## Mechanical Analysis

### Balance Assessment
${item.json.ludo_output.balance_assessment}

### Feedback Loops
**Positive Loops:**
${item.json.ludo_output.feedback_loops.positive_loops.map(l => `- ${l}`).join('\n')}

**Negative Loops:**
${item.json.ludo_output.feedback_loops.negative_loops.map(l => `- ${l}`).join('\n')}

### Difficulty Curve
${item.json.ludo_output.difficulty_curve}

### Replayability Factors
${item.json.ludo_output.replayability}
`;

return { gdd: gdd };

This node transforms all three tool outputs into a single, well-formatted markdown document.

Step 6:

Delivery

Add a final node to deliver the GDD. You have options:

Option A: Email delivery


{
  "to": "{{ $json.email }}",
  "subject": "Game Design Document: {{ $json.game_name }}",
  "body": "Your GDD is ready. See attached.",
  "attachments": [
    {
      "filename": "{{ $json.game_name }}_GDD.md",
      "content": "{{ $json.gdd }}"
    }
  ]
}

Option B: Save to cloud storage (Google Drive example)


POST https://www.googleapis.com/drive/v3/files
Authorization: Bearer YOUR_GOOGLE_API_KEY
Content-Type: application/json

{
  "name": "{{ $json.game_name }}_GDD.md",
  "mimeType": "text/plain",
  "parents": ["YOUR_FOLDER_ID"],
  "content": "{{ $json.gdd }}"
}

Complete n8n Workflow JSON

Here's a minimal n8n workflow structure to reference:

{
  "nodes": [
    {
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [250, 300]
    },
    {
      "name": "Bhava-AI Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [500, 200]
    },
    {
      "name": "Diagram Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [500, 400]
    },
    {
      "name": "Ludo-AI Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [750, 200]
    },
    {
      "name": "Aggregate GDD",
      "type": "n8n-nodes-base.code",
      "position": [1000, 300]
    },
    {
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [1250, 300]
    }
  ],
  "connections": {
    "Webhook": ["Bhava-AI Request", "Diagram Request"],
    "Bhava-AI Request": ["Ludo-AI Request"],
    "Ludo-AI Request": ["Aggregate GDD"],
    "Diagram Request": ["Aggregate GDD"],
    "Aggregate GDD": ["Send Email"]
  ]
}

The Manual Alternative

If you prefer more control over the process, run each tool independently:

  1. Write your game concept in a document.
  2. Paste it into Bhava-AI directly via their web interface and copy the output.
  3. Open Diagram's web tool and manually define your game systems, saving the resulting SVG.
  4. Feed Bhava-AI's mechanics into Ludo-AI's analysis tool.
  5. Copy all three outputs into a shared doc and format manually.

This approach gives you time to review and tweak at each step, which matters if you want creative input on the GDD's direction. The downside is that it takes 45 minutes to an hour, versus 3-5 minutes automated.......

Pro Tips

Rate limiting and backoff strategies

Bhava-AI and Ludo-AI both enforce rate limits (typically 100 requests per minute for standard plans). If you're running multiple GDD generations in parallel, implement exponential backoff in n8n:


Wait for 2 seconds on first 429 error
Wait for 5 seconds on second 429 error
Wait for 10 seconds on third 429 error
Then fail the workflow

This prevents hammer-like retries that irritate the API provider.

Cost optimisation through caching

If you run similar game concepts multiple times, cache Diagram's output. A system architecture diagram for a farming sim doesn't change much whether the concept is "generation ship farming" or "island farming". Store previously generated diagrams in n8n's built-in variable storage and reuse them if a new concept is sufficiently similar.

Handling incomplete API responses

Sometimes Ludo-AI returns partial analysis if the input mechanics are unusual or ambiguous. Add a conditional node in n8n that checks whether ludo_output.balance_assessment is null. If it is, add a default statement to the GDD: "Balance assessment pending additional design detail. Consider testing this mechanic with playtesters early."

Validating output quality

Before sending the GDD, add a final validation step that checks:

  • Does the markdown render without syntax errors?

  • Is the diagram URL accessible?

  • Do all referenced sections exist?

A simple regex check catches most markdown issues:

const invalidMarkdown = /(?<![\\])[#]{7,}|^\s*\[.*\]\(.*\)$(?<!\.)/m;
if (invalidMarkdown.test(item.json.gdd)) {
  return { error: "Markdown syntax error detected" };
}

Splitting long GDDs into sections

For complex games, the aggregated GDD can exceed 20,000 characters. Instead of one email attachment, generate multiple markdown files (one per section) and email them as a zip archive. This keeps individual files manageable and allows your design team to focus on one section at a time.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
Bhava-AIPro£49Includes 500 API calls/month; £0.15 per additional call
DiagramStarter£29100 diagrams/month; additional at £0.50 each
Ludo-AIStandard£39Unlimited API calls within fair use policy
n8nCloud Pro£2520 workflow executions/month included; overage £0.50 per execution
Total£142/monthSupports ~50 GDD generations monthly

If you generate GDDs infrequently (fewer than 10 per month), using the free tiers of Bhava-AI and Diagram keeps costs to under £65 monthly, though with reduced API allowances.

More Recipes