Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

mdyaml2html

A Rust CLI compiler that transforms hybrid Markdown files (prose + fenced YAML component blocks) into self-contained, styled HTML files.

This is a fork of ThariqS/html-effectiveness. The output_goal/ directory contains the original baseline files (20 pre-created HTML documents that are used as the goal of how the component renders should look like).

Desktop Application

If you want visualize files in this format without generating an HTML and without opening the terminal, check YAML Markdown Viewer.

Installation

Requires Rust. Clone the repo and build:

cargo build --release

The binary will be at target/release/mdyaml2html.

Usage

mdyaml2html --input <INPUT.md> --output <OUTPUT.html># or short form:
mdyaml2html -i <INPUT.md> -o <OUTPUT.html>

Input format

A hybrid Markdown file with YAML frontmatter and fenced YAML component blocks:

---title: My Documentlayout: widetheme: clay-slate---# Section Heading
Regular prose goes here.
```yamltype: noticevariant: warningcontent: | <strong>Heads up:</strong> This is a callout.``````yamltype: cardtitle: Feature Cardelevation: 2content: Card body text.children:
- type: noticevariant: infocontent: Nested inside the card.```

The compiler produces a single .html file with all CSS and JavaScript inlined — no external asset references.

Supported components

ComponentDescription
noticeCallout / alert box with variant styling
cardAtomic boxed container with children nesting
data-gridRich HTML table
timelineSequential milestones or event steps
board-layoutKanban, grid, or slides layout
code-panelTabbed code snippet display with diff support
code-mapSpatial code-flow diagram: grouped, syntax-highlighted code cards connected by arrows
svg-canvasDeclarative SVG wrapper
prompt-boxMonospace content box
triage-boardPlanning board
flowchartFlowchart diagram
module-mapModule dependency map

Frontmatter

FieldValuesDefault
titleAny string
layoutreading-column, wide, canvasreading-column
themeTheme name (e.g. clay-slate)

YAML Components Skill

This project includes an OpenCode skill for AI coding assistants. To install it:

  1. Copy .opencode/skills/yaml-components/ into your project's .opencode/skills/ directory.
  2. The skill activates automatically when writing, editing, or debugging YAML component blocks in hybrid Markdown files.

The skill provides:

  • Full syntax reference for all 12 component primitives
  • Frontmatter configuration guide
  • Children nesting rules
  • Common compilation errors and their causes
  • File checklist for adding new components

Development

cargo test# Run all tests (integration + snapshot)
cargo build # Debug build
cargo run -- -i input.md -o output.html

Adding a new component

  1. src/models/components/<name>.rs — Data struct + ComponentStrategy impl
  2. src/models/components/mod.rs — Re-export
  3. src/models/ui_component.rs — Enum variant + match arm
  4. templates/components/<name>.html — MiniJinja template
  5. assets/css/<name>.css — Styles (add JS if needed)
  6. src/renderer.rs — Template registration
  7. src/assets.rs — Asset path registration
  8. tests/fixtures/<name>.md — Example fixture
  9. tests/integration_test.rs — Integration test

About

My goal was to create scripts to generate these kind of files with less tokens (but I ended using Rust)

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages