Inicio/Zeigo HUB

Zeigo HUB

Q1 2026Sitio web

Para Schneider Electric

Zeigo HUB es donde un supplier le reporta a la empresa a la que le vende cuánta energía usa y cuánto emite. Cada sitio, cada fuente de energía, cada mes, con la unidad correcta. Es el tipo de dato que toda empresa tiene en algún lado, casi siempre en una planilla, y el tipo que nadie quiere retipear en un producto que abrió hace cinco minutos.

Zeigo HUBZeigo HUB
AntesDespués
Scope 3, uno de seis pasos, 30 campos tipeados a mano. Después: los mismos datos subidos desde una planilla y revisados en el lugar.Arrastrá para comparar

Nadie me pidió arreglar el onboarding. Estaba leyendo el funnel en Mixpanel y vi dónde se rompía: en los pasos de datos. Cerca de dos tercios de los suppliers que llegaban se iban sin terminar. Llevé el funnel al equipo y propuse el import.

El wizard de Company Profile: Company information, Emissions Data, Scope 3, Energy Consumption, Targets, Progress Tracking.

El formulario ya tenía autosave y un link de Invite Collaborator. Eso te dice algo: la gente se iba a mitad de camino y se lo pasaba a otro. Solo Scope 3 son 15 categorías en dos años. Energy Consumption pide electricidad, vapor, calor y frío por año más cada región donde operás.

Unas 40 pantallas de ese flujo en Figma, más una sección Validations agregada después.

La hipótesis era simple: los suppliers ya tienen estos datos en una planilla. Si pueden darnos la planilla, la mayor parte de la caída desaparece. Descarté acortar el formulario, porque los campos son regulatorios; guardar progreso y recordar por mail, porque trata el síntoma; e integrar con el sistema contable de cada supplier, porque son miles y no hay un sistema común. La planilla era lo único que todos tenían.


La decisión que lo hizo funcionar fue diseñar una sola estructura de datos y hacer que tres cosas la hablaran: sitio, fuente de energía, período, cantidad, unidad. El template que descargan los suppliers tiene exactamente esas seis columnas. El parser en el navegador mapea el upload a esa forma. La tabla renderiza esa forma. El backend solo recibe la forma, ya confirmada.

El template. Site Name, Start Date, End Date, Energy Type, Energy Amount, Energy UOM. Nada que la tabla no necesite.

El import nació en Zeigo Activate, donde los sitios ya reportaban energía por fuente y por mes. El PDF de instrucciones todavía lleva el logo de Activate. Cuando la survey de HUB mostró la misma caída, traje el patrón en vez de diseñar uno segundo.

Dos páginas de instrucciones que van con el template.

Los archivos reales nunca están limpios. Los usuarios de US escribían 1,000.5; los europeos 1.000,5. Algunos dejaban unidades dentro de las celdas, otros mezclaban períodos. En vez de rechazar el archivo o normalizarlo en silencio, el upload cae en una tabla de revisión. Las celdas dudosas quedan teñidas y marcadas. Las vacías muestran un más. El encabezado cuenta lo pendiente, y Confirm and update queda deshabilitado hasta que ese contador llega a cero.

3 items pending review. El botón de confirmar espera.

Clic en una celda marcada abre los valores parseados con dos botones: Reject Data o Save and confirm. Los datos se pueblan en la interfaz pero nada se envía hasta que cada ítem está confirmado. Un diseñador solo habría entregado un upload que falla y pide intentar de nuevo. Un ingeniero solo habría normalizado del lado del servidor y perdido la confianza del usuario en el momento en que una coma se convierte en un error de mil veces.

Un ítem, una decisión.

Construí la primera versión como un prototipo en código con Claude y Cursor, conectado al template real, en una semana. Lo suficientemente rápido para medir en vez de debatir. Lo pusimos frente a suppliers reales con Mixpanel para la finalización y grabaciones de Clarity para ver dónde dudaban. La primera versión confiaba en el archivo. Los usuarios lo rompieron en un día con comas, decimales, unidades y formatos regionales. De ahí salió la capa de revisión.

La sección completa del import en Figma, actualizada después del código, para que el flujo y los componentes nuevos vivieran en Zeus.

Abrí el PR. Los engineers de HUB lo adaptaron a sus convenciones y salió con cambios chicos.

35% →70%Suppliers que completan los pasos de datos
45 min →5 minTiempo de cargar una empresa
0 →40%Uploads con un problema de formato atrapado antes del backend
6 →1 uploadPasos a tipear a mano

La estructura sobrevivió a la feature. El mismo patrón template, upload, filas de revisión se reutilizó tal cual para Invite Collaborators: descargar un template, subirlo, filas con estado. Y cada componente de Zeus que HUB necesitó en el camino volvió al sistema.

Mismo patrón, otros datos: Invited, Accepted, Invalid Email.

Qué haría distinto: entregar la capa de validación en el primer prototipo. Los datos reales de usuarios nunca están limpios. Lo sabía y aun así probé primero el happy path.

“Working with X has been great. He is reliable and fast. The solutions he designs are creative and empathetic to the end-user experience!”

Stefanos BezanisStefanos Bezanis · Senior Product Manager, Zeigo (Schneider Electric)

Exelobaiza | Design Engineer

