feat: add visual-first SVG marketing assets and update README

Add 4 new SVG assets (layers, commands, stats, workflow) with drawn
icons, block art, and dark GitHub theme. Enhance banner and before-after
with visual redesigns. Update README to reference layers.svg and stats.svg.
This commit is contained in:
MinaSaad1 2026-04-03 11:49:23 +02:00
parent f3db52c13d
commit fd3b33bcc0
7 changed files with 748 additions and 91 deletions

View file

@ -34,7 +34,11 @@
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/dual-layer.svg" alt="Two layers, one CLI" width="850"/>
<img src="https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/layers.svg" alt="Dual-Layer Architecture" width="850"/>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/stats.svg" alt="pbi-cli at a Glance" width="850"/>
</p>
---

View file

@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="850" height="265" viewBox="0 0 850 265">
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="265" viewBox="40 0 720 265">
<defs>
<linearGradient id="pbi-bar1" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#EBBB14"/>
@ -14,32 +14,32 @@
</linearGradient>
</defs>
<rect width="100%" height="100%" fill="#0d1117" rx="8"/>
<rect x="40" y="0" width="720" height="265" fill="#0d1117" rx="8"/>
<!-- "VIBE BI" block art (shadow) -->
<text font-family="'Courier New', Courier, monospace" font-size="9" fill="#7A6508" xml:space="preserve">
<tspan x="213" y="22">██╗ ██╗ ██╗ ██████╗ ███████╗ ██████╗ ██╗</tspan>
<tspan x="213" y="33">██║ ██║ ██║ ██╔══██╗ ██╔════╝ ██╔══██╗ ██║</tspan>
<tspan x="213" y="44">██║ ██║ ██║ ██████╔╝ █████╗ ██████╔╝ ██║</tspan>
<tspan x="213" y="55">╚██╗ ██╔╝ ██║ ██╔══██╗ ██╔══╝ ██╔══██╗ ██║</tspan>
<tspan x="213" y="66"> ╚████╔╝ ██║ ██████╔╝ ███████╗ ██████╔╝ ██║</tspan>
<tspan x="213" y="77"> ╚═══╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝</tspan>
<tspan x="271" y="22">██╗ ██╗ ██╗ ██████╗ ███████╗ ██████╗ ██╗</tspan>
<tspan x="271" y="33">██║ ██║ ██║ ██╔══██╗ ██╔════╝ ██╔══██╗ ██║</tspan>
<tspan x="271" y="44">██║ ██║ ██║ ██████╔╝ █████╗ ██████╔╝ ██║</tspan>
<tspan x="271" y="55">╚██╗ ██╔╝ ██║ ██╔══██╗ ██╔══╝ ██╔══██╗ ██║</tspan>
<tspan x="271" y="66"> ╚████╔╝ ██║ ██████╔╝ ███████╗ ██████╔╝ ██║</tspan>
<tspan x="271" y="77"> ╚═══╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝</tspan>
</text>
<!-- "VIBE BI" block art (main) -->
<text font-family="'Courier New', Courier, monospace" font-size="9" fill="#F2C811" xml:space="preserve">
<tspan x="212" y="21">██╗ ██╗ ██╗ ██████╗ ███████╗ ██████╗ ██╗</tspan>
<tspan x="212" y="32">██║ ██║ ██║ ██╔══██╗ ██╔════╝ ██╔══██╗ ██║</tspan>
<tspan x="212" y="43">██║ ██║ ██║ ██████╔╝ █████╗ ██████╔╝ ██║</tspan>
<tspan x="212" y="54">╚██╗ ██╔╝ ██║ ██╔══██╗ ██╔══╝ ██╔══██╗ ██║</tspan>
<tspan x="212" y="65"> ╚████╔╝ ██║ ██████╔╝ ███████╗ ██████╔╝ ██║</tspan>
<tspan x="212" y="76"> ╚═══╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝</tspan>
<tspan x="270" y="21">██╗ ██╗ ██╗ ██████╗ ███████╗ ██████╗ ██╗</tspan>
<tspan x="270" y="32">██║ ██║ ██║ ██╔══██╗ ██╔════╝ ██╔══██╗ ██║</tspan>
<tspan x="270" y="43">██║ ██║ ██║ ██████╔╝ █████╗ ██████╔╝ ██║</tspan>
<tspan x="270" y="54">╚██╗ ██╔╝ ██║ ██╔══██╗ ██╔══╝ ██╔══██╗ ██║</tspan>
<tspan x="270" y="65"> ╚████╔╝ ██║ ██████╔╝ ███████╗ ██████╔╝ ██║</tspan>
<tspan x="270" y="76"> ╚═══╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝</tspan>
</text>
<!-- Separator -->
<line x1="100" y1="87" x2="750" y2="87" stroke="#F2C811" stroke-opacity="0.15" stroke-width="1"/>
<line x1="50" y1="87" x2="750" y2="87" stroke="#F2C811" stroke-opacity="0.15" stroke-width="1"/>
<!-- Tagline -->
<text x="425" y="106" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#e6edf3" text-anchor="middle" font-weight="600">The First CLI for Both Power BI Modeling and Reporting</text>
<text x="400" y="106" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#e6edf3" text-anchor="middle" font-weight="600">The First CLI for Both Power BI Modeling and Reporting</text>
<!-- Layout: Claude ~ arrow ~ PBI-CLI block art ~ arrow ~ PowerBI -->
@ -47,33 +47,33 @@
<g transform="translate(75, 125) scale(0.04)">
<path fill="#d97757" d="M 233.959793 800.214905 L 468.644287 668.536987 L 472.590637 657.100647 L 468.644287 650.738403 L 457.208069 650.738403 L 417.986633 648.322144 L 283.892639 644.69812 L 167.597321 639.865845 L 54.926208 633.825623 L 26.577238 627.785339 L 3.3e-05 592.751709 L 2.73832 575.27533 L 26.577238 559.248352 L 60.724873 562.228149 L 136.187973 567.382629 L 249.422867 575.194763 L 331.570496 580.026978 L 453.261841 592.671082 L 472.590637 592.671082 L 475.328857 584.859009 L 468.724915 580.026978 L 463.570557 575.194763 L 346.389313 495.785217 L 219.543671 411.865906 L 153.100723 363.543762 L 117.181267 339.060425 L 99.060455 316.107361 L 91.248367 266.01355 L 123.865784 230.093994 L 167.677887 233.073853 L 178.872513 236.053772 L 223.248367 270.201477 L 318.040283 343.570496 L 441.825592 434.738342 L 459.946411 449.798706 L 467.194672 444.64447 L 468.080597 441.020203 L 459.946411 427.409485 L 392.617493 305.718323 L 320.778564 181.932983 L 288.80542 130.630859 L 280.348999 99.865845 C 277.369171 87.221436 275.194641 76.590698 275.194641 63.624268 L 312.322174 13.20813 L 332.8591 6.604126 L 382.389313 13.20813 L 403.248352 31.328979 L 434.013519 101.71814 L 483.865753 212.537048 L 561.181274 363.221497 L 583.812134 407.919434 L 595.892639 449.315491 L 600.40271 461.959839 L 608.214783 461.959839 L 608.214783 454.711609 L 614.577271 369.825623 L 626.335632 265.61084 L 637.771851 131.516846 L 641.718201 93.745117 L 660.402832 48.483276 L 697.530334 24.000122 L 726.52356 37.852417 L 750.362549 72 L 747.060486 94.067139 L 732.886047 186.201416 L 705.100708 330.52356 L 686.979919 427.167847 L 697.530334 427.167847 L 709.61084 415.087341 L 758.496704 350.174561 L 840.644348 247.490051 L 876.885925 206.738342 L 919.167847 161.71814 L 946.308838 140.29541 L 997.61084 140.29541 L 1035.38269 196.429626 L 1018.469849 254.416199 L 965.637634 321.422852 L 921.825562 378.201538 L 859.006714 462.765259 L 819.785278 530.41626 L 823.409424 535.812073 L 832.75177 534.92627 L 974.657776 504.724915 L 1051.328979 490.872559 L 1142.818848 475.167786 L 1184.214844 494.496582 L 1188.724854 514.147644 L 1172.456421 554.335693 L 1074.604126 578.496765 L 959.838989 601.449829 L 788.939636 641.879272 L 786.845764 643.409485 L 789.261841 646.389343 L 866.255127 653.637634 L 899.194702 655.409424 L 979.812134 655.409424 L 1129.932861 666.604187 L 1169.154419 692.537109 L 1192.671265 724.268677 L 1188.724854 748.429688 L 1128.322144 779.194641 L 1046.818848 759.865845 L 856.590759 714.604126 L 791.355774 698.335754 L 782.335693 698.335754 L 782.335693 703.731567 L 836.69812 756.885986 L 936.322205 846.845581 L 1061.073975 962.81897 L 1067.436279 991.490112 L 1051.409424 1014.120911 L 1034.496704 1011.704712 L 924.885986 929.234924 L 882.604126 892.107544 L 786.845764 811.48999 L 780.483276 811.48999 L 780.483276 819.946289 L 802.550415 852.241699 L 919.087341 1027.409424 L 925.127625 1081.127686 L 916.671204 1098.604126 L 886.469849 1109.154419 L 853.288696 1103.114136 L 785.073914 1007.355835 L 714.684631 899.516785 L 657.906067 802.872498 L 650.979858 806.81897 L 617.476624 1167.704834 L 601.771851 1186.147705 L 565.530212 1200 L 535.328857 1177.046997 L 519.302124 1139.919556 L 535.328857 1066.550537 L 554.657776 970.792053 L 570.362488 894.68457 L 584.536926 800.134277 L 592.993347 768.724976 L 592.429626 766.630859 L 585.503479 767.516968 L 514.22821 865.369263 L 405.825531 1011.865906 L 320.053711 1103.677979 L 299.516815 1111.812256 L 263.919525 1093.369263 L 267.221497 1060.429688 L 287.114136 1031.114136 L 405.825531 880.107361 L 477.422913 786.52356 L 523.651062 732.483276 L 523.328918 724.671265 L 520.590698 724.671265 L 205.288605 929.395935 L 149.154434 936.644409 L 124.993355 914.01355 L 127.973183 876.885986 L 139.409409 864.80542 L 234.201385 799.570435 L 233.879227 799.8927 Z"/>
</g>
<text x="100" y="180" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#d97757" text-anchor="middle" font-weight="600">Claude Code</text>
<text x="100" y="192" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#d97757" text-anchor="middle" font-weight="600">Claude Code</text>
<!-- Left arrow -->
<line x1="148" y1="155" x2="230" y2="155" stroke="#F2C811" stroke-width="2" stroke-dasharray="6,4" stroke-opacity="0.5"/>
<polygon points="234,155 226,150 226,160" fill="#F2C811" fill-opacity="0.5"/>
<line x1="148" y1="155" x2="253" y2="155" stroke="#F2C811" stroke-width="2" stroke-dasharray="6,4" stroke-opacity="0.5"/>
<polygon points="257,155 249,150 249,160" fill="#F2C811" fill-opacity="0.5"/>
<!-- PBI-CLI block art as the center element (shadow) -->
<text font-family="'Courier New', Courier, monospace" font-size="8" fill="#7A6508" xml:space="preserve">
<tspan x="306" y="133">██████╗ ██████╗ ██╗ ██████╗ ██╗ ██╗</tspan>
<tspan x="306" y="145">██╔══██╗ ██╔══██╗ ██║ ██╔════╝ ██║ ██║</tspan>
<tspan x="306" y="157">██████╔╝ ██████╔╝ ██║ ███╗ ██║ ██║ ██║</tspan>
<tspan x="306" y="169">██╔═══╝ ██╔══██╗ ██║ ╚══╝ ██║ ██║ ██║</tspan>
<tspan x="306" y="181">██║ ██████╔╝ ██║ ╚██████╗ ███████╗ ██║</tspan>
<tspan x="306" y="193">╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝</tspan>
<tspan x="276" y="133">██████╗ ██████╗ ██╗ ██████╗ ██╗ ██╗</tspan>
<tspan x="276" y="145">██╔══██╗ ██╔══██╗ ██║ ██╔════╝ ██║ ██║</tspan>
<tspan x="276" y="157">██████╔╝ ██████╔╝ ██║ ███╗ ██║ ██║ ██║</tspan>
<tspan x="276" y="169">██╔═══╝ ██╔══██╗ ██║ ╚══╝ ██║ ██║ ██║</tspan>
<tspan x="276" y="181">██║ ██████╔╝ ██║ ╚██████╗ ███████╗ ██║</tspan>
<tspan x="276" y="193">╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝</tspan>
</text>
<!-- PBI-CLI block art as the center element (main) -->
<text font-family="'Courier New', Courier, monospace" font-size="8" fill="#F2C811" xml:space="preserve">
<tspan x="305" y="132">██████╗ ██████╗ ██╗ ██████╗ ██╗ ██╗</tspan>
<tspan x="305" y="144">██╔══██╗ ██╔══██╗ ██║ ██╔════╝ ██║ ██║</tspan>
<tspan x="305" y="156">██████╔╝ ██████╔╝ ██║ ███╗ ██║ ██║ ██║</tspan>
<tspan x="305" y="168">██╔═══╝ ██╔══██╗ ██║ ╚══╝ ██║ ██║ ██║</tspan>
<tspan x="305" y="180">██║ ██████╔╝ ██║ ╚██████╗ ███████╗ ██║</tspan>
<tspan x="305" y="192">╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝</tspan>
<tspan x="275" y="132">██████╗ ██████╗ ██╗ ██████╗ ██╗ ██╗</tspan>
<tspan x="275" y="144">██╔══██╗ ██╔══██╗ ██║ ██╔════╝ ██║ ██║</tspan>
<tspan x="275" y="156">██████╔╝ ██████╔╝ ██║ ███╗ ██║ ██║ ██║</tspan>
<tspan x="275" y="168">██╔═══╝ ██╔══██╗ ██║ ╚══╝ ██║ ██║ ██║</tspan>
<tspan x="275" y="180">██║ ██████╔╝ ██║ ╚██████╗ ███████╗ ██║</tspan>
<tspan x="275" y="192">╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝</tspan>
</text>
<!-- Right arrow -->
<line x1="558" y1="155" x2="640" y2="155" stroke="#F2C811" stroke-width="2" stroke-dasharray="6,4" stroke-opacity="0.5"/>
<line x1="533" y1="155" x2="640" y2="155" stroke="#F2C811" stroke-width="2" stroke-dasharray="6,4" stroke-opacity="0.5"/>
<polygon points="644,155 636,150 636,160" fill="#F2C811" fill-opacity="0.5"/>
<!-- Power BI logo (centered at x=700) -->
@ -85,12 +85,12 @@
<text x="700" y="208" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#F2C811" text-anchor="middle" font-weight="600">Power BI</text>
<!-- Modeling + Reporting pills below PBI-CLI -->
<rect x="345" y="205" width="100" height="22" rx="11" fill="#58a6ff" fill-opacity="0.1" stroke="#58a6ff" stroke-width="1"/>
<text x="395" y="220" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#58a6ff" text-anchor="middle" font-weight="600">Modeling</text>
<text x="458" y="220" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#8b949e" text-anchor="middle">+</text>
<rect x="470" y="205" width="100" height="22" rx="11" fill="#06d6a0" fill-opacity="0.1" stroke="#06d6a0" stroke-width="1"/>
<text x="520" y="220" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#06d6a0" text-anchor="middle" font-weight="600">Reporting</text>
<rect x="283" y="205" width="100" height="22" rx="11" fill="#58a6ff" fill-opacity="0.1" stroke="#58a6ff" stroke-width="1"/>
<text x="333" y="220" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#58a6ff" text-anchor="middle" font-weight="600">Modeling</text>
<text x="401" y="220" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#8b949e" text-anchor="middle">+</text>
<rect x="413" y="205" width="100" height="22" rx="11" fill="#06d6a0" fill-opacity="0.1" stroke="#06d6a0" stroke-width="1"/>
<text x="463" y="220" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#06d6a0" text-anchor="middle" font-weight="600">Reporting</text>
<!-- Install command -->
<text x="425" y="252" font-family="'Courier New', Courier, monospace" font-size="14" fill="#58a6ff" text-anchor="middle" font-weight="bold">pipx install pbi-cli-tool</text>
<text x="400" y="252" font-family="'Courier New', Courier, monospace" font-size="14" fill="#58a6ff" text-anchor="middle" font-weight="bold">pipx install pbi-cli-tool</text>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1,64 +1,111 @@
<svg xmlns="http://www.w3.org/2000/svg" width="850" height="440" viewBox="0 0 850 440">
<svg xmlns="http://www.w3.org/2000/svg" width="850" height="345" viewBox="0 0 850 345" font-family="'Segoe UI', system-ui, sans-serif">
<!-- Background -->
<rect width="100%" height="100%" fill="#0d1117" rx="8"/>
<!-- Title -->
<text x="425" y="35" font-family="'Segoe UI', Arial, sans-serif" font-size="18" fill="#F2C811" text-anchor="middle" font-weight="bold">Why pbi-cli?</text>
<text x="425" y="36" font-size="19" fill="#F2C811" font-weight="bold" text-anchor="middle">Why pbi-cli?</text>
<!-- Left Panel: WITHOUT -->
<rect x="20" y="55" width="395" height="365" rx="8" fill="#161b22" stroke="#ff6b6b" stroke-width="2"/>
<text x="217" y="85" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#ff6b6b" text-anchor="middle" font-weight="bold">WITHOUT pbi-cli</text>
<!-- LEFT panel -->
<rect x="15" y="50" width="385" height="285" rx="10" fill="#160a0a" stroke="#ff4444" stroke-width="1.5"/>
<!-- Modeling pain points -->
<text x="50" y="112" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#58a6ff" font-weight="bold">MODELING</text>
<text x="50" y="135" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="135" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">Manual GUI clicking for every change</text>
<text x="50" y="162" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="162" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">No version control for models</text>
<text x="50" y="189" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="189" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">Copy-paste DAX from documentation</text>
<text x="50" y="216" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="216" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">MCP tools cost 4,000+ tokens each</text>
<!-- LEFT panel header (top-rounded only via path) -->
<path d="M 25,50 L 390,50 A 10,10 0 0,1 400,60 L 400,94 L 15,94 L 15,60 A 10,10 0 0,1 25,50 Z" fill="#ff4444" fill-opacity="0.15"/>
<text x="207" y="77" font-size="15" fill="#ff6b6b" font-weight="bold" text-anchor="middle">&#x2717;&#x2003;WITHOUT pbi-cli</text>
<!-- Report pain points -->
<text x="50" y="250" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#06d6a0" font-weight="bold">REPORTING</text>
<text x="50" y="273" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="273" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">Drag-and-drop visuals one at a time</text>
<text x="50" y="300" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="300" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">No bulk operations for page layouts</text>
<text x="50" y="327" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="327" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">Reports not scriptable or diffable</text>
<text x="50" y="354" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#ff6b6b">&#x2717;</text>
<text x="70" y="354" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#8b949e">AI can't create or modify visuals</text>
<!-- RIGHT panel -->
<rect x="450" y="50" width="385" height="285" rx="10" fill="#0a1612" stroke="#06d6a0" stroke-width="1.5"/>
<!-- Left footer -->
<text x="217" y="400" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#ff6b6b" text-anchor="middle" opacity="0.6">Slow, manual, error-prone</text>
<!-- RIGHT panel header (top-rounded only via path) -->
<path d="M 460,50 L 825,50 A 10,10 0 0,1 835,60 L 835,94 L 450,94 L 450,60 A 10,10 0 0,1 460,50 Z" fill="#06d6a0" fill-opacity="0.12"/>
<text x="642" y="77" font-size="15" fill="#06d6a0" font-weight="bold" text-anchor="middle">&#x2713;&#x2003;WITH pbi-cli</text>
<!-- Right Panel: WITH -->
<rect x="435" y="55" width="395" height="365" rx="8" fill="#161b22" stroke="#06d6a0" stroke-width="2"/>
<text x="632" y="85" font-family="'Segoe UI', Arial, sans-serif" font-size="15" fill="#06d6a0" text-anchor="middle" font-weight="bold">WITH pbi-cli</text>
<!-- LEFT token metric card -->
<rect x="35" y="102" width="345" height="76" rx="8" fill="#ff4444" fill-opacity="0.07" stroke="#ff4444" stroke-opacity="0.25" stroke-width="1"/>
<text x="207" y="149" font-size="44" fill="#ff4444" font-weight="bold" text-anchor="middle">4,000+</text>
<text x="207" y="168" font-size="10" fill="#8b949e" text-anchor="middle" letter-spacing="2">TOKENS PER OPERATION</text>
<!-- Modeling solutions -->
<text x="465" y="112" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#58a6ff" font-weight="bold">MODELING</text>
<text x="465" y="135" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="135" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">CLI commands from any terminal</text>
<text x="465" y="162" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="162" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">TMDL export + diff for full Git support</text>
<text x="465" y="189" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="189" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">Claude writes and validates DAX</text>
<text x="465" y="216" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="216" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">CLI commands cost ~30 tokens each</text>
<!-- RIGHT token metric card -->
<rect x="470" y="102" width="345" height="76" rx="8" fill="#06d6a0" fill-opacity="0.07" stroke="#06d6a0" stroke-opacity="0.25" stroke-width="1"/>
<text x="642" y="149" font-size="44" fill="#06d6a0" font-weight="bold" text-anchor="middle">~30</text>
<text x="642" y="168" font-size="10" fill="#8b949e" text-anchor="middle" letter-spacing="2">TOKENS PER OPERATION</text>
<!-- Report solutions -->
<text x="465" y="250" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#06d6a0" font-weight="bold">REPORTING</text>
<text x="465" y="273" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="273" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">32 visual types with data binding</text>
<text x="465" y="300" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="300" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">Bulk bind, update, delete across pages</text>
<text x="465" y="327" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="327" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">PBIR files diffable and Git-friendly</text>
<text x="465" y="354" font-family="'Segoe UI', Arial, sans-serif" font-size="14" fill="#06d6a0">&#x2713;</text>
<text x="485" y="354" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c9d1d9">Claude creates complete report layouts</text>
<!-- LEFT token comparison bar (full width = expensive) -->
<rect x="35" y="186" width="345" height="7" rx="3.5" fill="#ff4444" fill-opacity="0.6"/>
<!-- RIGHT token comparison bars -->
<rect x="470" y="186" width="345" height="7" rx="3.5" fill="#06d6a0" fill-opacity="0.1"/>
<rect x="470" y="186" width="26" height="7" rx="3.5" fill="#06d6a0" fill-opacity="0.8"/>
<!-- ======================== -->
<!-- LEFT feature rows -->
<!-- ======================== -->
<!-- Row 1 -->
<rect x="35" y="202" width="345" height="40" rx="6" fill="#ff4444" fill-opacity="0.05"/>
<g transform="translate(52,211)">
<rect x="0" y="0" width="24" height="20" rx="2" fill="none" stroke="#ff6b6b" stroke-width="1.5"/>
<line x1="0" y1="7" x2="24" y2="7" stroke="#ff6b6b" stroke-width="1.5"/>
<circle cx="4" cy="3.5" r="1.5" fill="#ff6b6b" opacity="0.7"/>
<circle cx="9" cy="3.5" r="1.5" fill="#ff6b6b" opacity="0.7"/>
<circle cx="14" cy="3.5" r="1.5" fill="#ff6b6b" opacity="0.7"/>
</g>
<text x="90" y="218" font-size="12" fill="#c9d1d9" font-weight="bold">GUI-only workflow</text>
<text x="90" y="234" font-size="10.5" fill="#8b949e">Click through every change manually</text>
<!-- Row 2 -->
<rect x="35" y="247" width="345" height="40" rx="6" fill="#ff4444" fill-opacity="0.05"/>
<g transform="translate(52,256)">
<circle cx="12" cy="11" r="11" fill="none" stroke="#ff6b6b" stroke-width="1.5"/>
<line x1="3.2" y1="3.2" x2="20.8" y2="18.8" stroke="#ff6b6b" stroke-width="1.5"/>
</g>
<text x="90" y="263" font-size="12" fill="#c9d1d9" font-weight="bold">No version control</text>
<text x="90" y="279" font-size="10.5" fill="#8b949e">Reports and models untrackable</text>
<!-- Row 3 -->
<rect x="35" y="292" width="345" height="40" rx="6" fill="#ff4444" fill-opacity="0.05"/>
<g transform="translate(52,301)">
<circle cx="12" cy="11" r="11" fill="none" stroke="#ff6b6b" stroke-width="1.5"/>
<line x1="3.2" y1="3.2" x2="20.8" y2="18.8" stroke="#ff6b6b" stroke-width="1.5"/>
</g>
<text x="90" y="308" font-size="12" fill="#c9d1d9" font-weight="bold">No AI automation</text>
<text x="90" y="324" font-size="10.5" fill="#8b949e">Cannot script or automate workflows</text>
<!-- ======================== -->
<!-- RIGHT feature rows -->
<!-- ======================== -->
<!-- Row 1 -->
<rect x="470" y="202" width="345" height="40" rx="6" fill="#06d6a0" fill-opacity="0.05"/>
<g transform="translate(487,211)">
<rect x="0" y="0" width="28" height="20" rx="3" fill="#06d6a0" fill-opacity="0.1" stroke="#06d6a0" stroke-width="1.5"/>
<text x="4" y="14" font-family="'Courier New', monospace" font-size="9" fill="#06d6a0">$ _</text>
</g>
<text x="528" y="218" font-size="12" fill="#c9d1d9" font-weight="bold">CLI-native commands</text>
<text x="528" y="234" font-size="10.5" fill="#8b949e">Automate from any terminal or script</text>
<!-- Row 2 -->
<rect x="470" y="247" width="345" height="40" rx="6" fill="#06d6a0" fill-opacity="0.05"/>
<g transform="translate(487,253)">
<circle cx="5" cy="5" r="4" fill="none" stroke="#06d6a0" stroke-width="1.5"/>
<circle cx="5" cy="23" r="4" fill="none" stroke="#06d6a0" stroke-width="1.5"/>
<circle cx="19" cy="10" r="4" fill="none" stroke="#06d6a0" stroke-width="1.5"/>
<line x1="5" y1="9" x2="5" y2="19" stroke="#06d6a0" stroke-width="1.5"/>
<path d="M 5,9 C 5,12 19,10 19,10" fill="none" stroke="#06d6a0" stroke-width="1.5"/>
</g>
<text x="528" y="263" font-size="12" fill="#c9d1d9" font-weight="bold">Full Git support</text>
<text x="528" y="279" font-size="10.5" fill="#8b949e">TMDL + PBIR diff, branch, review</text>
<!-- Row 3 -->
<rect x="470" y="292" width="345" height="40" rx="6" fill="#06d6a0" fill-opacity="0.05"/>
<g transform="translate(487,300)">
<path d="M 12,0 L 14,10 L 24,12 L 14,14 L 12,24 L 10,14 L 0,12 L 10,10 Z" fill="#06d6a0" fill-opacity="0.85"/>
</g>
<text x="528" y="308" font-size="12" fill="#c9d1d9" font-weight="bold">Claude AI builds everything</text>
<text x="528" y="324" font-size="10.5" fill="#8b949e">Models, measures, and report layouts</text>
<!-- VS badge (drawn last so it sits on top of both panels) -->
<circle cx="425" cy="215" r="28" fill="#0d1117" stroke="#F2C811" stroke-width="2"/>
<text x="425" y="221" font-size="15" fill="#F2C811" font-weight="bold" text-anchor="middle">VS</text>
<!-- Right footer -->
<text x="632" y="400" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#06d6a0" text-anchor="middle" opacity="0.6">Fast, scriptable, AI-native -- both layers</text>
</svg>

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

