
Energy, Simplified.
High-Stakes Energy Management for the Modern Nomad
Lumina is a Tablet based embedded solar battery management system designed for off-grid RV living. By transforming complex power telemetry into an intuitive, high-contrast interface, the system empowers users to monitor, diagnose, and protect their energy infrastructure during critical travel conditions.
The Challenge:
In an RV, power is the difference between a seamless journey and an emergency. Existing battery management systems often overwhelm users with raw, technical data (voltage, amperage, watt-hours) that is difficult to parse while stationary, and nearly impossible to interpret while driving or in the dark.
For the Lumina system, the challenge was threefold:
The Approach:
To design an embedded interface that prioritizes actionability over raw information, creating a design system that feels stable, legible, and reassuring under high-stress conditions.
Deliverables:
Role:
Timeline:
Year:
The Process:
Iterating Under Constraints
Designing for an embedded system meant that every UI element had a performance tax. My process was rooted in frequent prototyping to ensure that high-fidelity designs didn’t lag on the tablet hardware.
The Rejected Path:
High-Density Data Overload
Initially, I attempted to show all solar array data, voltage, current, temperature, and historical yield etc. on a single, dense screen.


Refining for the Environment:
I ran a “Vibration Test” by sketching UI components and placing them on a mock tablet to test touch accuracy.
The Design System:
To maintain consistency across a complex ecosystem of views, including high-level monitoring, deep-dive diagnostics, and emergency states, I developed a modular architecture. This ensured that whether a user was checking a Live Feed or running a Panel Scan, the mental model remained the same.
The Component Framework
I organized the system into three functional categories to ensure the UI remained performant on embedded hardware:






Visual Logic & Hierarchy


/* Glow */
box-shadow: 0 -1px 3px 5px #03F3F6 inset;
filter: drop-shadow(0 0 15px rgba(3, 243, 246, 0.20)) drop-shadow(0 0 7px #03F3F6);

/* Elevation 1 */
box-shadow: 0 2px 10px 0 rgba(3, 243, 246, 0.20), 0 4px 18px 0 rgba(3, 243, 246, 0.15);
/* Elevation 2 */
box-shadow: 0 4px 6px 0 rgba(3, 243, 246, 0.50), 0 10px 15px 0 rgba(3, 243, 246, 0.30);

Almost there.
I’m currently finalizing the high-fidelity prototypes and metrics for this project. If you’re curious about the process behind this one in the meantime, let’s chat.