🎯

elegant-reports

🎯Skill

from jdrhyne/agent-skills

VibeIndex|
What it does

Generates minimalist, Nordic-inspired PDF reports with customizable templates and themes using a clean, functional design approach.

πŸ“¦

Part of

jdrhyne/agent-skills(14 items)

elegant-reports

Installation

Node.jsRun Node.js server
node generate.js report.md output.pdf --template report
Node.jsRun Node.js server
node generate.js data.md slides.pdf --template presentation
Node.jsRun Node.js server
node generate.js report.md --template report --theme dark
Node.jsRun Node.js server
node generate.js --list
Node.jsRun Node.js server
node generate.js test.md output.pdf --template my-template --output-html
πŸ“– Extracted from docs: jdrhyne/agent-skills
1Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Generate beautifully designed PDF reports with Nordic/Scandinavian aesthetic. Uses Nutrient DWS API for HTML-to-PDF conversion.

Overview

# elegant-reports

Generate minimalist, elegant PDF reports inspired by Scandinavian design principles.

Quick Start

```bash

cd ~/clawd-nuri-internal/skills/elegant-reports

# Generate a report (dense layout)

node generate.js report.md output.pdf --template report

# Generate a presentation (bold slides)

node generate.js data.md slides.pdf --template presentation

# Dark mode

node generate.js report.md --template report --theme dark

# List templates

node generate.js --list

```

Templates

| Template | Style | Use Case |

|----------|-------|----------|

| report | Dense, multi-column | Deep dives, analysis, competitive intel |

| presentation | Big & bold, one idea/page | Exec briefings, board decks |

Each template supports --theme light (default) or --theme dark.

Frontmatter

Add YAML frontmatter to control output:

```markdown

---

title: Q4 Competitive Analysis

subtitle: Market Intelligence Report

author: Nuri

template: report

theme: dark

---

Your content here...

```

Design Philosophy