232
assets/commands.svg Normal file
View file

@ -0,0 +1,232 @@
<svg xmlns="http://www.w3.org/2000/svg" width="850" height="380" viewBox="0 0 850 380">
<!-- 1. BACKGROUND -->
<rect width="100%" height="100%" fill="#0d1117" rx="8"/>
<!-- 2. TERMINAL CHROME BAR -->
<rect x="0" y="0" width="850" height="46" rx="8" fill="#161b22"/>
<rect x="0" y="30" width="850" height="16" fill="#161b22"/>
<circle cx="28" cy="23" r="6" fill="#ff5f57"/>
<circle cx="48" cy="23" r="6" fill="#febc2e"/>
<circle cx="68" cy="23" r="6" fill="#28c840"/>
<text x="425" y="28" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681" text-anchor="middle">pbi-cli -- command showcase</text>
<!-- 3. VERTICAL COLUMN DIVIDER -->
<line x1="425" y1="46" x2="425" y2="295" stroke="#30363d" stroke-width="1"/>
<!-- 4. COLUMN HEADERS -->
<rect x="35" y="52" width="100" height="21" rx="10" fill="#58a6ff" fill-opacity="0.12" stroke="#58a6ff" stroke-width="1"/>
<text x="85" y="66" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#58a6ff" text-anchor="middle" font-weight="bold">MODELING</text>
<rect x="440" y="52" width="105" height="21" rx="10" fill="#06d6a0" fill-opacity="0.12" stroke="#06d6a0" stroke-width="1"/>
<text x="492" y="66" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#06d6a0" text-anchor="middle" font-weight="bold">REPORTING</text>
<!-- 5. ROW BACKGROUND HIGHLIGHTS -->
<rect x="0" y="84" width="425" height="33" fill="#58a6ff" fill-opacity="0.02"/>
<rect x="425" y="84" width="425" height="33" fill="#58a6ff" fill-opacity="0.02"/>
<rect x="0" y="154" width="425" height="33" fill="#58a6ff" fill-opacity="0.02"/>
<rect x="425" y="154" width="425" height="33" fill="#58a6ff" fill-opacity="0.02"/>
<rect x="0" y="224" width="425" height="33" fill="#58a6ff" fill-opacity="0.02"/>
<rect x="425" y="224" width="425" height="33" fill="#58a6ff" fill-opacity="0.02"/>
<!-- ===== LEFT COLUMN COMMANDS ===== -->
<!-- Row 1 y=102: model export -->
<text x="38" y="102" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="50" y="102" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="98" y="102" font-family="'Courier New', Courier, monospace" font-size="12" fill="#a5d6ff"> model export</text>
<!-- Row 2 y=137: dax run -->
<text x="38" y="137" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="50" y="137" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="98" y="137" font-family="'Courier New', Courier, monospace" font-size="12" fill="#a5d6ff"> dax run</text>
<!-- Row 3 y=172: dax add-measure -->
<text x="38" y="172" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="50" y="172" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="98" y="172" font-family="'Courier New', Courier, monospace" font-size="12" fill="#a5d6ff"> dax add-measure</text>
<!-- Row 4 y=207: table list -->
<text x="38" y="207" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="50" y="207" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="98" y="207" font-family="'Courier New', Courier, monospace" font-size="12" fill="#a5d6ff"> table list</text>
<!-- Row 5 y=242: relationship list -->
<text x="38" y="242" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="50" y="242" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="98" y="242" font-family="'Courier New', Courier, monospace" font-size="12" fill="#a5d6ff"> relationship list</text>
<!-- Row 6 y=277: model import -->
<text x="38" y="277" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="50" y="277" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="98" y="277" font-family="'Courier New', Courier, monospace" font-size="12" fill="#a5d6ff"> model import</text>
<!-- ===== RIGHT COLUMN COMMANDS ===== -->
<!-- Row 1 y=102: report add-visual -->
<text x="443" y="102" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="455" y="102" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="503" y="102" font-family="'Courier New', Courier, monospace" font-size="12" fill="#7ee787"> report add-visual</text>
<!-- Row 2 y=137: report bind-data -->
<text x="443" y="137" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="455" y="137" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="503" y="137" font-family="'Courier New', Courier, monospace" font-size="12" fill="#7ee787"> report bind-data</text>
<!-- Row 3 y=172: report add-page -->
<text x="443" y="172" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="455" y="172" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="503" y="172" font-family="'Courier New', Courier, monospace" font-size="12" fill="#7ee787"> report add-page</text>
<!-- Row 4 y=207: report list-visuals -->
<text x="443" y="207" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="455" y="207" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="503" y="207" font-family="'Courier New', Courier, monospace" font-size="12" fill="#7ee787"> report list-visuals</text>
<!-- Row 5 y=242: report update-theme -->
<text x="443" y="242" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="455" y="242" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="503" y="242" font-family="'Courier New', Courier, monospace" font-size="12" fill="#7ee787"> report update-theme</text>
<!-- Row 6 y=277: report export -->
<text x="443" y="277" font-family="'Courier New', Courier, monospace" font-size="12" fill="#6e7681">$</text>
<text x="455" y="277" font-family="'Courier New', Courier, monospace" font-size="12" fill="#F2C811">pbi-cli</text>
<text x="503" y="277" font-family="'Courier New', Courier, monospace" font-size="12" fill="#7ee787"> report export</text>
<!-- ===== LEFT COLUMN VISUAL ICONS (replacing text badges) ===== -->
<!-- Row 1: model export → file with up-arrow (TMDL export) -->
<g transform="translate(373, 91)">
<rect x="0" y="2" width="16" height="14" rx="1.5" fill="#58a6ff" fill-opacity="0.12" stroke="#58a6ff" stroke-width="1"/>
<line x1="8" y1="11" x2="8" y2="5" stroke="#58a6ff" stroke-width="1.5" stroke-linecap="round"/>
<polygon points="8,3 5,7 11,7" fill="#58a6ff"/>
<line x1="3" y1="13" x2="13" y2="13" stroke="#58a6ff" stroke-width="1" opacity="0.5"/>
</g>
<!-- Row 2: dax run → play triangle (DAX execute) -->
<g transform="translate(375, 126)">
<circle cx="8" cy="8" r="8" fill="#F2C811" fill-opacity="0.12" stroke="#F2C811" stroke-width="1"/>
<polygon points="5,4 5,12 13,8" fill="#F2C811" fill-opacity="0.9"/>
</g>
<!-- Row 3: dax add-measure → sparkle / AI star -->
<g transform="translate(377, 161)">
<path d="M8,0 L9.5,6 L16,8 L9.5,10 L8,16 L6.5,10 L0,8 L6.5,6 Z" fill="#c084fc" fill-opacity="0.85"/>
</g>
<!-- Row 4: table list → rows/grid icon -->
<g transform="translate(373, 196)">
<rect x="0" y="0" width="16" height="3" rx="1" fill="#8b949e" fill-opacity="0.8"/>
<rect x="0" y="5" width="16" height="3" rx="1" fill="#8b949e" fill-opacity="0.6"/>
<rect x="0" y="10" width="16" height="3" rx="1" fill="#8b949e" fill-opacity="0.4"/>
<rect x="0" y="15" width="16" height="3" rx="1" fill="#8b949e" fill-opacity="0.25"/>
</g>
<!-- Row 5: relationship list → two nodes with edge -->
<g transform="translate(373, 231)">
<circle cx="4" cy="8" r="4" fill="none" stroke="#8b949e" stroke-width="1.5"/>
<circle cx="16" cy="4" r="4" fill="none" stroke="#8b949e" stroke-width="1.5"/>
<line x1="4" y1="4" x2="16" y2="4" stroke="#8b949e" stroke-width="1.5"/>
<circle cx="4" cy="4" r="1.5" fill="#8b949e"/>
<circle cx="16" cy="4" r="1.5" fill="#8b949e"/>
</g>
<!-- Row 6: model import → file with down-arrow -->
<g transform="translate(373, 266)">
<rect x="0" y="2" width="16" height="14" rx="1.5" fill="#58a6ff" fill-opacity="0.12" stroke="#58a6ff" stroke-width="1"/>
<line x1="8" y1="5" x2="8" y2="11" stroke="#58a6ff" stroke-width="1.5" stroke-linecap="round"/>
<polygon points="8,14 5,9 11,9" fill="#58a6ff"/>
<line x1="3" y1="13" x2="13" y2="13" stroke="#58a6ff" stroke-width="1" opacity="0.5"/>
</g>
<!-- ===== RIGHT COLUMN VISUAL ICONS (replacing text badges) ===== -->
<!-- Row 1: report add-visual → small bar chart in frame -->
<g transform="translate(796, 91)">
<rect x="0" y="0" width="20" height="16" rx="2" fill="none" stroke="#06d6a0" stroke-width="1"/>
<rect x="2" y="8" width="3" height="6" rx="0.5" fill="#06d6a0" fill-opacity="0.6"/>
<rect x="7" y="5" width="3" height="9" rx="0.5" fill="#06d6a0" fill-opacity="0.75"/>
<rect x="12" y="2" width="3" height="12" rx="0.5" fill="#06d6a0" fill-opacity="0.9"/>
<rect x="17" y="4" width="2" height="10" rx="0.5" fill="#06d6a0" fill-opacity="0.8"/>
</g>
<!-- Row 2: report bind-data → link chain -->
<g transform="translate(796, 126)">
<circle cx="5" cy="8" r="5" fill="none" stroke="#06d6a0" stroke-width="1.5"/>
<circle cx="15" cy="8" r="5" fill="none" stroke="#06d6a0" stroke-width="1.5"/>
<rect x="7" y="5" width="6" height="6" rx="2" fill="#06d6a0" fill-opacity="0.35" stroke="#06d6a0" stroke-width="1"/>
</g>
<!-- Row 3: report add-page → page with plus -->
<g transform="translate(796, 161)">
<rect x="0" y="0" width="14" height="18" rx="2" fill="none" stroke="#06d6a0" stroke-width="1.5"/>
<line x1="14" y1="8" x2="20" y2="8" stroke="#06d6a0" stroke-width="1.5" stroke-linecap="round"/>
<line x1="17" y1="5" x2="17" y2="11" stroke="#06d6a0" stroke-width="1.5" stroke-linecap="round"/>
<line x1="3" y1="6" x2="11" y2="6" stroke="#06d6a0" stroke-width="1" opacity="0.4"/>
<line x1="3" y1="9" x2="11" y2="9" stroke="#06d6a0" stroke-width="1" opacity="0.4"/>
<line x1="3" y1="12" x2="9" y2="12" stroke="#06d6a0" stroke-width="1" opacity="0.4"/>
</g>
<!-- Row 4: report list-visuals → eye / view icon -->
<g transform="translate(796, 196)">
<path d="M0,8 C3,2 17,2 20,8 C17,14 3,14 0,8 Z" fill="none" stroke="#8b949e" stroke-width="1.5"/>
<circle cx="10" cy="8" r="3.5" fill="none" stroke="#8b949e" stroke-width="1.5"/>
<circle cx="10" cy="8" r="1.5" fill="#8b949e" fill-opacity="0.7"/>
</g>
<!-- Row 5: report update-theme → palette circle with color dots -->
<g transform="translate(796, 230)">
<circle cx="10" cy="10" r="9" fill="none" stroke="#FF9500" stroke-width="1.5"/>
<circle cx="10" cy="12" r="3" fill="#0d1117" stroke="#FF9500" stroke-width="1"/>
<circle cx="5" cy="5" r="2.5" fill="#06d6a0" fill-opacity="0.9"/>
<circle cx="10" cy="2" r="2.5" fill="#F2C811" fill-opacity="0.9"/>
<circle cx="15" cy="5" r="2.5" fill="#58a6ff" fill-opacity="0.9"/>
<circle cx="17" cy="11" r="2.5" fill="#c084fc" fill-opacity="0.9"/>
</g>
<!-- Row 6: report export → box with up-arrow -->
<g transform="translate(796, 266)">
<rect x="0" y="6" width="20" height="12" rx="2" fill="none" stroke="#58a6ff" stroke-width="1.5"/>
<line x1="10" y1="12" x2="10" y2="2" stroke="#58a6ff" stroke-width="1.5" stroke-linecap="round"/>
<polygon points="10,0 6,5 14,5" fill="#58a6ff"/>
<line x1="4" y1="10" x2="4" y2="18" stroke="#58a6ff" stroke-width="1" opacity="0.3"/>
<line x1="16" y1="10" x2="16" y2="18" stroke="#58a6ff" stroke-width="1" opacity="0.3"/>
</g>
<!-- 7. HORIZONTAL SEPARATOR ABOVE FOOTER -->
<line x1="0" y1="295" x2="850" y2="295" stroke="#30363d" stroke-width="1"/>
<!-- 8. FOOTER BAR -->
<rect x="0" y="295" width="850" height="85" fill="#161b22"/>
<!-- Footer stat badges with visual icons -->
<!-- Badge 1: 30+ commands -->
<rect x="153" y="318" width="120" height="36" rx="14" fill="#58a6ff" fill-opacity="0.1" stroke="#58a6ff" stroke-width="1"/>
<!-- Terminal icon -->
<g transform="translate(163, 327)">
<rect x="0" y="0" width="16" height="12" rx="2" fill="#58a6ff" fill-opacity="0.15" stroke="#58a6ff" stroke-width="1"/>
<text x="2" y="9" font-family="'Courier New', monospace" font-size="7" fill="#58a6ff">$_</text>
</g>
<text x="225" y="338" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#58a6ff" text-anchor="middle" font-weight="bold">30+ commands</text>
<!-- Badge 2: Both layers with icon -->
<rect x="365" y="318" width="120" height="36" rx="14" fill="#F2C811" fill-opacity="0.1" stroke="#F2C811" stroke-width="1"/>
<!-- Stack icon -->
<g transform="translate(375, 327)">
<rect x="0" y="0" width="16" height="4" rx="1" fill="#58a6ff" fill-opacity="0.7"/>
<rect x="0" y="6" width="16" height="4" rx="1" fill="#06d6a0" fill-opacity="0.7"/>
</g>
<text x="425" y="338" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#F2C811" text-anchor="middle" font-weight="bold">Both layers</text>
<!-- Badge 3: AI-native with sparkle icon -->
<rect x="577" y="318" width="120" height="36" rx="14" fill="#c084fc" fill-opacity="0.1" stroke="#c084fc" stroke-width="1"/>
<!-- Sparkle icon -->
<g transform="translate(584, 326)">
<path d="M6,0 L7.2,4.8 L12,6 L7.2,7.2 L6,12 L4.8,7.2 L0,6 L4.8,4.8 Z" fill="#c084fc" fill-opacity="0.85"/>
</g>
<text x="637" y="338" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#c084fc" text-anchor="middle" font-weight="bold">AI-native</text>
<!-- Footer subtext -->
<text x="425" y="368" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#6e7681" text-anchor="middle">pipx install pbi-cli-tool</text>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

