Everything you need to add sessions, update rates, maintain files, and understand how your Jekyll + CloudCannon charging tracker works.
An iPhone Shortcut alternative exists — see the Appendix (last slide) for migration steps when ready
Each charging session is a .md file in _charging/ with front matter:
All .md files load as site.charging — iterated by dashboard, history, and analytics pages.
Sessions are injected as JSON and enriched client-side — savings, CO₂, efficiency, temperature correlation.
No database, no server — GitHub Pages serves plain HTML. The site costs nothing to host.
Go to app.cloudcannon.com → your site → Charging Sessions in the left nav.
A blank form opens. Fill in Date first — this controls the filename.
Location is a dropdown. Vehicle defaults to current car. Include start/end time, SOC start/end/added, and miles added from FordPass. Cost = 0 for free charging.
CloudCannon commits the file to GitHub. GitHub Actions builds the site. Run backfill_temperature.py periodically to fill in temperature data.
The site detects the charging network from the location string and colors the badge accordingly. The detection is keyword-based — the location just needs to contain the keyword.
Adding a new location to the CloudCannon dropdown:
In VS Code, find the values: list under location.
e.g. - "Tesla, Ann Arbor" — keep the quotes if the name has a comma.
New location appears in the dropdown for all future sessions after CloudCannon rebuilds.
All electricity rates and gas savings assumptions now live in one place: _data/rates.yml. You never touch the charging .md pages for rate changes. Jekyll reads this file as real numbers so decimal rates work perfectly.
Find "Energy Charge per kWh" on your DTE or Consumers Energy statement. Use your blended rate (total cost ÷ total kWh) if you have a tiered plan.
Find the home_electricity: section. Add a new entry at the bottom with the date of your next Home session and the new rate.
Always add at the bottom — earliest first. Each session uses the last entry whose date is on or before the session date. Never delete old entries.
Unlike before, you only edit _data/rates.yml. Both the dashboard and history page update automatically on the next build.
Gas savings use period-based rates from _data/rates.yml — each session is calculated with the rates that were current when it happened. The mpg field is your baseline (27 mpg). LRB's sessions automatically use 23 mpg via a per-vehicle override in the code — you don't need a separate rates.yml entry for this.
Field meaning
Start date of this period (YYYY-MM-DD). Each session uses the last entry whose date is on or before it.
Your baseline MPG (27 = your previous car). LRB's sessions always use 23 mpg regardless — this is a per-vehicle override in charging-dashboard.md and charging-analytics.md. Don't change this field to 23.
Average gas price per gallon in dollars. Check GasBuddy for current Michigan average.
Real-world EV efficiency. ~3.0 summer, ~2.5 winter. Check FordPass for your rolling average. Applied to both vehicles.
| 2025 Mach-E GT | 27 mpg |
| 2026 Mach-E SR | 27 mpg |
| LRB's 2025 Mach-E GT | 23 mpg |
| LRB's 2026 Mach-E SR | 23 mpg |
Usable Battery Capacity — also hardcoded per vehicle
These values live in VEHICLE_UBE in charging-analytics.md. Used to estimate battery degradation over time in the Session Detail section.
Must EXACTLY match the vehicle field in your charging files. Case-sensitive.
Current reading. Update this and column 3 regularly (monthly or whenever).
Only sessions ON OR BEFORE this date count toward this vehicle's cost/mile.
Date of your very first session for this vehicle. Set once, don't change.
fix_charging_files.py
Strips timestamps from dates, fixes null notes, adds missing fields (SOC, miles_added, temperature_c/f), removes CloudCannon-injected keys.
Renames to YYYY-MM-DD-{slug}-N.md sorted chronologically. Preview before confirm.
backfill_temperature.py
Uses Open-Meteo ERA5 archive API — free, no API key. Looks up lat/lng from _data/locations.yml, fetches temperature at session start time, writes temperature_c and temperature_f to each session file.
One API call per unique (location, date) — not per session. Skips sessions already populated. Requires lat/lng in _data/locations.yml for each location.
CloudCannon handles git automatically when you save there. For edits you make directly in VS Code, you need to commit and push manually.
Branch rule of thumb
Adding sessions, updating odometer, tweaking rates — small routine changes. Fine on main.
Restructuring pages, adding new features, changing config files significantly. Create a branch so main stays live while you experiment.
Master CloudCannon config. Defines the Charging Sessions collection, the location dropdown values, field types (date, number, textarea), and the file naming template.
Template for new session files. Must be a .md file (not .yaml) so CloudCannon creates .md sessions. Contains default field values.
Jekyll-only config. Site title, URL, timezone, theme, and the charging collection definition. No CloudCannon config here — keep them separate.
Analytics page sections (in order)
8 hero cards — coast-to-coast trips, Earth %, home electricity months, trees, gas fill-ups, tanker trucks, iPhone charges, CO₂ balloons. Vehicle-filter aware.
Odometer history, miles/month, gas price history, real efficiency (mi/kWh ↔ Wh/mi dual axis). Reads from _data/mileage.yml.
Interactive slider $2–$6/gal. Updates total savings, monthly avg, 5-yr projection, and cumulative chart in real time.
Hour × day-of-week heatmap. Color = dominant charging type, intensity = frequency. Only sessions with recorded start time.
Efficiency vs. temp scatter (exclude-home toggle), monthly temp vs. efficiency dual-axis, monthly temp distribution. Hidden until 5+ sessions have temperature data.
Road trip cards — trip_notes.yml
Routine tasks
Annual car swap checklist
Files & their purpose
Not currently in use — CloudCannon is the active workflow (slide 3). This appendix documents everything needed when you're ready to migrate. No data changes required — the session file format is identical either way.
What the shortcut does
Uses Apple Intelligence "Use Cloud model" to extract all session fields from a FordPass "Charge details" screenshot — date, kWh, cost, start/end time, SOC, miles. No manual typing.
If no screenshot is available, the Shortcut prompts for each field. Same end result.
Creates the .md file via GitHub API — bypasses CloudCannon. Site rebuilds in ~60 seconds. Works entirely from your phone.
Migration checklist