Live Monitoring
Real-time production, battery percentage, voltage and current, load draw, efficiency, controller temperature, weather, and alerts, updating every second while the app is open.
Horizon Science ยท Software
The control software for the Horizon Science solar ecosystem: a working web app for monitoring solar production, managing batteries and loads, and controlling the Sunflower Solar Panel.
This project started as the "Solar Controller" idea: a smarter way to manage solar panels and batteries than the basic charge controllers most setups use. Instead of waiting for the hardware to exist first, I built the software side as a real, working web app.
The dashboard acts as the control room for a Horizon solar setup. It shows live production, battery state, what's plugged in, energy history, and the position of the Sunflower panel, all in one place. The goal is for it to feel simple for beginners while still giving deeper controls and data to people who want them.
Right now the app runs on a built-in simulated controller (the "Solar Garden" demo system), so every screen works in the browser with realistic behaviour: production drifts with passing clouds, the battery charges or drains depending on what's switched on, and daily energy accumulates in real time.
The simulation lives in its own module, so when the physical Sunflower prototype and its controller are ready, real hardware data can replace the simulated feed without rebuilding the interface.
The five main views of the app. Click any screen to view it full size.
The home screen. Live production in watts, net battery charge, load draw, efficiency, and weather sit up top, alongside the Sunflower panel's current elevation and azimuth. The stat cards along the bottom cover battery, daily generation, controller temperature, and signal.
Four tracking modes: Sun Seeker, Storm Guard, Night Mode, and Manual. Manual mode gives you a draggable compass dial for azimuth and a slider for elevation, and every command runs through a firmware safety layer before any motor would actually move.
Everything plugged into the controller. Each load can be switched on or off, given a daily schedule or a countdown timer, and capped at a wattage limit. Loads can also shed themselves automatically when the battery drops below a chosen threshold, then come back once it recovers, so the important things stay powered when the battery runs low.
Energy history across day, week, month, and year views, with week totals, best day, daily average, CO2 offset, and today's peak. My favourite touch is the "Did You Know" cards, which turn raw generation into everyday equivalents like phone charges and lightbulb hours.
Connected panels and controllers, Horizon or third-party, plus a pairing flow for adding new ones, the system profile, and personalization. You can switch accent colours, background presets, and flip between the dark theme and a light mode styled after a warm cream palette.
The features behind those five screens.
Real-time production, battery percentage, voltage and current, load draw, efficiency, controller temperature, weather, and alerts, updating every second while the app is open.
Smart plug control with schedules, timers, wattage limits, and automatic low-battery shedding, so the most important loads stay powered when the battery runs low.
Tracking modes and manual positioning for the Sunflower panel, with a command preview and a firmware safety layer that checks every movement request before it would reach the motors.
The app is built with React, Vite, and Tailwind CSS, organized into separate view, hook, and component modules so each tab is easy to work on independently. Settings, devices, and loads persist locally between sessions, and the layout adapts to phones with a bottom tab bar instead of the desktop sidebar.
The visual design comes in a warm cream light theme (shown here) and a dark theme with gold accents to match the rest of the Horizon Science identity, plus switchable accent colours and background presets.
The dashboard itself is working software: every view, control, and setting functions today on the simulated controller. What it's waiting on is the physical side of the Sunflower Solar Panel, which Charlie and I are prototyping separately.
The next step is connecting the app to real controller hardware, likely an ESP32 measuring actual solar input and battery data, so the simulated feed can be swapped for live readings from the garden.