A clear vehicle view
A native, interactive 3D preview alongside battery, cabin temperature, and charging readings. Stale and unavailable values have explicit states.
Selected work / Personal project / 2026
A personal companion for my Tesla
Built for my 2025 Model 3, CabinWise lets me check battery and charging readings, control the cabin climate, change the charge limit, and send destinations from one dashboard. It also includes an interactive 3D vehicle view, saved departure presets, and a private ChatGPT connection.
Explore the featuresEnable JavaScript to explore the Model 3 in 3D.
Same Model 3 asset and camera setup as CabinWise. Glass and wheel overlays cleaned up; paint materials adjusted. Appearance is illustrative, not live vehicle state. Model by tonielpro520, licensed CC BY 4.0.
The app’s actual 3D model, with fictional portfolio readings. No vehicle connection.
Features
Check on the car, prepare for a drive, or ask ChatGPT to help with a specific task. Readings are clearly marked when they are old or unavailable.
A native, interactive 3D preview alongside battery, cabin temperature, and charging readings. Stale and unavailable values have explicit states.
Climate controls, charge-limit changes, saved departure presets, and destination sending. Presets load locally; saving one does not schedule an action.
A private ChatGPT MCP connection exposes status, destination, climate, and charge-limit tools, gated by expiring permissions and a revoke control.
Save an ordered list of stops, then review and send one selected destination at a time. Each send is a separate action, rather than a complete multi-stop route.
Explore the interaction
Try three fictional reading states. The illustration below explains the dashboard’s behavior; it is a standalone portfolio demo with no vehicle connection.
Sample data only
Vehicle readingsFresh sample · just now. A measured cabin temperature is separate from the requested target.
Engineering decisions
The gateway can report that Tesla accepted a command. The UI verifies supported settings against a subsequent vehicle reading and its subsystem timestamp. A climate setpoint is never presented as the measured cabin temperature.
If delivery is uncertain, the result stays uncertain. The app does not automatically resend the physical action. MCP request IDs retain results within the active process so a repeated ID cannot silently deliver the same action again.
Status reads stay passive. A requested command can wake the vehicle once, then check readiness within a bounded wait. The web flow allows up to one minute; it sends the command only when readiness is confirmed in time.
The gateway validates inputs and signed requests, including timestamps and replay checks. These are layered protections, not a claim of exactly-once delivery across restarts or network failures.
Architecture
The browser never receives a raw signing key. Owner checks and encrypted, secure HTTP-only sessions protect the app’s Tesla authorization. A constrained command gateway separates the web experience from the signing service.
A Node gateway and Tesla signing service run in Docker on DigitalOcean, behind Cloudflare access controls and a tunnel. The gateway checks a separate secret and HMAC request signatures. The raw signer is not publicly exposed.
MCP grants separate status, navigation, climate, and charging access. They expire, can be revoked, and are checked for every tool call. Tesla access for MCP stays in process memory, bounded by the grant and session expiry.
Deliberate scope
The result is a personal tool for a real vehicle, spanning an interactive frontend, a protected command service, and permission-scoped AI access. Its most important design choice is preserving uncertainty wherever the system cannot verify an outcome.