Operations software for utility-scale solar. I designed how a control room sees what a storm will cost before it arrives, stows each block just in time, and follows the damage all the way to a fixed plant.
- Role
- Product design, end to end (solo)
- Year
- 2026
- Platform
- Control room web
- Domain
- Solar operations · Utility scale
- Delivered
- Operating rules, IA, screens, coded prototype, recordings
- Stack
- Figma, FigJam, React, TypeScript

A utility-scale solar plant earns money by pointing thousands of trackers at the sun, and survives hail by tilting them to 60 degrees. Both facts are simple. They also contradict each other, and a control room has to resolve that contradiction while a storm is still minutes away.
Albedo is the product I designed for that room. The plant is Los Arcos, 248 MWp in Badajoz, 2,758 trackers across five blocks. One afternoon runs through every screen: at 15:24 a hail cell is fourteen minutes out, and a block of trackers needs nine of those minutes to reach 60 degrees.
The afternoon, block by block
D at 15:25, C at 15:45, B at 15:53, so the rest of the plant keeps producing while the cell crosses. The day curve dips exactly as much as the warning said it would.
The warning arrives with minutes in it. Nothing says what those minutes cost.
Operators already get hail warnings. What they do not get is the trade the warning implies: stow too early and the plant stops selling power it could have sold, stow too late and a row of glass cracks. The decision is made under time pressure, on evidence spread across a weather feed, a SCADA table and a phone call.
The tooling made it harder by treating the plant as one object. Stowing was all or nothing, so the whole site paid the cost of its worst-hit block.
- 01
A cost nobody could see before committing
The energy given up by stowing was knowable and never shown, so operators were guessing at the price of their own caution.
- 02
One plant, one switch
Blocks in the path of the cell and blocks it would never reach got stowed together, because the interface had no way to say otherwise.
- 03
Silence read as safety
A tracker that stopped answering looked the same as a tracker at 60 degrees. That is how trackers end up caught flat.
The morning after
58 MWh was a choice. The rest was not. Separating the two turns a loss report into a repair queue, ranked by what pays back first.
Start from the afternoon, not from the feature list.
I owned the product end to end: the operating rules, the information architecture, every screen, and the coded prototype that proves the timing works.
- 01
Modelled the plant as blocks rather than one site, which is the decision the rest of the product rests on.
- 02
Wrote the stow rules, including what counts as confirmed and what stays unresolved until a person or a drone says otherwise.
- 03
Designed the screens across warning, execution, losses, inspection and work orders, with every number consistent between them.
- 04
Built the plant in React so 2,758 trackers move in real time and the timing can be judged instead of imagined.
Write the afternoon down first
I mapped one storm minute by minute on a FigJam board: what is known at 15:24, what has to be decided by 15:25, and who needs to hear about it. Every screen in the product answers a moment on that board.
Find the tensions before drawing
Three of them carried the product: power against glass, speed against certainty, and automation against a person’s judgment. Each became a decision with a written cost rather than a preference.
Design the worst moment first
I drew the warning screen before the healthy dashboard. A control room product is judged on the afternoon it is needed, not on the three hundred days it is quiet.
Build the plant, not a picture of it
A plan that stows D at 15:25 and C at 15:45 is only believable if you can watch it happen. Coding the plant let me test whether nine minutes reads as urgent at real size.
The proof
A drone flies the trackers that went silent. The ones that stowed are clean, which is the evidence that turns the operating rule from an opinion into a finding, and doubles as the insurer’s pack.
Four decisions did most of the work.
- 01
Stow each block just in time, not the whole plant
Albedo times every block to reach 60 degrees four minutes before its own hail, so the rest of the plant keeps selling power. The cost sits next to it: if the cell speeds up, those four minutes are the entire margin.
- 02
Put the price of caution next to the button
The energy and revenue given up by stowing sit beside the command that gives them up. The cost: on a real warning, the operator reads a number they would rather not see.
- 03
A tracker that does not answer is never counted as safe
Silent trackers stay orange until a person or a drone confirms them. The cost is more alerts on days when a comms box merely flickers. I took that trade because the alternative is the exact failure the product exists to prevent.
- 04
Losses are a chart you can open, not a number you accept
The morning after separates energy given up on purpose from energy lost to dirt and damage, so the day starts with the repair that pays back first rather than with the largest number.

The board the product came from
One FigJam holds the brief, the afternoon as it stood, the three tensions, the afternoon rebuilt, the screen map and who hears what. Every number on the board made it into the product.
A plant that stows block by block, and a rule that stops calling silence safe.
The result is one continuous afternoon: a warning carrying its own cost, a plan that runs block by block, a morning after that ranks repairs by payback, and a rule that changes what happens the next time a comms box goes quiet.
It demonstrates operating rules written as product decisions with their costs attached, dense real-time operational UI, and a prototype built in code so the timing can be judged rather than described.
- 9
- minutes a block needs to reach 60 degrees, the number the product is built around
- 2,758
- trackers moved block by block, each before its own hail
- 58
- MWh given up on purpose, shown before the click
- 41
- cracked modules the morning after, none of them on a tracker that stowed
If I took this further, the next step would be sitting with a real control room through a live warning. The four-minute margin and the point at which an operator stops trusting the plan are the two assumptions carrying the most weight.
Holdout
The conversations an average hides