ENES
███████╗██╗  ██╗███████╗██╗      ██████╗ ██████╗  █████╗ ██╗███████╗ █████╗
██╔════╝╚██╗██╔╝██╔════╝██║     ██╔═══██╗██╔══██╗██╔══██╗██║╚══███╔╝██╔══██╗
█████╗   ╚███╔╝ █████╗  ██║     ██║   ██║██████╔╝███████║██║  ███╔╝ ███████║
██╔══╝   ██╔██╗ ██╔══╝  ██║     ██║   ██║██╔══██╗██╔══██║██║ ███╔╝  ██╔══██║
███████╗██╔╝ ██╗███████╗███████╗╚██████╔╝██████╔╝██║  ██║██║███████╗██║  ██║
╚══════╝╚═╝  ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚══════╝╚═╝  ╚═╝
# Zeigo HUB ## Schneider Electric — Q1 2026 --- [Website](https://www.zeigo.com/zeigo-hub-accelerate-supply-chain-decarbonization/) Context: Zeigo HUB asks every supplier in a decarbonization program for its energy data: **every site, every energy source, every month**, with the right unit. The first version was a **six-step form typed by hand**, and about two thirds of the suppliers who reached it never finished. My role: I found the drop in **Mixpanel** and proposed the fix nobody had asked for: a spreadsheet import. I designed **one data structure** and made three things share it, the template suppliers upload, the review table that flags what it cannot trust **before the backend sees it**, and the table that shows the data back. I designed it in Figma and built it in **React and TypeScript** on Zeus, the design system I built for Zeigo. Impact: Completion of the data steps went from **~35% to ~70%**, entering a company went from **~45 minutes to ~5**, and the same import pattern was reused as-is for inviting collaborators. Zeigo HUB is where a supplier reports to the company it sells to how much energy it uses and how much it emits. Every site, every energy source, every month, with the right unit. It is the kind of data every company has somewhere, usually in a spreadsheet, and the kind nobody wants to retype into a product they opened five minutes ago. Before: ![Scope 3, one of six steps, 30 fields typed by hand](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/before-02-scope3-30-fields.png) After: ![The same data uploaded from a spreadsheet and reviewed in place](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/01-import-modal.png) Nobody asked me to fix onboarding. I was reading the funnel in **Mixpanel** and saw where it broke: the data steps. About two thirds of the suppliers who reached them left without finishing. I brought the funnel to the team and proposed the import. ![The Company Profile wizard: Company information, Emissions Data, Scope 3, Energy Consumption, Targets, Progress Tracking.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/before-01-company-profile-step1.png) The form already had autosave and an Invite Collaborator link. That tells you something: people were leaving mid-way and handing it to someone else. **Scope 3 alone is 15 categories across two years.** Energy Consumption asks electricity, steam, heat and cooling per year plus every region you operate in. ![About 40 screens of that flow in Figma, plus a Validations section added later.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/before-00-survey-overview.png) The hypothesis was simple: suppliers already have this data in a spreadsheet. If they can hand us the spreadsheet, most of the drop disappears. I ruled out shortening the form, because the fields are regulatory; saving progress and nagging by email, because it treats the symptom; and integrating with each supplier's accounting system, because there are thousands of suppliers and no common system. The spreadsheet was the one thing everyone had. --- The decision that made it work was to design **one data structure** and make three things speak it: site, energy source, period, amount, unit. The template suppliers download has exactly those six columns. The parser in the browser maps the upload into that shape. The table renders that shape. The backend only ever receives the shape, already confirmed. ![The template. Site Name, Start Date, End Date, Energy Type, Energy Amount, Energy UOM. Nothing the table doesn't need.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/04-excel-template.png) The import was born in **Zeigo Activate**, where sites already reported energy by source and month. The instructions PDF still carries the Activate logo. When HUB's survey showed the same drop, I brought the pattern over instead of designing a second one. ![Two pages of instructions shipped with the template.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/05-instructions-pdf.png) Real files are never clean. Users in the US wrote 1,000.5; users in Europe wrote 1.000,5. Some left units inside cells, some mixed periods. Instead of rejecting the file or silently normalizing it, the upload lands in a **review table**. Doubtful cells are tinted and marked. Empty cells show a plus. The header counts what is pending, and Confirm and update stays disabled until that count is zero. ![3 items pending review. The confirm button waits.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/02-review-table-pending.png) Clicking a flagged cell opens the parsed values with two buttons: **Reject Data** or **Save and confirm**. The data is populated in the interface but nothing is sent until every item is confirmed. A designer alone would have shipped an upload that fails and asks you to try again. An engineer alone would have normalized server-side and lost the user's trust the moment a comma turned into a thousand-fold error. ![One item, one decision.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/03-add-data-reject-confirm.png) --- I built the first version as a **code prototype with Claude and Cursor**, wired to the real template, in about a week. Fast enough to measure instead of debate. We put it in front of real suppliers with Mixpanel for completion and **Clarity** recordings for where they hesitated. The first version trusted the file. Users broke it in a day with commas, decimals, units and regional formats. That is where the review layer came from. ![The whole import section in Figma, updated after the code, so the flow and the new components lived in Zeus.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/00-import-section-overview.png) I opened the PR. The HUB engineers adapted it to their conventions and it shipped with small changes. - Suppliers completing the data steps: 35% → 70% - Time to enter one company: 45 min → 5 min - Uploads with a format issue caught before the backend: 0 → 40% - Steps to type by hand: 6 → 1 upload The structure outlived the feature. The same template, upload, review-rows pattern was reused as-is for **Invite Collaborators**: download a template, upload it, rows with a status. And every Zeus component HUB needed along the way went back into the system. ![Same pattern, different data: Invited, Accepted, Invalid Email.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeigo-hub/06-invite-collaborators-reuse.png) What I'd do differently: ship the validation layer in the first prototype. Real user data is never clean. I knew that and still tested the happy path first. > "Working with X has been great. He is reliable and fast. The solutions he designs are creative and empathetic to the end-user experience!" — Stefanos Bezanis, Senior Product Manager, Zeigo (Schneider Electric) --- 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