> ## Documentation Index
> Fetch the complete documentation index at: https://jobo.world/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Example Flows

> Pre-built pipeline examples for common job data transformation use cases.

## Extract Requirements & Responsibilities

Parse job descriptions to extract structured requirements and responsibilities using AI, then merge back with the original data.

### Flow

```mermaid theme={null}
graph LR
    A["🟢 Input<br/>Jobs Feed"] -->|raw job JSON| B["🟣 AI<br/>Extract Req & Resp"]
    A -->|original data| C["🟠 JSON Merge<br/>Deep / Patch Wins"]
    B -->|extracted fields| C
    C -->|enriched job| D["🔴 Output<br/>Database"]

    style A fill:#f0fdf4,stroke:#15803d,color:#15803d
    style B fill:#f5f3ff,stroke:#7c3aed,color:#7c3aed
    style C fill:#fffbeb,stroke:#b45309,color:#b45309
    style D fill:#fef2f2,stroke:#dc2626,color:#dc2626
```

### Configuration

**AI Node:**

* **Model:** `google/gemini-2.0-flash-001`
* **System Prompt:** *"You are a job data extraction assistant. Extract requirements (must-have and preferred) and key responsibilities from the job description. Always respond with valid JSON."*
* **User Prompt:** *"Extract requirements and responsibilities from this job posting:\n\n\{\{input}}"*
* **Output Schema:**

```json theme={null}
{
  "type": "object",
  "properties": {
    "requirements": {
      "type": "object",
      "properties": {
        "must_have": { "type": "array", "items": { "type": "string" } },
        "preferred": { "type": "array", "items": { "type": "string" } }
      }
    },
    "responsibilities": { "type": "array", "items": { "type": "string" } }
  }
}
```

**JSON Merge Node:**

* **Strategy:** Deep
* **Conflict Resolution:** Patch Wins

### Result

The original job object is enriched with structured `requirements` and `responsibilities` fields extracted by AI. All original fields (title, company, location, etc.) are preserved through the merge.

***

## Generate SEO Metadata

Generate SEO-optimized titles, meta descriptions, slugs, and keywords for job postings. Uses a Liquid node to prepare a focused context first, reducing AI token usage.

### Flow

```mermaid theme={null}
graph LR
    A["🟢 Input<br/>Jobs Feed"] -->|raw job JSON| B["🔵 Liquid<br/>Prepare Context"]
    B -->|focused context| C["🟣 AI<br/>Generate SEO"]
    A -->|original data| D["🟠 JSON Merge<br/>Deep / Patch Wins"]
    C -->|SEO fields| D
    D -->|enriched job| E["🔴 Output<br/>Database"]

    style A fill:#f0fdf4,stroke:#15803d,color:#15803d
    style B fill:#f0f9ff,stroke:#0369a1,color:#0369a1
    style C fill:#f5f3ff,stroke:#7c3aed,color:#7c3aed
    style D fill:#fffbeb,stroke:#b45309,color:#b45309
    style E fill:#fef2f2,stroke:#dc2626,color:#dc2626
```

### Configuration

**Liquid Node** — prepares a concise context for the AI:

```liquid theme={null}
{
  "title": "{{ data.title }}",
  "company": "{{ data.company.name }}",
  "location": "{{ data.location.city }}, {{ data.location.country }}",
  "is_remote": {{ data.is_remote }},
  "description_preview": "{{ data.description | strip_html | truncate_words: 100 }}"
}
```

**AI Node:**

* **Model:** `google/gemini-2.0-flash-001`
* **System Prompt:** *"Generate SEO metadata for a job posting. Respond with valid JSON only."*
* **User Prompt:** *"Generate SEO-optimized metadata for this job:\n\n\{\{input}}"*
* **Output Schema:**

```json theme={null}
{
  "type": "object",
  "properties": {
    "seo_title": { "type": "string", "description": "Max 60 characters" },
    "meta_description": {
      "type": "string",
      "description": "Max 155 characters"
    },
    "slug": { "type": "string", "description": "URL-safe slug" },
    "keywords": {
      "type": "array",
      "items": { "type": "string" },
      "description": "5-10 keywords"
    }
  }
}
```

**JSON Merge Node:**

* **Strategy:** Deep
* **Conflict Resolution:** Patch Wins

### Result

The original job object gains SEO fields (`seo_title`, `meta_description`, `slug`, `keywords`) while preserving all original data. Ready for search engine indexing.

***

## Schema Mapping

Use a Liquid node to remap job fields to match your database schema. No AI needed — this is a pure Liquid transformation that runs in sub-millisecond time.

### Flow

```mermaid theme={null}
graph LR
    A["🟢 Input<br/>Jobs Feed"] -->|Jobo schema| B["🔵 Liquid<br/>Remap Fields"]
    B -->|your schema| C["🔴 Output<br/>Your Database"]

    style A fill:#f0fdf4,stroke:#15803d,color:#15803d
    style B fill:#f0f9ff,stroke:#0369a1,color:#0369a1
    style C fill:#fef2f2,stroke:#dc2626,color:#dc2626
```

### Configuration

**Liquid Node** — remaps Jobo's schema to your internal database schema:

```liquid theme={null}
{
  "external_id": "{{ data.id }}",
  "job_title": "{{ data.title }}",
  "employer_name": "{{ data.company.name }}",
  "employer_logo": "{{ data.company.logo }}",
  "employer_url": "{{ data.company.url }}",
  "city": "{{ data.location.city }}",
  "state": "{{ data.location.state }}",
  "country": "{{ data.location.country }}",
  "remote_allowed": {{ data.is_remote }},
  "description_html": "{{ data.description | json_escape }}",
  "apply_link": "{{ data.apply_url }}",
  "date_posted": "{{ data.published_at | date: '%Y-%m-%d' }}",
  "slug": "{{ data.title | slugify }}-{{ data.company.name | slugify }}-{{ data.id | slice: 0, 8 }}",
  "tags": [{% for tag in data.tags %}"{{ tag }}"{% unless forloop.last %}, {% endunless %}{% endfor %}]
}
```

### Result

Each job is remapped from Jobo's standard schema to your custom database schema. Because this uses only Liquid (no AI), it runs in **under 1 millisecond** per job and produces **100% deterministic** results.

<Tip>
  Schema mapping is the simplest pipeline pattern and a great starting point. If
  you only need to rename fields and format dates, you don't need AI at all.
</Tip>

***

## When to Use Each Pattern

| Use Case                               | Pattern                     | Nodes Used               | Latency         |
| -------------------------------------- | --------------------------- | ------------------------ | --------------- |
| Field renaming / reformatting          | Schema Mapping              | Liquid only              | \< 1ms          |
| AI enrichment (skills, classification) | Branch & Merge              | AI + JSON Merge          | 1–5s            |
| SEO generation with context prep       | Prepare → Transform → Merge | Liquid + AI + JSON Merge | 1–5s            |
| Multi-field extraction                 | Parallel AI                 | Multiple AI + JSON Merge | 1–5s (parallel) |