159
assets/layers.svg Normal file
View file

@ -0,0 +1,159 @@
<svg xmlns="http://www.w3.org/2000/svg" width="850" height="440" viewBox="0 0 850 440">
<rect width="100%" height="100%" fill="#0d1117" rx="8"/>
<!-- Title -->
<text x="425" y="32" font-family="'Segoe UI', Arial, sans-serif" font-size="16" fill="#F2C811" text-anchor="middle" font-weight="bold">Dual-Layer Architecture</text>
<!-- ===== MODELING BAND y=48-188 ===== -->
<rect x="15" y="48" width="820" height="140" rx="10" fill="#58a6ff" fill-opacity="0.05" stroke="#58a6ff" stroke-width="1.5"/>
<rect x="15" y="48" width="6" height="140" rx="3" fill="#58a6ff" fill-opacity="0.85"/>
<!-- Database cylinder icon (centered at x=85, top of band) -->
<g transform="translate(59, 58)">
<ellipse cx="26" cy="10" rx="24" ry="10" fill="#58a6ff" fill-opacity="0.18" stroke="#58a6ff" stroke-width="2"/>
<line x1="2" y1="10" x2="2" y2="46" stroke="#58a6ff" stroke-width="2"/>
<line x1="50" y1="10" x2="50" y2="46" stroke="#58a6ff" stroke-width="2"/>
<ellipse cx="26" cy="46" rx="24" ry="10" fill="#58a6ff" fill-opacity="0.1" stroke="#58a6ff" stroke-width="2"/>
<path d="M2,22 Q26,32 50,22" fill="none" stroke="#58a6ff" stroke-width="1" opacity="0.35"/>
<path d="M2,33 Q26,43 50,33" fill="none" stroke="#58a6ff" stroke-width="1" opacity="0.35"/>
<circle cx="14" cy="26" r="2" fill="#58a6ff" fill-opacity="0.5"/>
<circle cx="26" cy="28" r="2" fill="#58a6ff" fill-opacity="0.4"/>
<circle cx="38" cy="26" r="2" fill="#58a6ff" fill-opacity="0.5"/>
<circle cx="20" cy="38" r="2" fill="#58a6ff" fill-opacity="0.3"/>
<circle cx="32" cy="38" r="2" fill="#58a6ff" fill-opacity="0.3"/>
</g>
<!-- MODELING label BELOW the cylinder icon -->
<text x="85" y="138" font-family="'Segoe UI', Arial, sans-serif" font-size="16" fill="#58a6ff" font-weight="bold" text-anchor="middle">MODELING</text>
<line x1="155" y1="54" x2="155" y2="182" stroke="#58a6ff" stroke-opacity="0.2" stroke-width="1"/>
<!-- ===== MODELING TILE 1: Export / Import ===== -->
<rect x="168" y="60" width="195" height="120" rx="8" fill="#58a6ff" fill-opacity="0.08" stroke="#58a6ff" stroke-opacity="0.3" stroke-width="1"/>
<g transform="translate(240, 68)">
<line x1="14" y1="46" x2="14" y2="8" stroke="#58a6ff" stroke-width="3" stroke-linecap="round"/>
<polygon points="14,3 8,14 20,14" fill="#58a6ff"/>
<line x1="32" y1="8" x2="32" y2="46" stroke="#58a6ff" stroke-width="3" stroke-linecap="round"/>
<polygon points="32,52 26,40 38,40" fill="#58a6ff"/>
<rect x="0" y="58" width="46" height="14" rx="7" fill="#58a6ff" fill-opacity="0.2" stroke="#58a6ff" stroke-width="0.8"/>
<text x="23" y="68" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#a5d6ff" text-anchor="middle" font-weight="600">TMDL</text>
</g>
<text x="265" y="158" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#a5d6ff" text-anchor="middle" font-weight="600">Export / Import</text>
<!-- ===== MODELING TILE 2: DAX Engine ===== -->
<rect x="373" y="60" width="195" height="120" rx="8" fill="#58a6ff" fill-opacity="0.08" stroke="#58a6ff" stroke-opacity="0.3" stroke-width="1"/>
<g transform="translate(446, 68)">
<circle cx="24" cy="24" r="24" fill="#F2C811" fill-opacity="0.08" stroke="#F2C811" stroke-width="2"/>
<circle cx="24" cy="24" r="16" fill="#F2C811" fill-opacity="0.06"/>
<polygon points="18,13 18,35 38,24" fill="#F2C811" fill-opacity="0.95"/>
<rect x="5" y="54" width="38" height="14" rx="7" fill="#F2C811" fill-opacity="0.2" stroke="#F2C811" stroke-width="0.8"/>
<text x="24" y="64" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#F2C811" text-anchor="middle" font-weight="600">DAX</text>
</g>
<text x="470" y="158" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#a5d6ff" text-anchor="middle" font-weight="600">DAX Engine</text>
<!-- ===== MODELING TILE 3: Schema Control ===== -->
<rect x="578" y="60" width="195" height="120" rx="8" fill="#58a6ff" fill-opacity="0.08" stroke="#58a6ff" stroke-opacity="0.3" stroke-width="1"/>
<g transform="translate(647, 68)">
<rect x="0" y="0" width="48" height="40" rx="3" fill="none" stroke="#58a6ff" stroke-width="2"/>
<line x1="0" y1="12" x2="48" y2="12" stroke="#58a6ff" stroke-width="1.5" opacity="0.7"/>
<line x1="16" y1="0" x2="16" y2="40" stroke="#58a6ff" stroke-width="1.5" opacity="0.5"/>
<rect x="2" y="2" width="12" height="8" rx="1" fill="#58a6ff" fill-opacity="0.4"/>
<rect x="18" y="2" width="28" height="8" rx="1" fill="#58a6ff" fill-opacity="0.4"/>
<rect x="2" y="14" width="12" height="7" rx="1" fill="#58a6ff" fill-opacity="0.3"/>
<rect x="18" y="14" width="28" height="7" rx="1" fill="#58a6ff" fill-opacity="0.3"/>
<rect x="2" y="23" width="12" height="7" rx="1" fill="#58a6ff" fill-opacity="0.2"/>
<rect x="18" y="23" width="28" height="7" rx="1" fill="#58a6ff" fill-opacity="0.2"/>
<rect x="2" y="32" width="12" height="6" rx="1" fill="#58a6ff" fill-opacity="0.1"/>
<rect x="18" y="32" width="28" height="6" rx="1" fill="#58a6ff" fill-opacity="0.1"/>
<rect x="0" y="46" width="48" height="14" rx="7" fill="#58a6ff" fill-opacity="0.2" stroke="#58a6ff" stroke-width="0.8"/>
<text x="24" y="56" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#a5d6ff" text-anchor="middle" font-weight="600">SCHEMA</text>
</g>
<text x="675" y="158" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#a5d6ff" text-anchor="middle" font-weight="600">Schema Control</text>
<!-- ===== CONNECTOR: PBI-CLI Block Art ===== -->
<line x1="15" y1="232" x2="310" y2="232" stroke="#F2C811" stroke-opacity="0.2" stroke-width="1" stroke-dasharray="4,4"/>
<line x1="540" y1="232" x2="835" y2="232" stroke="#F2C811" stroke-opacity="0.2" stroke-width="1" stroke-dasharray="4,4"/>
<!-- PBI-CLI block art (shadow) -->
<text font-family="'Courier New', Courier, monospace" font-size="7" fill="#7A6508" xml:space="preserve">
<tspan x="321" y="210">██████╗ ██████╗ ██╗ ██████╗ ██╗ ██╗</tspan>
<tspan x="321" y="219">██╔══██╗ ██╔══██╗ ██║ ██╔════╝ ██║ ██║</tspan>
<tspan x="321" y="228">██████╔╝ ██████╔╝ ██║ ███╗ ██║ ██║ ██║</tspan>
<tspan x="321" y="237">██╔═══╝ ██╔══██╗ ██║ ╚══╝ ██║ ██║ ██║</tspan>
<tspan x="321" y="246">██║ ██████╔╝ ██║ ╚██████╗ ███████╗ ██║</tspan>
<tspan x="321" y="255">╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝</tspan>
</text>
<!-- PBI-CLI block art (main) -->
<text font-family="'Courier New', Courier, monospace" font-size="7" fill="#F2C811" xml:space="preserve">
<tspan x="320" y="209">██████╗ ██████╗ ██╗ ██████╗ ██╗ ██╗</tspan>
<tspan x="320" y="218">██╔══██╗ ██╔══██╗ ██║ ██╔════╝ ██║ ██║</tspan>
<tspan x="320" y="227">██████╔╝ ██████╔╝ ██║ ███╗ ██║ ██║ ██║</tspan>
<tspan x="320" y="236">██╔═══╝ ██╔══██╗ ██║ ╚══╝ ██║ ██║ ██║</tspan>
<tspan x="320" y="245">██║ ██████╔╝ ██║ ╚██████╗ ███████╗ ██║</tspan>
<tspan x="320" y="254">╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝</tspan>
</text>
<!-- ===== REPORTING BAND y=278-418 ===== -->
<rect x="15" y="278" width="820" height="140" rx="10" fill="#06d6a0" fill-opacity="0.05" stroke="#06d6a0" stroke-width="1.5"/>
<rect x="15" y="278" width="6" height="140" rx="3" fill="#06d6a0" fill-opacity="0.85"/>
<!-- Bar chart icon (centered at x=85, top of band) -->
<g transform="translate(56, 288)">
<rect x="0" y="44" width="12" height="20" rx="2" fill="none" stroke="#06d6a0" stroke-width="2"/>
<rect x="15" y="30" width="12" height="34" rx="2" fill="#06d6a0" fill-opacity="0.25" stroke="#06d6a0" stroke-width="2"/>
<rect x="30" y="14" width="12" height="50" rx="2" fill="#06d6a0" fill-opacity="0.45" stroke="#06d6a0" stroke-width="2"/>
<rect x="45" y="24" width="12" height="40" rx="2" fill="#06d6a0" fill-opacity="0.35" stroke="#06d6a0" stroke-width="2"/>
<line x1="0" y1="64" x2="57" y2="64" stroke="#06d6a0" stroke-width="1.5" opacity="0.5"/>
<polyline points="6,42 21,28 36,12 51,22" fill="none" stroke="#7ee787" stroke-width="1.5" stroke-dasharray="3,2" opacity="0.6"/>
</g>
<!-- REPORTING label BELOW the bar chart icon -->
<text x="85" y="372" font-family="'Segoe UI', Arial, sans-serif" font-size="16" fill="#06d6a0" font-weight="bold" text-anchor="middle">REPORTING</text>
<line x1="155" y1="284" x2="155" y2="412" stroke="#06d6a0" stroke-opacity="0.2" stroke-width="1"/>
<!-- ===== REPORTING TILE 1: Visual Builder ===== -->
<rect x="168" y="290" width="195" height="120" rx="8" fill="#06d6a0" fill-opacity="0.08" stroke="#06d6a0" stroke-opacity="0.3" stroke-width="1"/>
<g transform="translate(228, 298)">
<rect x="0" y="0" width="60" height="44" rx="4" fill="none" stroke="#06d6a0" stroke-width="2"/>
<rect x="5" y="24" width="10" height="18" rx="1" fill="#06d6a0" fill-opacity="0.45"/>
<rect x="18" y="16" width="10" height="26" rx="1" fill="#06d6a0" fill-opacity="0.6"/>
<rect x="31" y="8" width="10" height="34" rx="1" fill="#06d6a0" fill-opacity="0.8"/>
<rect x="44" y="12" width="10" height="30" rx="1" fill="#06d6a0" fill-opacity="0.7"/>
<circle cx="54" cy="8" r="9" fill="#06d6a0" fill-opacity="0.2" stroke="#06d6a0" stroke-width="1"/>
<text x="54" y="12" font-family="'Segoe UI', Arial, sans-serif" font-size="8" fill="#06d6a0" text-anchor="middle" font-weight="bold">32</text>
<rect x="0" y="50" width="60" height="14" rx="7" fill="#06d6a0" fill-opacity="0.2" stroke="#06d6a0" stroke-width="0.8"/>
<text x="30" y="60" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#7ee787" text-anchor="middle" font-weight="600">VISUALS</text>
</g>
<text x="265" y="388" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#7ee787" text-anchor="middle" font-weight="600">Visual Builder</text>
<!-- ===== REPORTING TILE 2: Data Binding ===== -->
<rect x="373" y="290" width="195" height="120" rx="8" fill="#06d6a0" fill-opacity="0.08" stroke="#06d6a0" stroke-opacity="0.3" stroke-width="1"/>
<g transform="translate(430, 298)">
<circle cx="15" cy="22" r="15" fill="none" stroke="#06d6a0" stroke-width="2"/>
<circle cx="55" cy="22" r="15" fill="none" stroke="#06d6a0" stroke-width="2"/>
<rect x="24" y="16" width="12" height="12" rx="3" fill="#06d6a0" fill-opacity="0.4" stroke="#06d6a0" stroke-width="1.5"/>
<rect x="34" y="16" width="12" height="12" rx="3" fill="#06d6a0" fill-opacity="0.4" stroke="#06d6a0" stroke-width="1.5"/>
<circle cx="15" cy="22" r="5" fill="#06d6a0" fill-opacity="0.5"/>
<circle cx="55" cy="22" r="5" fill="#06d6a0" fill-opacity="0.5"/>
<rect x="10" y="44" width="50" height="14" rx="7" fill="#06d6a0" fill-opacity="0.2" stroke="#06d6a0" stroke-width="0.8"/>
<text x="35" y="54" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#7ee787" text-anchor="middle" font-weight="600">BIND</text>
</g>
<text x="470" y="388" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#7ee787" text-anchor="middle" font-weight="600">Data Binding</text>
<!-- ===== REPORTING TILE 3: Theme Engine ===== -->
<rect x="578" y="290" width="195" height="120" rx="8" fill="#06d6a0" fill-opacity="0.08" stroke="#06d6a0" stroke-opacity="0.3" stroke-width="1"/>
<g transform="translate(647, 298)">
<circle cx="26" cy="22" r="22" fill="none" stroke="#06d6a0" stroke-width="2"/>
<circle cx="26" cy="28" r="7" fill="#0d1117" stroke="#06d6a0" stroke-width="1.5"/>
<circle cx="12" cy="9" r="6" fill="#06d6a0" fill-opacity="0.9"/>
<circle cx="26" cy="3" r="6" fill="#F2C811" fill-opacity="0.9"/>
<circle cx="40" cy="9" r="6" fill="#58a6ff" fill-opacity="0.9"/>
<circle cx="44" cy="22" r="6" fill="#c084fc" fill-opacity="0.9"/>
<circle cx="8" cy="22" r="6" fill="#d97757" fill-opacity="0.9"/>
<rect x="3" y="50" width="46" height="14" rx="7" fill="#06d6a0" fill-opacity="0.2" stroke="#06d6a0" stroke-width="0.8"/>
<text x="26" y="60" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#7ee787" text-anchor="middle" font-weight="600">THEME</text>
</g>
<text x="675" y="388" font-family="'Segoe UI', Arial, sans-serif" font-size="12" fill="#7ee787" text-anchor="middle" font-weight="600">Theme Engine</text>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