Based on Nordic/Scandinavian design principles:

  • Bold typography β€” Poppins for headlines, Inter for body
  • High contrast β€” Dark headers, clear hierarchy
  • Generous whitespace β€” Content breathes
  • One accent color β€” Blue (#2563EB) used sparingly
  • Functional beauty β€” Form follows function

See NORDIC_DESIGN_RESEARCH.md for complete design documentation.

---

# Creating New Templates

The Visual Iteration Workflow

This is how to create new templates with visual feedback:

Step 1: Research References

```bash

# Use browser tool to study design examples

browser navigate https://www.canva.com/templates/...

browser screenshot

# Look for:

# - Typography choices (font, size, weight)

# - Color palette (backgrounds, text, accents)

# - Layout patterns (grids, spacing)

# - Component styles (cards, tables, callouts)

```

Step 2: Create Theme CSS

Create a new CSS file in themes/:

```css

/ themes/my-theme.css /

@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@600;700;800&family=Inter:wght@400;500&display=swap');

:root {

/ Color tokens /

--color-bg: #FAFAFA;

--color-surface: #FFFFFF;

--color-text-primary: #0A0A0A;

--color-text-secondary: #404040;

--color-accent: #2563EB;

/ Typography tokens /

--font-display: 'Poppins', sans-serif;

--font-body: 'Inter', sans-serif;

/ Spacing tokens /

--space-4: 1rem;

--space-6: 1.5rem;

--space-8: 2rem;

}

/ Component styles... /

```

Step 3: Create Template HTML

Create HTML in templates/:

```html

{{title}}

{{title}}

{{subtitle}}

{{content}}

```

Available variables: {{title}}, {{subtitle}}, {{author}}, {{date}}, {{content}}, {{styles}}

Step 4: Test with Visual Feedback

```bash

# Generate test HTML manually

node -e "

const fs = require('fs');

const css = fs.readFileSync('themes/my-theme.css', 'utf8');

let html = fs.readFileSync('templates/my-template.html', 'utf8');

html = html.replace('{{styles}}', css);

html = html.replace(/\{\{title\}\}/g, 'Test Title');

html = html.replace(/\{\{subtitle\}\}/g, 'Test Subtitle');

html = html.replace(/\{\{date\}\}/g, 'January 2026');

html = html.replace(/\{\{author\}\}/g, 'Nuri');

html = html.replace(/\{\{content\}\}/g, '

Test content

');

fs.writeFileSync('test-output.html', html);

"

# Preview in browser

browser navigate file://$(pwd)/test-output.html

browser screenshot

# See what's wrong, fix it, repeat

```

Step 5: Register in Generator

Add to TEMPLATES object in generate.js:

```javascript

const TEMPLATES = {

// ...existing templates...

'my-template': {

description: 'My custom template description',

template: 'my-template.html',

themes: {

light: 'my-theme.css',

dark: 'my-theme-dark.css'

}

}

};

```

Step 6: Test PDF Generation

```bash

node generate.js test.md output.pdf --template my-template --output-html

```

---

Design Tokens Reference

Typography Scale

| Token | Size | Use |

|-------|------|-----|

| --text-xs | 11-12px | Labels, captions |

| --text-sm | 13-14px | Body (dense) |

| --text-base | 14-16px | Body (normal) |

| --text-lg | 16-18px | Lead paragraphs |

| --text-xl | 18-20px | Section headers |

| --text-2xl | 20-24px | H3 |

| --text-3xl | 24-32px | H2 |

| --text-4xl | 32-40px | H1 (report) |

| --text-5xl | 48-56px | H1 (presentation) |

| --text-6xl | 64-72px | Hero text |

Spacing Scale

| Token | Size | Use |

|-------|------|-----|

| --space-1 | 2-4px | Tight gaps |

| --space-2 | 4-8px | Inline spacing |

| --space-3 | 8-12px | Component padding |

| --space-4 | 12-16px | Card padding |

| --space-6 | 20-24px | Section gaps |

| --space-8 | 28-32px | Major sections |

| --space-10 | 36-40px | Page sections |

| --space-12 | 44-48px | Page margins |

Color Palette

Light Mode:

```css

--color-bg: #FAFAFA;

--color-surface: #FFFFFF;

--color-text-primary: #0A0A0A;

--color-text-secondary: #404040;

--color-text-muted: #737373;

--color-accent: #2563EB;

```

Dark Mode:

```css

--color-bg: #09090B;

--color-surface: #18181B;

--color-text-primary: #FAFAFA;

--color-text-secondary: #D4D4D8;

--color-text-muted: #A1A1AA;

--color-accent: #3B82F6;

```

---

Component Patterns

KPI Strip (horizontal metrics)

```html

$10.8M

Revenue

+12%

```

Key Findings Box

```html

Key Points

  • Point 1 β€” Details
  • Point 2 β€” Details

```

Two-Column Layout

```html

Left column content

Right column content

```

Callouts

```html

Tip

Content here

```

Types: callout-tip (green), callout-warning (amber), callout-danger (red)

Tables with Dark Headers

```html

HeaderValue
Row123

```

---

Page Break Control

Add these classes to prevent awkward breaks:

```html

This won't split across pages

Forces new page before this

```

Tables, cards, callouts, and KPI strips have page-break-inside: avoid by default.

---

Files Structure

```

elegant-reports/

β”œβ”€β”€ SKILL.md # This file

β”œβ”€β”€ NORDIC_DESIGN_RESEARCH.md # Design principles documentation

β”œβ”€β”€ generate.js # Main generator script

β”œβ”€β”€ package.json

β”œβ”€β”€ themes/

β”‚ β”œβ”€β”€ nordic-v2.css # Presentation light

β”‚ β”œβ”€β”€ nordic-report.css # Report light

β”‚ └── nordic-report-dark.css # Report dark

β”œβ”€β”€ templates/

β”‚ β”œβ”€β”€ executive-v2.html # Presentation template

β”‚ └── report-v2.html # Report template

└── examples/

└── sample-executive.md # Example input

```

---

Dependencies

  • Node.js 18+
  • axios, form-data (npm install)
  • Nutrient DWS API key (configured in mcporter or NUTRIENT_DWS_API_KEY env var)

API Usage

```javascript

const { generateReport } = require('./generate.js');

await generateReport({

input: 'report.md',

output: 'report.pdf',

template: 'report',

theme: 'dark',

title: 'My Report',

author: 'Nuri'

});

```

More from this repository10

🎯
google-ads🎯Skill

Queries, audits, and optimizes Google Ads campaigns via API or browser automation to improve ad performance and reduce wasted spend.

🎯
salesforce🎯Skill

Queries and manages Salesforce organizations, enabling precise data retrieval and business logic integration via CLI or MCP server.

🎯
nudocs🎯Skill

Uploads documents to Nudocs.ai for collaborative editing, generates shareable links, and retrieves edited content with flexible format options.

🎯
parallel-task🎯Skill

I apologize, but I cannot generate a description without seeing the actual code or context of the "parallel-task" skill from the repository. Could you provide more details about what the skill does...

🎯
task-orchestrator🎯Skill

Orchestrates multi-agent software development tasks across parallel tmux sessions with intelligent dependency tracking and self-healing monitoring.

🎯
context-recovery🎯Skill

Recovers and reconstructs conversation context from fragmented or incomplete interaction histories to maintain conversational coherence.

🎯
zendesk🎯Skill

Retrieves and searches Zendesk support tickets, organizations, and user data through API calls for comprehensive customer support insights.

🎯
jira🎯Skill

I apologize, but I cannot generate a description without seeing the actual Jira skill code or details. Could you provide the code or specifics about the Jira skill from the repository so I can craf...

🎯
sysadmin-toolbox🎯Skill

Discovers and recommends CLI tools and shell one-liners for sysadmins, DevOps, and security professionals across network, system, log, and container troubleshooting tasks.

🎯
planner🎯Skill

Breaks down complex projects into structured, atomic tasks with clear dependencies, enabling systematic and parallel execution across multiple sprints.