Files
SITER-Solar/images/image-2.svg
Charles N Wyble 400764a9ff 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>
2026-02-27 16:45:41 -05:00

112 lines
7.2 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>