01 — Live demo

TARS

I enjoyed the movie Interstellar so I named this web app after it. It runs a whole bunch of home automation stuff. The home theater receiver, the lights, the fans, and more. It felt freeing to put menus and screens wherever I wanted. I'm sure it would confuse anyone else, but this one's mine.

Controls
Marantz CINEMA 60LG OLED C1Apple TV 4K
Room
WiZ + Tuya bulbsLutron fanAC Infinity ×2Nest
Device
iPhone 16 ProPixel 9a
Deployed
2010 Mac ProXeon X5690 6-core32 GB DDR3-1333Linux Mint 22.3
Skip to the write-up

Loading the demo…Demo didn't load. That's a screenshot of it above, or try tars.jsfowles.com

01.1 — Not a screenshot

First time I've embedded a live demo like this. In an <iframe> no less, not sure how I feel about that but it works surprisingly well. Play around with it, remember, the UX/UI might not be obvious to anyone but me. The same site is my actual remote. On my home Wi-Fi it drives the room; anywhere else, including here, it's the demo.

tars.jsfowles.com

01.2 — Speakers — 5.1.2

01.3 — Problem

Eight apps and a remote

To my wife's chagrin, I like to mess around with settings making sure sounds and display settings are dialed in. LG's TV app is miserable and barely ever works, the Marantz app isn't too bad but most of the settings I use are buried in submenus. The Apple TV app is great though.

01.4 — Design

Everything on one screen

I wanted the app to feel native to the phone, so I made sure most views wouldn't scroll, some of the sub menus will scroll if they have a lot of content, but was able to mitigate that a bit with accordions.

01.5 — Architecture

The part I knew least

The front end is pretty straightforward, and only consists of a few components. I went through a few iterations before landing on the current design. What was out of my wheelhouse was the back end: a receiver over telnet, a TV over webOS, fans over Bluetooth. I leaned on Claude a lot for that, and learned an absolute ton.

01.6 — Bluetooth

Fans that only speak Bluetooth

The AC Infinity fans in my floor registers were one more app on my phone. They only talk Bluetooth, through their own app. Other people had already cracked the protocol, so I wrote a small Python bridge on an old Mac Pro that's a Linux box now.

01.7 — Climate

The fans read the thermostat

TARS reads the Nest, so when the AC kicks on the register fans crank up to pull the cold air in. When the blower's circulating they run at medium, and otherwise they idle. The Nest doesn't report circulating, so TARS figures it out from the duct temperature.

01.8 — Lighting

The lights follow the sun

During the day the bulbs follow the sun, so the color changes with how high it is and how cloudy it is. From 8 to 11pm they slowly wind down to a warm orange before bed. Theater and Sleep are one tap each.

01.9 — Reference

The room and theme toggle

This is my home theater, the room TARS runs. I got the dimensions pretty close, and since then I found our house plans, so at some point I'll make it a bit more accurate. It's built in Three.js, so you can rotate it around for funsies.

This is the light/dark toggle from the demo website. The sun turns into a moon over a night sky with the Big Dipper in it. I first built it for a Mangomint project and might pull it out into its own package.

ClickTap it — the sky turns

01.10 — Built with

ReactViteNodeThree.jsWebSocketswebOSpyatvsystemd