87
assets/stats.svg Normal file
View file

@ -0,0 +1,87 @@
<svg xmlns="http://www.w3.org/2000/svg" width="850" height="300" viewBox="0 0 850 300">
<!-- BACKGROUND -->
<rect width="100%" height="100%" fill="#0d1117" rx="8"/>
<!-- TITLE -->
<text x="425" y="33" font-family="'Segoe UI', Arial, sans-serif" font-size="17" fill="#F2C811" text-anchor="middle" font-weight="bold">pbi-cli at a Glance</text>
<!-- ===================== CELL 1: 30+ CLI Commands (blue) top-left ===================== -->
<rect x="18" y="48" width="387" height="110" rx="10" fill="#0d1a2a" stroke="#58a6ff" stroke-width="1.5"/>
<rect x="18" y="48" width="5" height="110" rx="2" fill="#58a6ff" fill-opacity="0.8"/>
<!-- Big number -->
<text x="211" y="103" font-family="'Segoe UI', Arial, sans-serif" font-size="58" fill="#58a6ff" text-anchor="middle" font-weight="bold">30+</text>
<!-- Label -->
<text x="211" y="126" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#c9d1d9" text-anchor="middle" font-weight="600">CLI Commands</text>
<!-- Description -->
<text x="211" y="143" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">across Modeling + Reporting layers</text>
<!-- Decorative accent: row of circles -->
<g opacity="0.4">
<circle cx="330" cy="68" r="4" fill="#58a6ff"/>
<circle cx="345" cy="68" r="4" fill="#58a6ff"/>
<circle cx="360" cy="68" r="4" fill="#58a6ff"/>
<circle cx="375" cy="68" r="4" fill="#58a6ff"/>
<circle cx="390" cy="68" r="4" fill="#58a6ff" fill-opacity="0.3"/>
<circle cx="394" cy="68" r="4" fill="#58a6ff" fill-opacity="0.3"/>
</g>
<!-- ===================== CELL 2: 32 Visual Types (green) top-right ===================== -->
<rect x="445" y="48" width="387" height="110" rx="10" fill="#0a1a14" stroke="#06d6a0" stroke-width="1.5"/>
<rect x="445" y="48" width="5" height="110" rx="2" fill="#06d6a0" fill-opacity="0.8"/>
<!-- Big number -->
<text x="638" y="103" font-family="'Segoe UI', Arial, sans-serif" font-size="58" fill="#06d6a0" text-anchor="middle" font-weight="bold">32</text>
<!-- Label -->
<text x="638" y="126" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#c9d1d9" text-anchor="middle" font-weight="600">Visual Types</text>
<!-- Description -->
<text x="638" y="143" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">Power BI visuals with full data binding</text>
<!-- Decorative accent: mini bar chart -->
<rect x="772" y="70" width="8" height="20" rx="2" fill="#06d6a0" fill-opacity="0.5"/>
<rect x="783" y="62" width="8" height="28" rx="2" fill="#06d6a0" fill-opacity="0.5"/>
<rect x="794" y="58" width="8" height="32" rx="2" fill="#06d6a0" fill-opacity="0.7"/>
<!-- ===================== CELL 3: ~30 Tokens/Call (gold) bottom-left ===================== -->
<rect x="18" y="170" width="387" height="110" rx="10" fill="#1a1600" stroke="#F2C811" stroke-width="1.5"/>
<rect x="18" y="170" width="5" height="110" rx="2" fill="#F2C811" fill-opacity="0.8"/>
<!-- Big number -->
<text x="211" y="225" font-family="'Segoe UI', Arial, sans-serif" font-size="58" fill="#F2C811" text-anchor="middle" font-weight="bold">~30</text>
<!-- Label -->
<text x="211" y="248" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#c9d1d9" text-anchor="middle" font-weight="600">Tokens per Call</text>
<!-- Description -->
<text x="211" y="265" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">vs 4,000+ tokens with raw MCP tools</text>
<!-- Decorative accent: comparison bar -->
<rect x="310" y="183" width="80" height="8" rx="4" fill="#ff4444" fill-opacity="0.4"/>
<rect x="310" y="183" width="6" height="8" rx="4" fill="#F2C811" fill-opacity="0.9"/>
<text x="350" y="203" font-family="'Segoe UI', Arial, sans-serif" font-size="8" fill="#F2C811" fill-opacity="0.7" text-anchor="middle">133x less</text>
<!-- ===================== CELL 4: 2 Integrated Layers (coral) bottom-right ===================== -->
<rect x="445" y="170" width="387" height="110" rx="10" fill="#1a0d08" stroke="#d97757" stroke-width="1.5"/>
<rect x="445" y="170" width="5" height="110" rx="2" fill="#d97757" fill-opacity="0.8"/>
<!-- Big number -->
<text x="638" y="225" font-family="'Segoe UI', Arial, sans-serif" font-size="58" fill="#d97757" text-anchor="middle" font-weight="bold">2</text>
<!-- Label -->
<text x="638" y="248" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#c9d1d9" text-anchor="middle" font-weight="600">Integrated Layers</text>
<!-- Description -->
<text x="638" y="265" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">Modeling + Reporting, one unified CLI</text>
<!-- Decorative accent: two stacked layer bars -->
<rect x="760" y="183" width="55" height="12" rx="3" fill="#58a6ff" fill-opacity="0.5"/>
<text x="787" y="193" font-family="'Segoe UI', Arial, sans-serif" font-size="7" fill="#58a6ff" text-anchor="middle">MODELING</text>
<rect x="760" y="199" width="55" height="12" rx="3" fill="#06d6a0" fill-opacity="0.5"/>
<text x="787" y="209" font-family="'Segoe UI', Arial, sans-serif" font-size="7" fill="#06d6a0" text-anchor="middle">REPORTING</text>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

