Inicio/Zeigo Power

Zeigo Power

2025

Para Schneider Electric

Comprar certificados de energía renovable en grupo significa que decenas de empresas comprometen volumen contra un precio, en una ventana que cierra en una fecha. Diseñé y construí la consola que lo corre — incluidas las cinco formas en que puede salir mal.

Draft, abierta, cerrada, confirmada y cancelada — con la razón escrita en la card.

Lo usan dos lados. EAC Control, el equipo de Schneider que crea la oportunidad, fija el precio techo, la comparte con organizaciones y cierra el trade. Y los buyers, equipos de compras corporativas que comprometen volumen y ven una versión anonimizada de la misma oportunidad. Antes de la consola, el precio se acordaba por mail y los volúmenes se seguían a mano.

La decisión: tratar el cierre del trade como el producto. No la navegación, no el catálogo — el cierre. Hay seis flujos enteros para eso: confirmar al precio mayorista, confirmar con reconciliación, target no alcanzado, cero órdenes, error, y cancelación. Eso no es diseño defensivo. Eso es la feature.

La oportunidad y la ventana que la gobierna: countdown en vivo, MWh contra el target, y solo las acciones legales en ese estado.

Solo sabés que hay seis desenlaces si sabés qué hace el sistema con la plata. El precio mayorista acordado puede diferir de la suma de las órdenes puestas. Una ventana puede cerrar bajo su target de MWh y aun así ser cerrable. Una ventana puede cerrar con cero órdenes. Y una cancelación significa emitir reembolsos a gente que ya pagó — por eso el buyer ve una razón escrita en la card, no un código de error.

Ventana cerrada y trade confirmado. Dos de los seis.

La reconciliación es el nudo, y llegó última. Al momento de la orden el buyer paga contra un costo mayorista. Para la confirmación, el costo acordado con el proveedor puede ser menor. Entonces la pantalla pregunta si cambió y deja al operador ingresar la cifra final — restringida a ser igual o menor a lo que el buyer ya pagó, porque la única dirección legal de ese número es la que le debe plata al comprador. La pila se recalcula delante suyo y el campo responde en vivo.

Retail price, costo mayorista, fee de Zeigo, fee de RECA, service fee — y un campo que te dice qué acaba de hacer tu número.

Encontrarla tarde salió caro. La reconciliación no es una pantalla que enchufás: cambia lo que el paso de confirmación tiene permitido hacer, así que todo el flujo de cierre tuvo una segunda versión. Qué haría distinto: mapear la plata antes que las pantallas. Cada escenario que encontré tarde era una pregunta sobre qué le pasa a un pago, no sobre una UI.

El método fue flujo primero, literalmente. Cada sección del archivo abre con su diagrama de estados antes de una sola pantalla. Una máquina de estados no se diseña en prosa — la dibujás, y ahí aparecen los estados que te faltaban.

Cada sección arranca acá.
~2 days →<15 minTiempo para cerrar una ventana
1 →6Escenarios de cierre en producto
~1 in 4 →~1 in 20Cierres que necesitan soporte

Qué no funcionó: el producto no llegó al volumen para el que se construyó. La consola hace lo que tiene que hacer — el cierre corre dentro del producto, los estados están cubiertos — pero la compra agregada de EACs nunca despegó a la escala que la justificaba. El craft está en el trabajo, no en el resultado, y prefiero decirlo así antes que maquillarlo.

Exelobaiza | Design Engineer

