── case 02 / home-dashboard ──

Home Dashboard

A mobile-first home control app that ties smart lights, a media PC, weather, shopping, and todos into one swipe-navigable surface.

What I wanted

I was tired of flipping between four phone apps every morning — one for the TV, one for the lights, one for the shopping list, one for the forecast. Each one wanted me to sign in, update, open a sub-menu, and then wait. I wanted one screen, swipeable, fast, and designed for the way I actually use it: holding a phone with one hand.

How I got it

I told Claude what I wanted and we iterated. My first asks were about the feel — it had to load instantly on a cheap phone, it had to not need an account, it had to be something I could change in minutes instead of going through an app store. Claude suggested the simplest option rather than the trendy one, and I trusted the call. Most of my work after that was sending pages back saying “this is too busy” or “this should be one tap, not two,” and deciding when each page was done enough to use.

What it does

Five pages you swipe between: a TV remote, a house overview with the weather, smart-home controls for lights and scenes, a shopping list and todos, and a services page. Tap anything and it responds immediately — no spinners, no loading bars. You can install it to your phone’s home screen like a real app. It stays small enough to work even when the wifi is slow.

Why it matters to me

It replaced four apps my girlfriend and I were actually annoyed by. When I want to change something, I can change it in a minute, because the whole thing is small enough that nothing gets in the way. I use it every day. The interesting part isn’t the tech; it’s that I have a tool that fits my morning instead of one I have to fit myself around.

What I learned

This was the project where I figured out that the biggest lever I have is saying “simpler”. Claude’s first draft was more ambitious than what I actually needed, and every round where I asked for less — fewer pages, fewer taps, less framework — the result got faster and easier to change. After this one, I started every new build with the same prompt: what’s the simplest shape this could take?


Under the hood — for the technical folks

Claude built this as a Flask application serving five pages from a single base.html layout, with interactions handled through HTMX partials. A SQLite database holds the shopping list, todos, and small amounts of state between visits. A session-based login protects the whole surface; passwords are hashed with scrypt.

The TV page talks to a companion service on a small media machine to trigger playback, wake the display, and control input. The Smart Home page talks to a home automation hub over its REST API. The House page reads local weather from a public forecast API with graceful degradation if the source is slow.

A thin PWA manifest makes the site installable on iOS and Android, with a separate manifest for development so the two never collide on the same phone.

Technical highlights Claude built under direction:

  • Session auth with scrypt-hashed passwords and a small CSRF helper
  • HTMX partial endpoints for every interactive element, each returning a sub-template the page swaps in place
  • Jinja macros for reusable UI primitives so templates stay short
  • Open-Meteo weather integration with graceful degradation
  • Home automation REST integration with bearer token held server-side
  • Two PWA manifests (development and production) so the installable app can be iterated without clobbering the live install
  • Small deployment footprint — single gunicorn process behind a reverse proxy, managed by systemd, self-hosted in a container

Stack: Python · Flask · HTMX · Jinja · SQLite · scrypt · Open-Meteo · REST integrations · PWA

Home page of the dashboard with the day's overview.
What I learned
How far you can get without a JavaScript framework. HTMX and a handful of partials can feel as fast as a native app, stay trivial to deploy, and keep the attack surface small. The slowest part of most sites is the code you didn't need to ship.
── next ── House Editor