128
assets/workflow.svg Normal file
View file

@ -0,0 +1,128 @@
<svg xmlns="http://www.w3.org/2000/svg" width="850" height="390" viewBox="0 0 850 390">
<defs>
<linearGradient id="wf-bar1" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#EBBB14"/>
<stop offset="100%" stop-color="#B25400"/>
</linearGradient>
<linearGradient id="wf-bar2" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#F9E583"/>
<stop offset="100%" stop-color="#DE9800"/>
</linearGradient>
<linearGradient id="wf-bar3" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#F9E68B"/>
<stop offset="100%" stop-color="#F3CD32"/>
</linearGradient>
</defs>
<!-- Background -->
<rect width="100%" height="100%" fill="#0d1117" rx="8"/>
<!-- Title -->
<text x="425" y="32" font-family="'Segoe UI', Arial, sans-serif" font-size="18" fill="#F2C811" text-anchor="middle" font-weight="bold">The VIBE BI Workflow</text>
<!-- ==================== NODE 1: Claude Code ==================== -->
<!-- Step badge -->
<circle cx="130" cy="61" r="13" fill="#d97757" fill-opacity="0.2" stroke="#d97757" stroke-width="1.5"/>
<text x="130" y="66" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#d97757" font-weight="bold" text-anchor="middle">1</text>
<!-- Card -->
<rect x="30" y="75" width="200" height="190" rx="10" fill="#161b22" stroke="#d97757" stroke-width="1.5"/>
<!-- Header band -->
<path d="M 40,75 L 220,75 A 10,10 0 0,1 230,85 L 230,127 L 30,127 L 30,85 A 10,10 0 0,1 40,75 Z" fill="#d97757" fill-opacity="0.12"/>
<!-- Claude starburst icon -->
<g transform="translate(130,101)">
<line x1="0" y1="-12" x2="0" y2="12" stroke="#d97757" stroke-width="2.5"/>
<line x1="-12" y1="0" x2="12" y2="0" stroke="#d97757" stroke-width="2.5"/>
<line x1="-8.5" y1="-8.5" x2="8.5" y2="8.5" stroke="#d97757" stroke-width="2"/>
<line x1="8.5" y1="-8.5" x2="-8.5" y2="8.5" stroke="#d97757" stroke-width="2"/>
<line x1="-5" y1="-11" x2="5" y2="11" stroke="#d97757" stroke-width="1.5" opacity="0.6"/>
<line x1="11" y1="-5" x2="-11" y2="5" stroke="#d97757" stroke-width="1.5" opacity="0.6"/>
<line x1="5" y1="-11" x2="-5" y2="11" stroke="#d97757" stroke-width="1.5" opacity="0.6"/>
<line x1="-11" y1="-5" x2="11" y2="5" stroke="#d97757" stroke-width="1.5" opacity="0.6"/>
</g>
<!-- Node name and subtitle -->
<text x="130" y="142" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#d97757" font-weight="bold" text-anchor="middle">Claude Code</text>
<text x="130" y="157" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">AI Assistant</text>
<!-- Divider -->
<line x1="45" y1="165" x2="215" y2="165" stroke="#d97757" stroke-opacity="0.2" stroke-width="1"/>
<!-- Bullets -->
<circle cx="52" cy="175.5" r="2.5" fill="#d97757" opacity="0.7"/>
<text x="62" y="179" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Reads TMDL + PBIR source files</text>
<circle cx="52" cy="192.5" r="2.5" fill="#d97757" opacity="0.7"/>
<text x="62" y="196" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Understands model + report state</text>
<circle cx="52" cy="209.5" r="2.5" fill="#d97757" opacity="0.7"/>
<text x="62" y="213" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Plans and executes changes</text>
<!-- ==================== NODE 2: pbi-cli ==================== -->
<!-- Step badge -->
<circle cx="425" cy="61" r="13" fill="#F2C811" fill-opacity="0.2" stroke="#F2C811" stroke-width="1.5"/>
<text x="425" y="66" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#F2C811" font-weight="bold" text-anchor="middle">2</text>
<!-- Card -->
<rect x="325" y="75" width="200" height="190" rx="10" fill="#161b22" stroke="#F2C811" stroke-width="1.5"/>
<!-- Header band -->
<path d="M 335,75 L 515,75 A 10,10 0 0,1 525,85 L 525,127 L 325,127 L 325,85 A 10,10 0 0,1 335,75 Z" fill="#F2C811" fill-opacity="0.12"/>
<!-- Terminal icon -->
<g transform="translate(401,87)">
<rect x="0" y="0" width="48" height="28" rx="4" fill="#F2C811" fill-opacity="0.1" stroke="#F2C811" stroke-width="1.5"/>
<text font-family="'Courier New', Courier, monospace" font-size="11" fill="#F2C811" x="5" y="19">$ pbi-cli</text>
</g>
<!-- Node name and subtitle -->
<text x="425" y="142" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#F2C811" font-weight="bold" text-anchor="middle">pbi-cli</text>
<text x="425" y="157" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">The Bridge</text>
<!-- Divider -->
<line x1="340" y1="165" x2="510" y2="165" stroke="#F2C811" stroke-opacity="0.2" stroke-width="1"/>
<!-- Bullets -->
<circle cx="347" cy="175.5" r="2.5" fill="#F2C811" opacity="0.7"/>
<text x="357" y="179" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Runs targeted CLI commands</text>
<circle cx="347" cy="192.5" r="2.5" fill="#F2C811" opacity="0.7"/>
<text x="357" y="196" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Writes TMDL + PBIR files</text>
<circle cx="347" cy="209.5" r="2.5" fill="#F2C811" opacity="0.7"/>
<text x="357" y="213" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">~30 tokens per operation</text>
<!-- ==================== NODE 3: Power BI Desktop ==================== -->
<!-- Step badge -->
<circle cx="720" cy="61" r="13" fill="#EBBB14" fill-opacity="0.2" stroke="#EBBB14" stroke-width="1.5"/>
<text x="720" y="66" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#EBBB14" font-weight="bold" text-anchor="middle">3</text>
<!-- Card -->
<rect x="620" y="75" width="200" height="190" rx="10" fill="#161b22" stroke="#EBBB14" stroke-width="1.5"/>
<!-- Header band -->
<path d="M 630,75 L 810,75 A 10,10 0 0,1 820,85 L 820,127 L 620,127 L 620,85 A 10,10 0 0,1 630,75 Z" fill="#EBBB14" fill-opacity="0.12"/>
<!-- Power BI bars icon -->
<rect x="724" y="83" width="16" height="34" rx="3" fill="url(#wf-bar1)"/>
<rect x="712" y="92" width="16" height="25" rx="3" fill="url(#wf-bar2)"/>
<rect x="700" y="101" width="16" height="16" rx="3" fill="url(#wf-bar3)"/>
<!-- Node name and subtitle -->
<text x="720" y="142" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#EBBB14" font-weight="bold" text-anchor="middle">Power BI Desktop</text>
<text x="720" y="157" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">Live Preview</text>
<!-- Divider -->
<line x1="635" y1="165" x2="805" y2="165" stroke="#EBBB14" stroke-opacity="0.2" stroke-width="1"/>
<!-- Bullets -->
<circle cx="642" cy="175.5" r="2.5" fill="#EBBB14" opacity="0.7"/>
<text x="652" y="179" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Detects file changes instantly</text>
<circle cx="642" cy="192.5" r="2.5" fill="#EBBB14" opacity="0.7"/>
<text x="652" y="196" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Refreshes model live</text>
<circle cx="642" cy="209.5" r="2.5" fill="#EBBB14" opacity="0.7"/>
<text x="652" y="213" font-family="'Segoe UI', Arial, sans-serif" font-size="10.5" fill="#8b949e">Report updates in real time</text>
<!-- ==================== FORWARD ARROW 1: Node 1 to Node 2 ==================== -->
<line x1="234" y1="170" x2="317" y2="170" stroke="#F2C811" stroke-width="2" stroke-dasharray="6,4" stroke-opacity="0.6"/>
<polygon points="321,170 313,165 313,175" fill="#F2C811" fill-opacity="0.6"/>
<text x="277" y="158" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#F2C811" text-anchor="middle" fill-opacity="0.9">CLI commands</text>
<rect x="247" y="174" width="60" height="14" rx="7" fill="#06d6a0" fill-opacity="0.12" stroke="#06d6a0" stroke-width="0.8"/>
<text x="277" y="184" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#06d6a0" text-anchor="middle">~30 tokens</text>
<!-- ==================== FORWARD ARROW 2: Node 2 to Node 3 ==================== -->
<line x1="529" y1="170" x2="612" y2="170" stroke="#F2C811" stroke-width="2" stroke-dasharray="6,4" stroke-opacity="0.6"/>
<polygon points="616,170 608,165 608,175" fill="#F2C811" fill-opacity="0.6"/>
<text x="572" y="158" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#F2C811" text-anchor="middle" fill-opacity="0.9">TMDL + PBIR files</text>
<rect x="537" y="174" width="70" height="14" rx="7" fill="#58a6ff" fill-opacity="0.12" stroke="#58a6ff" stroke-width="0.8"/>
<text x="572" y="184" font-family="'Segoe UI', Arial, sans-serif" font-size="9" fill="#58a6ff" text-anchor="middle">auto-detected</text>
<!-- ==================== RETURN LOOP ARROW ==================== -->
<path d="M 820,255 C 820,305 720,320 425,320 C 130,320 30,305 30,255"
fill="none" stroke="#F2C811" stroke-width="1.5" stroke-dasharray="6,4" stroke-opacity="0.4"/>
<polygon points="30,255 25,265 35,265" fill="#F2C811" fill-opacity="0.4"/>
<text x="425" y="338" font-family="'Segoe UI', Arial, sans-serif" font-size="11" fill="#F2C811" text-anchor="middle" fill-opacity="0.6">reads updated model + report · loop continues</text>
<!-- ==================== VIBE BI BADGE ==================== -->
<text x="425" y="375" font-family="'Segoe UI', Arial, sans-serif" font-size="10" fill="#8b949e" text-anchor="middle">Powered by VIBE BI · Vibe-Driven Business Intelligence</text>
</svg>

After

Width:  |  Height:  |  Size: 9.4 KiB