ENES
███████╗██╗  ██╗███████╗██╗      ██████╗ ██████╗  █████╗ ██╗███████╗ █████╗
██╔════╝╚██╗██╔╝██╔════╝██║     ██╔═══██╗██╔══██╗██╔══██╗██║╚══███╔╝██╔══██╗
█████╗   ╚███╔╝ █████╗  ██║     ██║   ██║██████╔╝███████║██║  ███╔╝ ███████║
██╔══╝   ██╔██╗ ██╔══╝  ██║     ██║   ██║██╔══██╗██╔══██║██║ ███╔╝  ██╔══██║
███████╗██╔╝ ██╗███████╗███████╗╚██████╔╝██████╔╝██║  ██║██║███████╗██║  ██║
╚══════╝╚═╝  ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚══════╝╚═╝  ╚═╝
# Zeigo Power ## Schneider Electric — 2025 --- Context: Buying renewable energy certificates as a group means dozens of companies committing volume against one price, in a window that closes on a date. Closing one of those trades was **an email thread and a spreadsheet**. Zeigo Power is the console that does it in product. My role: The **Purchase Opportunities feature is mine end to end, design and code** — the opportunity grid and its states, the commitment-window panel, the Orders tab with its statuses and rejection flows, the checkout, and the six ways a trade can close. Built on Zeus in **React and TypeScript on Next.js**. I was brought onto Power specifically for this. Impact: Closing a commitment window went from **~2 days of email and spreadsheet reconciliation to under 15 minutes** in the console, and the scenarios handled in product went from one happy path to **six**. What did not work: the product never reached the volume it was built for. Buying renewable energy certificates as a group means dozens of companies committing volume against one price, in a window that closes on a date. I designed and built the console that runs it — including the five ways it can go wrong. ![Draft, open, closed, confirmed and cancelled — with the reason written on the card.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-power/purchase-opportunities-all-states.png) Two sides use it. **EAC Control**, the Schneider team that creates an opportunity, sets the price ceiling, shares it with organizations and closes the trade. And the **buyers**, corporate procurement teams committing volume, who see an anonymised version of the same opportunity. Before the console, the price was agreed by email and the volumes tracked by hand. **The decision: treat the closing of the trade as the product.** Not the browsing, not the catalogue — the closing. There are six whole flows for it: confirm at the wholesale price, confirm with reconciliation, target not reached, zero orders, error, and cancellation. That is not defensive design. That is the feature. ![The opportunity, and the window that governs it: live countdown, MWh against target, and only the actions that are legal in that state.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-power/opportunity-details.png) You only know there are six outcomes if you know what the system does with money. The agreed wholesale price can differ from the sum of the orders placed. A window can close under its MWh target and still be closable. A window can close with zero orders. And a cancellation means **issuing refunds to people who already paid** — which is why the buyer sees a written reason on the card, not an error code. ![Window closed, and trade confirmed. Two of the six.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-power/window-closed.png) ![Window closed, and trade confirmed. Two of the six.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-power/trade-confirmed.png) --- **Reconciliation is the crux, and it arrived last.** At order time the buyer pays against a wholesale commodity cost. By confirmation, the cost agreed with the supplier may be lower. So the screen asks whether it changed and lets the operator enter the final figure — constrained to be **equal to or below what the buyer already paid**, because the only legal direction for that number is one that owes the buyer money. The stack recomputes in front of them and the field answers live. ![Retail price, wholesale cost, Zeigo fee, RECA fee, service fee — and a field that tells you what your number just did.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-power/reconciliation-02-price-breakdown.png) Finding it late was expensive. Reconciliation is not a screen you bolt on: it changes what the confirmation step is allowed to do, so the whole closing flow got a second version. **What I'd do differently: map the money before the screens.** Every scenario I found late was a question about what happens to a payment, not about a UI. The method was flow first, literally. Every section of the file opens with its state diagram before a single screen. You cannot design a state machine in prose — you draw it, and then you find the states you missed. ![Every section starts here.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-power/flow-all-stages.png) - Time to close a window: ~2 days → <15 min - Closing scenarios in product: 1 → 6 - Closings needing support: ~1 in 4 → ~1 in 20 **What didn't work:** the product did not reach the volume it was built for. The console does what it should — the closing runs in product, the states are covered — but aggregated EAC purchasing never took off at the scale that justified it. The craft is in the work, not in the outcome, and I would rather say that than dress it up. --- All case studies: [https://www.exelobaiza.dev/work](https://www.exelobaiza.dev/work) (markdown mirror: [work.md](https://www.exelobaiza.dev/work.md)) ## Contact - LinkedIn: https://www.linkedin.com/in/exequiel-lobaiza/ - GitHub: https://github.com/exelobaiza