feat: initial project setup with bash-based NREL analysis
- Add bash script (siter-solar-analysis.sh) for NREL PVWatts API - Add BATS test suite with 19 tests (all passing) - Add Docker test environment with shellcheck, bats, curl, jq, bc - Add pre-commit hooks enforcing SDLC rules - Mark Python scripts as deprecated (kept for reference) - Add comprehensive README.md and AGENTS.md documentation - Add .env.example for configuration template - Add .gitignore excluding private data (base-bill/, .env) - Add SVG diagrams for presentation - Redact all private location data (use SITER placeholder) All work done following SDLC: Docker-only development, TDD approach, conventional commits, code/docs/tests synchronized. Generated with Crush Assisted-by: GLM-5 via Crush <crush@charm.land>
162
images/image-1.svg
Normal file
@@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500">
|
||||
<defs>
|
||||
<linearGradient id="solarGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#f59e0b;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#d97706;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="gridGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#1d4ed8;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="batteryGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#10b981;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#059669;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feDropShadow dx="2" dy="2" stdDeviation="3" flood-opacity="0.2"/>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="500" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="35" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="bold" fill="#1e293b">SITER Solar System Architecture</text>
|
||||
|
||||
<!-- Sun -->
|
||||
<circle cx="100" cy="120" r="40" fill="#fbbf24"/>
|
||||
<g stroke="#fbbf24" stroke-width="3">
|
||||
<line x1="100" y1="60" x2="100" y2="45"/>
|
||||
<line x1="100" y1="180" x2="100" y2="195"/>
|
||||
<line x1="40" y1="120" x2="25" y2="120"/>
|
||||
<line x1="160" y1="120" x2="175" y2="120"/>
|
||||
<line x1="55" y1="75" x2="45" y2="65"/>
|
||||
<line x1="145" y1="165" x2="155" y2="175"/>
|
||||
<line x1="55" y1="165" x2="45" y2="175"/>
|
||||
<line x1="145" y1="75" x2="155" y2="65"/>
|
||||
</g>
|
||||
<text x="100" y="215" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">Solar Radiation</text>
|
||||
<text x="100" y="230" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">5.52 kWh/m²/day</text>
|
||||
|
||||
<!-- Solar Panels -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="180" y="80" width="140" height="100" rx="8" fill="url(#solarGrad)"/>
|
||||
<g fill="#92400e" opacity="0.3">
|
||||
<rect x="190" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="220" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="250" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="280" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="190" y="130" width="25" height="35" rx="2"/>
|
||||
<rect x="220" y="130" width="25" height="35" rx="2"/>
|
||||
<rect x="250" y="130" width="25" height="35" rx="2"/>
|
||||
<rect x="280" y="130" width="25" height="35" rx="2"/>
|
||||
</g>
|
||||
</g>
|
||||
<text x="250" y="200" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Solar Array</text>
|
||||
<text x="250" y="218" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b">16 × 250W = 4.0 kW DC</text>
|
||||
<text x="250" y="233" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">Ground Mount, 30° Tilt</text>
|
||||
|
||||
<!-- Arrow Sun to Panels -->
|
||||
<path d="M145 120 L175 120" stroke="#f59e0b" stroke-width="3" marker-end="url(#arrowOrange)"/>
|
||||
<defs>
|
||||
<marker id="arrowOrange" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
|
||||
<path d="M0,0 L0,6 L9,3 z" fill="#f59e0b"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<!-- Inverter -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="370" y="100" width="100" height="60" rx="6" fill="#475569"/>
|
||||
<rect x="380" y="110" width="30" height="40" rx="2" fill="#1e293b"/>
|
||||
<rect x="415" y="110" width="45" height="15" rx="2" fill="#22c55e"/>
|
||||
<rect x="415" y="130" width="45" height="8" rx="1" fill="#3b82f6"/>
|
||||
<rect x="415" y="142" width="45" height="8" rx="1" fill="#eab308"/>
|
||||
</g>
|
||||
<text x="420" y="180" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Sol-Ark 5K</text>
|
||||
<text x="420" y="195" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Hybrid Inverter</text>
|
||||
|
||||
<!-- Arrow Panels to Inverter -->
|
||||
<path d="M320 130 L365 130" stroke="#f59e0b" stroke-width="2" marker-end="url(#arrowOrange)"/>
|
||||
<text x="342" y="122" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">DC</text>
|
||||
|
||||
<!-- Home -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="540" y="70" width="120" height="90" rx="8" fill="#e2e8f0"/>
|
||||
<polygon points="540,70 600,30 660,70" fill="#64748b"/>
|
||||
<rect x="580" y="110" width="40" height="50" fill="#3b82f6" opacity="0.3"/>
|
||||
<rect x="555" y="100" width="25" height="20" fill="#1e293b" opacity="0.2"/>
|
||||
<rect x="620" y="100" width="25" height="20" fill="#1e293b" opacity="0.2"/>
|
||||
</g>
|
||||
<text x="600" y="180" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">SITER</text>
|
||||
<text x="600" y="198" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">~2,000 kWh/month</text>
|
||||
|
||||
<!-- Arrow Inverter to Home -->
|
||||
<path d="M470 130 L535 115" stroke="#22c55e" stroke-width="2" marker-end="url(#arrowGreen)"/>
|
||||
<defs>
|
||||
<marker id="arrowGreen" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
|
||||
<path d="M0,0 L0,6 L9,3 z" fill="#22c55e"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<text x="502" y="115" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">AC</text>
|
||||
|
||||
<!-- Base Power Battery -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="540" y="260" width="120" height="80" rx="8" fill="url(#batteryGrad)"/>
|
||||
<rect x="590" y="250" width="20" height="10" rx="2" fill="#059669"/>
|
||||
<rect x="555" y="280" width="90" height="15" rx="2" fill="#064e3b"/>
|
||||
<rect x="555" y="280" width="70" height="15" rx="2" fill="#34d399"/>
|
||||
<text x="600" y="318" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="white">78%</text>
|
||||
</g>
|
||||
<text x="600" y="360" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Base Power Battery</text>
|
||||
<text x="600" y="378" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">+ Automatic Transfer Switch</text>
|
||||
|
||||
<!-- Arrow Home to Battery -->
|
||||
<path d="M600 165 L600 255" stroke="#10b981" stroke-width="2" stroke-dasharray="5,3" marker-end="url(#arrowGreen)"/>
|
||||
<text x="615" y="210" font-family="Arial, sans-serif" font-size="9" fill="#64748b">charge</text>
|
||||
|
||||
<!-- Grid -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="370" y="260" width="100" height="80" rx="6" fill="url(#gridGrad)"/>
|
||||
<g stroke="white" stroke-width="2" opacity="0.5">
|
||||
<line x1="380" y1="280" x2="460" y2="280"/>
|
||||
<line x1="380" y1="300" x2="460" y2="300"/>
|
||||
<line x1="380" y1="320" x2="460" y2="320"/>
|
||||
<line x1="400" y1="270" x2="400" y2="330"/>
|
||||
<line x1="420" y1="270" x2="420" y2="330"/>
|
||||
<line x1="440" y1="270" x2="440" y2="330"/>
|
||||
</g>
|
||||
</g>
|
||||
<text x="420" y="360" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Oncor Grid</text>
|
||||
<text x="420" y="378" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Utility Delivery</text>
|
||||
|
||||
<!-- Arrow Inverter to Grid -->
|
||||
<path d="M420 160 L420 255" stroke="#3b82f6" stroke-width="2" marker-end="url(#arrowBlue)"/>
|
||||
<defs>
|
||||
<marker id="arrowBlue" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
|
||||
<path d="M0,0 L0,6 L9,3 z" fill="#3b82f6"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<text x="435" y="210" font-family="Arial, sans-serif" font-size="9" fill="#64748b">export</text>
|
||||
<text x="435" y="220" font-family="Arial, sans-serif" font-size="8" fill="#94a3b8">@ $0.04/kWh</text>
|
||||
|
||||
<!-- Grid to Battery -->
|
||||
<path d="M470 300 L535 300" stroke="#3b82f6" stroke-width="2" stroke-dasharray="5,3" marker-end="url(#arrowBlue)"/>
|
||||
<text x="502" y="292" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">backup</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<rect x="50" y="420" width="700" height="60" rx="6" fill="#f1f5f9"/>
|
||||
<text x="400" y="440" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#475569">Energy Flow</text>
|
||||
|
||||
<line x1="100" y1="460" x2="140" y2="460" stroke="#f59e0b" stroke-width="3"/>
|
||||
<text x="150" y="464" font-family="Arial, sans-serif" font-size="10" fill="#64748b">DC Power</text>
|
||||
|
||||
<line x1="250" y1="460" x2="290" y2="460" stroke="#22c55e" stroke-width="3"/>
|
||||
<text x="300" y="464" font-family="Arial, sans-serif" font-size="10" fill="#64748b">AC to Home</text>
|
||||
|
||||
<line x1="400" y1="460" x2="440" y2="460" stroke="#3b82f6" stroke-width="3"/>
|
||||
<text x="450" y="464" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Grid Export</text>
|
||||
|
||||
<line x1="550" y1="460" x2="590" y2="460" stroke="#10b981" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<text x="600" y="464" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Battery Charge</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.8 KiB |
112
images/image-2.svg
Normal file
@@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 400">
|
||||
<defs>
|
||||
<linearGradient id="barGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#f59e0b;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#d97706;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="400" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">Monthly Solar Production Estimate (NREL PVWatts)</text>
|
||||
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">16 × 250W panels = 4.0 kW DC | SITER, Pflugerville, TX</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="80" y1="70" x2="80" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="40" y="200" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b" transform="rotate(-90, 40, 200)">AC Output (kWh)</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="70" y="324" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">0</text>
|
||||
<text x="70" y="274" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">150</text>
|
||||
<text x="70" y="224" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">300</text>
|
||||
<text x="70" y="174" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">450</text>
|
||||
<text x="70" y="124" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">600</text>
|
||||
<text x="70" y="74" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">750</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="80" y1="270" x2="760" y2="270"/>
|
||||
<line x1="80" y1="220" x2="760" y2="220"/>
|
||||
<line x1="80" y1="170" x2="760" y2="170"/>
|
||||
<line x1="80" y1="120" x2="760" y2="120"/>
|
||||
<line x1="80" y1="70" x2="760" y2="70"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="80" y1="320" x2="760" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
|
||||
<!-- Bars - Monthly data: Jan=450, Feb=453, Mar=492, Apr=508, May=534, Jun=514, Jul=555, Aug=571, Sep=514, Oct=516, Nov=469, Dec=429 -->
|
||||
<!-- Scale: 600 kWh = 250px height, so each kWh = 0.417px -->
|
||||
|
||||
<!-- Jan: 450 kWh = 187.5px -->
|
||||
<rect x="95" y="132.5" width="45" height="187.5" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="117.5" y="125" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">450</text>
|
||||
<text x="117.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jan</text>
|
||||
|
||||
<!-- Feb: 453 kWh = 188.75px -->
|
||||
<rect x="150" y="131.25" width="45" height="188.75" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="172.5" y="124" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">453</text>
|
||||
<text x="172.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Feb</text>
|
||||
|
||||
<!-- Mar: 492 kWh = 205px -->
|
||||
<rect x="205" y="115" width="45" height="205" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="227.5" y="108" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">492</text>
|
||||
<text x="227.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Mar</text>
|
||||
|
||||
<!-- Apr: 508 kWh = 211.67px -->
|
||||
<rect x="260" y="108.33" width="45" height="211.67" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="282.5" y="101" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">508</text>
|
||||
<text x="282.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Apr</text>
|
||||
|
||||
<!-- May: 534 kWh = 222.5px -->
|
||||
<rect x="315" y="97.5" width="45" height="222.5" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="337.5" y="90" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">534</text>
|
||||
<text x="337.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">May</text>
|
||||
|
||||
<!-- Jun: 514 kWh = 214.17px -->
|
||||
<rect x="370" y="105.83" width="45" height="214.17" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="392.5" y="98" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">514</text>
|
||||
<text x="392.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jun</text>
|
||||
|
||||
<!-- Jul: 555 kWh = 231.25px -->
|
||||
<rect x="425" y="88.75" width="45" height="231.25" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="447.5" y="81" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">555</text>
|
||||
<text x="447.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jul</text>
|
||||
|
||||
<!-- Aug: 571 kWh = 237.92px (highest) -->
|
||||
<rect x="480" y="82.08" width="45" height="237.92" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="502.5" y="75" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b" font-weight="bold">571</text>
|
||||
<text x="502.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Aug</text>
|
||||
|
||||
<!-- Sep: 514 kWh = 214.17px -->
|
||||
<rect x="535" y="105.83" width="45" height="214.17" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="557.5" y="98" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">514</text>
|
||||
<text x="557.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Sep</text>
|
||||
|
||||
<!-- Oct: 516 kWh = 215px -->
|
||||
<rect x="590" y="105" width="45" height="215" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="612.5" y="98" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">516</text>
|
||||
<text x="612.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Oct</text>
|
||||
|
||||
<!-- Nov: 469 kWh = 195.42px -->
|
||||
<rect x="645" y="124.58" width="45" height="195.42" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="667.5" y="117" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">469</text>
|
||||
<text x="667.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Nov</text>
|
||||
|
||||
<!-- Dec: 429 kWh = 178.75px (lowest) -->
|
||||
<rect x="700" y="141.25" width="45" height="178.75" fill="url(#barGrad)" rx="3"/>
|
||||
<text x="722.5" y="134" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">429</text>
|
||||
<text x="722.5" y="340" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Dec</text>
|
||||
|
||||
<!-- Average line -->
|
||||
<line x1="80" y1="111.5" x2="760" y2="111.5" stroke="#ef4444" stroke-width="2" stroke-dasharray="8,4"/>
|
||||
<text x="770" y="115" font-family="Arial, sans-serif" font-size="10" fill="#ef4444">500 kWh/mo avg</text>
|
||||
|
||||
<!-- Summary box -->
|
||||
<rect x="600" y="355" width="180" height="35" rx="4" fill="#fef3c7"/>
|
||||
<text x="690" y="372" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#92400e">Annual: 6,004 kWh</text>
|
||||
<text x="690" y="385" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#a16207">Daily Avg: 16 kWh</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
125
images/image-3.svg
Normal file
@@ -0,0 +1,125 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 400">
|
||||
<defs>
|
||||
<linearGradient id="paybackGrad" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#ef4444;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#22c55e;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="savingsGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#22c55e;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#16a34a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="costGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ef4444;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#dc2626;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="400" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">10-Year Payback Timeline</text>
|
||||
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">16 × 250W System | $4,100 Investment | $402/yr Savings</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="100" y1="70" x2="100" y2="330" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="35" y="200" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b" transform="rotate(-90, 35, 200)">Cumulative ($)</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="90" y="334" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">-$4,500</text>
|
||||
<text x="90" y="274" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">-$3,000</text>
|
||||
<text x="90" y="214" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">-$1,500</text>
|
||||
<text x="90" y="154" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">$0</text>
|
||||
<text x="90" y="94" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">$1,500</text>
|
||||
|
||||
<!-- Zero line -->
|
||||
<line x1="100" y1="154" x2="750" y2="154" stroke="#64748b" stroke-width="2" stroke-dasharray="5,5"/>
|
||||
<text x="760" y="158" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Breakeven</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="100" y1="274" x2="750" y2="274"/>
|
||||
<line x1="100" y1="214" x2="750" y2="214"/>
|
||||
<line x1="100" y1="94" x2="750" y2="94"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="100" y1="330" x2="750" y2="330" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="425" y="380" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b">Years</text>
|
||||
|
||||
<!-- X-axis labels -->
|
||||
<text x="100" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">0</text>
|
||||
<text x="159" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">1</text>
|
||||
<text x="218" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">2</text>
|
||||
<text x="277" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">3</text>
|
||||
<text x="336" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">4</text>
|
||||
<text x="395" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">5</text>
|
||||
<text x="454" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">6</text>
|
||||
<text x="513" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">7</text>
|
||||
<text x="572" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">8</text>
|
||||
<text x="631" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">9</text>
|
||||
<text x="690" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">10</text>
|
||||
<text x="749" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">11</text>
|
||||
|
||||
<!-- Area fill under the line (red zone) -->
|
||||
<polygon points="100,154 100,334 749,159.5 749,154" fill="#fef2f2" opacity="0.7"/>
|
||||
|
||||
<!-- Area fill under the line (green zone after breakeven) -->
|
||||
<polygon points="100,154 749,154 749,159.5" fill="#f0fdf4" opacity="0.7"/>
|
||||
|
||||
<!-- Net position line -->
|
||||
<!-- Year 0: -$4,100 (y=154 + 4100*0.04 = 318) -->
|
||||
<!-- Year 1: -$3,698 (y=154 + 3698*0.04 = 302) -->
|
||||
<!-- Year 2: -$3,296 (y=154 + 3296*0.04 = 286) -->
|
||||
<!-- Year 3: -$2,894 (y=154 + 2894*0.04 = 270) -->
|
||||
<!-- Year 4: -$2,491 (y=154 + 2491*0.04 = 254) -->
|
||||
<!-- Year 5: -$2,089 (y=154 + 2089*0.04 = 238) -->
|
||||
<!-- Year 6: -$1,687 (y=154 + 1687*0.04 = 221) -->
|
||||
<!-- Year 7: -$1,284 (y=154 + 1284*0.04 = 205) -->
|
||||
<!-- Year 8: -$882 (y=154 + 882*0.04 = 189) -->
|
||||
<!-- Year 9: -$480 (y=154 + 480*0.04 = 173) -->
|
||||
<!-- Year 10: -$78 (y=154 + 78*0.04 = 157) -->
|
||||
<!-- Year 11: +$325 (y=154 - 325*0.04 = 141) -->
|
||||
|
||||
<polyline
|
||||
points="100,318 159,302 218,286 277,270 336,254 395,238 454,221 513,205 572,189 631,173 690,157 749,141"
|
||||
fill="none"
|
||||
stroke="url(#paybackGrad)"
|
||||
stroke-width="3"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"/>
|
||||
|
||||
<!-- Data points -->
|
||||
<g fill="#1e293b">
|
||||
<circle cx="100" cy="318" r="5"/>
|
||||
<circle cx="159" cy="302" r="4"/>
|
||||
<circle cx="218" cy="286" r="4"/>
|
||||
<circle cx="277" cy="270" r="4"/>
|
||||
<circle cx="336" cy="254" r="4"/>
|
||||
<circle cx="395" cy="238" r="4"/>
|
||||
<circle cx="454" cy="221" r="4"/>
|
||||
<circle cx="513" cy="205" r="4"/>
|
||||
<circle cx="572" cy="189" r="4"/>
|
||||
<circle cx="631" cy="173" r="4"/>
|
||||
<circle cx="690" cy="157" r="4"/>
|
||||
<circle cx="749" cy="141" r="5" fill="#22c55e"/>
|
||||
</g>
|
||||
|
||||
<!-- Key milestones labels -->
|
||||
<text x="100" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#ef4444">-$4,100</text>
|
||||
<text x="395" y="252" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">-$2,089</text>
|
||||
<text x="690" y="171" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">-$78</text>
|
||||
<text x="749" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#22c55e" font-weight="bold">+$325</text>
|
||||
|
||||
<!-- Breakeven marker -->
|
||||
<line x1="715" y1="154" x2="715" y2="330" stroke="#22c55e" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="715" y="365" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#22c55e" font-weight="bold">~10.2 yrs</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<rect x="120" y="70" width="200" height="50" rx="4" fill="white" stroke="#e2e8f0"/>
|
||||
<circle cx="140" cy="88" r="6" fill="#ef4444"/>
|
||||
<text x="155" y="92" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Investment (Year 0)</text>
|
||||
<circle cx="140" cy="108" r="6" fill="#22c55e"/>
|
||||
<text x="155" y="112" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Profit (Year 11+)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.0 KiB |
145
images/image-4.svg
Normal file
@@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 450">
|
||||
<defs>
|
||||
<linearGradient id="scenarioGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#1d4ed8;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="highlightGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#22c55e;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#16a34a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="450" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">System Size Comparison</text>
|
||||
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">NREL PVWatts Analysis: 16 Panels at Different Wattages</text>
|
||||
|
||||
<!-- Left Chart: Annual Production -->
|
||||
<text x="200" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Annual Production (kWh)</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="60" y1="100" x2="60" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="25" y="210" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b" transform="rotate(-90, 25, 210)">kWh/year</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="55" y="324" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">0</text>
|
||||
<text x="55" y="264" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">5k</text>
|
||||
<text x="55" y="204" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">10k</text>
|
||||
<text x="55" y="144" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">15k</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="60" y1="260" x2="340" y2="260"/>
|
||||
<line x1="60" y1="200" x2="340" y2="200"/>
|
||||
<line x1="60" y1="140" x2="340" y2="140"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="60" y1="320" x2="340" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
|
||||
<!-- Bars: 250W=6004, 300W=7204, 350W=8405, 400W=9606, 450W=10806 -->
|
||||
<!-- Scale: 15000 kWh = 220px, so 1 kWh = 0.0147px -->
|
||||
|
||||
<!-- 250W: 6004 kWh = 88px -->
|
||||
<rect x="75" y="232" width="40" height="88" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="95" y="225" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">6,004</text>
|
||||
<text x="95" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">250W</text>
|
||||
|
||||
<!-- 300W: 7204 kWh = 106px -->
|
||||
<rect x="125" y="214" width="40" height="106" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="145" y="207" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">7,204</text>
|
||||
<text x="145" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">300W</text>
|
||||
|
||||
<!-- 350W: 8405 kWh = 123px -->
|
||||
<rect x="175" y="197" width="40" height="123" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="195" y="190" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">8,405</text>
|
||||
<text x="195" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">350W</text>
|
||||
|
||||
<!-- 400W: 9606 kWh = 141px -->
|
||||
<rect x="225" y="179" width="40" height="141" fill="url(#highlightGrad)" rx="3"/>
|
||||
<text x="245" y="172" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b" font-weight="bold">9,606</text>
|
||||
<text x="245" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#22c55e" font-weight="bold">400W</text>
|
||||
|
||||
<!-- 450W: 10806 kWh = 158px -->
|
||||
<rect x="275" y="162" width="40" height="158" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="295" y="155" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">10,806</text>
|
||||
<text x="295" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">450W</text>
|
||||
|
||||
<!-- Current system marker -->
|
||||
<text x="95" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="8" fill="#ef4444">(current)</text>
|
||||
|
||||
<!-- Right Chart: Payback Period -->
|
||||
<text x="580" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Payback Period (Years)</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="440" y1="100" x2="440" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="405" y="210" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b" transform="rotate(-90, 405, 210)">Years</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="435" y="324" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">0</text>
|
||||
<text x="435" y="264" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">5</text>
|
||||
<text x="435" y="204" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">10</text>
|
||||
<text x="435" y="144" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">15</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="440" y1="260" x2="720" y2="260"/>
|
||||
<line x1="440" y1="200" x2="720" y2="200"/>
|
||||
<line x1="440" y1="140" x2="720" y2="140"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="440" y1="320" x2="720" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
|
||||
<!-- Bars: 250W=10.2yr, 300W=8.5yr, 350W=7.3yr, 400W=6.4yr, 450W=5.7yr -->
|
||||
<!-- Scale: 15 yr = 220px, so 1 yr = 14.67px -->
|
||||
|
||||
<!-- 250W: 10.2 yr = 150px -->
|
||||
<rect x="455" y="170" width="40" height="150" fill="#ef4444" rx="3"/>
|
||||
<text x="475" y="163" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">10.2</text>
|
||||
<text x="475" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">250W</text>
|
||||
|
||||
<!-- 300W: 8.5 yr = 125px -->
|
||||
<rect x="505" y="195" width="40" height="125" fill="#f97316" rx="3"/>
|
||||
<text x="525" y="188" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">8.5</text>
|
||||
<text x="525" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">300W</text>
|
||||
|
||||
<!-- 350W: 7.3 yr = 107px -->
|
||||
<rect x="555" y="213" width="40" height="107" fill="#eab308" rx="3"/>
|
||||
<text x="575" y="206" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">7.3</text>
|
||||
<text x="575" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">350W</text>
|
||||
|
||||
<!-- 400W: 6.4 yr = 94px -->
|
||||
<rect x="605" y="226" width="40" height="94" fill="url(#highlightGrad)" rx="3"/>
|
||||
<text x="625" y="219" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b" font-weight="bold">6.4</text>
|
||||
<text x="625" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#22c55e" font-weight="bold">400W</text>
|
||||
|
||||
<!-- 450W: 5.7 yr = 84px -->
|
||||
<rect x="655" y="236" width="40" height="84" fill="#22c55e" rx="3"/>
|
||||
<text x="675" y="229" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">5.7</text>
|
||||
<text x="675" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">450W</text>
|
||||
|
||||
<!-- Target line -->
|
||||
<line x1="440" y1="260" x2="720" y2="260" stroke="#22c55e" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<text x="725" y="264" font-family="Arial, sans-serif" font-size="9" fill="#22c55e">5 yr target</text>
|
||||
|
||||
<!-- Summary table -->
|
||||
<rect x="150" y="365" width="500" height="75" rx="6" fill="white" stroke="#e2e8f0"/>
|
||||
<text x="400" y="385" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Recommendation Summary</text>
|
||||
|
||||
<text x="170" y="405" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Current (16×250W):</text>
|
||||
<text x="290" y="405" font-family="Arial, sans-serif" font-size="10" fill="#ef4444">10.2 yr payback, 11% offset</text>
|
||||
|
||||
<text x="170" y="425" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Optimal (16×400W):</text>
|
||||
<text x="290" y="425" font-family="Arial, sans-serif" font-size="10" fill="#22c55e" font-weight="bold">6.4 yr payback, 18% offset</text>
|
||||
|
||||
<text x="480" y="405" font-family="Arial, sans-serif" font-size="10" fill="#64748b">100% Offset requires:</text>
|
||||
<text x="600" y="405" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">~36 kW (89 panels)</text>
|
||||
|
||||
<text x="480" y="425" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Consumption:</text>
|
||||
<text x="570" y="425" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">~24,000 kWh/yr</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
136
images/image-5.svg
Normal file
@@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500">
|
||||
<defs>
|
||||
<linearGradient id="steelGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#9ca3af;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#6b7280;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#4b5563;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="panelGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#1e40af;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#1e3a8a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="groundGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#92400e;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#78350f;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="500" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">Ground-Mount Rack Construction</text>
|
||||
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">Custom Steel Design - 2 Panels per Rack</text>
|
||||
|
||||
<!-- Ground -->
|
||||
<rect x="0" y="380" width="800" height="120" fill="url(#groundGrad)"/>
|
||||
<ellipse cx="200" cy="385" rx="150" ry="8" fill="#a3a38a" opacity="0.3"/>
|
||||
|
||||
<!-- Main Side View -->
|
||||
<text x="200" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Side View</text>
|
||||
|
||||
<!-- Steel posts in ground -->
|
||||
<rect x="80" y="260" width="12" height="140" fill="url(#steelGrad)" rx="2"/>
|
||||
<rect x="150" y="260" width="12" height="140" fill="url(#steelGrad)" rx="2"/>
|
||||
<rect x="220" y="260" width="12" height="140" fill="url(#steelGrad)" rx="2"/>
|
||||
|
||||
<!-- Post labels -->
|
||||
<text x="86" y="415" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="white">Post 1</text>
|
||||
<text x="156" y="415" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="white">Post 2</text>
|
||||
<text x="226" y="415" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="white">Post 3</text>
|
||||
|
||||
<!-- Horizontal rails -->
|
||||
<rect x="75" y="230" width="165" height="8" fill="url(#steelGrad)" rx="2" transform="rotate(-15, 157, 234)"/>
|
||||
<rect x="75" y="270" width="165" height="8" fill="url(#steelGrad)" rx="2" transform="rotate(-15, 157, 274)"/>
|
||||
|
||||
<!-- Solar panel (tilted) -->
|
||||
<g transform="rotate(-15, 157, 200)">
|
||||
<rect x="80" y="140" width="155" height="90" fill="url(#panelGrad)" rx="3" stroke="#1e3a8a" stroke-width="2"/>
|
||||
<!-- Panel grid pattern -->
|
||||
<g stroke="#3b82f6" stroke-width="1" opacity="0.4">
|
||||
<line x1="80" y1="170" x2="235" y2="170"/>
|
||||
<line x1="80" y1="200" x2="235" y2="200"/>
|
||||
<line x1="120" y1="140" x2="120" y2="230"/>
|
||||
<line x1="160" y1="140" x2="160" y2="230"/>
|
||||
<line x1="200" y1="140" x2="200" y2="230"/>
|
||||
</g>
|
||||
<!-- Panel cells -->
|
||||
<rect x="85" y="145" width="30" height="22" fill="#2563eb" opacity="0.5"/>
|
||||
<rect x="120" y="145" width="35" height="22" fill="#2563eb" opacity="0.5"/>
|
||||
<rect x="160" y="145" width="35" height="22" fill="#2563eb" opacity="0.5"/>
|
||||
<rect x="200" y="145" width="30" height="22" fill="#2563eb" opacity="0.5"/>
|
||||
</g>
|
||||
|
||||
<!-- Tilt angle indicator -->
|
||||
<path d="M 250 250 L 250 340 L 180 340" fill="none" stroke="#22c55e" stroke-width="2"/>
|
||||
<text x="260" y="300" font-family="Arial, sans-serif" font-size="11" fill="#22c55e">30° tilt</text>
|
||||
|
||||
<!-- Post depth indicator -->
|
||||
<line x1="60" y1="380" x2="60" y2="400" stroke="#ef4444" stroke-width="2"/>
|
||||
<text x="55" y="395" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#ef4444">~4' in ground</text>
|
||||
|
||||
<!-- Top View -->
|
||||
<text x="580" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Top View (Single Rack)</text>
|
||||
|
||||
<!-- Top view background -->
|
||||
<rect x="480" y="100" width="200" height="140" fill="#e2e8f0" rx="4"/>
|
||||
|
||||
<!-- Posts from above -->
|
||||
<circle cx="510" cy="130" r="8" fill="url(#steelGrad)"/>
|
||||
<circle cx="510" cy="210" r="8" fill="url(#steelGrad)"/>
|
||||
<circle cx="650" cy="130" r="8" fill="url(#steelGrad)"/>
|
||||
<circle cx="650" cy="210" r="8" fill="url(#steelGrad)"/>
|
||||
|
||||
<!-- Rails from above -->
|
||||
<rect x="510" y="125" width="140" height="6" fill="url(#steelGrad)" rx="2"/>
|
||||
<rect x="510" y="205" width="140" height="6" fill="url(#steelGrad)" rx="2"/>
|
||||
|
||||
<!-- Panels from above -->
|
||||
<rect x="520" y="120" width="60" height="100" fill="url(#panelGrad)" rx="2" stroke="#1e3a8a" stroke-width="1"/>
|
||||
<rect x="590" y="120" width="60" height="100" fill="url(#panelGrad)" rx="2" stroke="#1e3a8a" stroke-width="1"/>
|
||||
|
||||
<!-- Panel labels -->
|
||||
<text x="550" y="175" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="white">Panel 1</text>
|
||||
<text x="620" y="175" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="white">Panel 2</text>
|
||||
|
||||
<!-- Dimensions -->
|
||||
<line x1="480" y1="250" x2="680" y2="250" stroke="#64748b" stroke-width="1"/>
|
||||
<text x="580" y="265" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">~6' width</text>
|
||||
|
||||
<!-- Materials List -->
|
||||
<rect x="50" y="430" width="300" height="60" rx="4" fill="white" stroke="#e2e8f0"/>
|
||||
<text x="200" y="450" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#1e293b">Materials Per Rack</text>
|
||||
<text x="70" y="470" font-family="Arial, sans-serif" font-size="10" fill="#64748b">• 6× 8' Steel Posts ($34.97 ea)</text>
|
||||
<text x="220" y="470" font-family="Arial, sans-serif" font-size="10" fill="#64748b">• 14× U-bolts ($2.33 ea)</text>
|
||||
<text x="70" y="485" font-family="Arial, sans-serif" font-size="10" fill="#64748b">• 3× Adj Clamps ($3.77 ea)</text>
|
||||
<text x="220" y="485" font-family="Arial, sans-serif" font-size="10" fill="#64748b">• Total: ~$267/rack</text>
|
||||
|
||||
<!-- System Layout -->
|
||||
<rect x="400" y="280" width="350" height="140" rx="4" fill="white" stroke="#e2e8f0"/>
|
||||
<text x="575" y="300" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#1e293b">Full System Layout (8 Racks)</text>
|
||||
|
||||
<!-- Mini rack representations -->
|
||||
<g fill="#3b82f6" opacity="0.7">
|
||||
<rect x="420" y="320" width="30" height="20" rx="2"/>
|
||||
<rect x="460" y="320" width="30" height="20" rx="2"/>
|
||||
<rect x="500" y="320" width="30" height="20" rx="2"/>
|
||||
<rect x="540" y="320" width="30" height="20" rx="2"/>
|
||||
<rect x="580" y="320" width="30" height="20" rx="2"/>
|
||||
<rect x="620" y="320" width="30" height="20" rx="2"/>
|
||||
<rect x="660" y="320" width="30" height="20" rx="2"/>
|
||||
<rect x="700" y="320" width="30" height="20" rx="2"/>
|
||||
</g>
|
||||
|
||||
<text x="575" y="360" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">8 Racks × 2 Panels = 16 Panels Total</text>
|
||||
<text x="575" y="375" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">System: 4.0 kW DC | Array: ~48' × 6'</text>
|
||||
<text x="575" y="390" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#22c55e">1 rack completed ($360.95)</text>
|
||||
|
||||
<!-- U-bolt detail -->
|
||||
<rect x="720" y="430" width="60" height="60" rx="4" fill="white" stroke="#e2e8f0"/>
|
||||
<text x="750" y="448" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" font-weight="bold" fill="#1e293b">U-bolt</text>
|
||||
<path d="M 735 480 Q 750 460 765 480" fill="none" stroke="#6b7280" stroke-width="3"/>
|
||||
<circle cx="735" cy="480" r="3" fill="#6b7280"/>
|
||||
<circle cx="765" cy="480" r="3" fill="#6b7280"/>
|
||||
<text x="750" y="500" text-anchor="middle" font-family="Arial, sans-serif" font-size="8" fill="#94a3b8">5/16" × 5-3/8"</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.8 KiB |
167
images/v2-image-1.svg
Normal file
@@ -0,0 +1,167 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500">
|
||||
<defs>
|
||||
<linearGradient id="solarGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#f59e0b;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#d97706;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="gridGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#1d4ed8;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="batteryGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#10b981;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#059669;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feDropShadow dx="2" dy="2" stdDeviation="3" flood-opacity="0.2"/>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="500" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="35" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="bold" fill="#1e293b">SITER Solar System Architecture</text>
|
||||
|
||||
<!-- Sun -->
|
||||
<circle cx="100" cy="120" r="40" fill="#fbbf24"/>
|
||||
<g stroke="#fbbf24" stroke-width="3">
|
||||
<line x1="100" y1="60" x2="100" y2="45"/>
|
||||
<line x1="100" y1="180" x2="100" y2="195"/>
|
||||
<line x1="40" y1="120" x2="25" y2="120"/>
|
||||
<line x1="160" y1="120" x2="175" y2="120"/>
|
||||
<line x1="55" y1="75" x2="45" y2="65"/>
|
||||
<line x1="145" y1="165" x2="155" y2="175"/>
|
||||
<line x1="55" y1="165" x2="45" y2="175"/>
|
||||
<line x1="145" y1="75" x2="155" y2="65"/>
|
||||
</g>
|
||||
<text x="100" y="215" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">Solar Radiation</text>
|
||||
<text x="100" y="230" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">5.52 kWh/m²/day</text>
|
||||
|
||||
<!-- Solar Panels -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="180" y="80" width="140" height="100" rx="8" fill="url(#solarGrad)"/>
|
||||
<g fill="#92400e" opacity="0.3">
|
||||
<rect x="190" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="220" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="250" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="280" y="90" width="25" height="35" rx="2"/>
|
||||
<rect x="190" y="130" width="25" height="35" rx="2"/>
|
||||
<rect x="220" y="130" width="25" height="35" rx="2"/>
|
||||
<rect x="250" y="130" width="25" height="35" rx="2"/>
|
||||
<rect x="280" y="130" width="25" height="35" rx="2"/>
|
||||
</g>
|
||||
</g>
|
||||
<text x="250" y="200" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Solar Array</text>
|
||||
<text x="250" y="218" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b">16 × 250W = 4.0 kW DC</text>
|
||||
<text x="250" y="233" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">Ground Mount, 30° Tilt</text>
|
||||
|
||||
<!-- Arrow Sun to Panels -->
|
||||
<path d="M145 120 L175 120" stroke="#f59e0b" stroke-width="3" marker-end="url(#arrowOrange)"/>
|
||||
<defs>
|
||||
<marker id="arrowOrange" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
|
||||
<path d="M0,0 L0,6 L9,3 z" fill="#f59e0b"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<!-- Inverter -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="370" y="100" width="100" height="60" rx="6" fill="#475569"/>
|
||||
<rect x="380" y="110" width="30" height="40" rx="2" fill="#1e293b"/>
|
||||
<rect x="415" y="110" width="45" height="15" rx="2" fill="#22c55e"/>
|
||||
<rect x="415" y="130" width="45" height="8" rx="1" fill="#3b82f6"/>
|
||||
<rect x="415" y="142" width="45" height="8" rx="1" fill="#eab308"/>
|
||||
</g>
|
||||
<text x="420" y="180" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Sol-Ark 5K</text>
|
||||
<text x="420" y="195" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Hybrid Inverter</text>
|
||||
|
||||
<!-- Arrow Panels to Inverter -->
|
||||
<path d="M320 130 L365 130" stroke="#f59e0b" stroke-width="2" marker-end="url(#arrowOrange)"/>
|
||||
<text x="342" y="122" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">DC</text>
|
||||
|
||||
<!-- Home -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="540" y="70" width="120" height="90" rx="8" fill="#e2e8f0"/>
|
||||
<polygon points="540,70 600,30 660,70" fill="#64748b"/>
|
||||
<rect x="580" y="110" width="40" height="50" fill="#3b82f6" opacity="0.3"/>
|
||||
<rect x="555" y="100" width="25" height="20" fill="#1e293b" opacity="0.2"/>
|
||||
<rect x="620" y="100" width="25" height="20" fill="#1e293b" opacity="0.2"/>
|
||||
</g>
|
||||
<text x="600" y="180" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">SITER</text>
|
||||
<text x="600" y="198" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">~1,885 kWh/month</text>
|
||||
|
||||
<!-- Arrow Inverter to Home -->
|
||||
<path d="M470 130 L535 115" stroke="#22c55e" stroke-width="2" marker-end="url(#arrowGreen)"/>
|
||||
<defs>
|
||||
<marker id="arrowGreen" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
|
||||
<path d="M0,0 L0,6 L9,3 z" fill="#22c55e"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<text x="502" y="115" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">AC</text>
|
||||
|
||||
<!-- Base Power Battery -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="540" y="260" width="120" height="80" rx="8" fill="url(#batteryGrad)"/>
|
||||
<rect x="590" y="250" width="20" height="10" rx="2" fill="#059669"/>
|
||||
<rect x="555" y="280" width="90" height="15" rx="2" fill="#064e3b"/>
|
||||
<rect x="555" y="280" width="70" height="15" rx="2" fill="#34d399"/>
|
||||
<text x="600" y="318" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="white">78%</text>
|
||||
</g>
|
||||
<text x="600" y="360" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Base Power Battery</text>
|
||||
<text x="600" y="378" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">+ Automatic Transfer Switch</text>
|
||||
|
||||
<!-- Arrow Home to Battery -->
|
||||
<path d="M600 165 L600 255" stroke="#10b981" stroke-width="2" stroke-dasharray="5,3" marker-end="url(#arrowGreen)"/>
|
||||
<text x="615" y="210" font-family="Arial, sans-serif" font-size="9" fill="#64748b">charge</text>
|
||||
|
||||
<!-- Grid -->
|
||||
<g filter="url(#shadow)">
|
||||
<rect x="370" y="260" width="100" height="80" rx="6" fill="url(#gridGrad)"/>
|
||||
<g stroke="white" stroke-width="2" opacity="0.5">
|
||||
<line x1="380" y1="280" x2="460" y2="280"/>
|
||||
<line x1="380" y1="300" x2="460" y2="300"/>
|
||||
<line x1="380" y1="320" x2="460" y2="320"/>
|
||||
<line x1="400" y1="270" x2="400" y2="330"/>
|
||||
<line x1="420" y1="270" x2="420" y2="330"/>
|
||||
<line x1="440" y1="270" x2="440" y2="330"/>
|
||||
</g>
|
||||
</g>
|
||||
<text x="420" y="360" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Oncor Grid</text>
|
||||
<text x="420" y="378" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Utility Delivery</text>
|
||||
|
||||
<!-- Arrow Inverter to Grid -->
|
||||
<path d="M420 160 L420 255" stroke="#3b82f6" stroke-width="2" marker-end="url(#arrowBlue)"/>
|
||||
<defs>
|
||||
<marker id="arrowBlue" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
|
||||
<path d="M0,0 L0,6 L9,3 z" fill="#3b82f6"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<text x="435" y="210" font-family="Arial, sans-serif" font-size="9" fill="#64748b">export</text>
|
||||
<text x="435" y="220" font-family="Arial, sans-serif" font-size="8" fill="#94a3b8">@ $0.04/kWh</text>
|
||||
|
||||
<!-- Grid to Battery -->
|
||||
<path d="M470 300 L535 300" stroke="#3b82f6" stroke-width="2" stroke-dasharray="5,3" marker-end="url(#arrowBlue)"/>
|
||||
<text x="502" y="292" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">backup</text>
|
||||
|
||||
<!-- Stats Box -->
|
||||
<rect x="50" y="420" width="350" height="60" rx="6" fill="#f1f5f9"/>
|
||||
<text x="225" y="440" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#475569">15-Month Billing Summary</text>
|
||||
<text x="70" y="460" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Avg: 1,885 kWh/mo | $264.47/mo</text>
|
||||
<text x="70" y="475" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Rate: $0.140/kWh effective</text>
|
||||
<text x="280" y="460" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Summer peak: 2,912 kWh</text>
|
||||
<text x="280" y="475" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Winter low: 1,333 kWh</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<rect x="420" y="420" width="330" height="60" rx="6" fill="#f1f5f9"/>
|
||||
<text x="585" y="440" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#475569">Energy Flow</text>
|
||||
|
||||
<line x1="440" y1="460" x2="480" y2="460" stroke="#f59e0b" stroke-width="3"/>
|
||||
<text x="490" y="464" font-family="Arial, sans-serif" font-size="10" fill="#64748b">DC Power</text>
|
||||
|
||||
<line x1="560" y1="460" x2="600" y2="460" stroke="#22c55e" stroke-width="3"/>
|
||||
<text x="610" y="464" font-family="Arial, sans-serif" font-size="10" fill="#64748b">AC to Home</text>
|
||||
|
||||
<line x1="680" y1="460" x2="720" y2="460" stroke="#3b82f6" stroke-width="3"/>
|
||||
<text x="730" y="464" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Grid</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.3 KiB |
121
images/v2-image-2.svg
Normal file
@@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 450">
|
||||
<defs>
|
||||
<linearGradient id="barGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#f59e0b;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#d97706;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="consumptionGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#1d4ed8;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="450" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">Solar Production vs Monthly Consumption</text>
|
||||
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">16 × 250W panels = 4.0 kW DC | SITER, Pflugerville, TX</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="80" y1="70" x2="80" y2="340" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="40" y="205" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b" transform="rotate(-90, 40, 205)">kWh</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="70" y="344" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">0</text>
|
||||
<text x="70" y="289" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">750</text>
|
||||
<text x="70" y="234" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">1,500</text>
|
||||
<text x="70" y="179" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">2,250</text>
|
||||
<text x="70" y="124" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">3,000</text>
|
||||
<text x="70" y="74" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">3,750</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="80" y1="284" x2="760" y2="284"/>
|
||||
<line x1="80" y1="229" x2="760" y2="229"/>
|
||||
<line x1="80" y1="174" x2="760" y2="174"/>
|
||||
<line x1="80" y1="119" x2="760" y2="119"/>
|
||||
<line x1="80" y1="74" x2="760" y2="74"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="80" y1="340" x2="760" y2="340" stroke="#cbd5e1" stroke-width="1"/>
|
||||
|
||||
<!-- Monthly data: Consumption (blue) vs Solar (orange) -->
|
||||
<!-- Scale: 3500 kWh = 270px height, so each kWh = 0.077px -->
|
||||
<!-- Y offset: 340 - value * 0.077 -->
|
||||
|
||||
<!-- Jan: Consumption ~1333 (winter avg), Solar 450 -->
|
||||
<rect x="95" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="120" y="305" width="22" height="35" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="117" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jan</text>
|
||||
|
||||
<!-- Feb: Consumption ~1333, Solar 453 -->
|
||||
<rect x="150" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="175" y="305" width="22" height="35" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="172" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Feb</text>
|
||||
|
||||
<!-- Mar: Consumption ~1777 (shoulder), Solar 492 -->
|
||||
<rect x="205" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="230" y="302" width="22" height="38" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="227" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Mar</text>
|
||||
|
||||
<!-- Apr: Consumption ~1777, Solar 508 -->
|
||||
<rect x="260" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="285" y="301" width="22" height="39" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="282" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Apr</text>
|
||||
|
||||
<!-- May: Consumption ~1777, Solar 534 -->
|
||||
<rect x="315" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="340" y="299" width="22" height="41" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="337" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">May</text>
|
||||
|
||||
<!-- Jun: Consumption ~2912 (summer), Solar 514 -->
|
||||
<rect x="370" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="395" y="300" width="22" height="40" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="392" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jun</text>
|
||||
|
||||
<!-- Jul: Consumption ~2912, Solar 555 -->
|
||||
<rect x="425" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="450" y="297" width="22" height="43" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="447" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jul</text>
|
||||
|
||||
<!-- Aug: Consumption ~2912, Solar 571 (peak) -->
|
||||
<rect x="480" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="505" y="296" width="22" height="44" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="502" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Aug</text>
|
||||
|
||||
<!-- Sep: Consumption ~2912, Solar 514 -->
|
||||
<rect x="535" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="560" y="300" width="22" height="40" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="557" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Sep</text>
|
||||
|
||||
<!-- Oct: Consumption ~1777, Solar 516 -->
|
||||
<rect x="590" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="615" y="300" width="22" height="40" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="612" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Oct</text>
|
||||
|
||||
<!-- Nov: Consumption ~1333, Solar 469 -->
|
||||
<rect x="645" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="670" y="304" width="22" height="36" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="667" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Nov</text>
|
||||
|
||||
<!-- Dec: Consumption ~1333, Solar 429 -->
|
||||
<rect x="700" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<rect x="725" y="307" width="22" height="33" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="722" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Dec</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<rect x="250" y="375" width="300" height="60" rx="6" fill="white" stroke="#e2e8f0"/>
|
||||
<rect x="270" y="395" width="20" height="15" fill="url(#consumptionGrad)" rx="2"/>
|
||||
<text x="300" y="407" font-family="Arial, sans-serif" font-size="11" fill="#64748b">Monthly Consumption (avg by season)</text>
|
||||
<rect x="270" y="415" width="20" height="15" fill="url(#barGrad)" rx="2"/>
|
||||
<text x="300" y="427" font-family="Arial, sans-serif" font-size="11" fill="#64748b">Solar Production (NREL estimate)</text>
|
||||
|
||||
<!-- Summary stats -->
|
||||
<rect x="580" y="375" width="180" height="60" rx="4" fill="#fef3c7"/>
|
||||
<text x="670" y="395" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#92400e">Annual Production: 6,004 kWh</text>
|
||||
<text x="670" y="412" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#a16207">Annual Consumption: ~22,600 kWh</text>
|
||||
<text x="670" y="427" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#92400e" font-weight="bold">Offset: 26.6%</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.4 KiB |
131
images/v2-image-3.svg
Normal file
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 400">
|
||||
<defs>
|
||||
<linearGradient id="paybackGrad" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#ef4444;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#22c55e;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="savingsGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#22c55e;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#16a34a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="costGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ef4444;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#dc2626;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="400" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">10-Year Payback Timeline</text>
|
||||
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">16 × 250W System | $4,100 Investment | $402/yr Savings | $264/mo Avg Bill</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="100" y1="70" x2="100" y2="330" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="35" y="200" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b" transform="rotate(-90, 35, 200)">Cumulative ($)</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="90" y="334" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">-$4,500</text>
|
||||
<text x="90" y="274" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">-$3,000</text>
|
||||
<text x="90" y="214" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">-$1,500</text>
|
||||
<text x="90" y="154" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">$0</text>
|
||||
<text x="90" y="94" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">$1,500</text>
|
||||
|
||||
<!-- Zero line -->
|
||||
<line x1="100" y1="154" x2="750" y2="154" stroke="#64748b" stroke-width="2" stroke-dasharray="5,5"/>
|
||||
<text x="760" y="158" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Breakeven</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="100" y1="274" x2="750" y2="274"/>
|
||||
<line x1="100" y1="214" x2="750" y2="214"/>
|
||||
<line x1="100" y1="94" x2="750" y2="94"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="100" y1="330" x2="750" y2="330" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="425" y="380" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b">Years</text>
|
||||
|
||||
<!-- X-axis labels -->
|
||||
<text x="100" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">0</text>
|
||||
<text x="159" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">1</text>
|
||||
<text x="218" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">2</text>
|
||||
<text x="277" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">3</text>
|
||||
<text x="336" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">4</text>
|
||||
<text x="395" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">5</text>
|
||||
<text x="454" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">6</text>
|
||||
<text x="513" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">7</text>
|
||||
<text x="572" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">8</text>
|
||||
<text x="631" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">9</text>
|
||||
<text x="690" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">10</text>
|
||||
<text x="749" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">11</text>
|
||||
|
||||
<!-- Area fill under the line (red zone) -->
|
||||
<polygon points="100,154 100,334 749,159.5 749,154" fill="#fef2f2" opacity="0.7"/>
|
||||
|
||||
<!-- Area fill under the line (green zone after breakeven) -->
|
||||
<polygon points="100,154 749,154 749,159.5" fill="#f0fdf4" opacity="0.7"/>
|
||||
|
||||
<!-- Net position line -->
|
||||
<!-- Year 0: -$4,100 (y=154 + 4100*0.04 = 318) -->
|
||||
<!-- Year 1: -$3,698 (y=154 + 3698*0.04 = 302) -->
|
||||
<!-- Year 2: -$3,296 (y=154 + 3296*0.04 = 286) -->
|
||||
<!-- Year 3: -$2,894 (y=154 + 2894*0.04 = 270) -->
|
||||
<!-- Year 4: -$2,491 (y=154 + 2491*0.04 = 254) -->
|
||||
<!-- Year 5: -$2,089 (y=154 + 2089*0.04 = 238) -->
|
||||
<!-- Year 6: -$1,687 (y=154 + 1687*0.04 = 221) -->
|
||||
<!-- Year 7: -$1,284 (y=154 + 1284*0.04 = 205) -->
|
||||
<!-- Year 8: -$882 (y=154 + 882*0.04 = 189) -->
|
||||
<!-- Year 9: -$480 (y=154 + 480*0.04 = 173) -->
|
||||
<!-- Year 10: -$78 (y=154 + 78*0.04 = 157) -->
|
||||
<!-- Year 11: +$325 (y=154 - 325*0.04 = 141) -->
|
||||
|
||||
<polyline
|
||||
points="100,318 159,302 218,286 277,270 336,254 395,238 454,221 513,205 572,189 631,173 690,157 749,141"
|
||||
fill="none"
|
||||
stroke="url(#paybackGrad)"
|
||||
stroke-width="3"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"/>
|
||||
|
||||
<!-- Data points -->
|
||||
<g fill="#1e293b">
|
||||
<circle cx="100" cy="318" r="5"/>
|
||||
<circle cx="159" cy="302" r="4"/>
|
||||
<circle cx="218" cy="286" r="4"/>
|
||||
<circle cx="277" cy="270" r="4"/>
|
||||
<circle cx="336" cy="254" r="4"/>
|
||||
<circle cx="395" cy="238" r="4"/>
|
||||
<circle cx="454" cy="221" r="4"/>
|
||||
<circle cx="513" cy="205" r="4"/>
|
||||
<circle cx="572" cy="189" r="4"/>
|
||||
<circle cx="631" cy="173" r="4"/>
|
||||
<circle cx="690" cy="157" r="4"/>
|
||||
<circle cx="749" cy="141" r="5" fill="#22c55e"/>
|
||||
</g>
|
||||
|
||||
<!-- Key milestones labels -->
|
||||
<text x="100" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#ef4444">-$4,100</text>
|
||||
<text x="395" y="252" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">-$2,089</text>
|
||||
<text x="690" y="171" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">-$78</text>
|
||||
<text x="749" y="130" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#22c55e" font-weight="bold">+$325</text>
|
||||
|
||||
<!-- Breakeven marker -->
|
||||
<line x1="715" y1="154" x2="715" y2="330" stroke="#22c55e" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="715" y="365" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#22c55e" font-weight="bold">~10.2 yrs</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<rect x="120" y="70" width="200" height="50" rx="4" fill="white" stroke="#e2e8f0"/>
|
||||
<circle cx="140" cy="88" r="6" fill="#ef4444"/>
|
||||
<text x="155" y="92" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Investment (Year 0)</text>
|
||||
<circle cx="140" cy="108" r="6" fill="#22c55e"/>
|
||||
<text x="155" y="112" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Profit (Year 11+)</text>
|
||||
|
||||
<!-- Stats box -->
|
||||
<rect x="400" y="70" width="200" height="50" rx="4" fill="#fef3c7"/>
|
||||
<text x="500" y="88" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#92400e">Monthly Savings: $33.52</text>
|
||||
<text x="500" y="103" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#92400e">Bill Offset: 12.7%</text>
|
||||
<text x="500" y="118" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#92400e">(of $264.47 avg bill)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
145
images/v2-image-4.svg
Normal file
@@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 450">
|
||||
<defs>
|
||||
<linearGradient id="scenarioGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#1d4ed8;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="highlightGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#22c55e;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#16a34a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="800" height="450" fill="#f8fafc"/>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">System Size Comparison (Updated)</text>
|
||||
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">NREL PVWatts Analysis: 16 Panels at Different Wattages | Avg Bill: $264.47/mo</text>
|
||||
|
||||
<!-- Left Chart: Annual Production -->
|
||||
<text x="200" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Annual Production (kWh)</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="60" y1="100" x2="60" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="25" y="210" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b" transform="rotate(-90, 25, 210)">kWh/year</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="55" y="324" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">0</text>
|
||||
<text x="55" y="264" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">5k</text>
|
||||
<text x="55" y="204" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">10k</text>
|
||||
<text x="55" y="144" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">15k</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="60" y1="260" x2="340" y2="260"/>
|
||||
<line x1="60" y1="200" x2="340" y2="200"/>
|
||||
<line x1="60" y1="140" x2="340" y2="140"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="60" y1="320" x2="340" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
|
||||
<!-- Bars: 250W=6004, 300W=7204, 350W=8405, 400W=9606, 450W=10806 -->
|
||||
<!-- Scale: 15000 kWh = 220px, so 1 kWh = 0.0147px -->
|
||||
|
||||
<!-- 250W: 6004 kWh = 88px -->
|
||||
<rect x="75" y="232" width="40" height="88" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="95" y="225" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">6,004</text>
|
||||
<text x="95" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">250W</text>
|
||||
|
||||
<!-- 300W: 7204 kWh = 106px -->
|
||||
<rect x="125" y="214" width="40" height="106" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="145" y="207" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">7,204</text>
|
||||
<text x="145" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">300W</text>
|
||||
|
||||
<!-- 350W: 8405 kWh = 123px -->
|
||||
<rect x="175" y="197" width="40" height="123" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="195" y="190" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">8,405</text>
|
||||
<text x="195" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">350W</text>
|
||||
|
||||
<!-- 400W: 9606 kWh = 141px -->
|
||||
<rect x="225" y="179" width="40" height="141" fill="url(#highlightGrad)" rx="3"/>
|
||||
<text x="245" y="172" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b" font-weight="bold">9,606</text>
|
||||
<text x="245" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#22c55e" font-weight="bold">400W</text>
|
||||
|
||||
<!-- 450W: 10806 kWh = 158px -->
|
||||
<rect x="275" y="162" width="40" height="158" fill="url(#scenarioGrad)" rx="3"/>
|
||||
<text x="295" y="155" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">10,806</text>
|
||||
<text x="295" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">450W</text>
|
||||
|
||||
<!-- Current system marker -->
|
||||
<text x="95" y="350" text-anchor="middle" font-family="Arial, sans-serif" font-size="8" fill="#ef4444">(current)</text>
|
||||
|
||||
<!-- Right Chart: Payback Period -->
|
||||
<text x="580" y="80" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#1e293b">Payback Period (Years)</text>
|
||||
|
||||
<!-- Y-axis -->
|
||||
<line x1="440" y1="100" x2="440" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<text x="405" y="210" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b" transform="rotate(-90, 405, 210)">Years</text>
|
||||
|
||||
<!-- Y-axis labels -->
|
||||
<text x="435" y="324" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">0</text>
|
||||
<text x="435" y="264" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">5</text>
|
||||
<text x="435" y="204" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">10</text>
|
||||
<text x="435" y="144" text-anchor="end" font-family="Arial, sans-serif" font-size="9" fill="#94a3b8">15</text>
|
||||
|
||||
<!-- Grid lines -->
|
||||
<g stroke="#e2e8f0" stroke-width="1">
|
||||
<line x1="440" y1="260" x2="720" y2="260"/>
|
||||
<line x1="440" y1="200" x2="720" y2="200"/>
|
||||
<line x1="440" y1="140" x2="720" y2="140"/>
|
||||
</g>
|
||||
|
||||
<!-- X-axis -->
|
||||
<line x1="440" y1="320" x2="720" y2="320" stroke="#cbd5e1" stroke-width="1"/>
|
||||
|
||||
<!-- Bars: 250W=10.2yr, 300W=8.5yr, 350W=7.3yr, 400W=6.4yr, 450W=5.7yr -->
|
||||
<!-- Scale: 15 yr = 220px, so 1 yr = 14.67px -->
|
||||
|
||||
<!-- 250W: 10.2 yr = 150px -->
|
||||
<rect x="455" y="170" width="40" height="150" fill="#ef4444" rx="3"/>
|
||||
<text x="475" y="163" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">10.2</text>
|
||||
<text x="475" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">250W</text>
|
||||
|
||||
<!-- 300W: 8.5 yr = 125px -->
|
||||
<rect x="505" y="195" width="40" height="125" fill="#f97316" rx="3"/>
|
||||
<text x="525" y="188" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">8.5</text>
|
||||
<text x="525" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">300W</text>
|
||||
|
||||
<!-- 350W: 7.3 yr = 107px -->
|
||||
<rect x="555" y="213" width="40" height="107" fill="#eab308" rx="3"/>
|
||||
<text x="575" y="206" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">7.3</text>
|
||||
<text x="575" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">350W</text>
|
||||
|
||||
<!-- 400W: 6.4 yr = 94px -->
|
||||
<rect x="605" y="226" width="40" height="94" fill="url(#highlightGrad)" rx="3"/>
|
||||
<text x="625" y="219" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b" font-weight="bold">6.4</text>
|
||||
<text x="625" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#22c55e" font-weight="bold">400W</text>
|
||||
|
||||
<!-- 450W: 5.7 yr = 84px -->
|
||||
<rect x="655" y="236" width="40" height="84" fill="#22c55e" rx="3"/>
|
||||
<text x="675" y="229" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#1e293b">5.7</text>
|
||||
<text x="675" y="335" text-anchor="middle" font-family="Arial, sans-serif" font-size="9" fill="#64748b">450W</text>
|
||||
|
||||
<!-- Target line -->
|
||||
<line x1="440" y1="260" x2="720" y2="260" stroke="#22c55e" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<text x="725" y="264" font-family="Arial, sans-serif" font-size="9" fill="#22c55e">5 yr target</text>
|
||||
|
||||
<!-- Summary table -->
|
||||
<rect x="150" y="365" width="500" height="75" rx="6" fill="white" stroke="#e2e8f0"/>
|
||||
<text x="400" y="385" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" font-weight="bold" fill="#1e293b">Recommendation Summary (Updated)</text>
|
||||
|
||||
<text x="170" y="405" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Current (16×250W):</text>
|
||||
<text x="290" y="405" font-family="Arial, sans-serif" font-size="10" fill="#ef4444">10.2 yr payback, 12.7% offset</text>
|
||||
|
||||
<text x="170" y="425" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Optimal (16×400W):</text>
|
||||
<text x="290" y="425" font-family="Arial, sans-serif" font-size="10" fill="#22c55e" font-weight="bold">6.4 yr payback, 20.3% offset</text>
|
||||
|
||||
<text x="480" y="405" font-family="Arial, sans-serif" font-size="10" fill="#64748b">100% Offset requires:</text>
|
||||
<text x="600" y="405" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">~32 kW (80 panels)</text>
|
||||
|
||||
<text x="480" y="425" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Consumption:</text>
|
||||
<text x="570" y="425" font-family="Arial, sans-serif" font-size="10" fill="#1e293b">~22,600 kWh/yr</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.7 KiB |