DIY Smart TV Media Center Dashboard: Fullscreen App Launcher for Debian and Xfce

Published on August 9th 2026

Photo of livingroom TV displaying the Smart Dashboard. A row of rectactular buttons and icons for various streaming services, apps and tools. Blueish background photo of a mountain.

The Story

I used Amazon Fire TV sticks on all my TVs for years. They worked, but the ads, tracking, recommendations, and clutter grew annoying. I only used a handful of apps and had privacy concerns because Fire TV required an Amazon account.

I found five 2011 Mac Minis on eBay during the Raspberry Pi shortage and decided to repurpose them as basic media-center PCs. They are older Intel i5 machines that output 1080p—good enough for this use case.

I built a Python/Flask web app that starts on boot and presents a custom Smart TV-style UI in fullscreen kiosk mode. I chose Debian with XFCE because it's lightweight and flexible for the tweaks I wanted.

As a web developer, I used Flask for the frontend so the UI could be built with JavaScript, CSS, and JSON configuration files. Several Linux media-center apps exist (Plex HTPC, Jellyfin Desktop, Kodi, VacuumTube), but I wanted a single curated home screen with only the apps and tools I use.

The Concept

On boot, a bash script starts the Flask app and opens http://localhost:8080 in a browser with --kiosk. I run each site as its own web app (using --name) so it gets its own .config directory and behaves more like a desktop application.

Native desktop apps launch with commands like flatpak run rocks.shy.VacuumTube --fullscreen. I prefer Flatpak for sandboxing and consistency across machines.

Tools and settings appear as icons in the top-right corner and launch things like xfce4-settings-manager, xfce4-session-logout, Bluetooth settings, Network Manager, and audio controls.

The UI is keyboard-navigable (arrow keys, Tab/Shift+Tab), so a wireless PC remote such as the MX3 Pro works well.

The Process

I installed Debian with XFCE, enabled SSH, and added the non-free and non-free-firmware repositories for Wi‑Fi and Bluetooth support on the older Mac Minis.

I installed the browser, Flatpak, and kiosk utilities like xdotool, wmctrl, unclutter, input-remapper, network-manager, bluez, and pavucontrol.

I enabled Flathub, installed the dashboard apps I wanted (Plex, Jellyfin Desktop, Kodi, VacuumTube), cloned the smart-dashboard repository, created a Python virtual environment, installed requirements, and used run.sh to start the Flask server and launch Brave in kiosk mode.

LightDM auto-logs my user in and I add run_always.sh to XFCE Session and Startup so the dashboard opens on boot. That script relaunches the dashboard after a short delay if it exits, and a confirmation dialog appears when trying to close it with Alt+F4.

To keep the experience clean I disabled XFCE panel autostart, turned off screen blanking with xset -dpms s off, saved a minimal session, and replaced xfce4-desktop with a dummy executable so no desktop icons appear. I also removed default XFCE keyboard shortcuts, set workspaces to 1, made HDMI audio the default, and removed unnecessary startup apps.

The server.py script disables right-click menus for web apps so kiosk mode is enforced.

Configuration & Behavior

The dashboard uses JSON files for configuration: apps.json, tools.json, and weather.json. Images dropped into static/backgrounds/ are discovered automatically and rotate with a dissolve effect.

A fullscreen option in the JSON forces apps fullscreen using wmctrl; this works for apps and dialogs (like xfce4-settings-manager and nm-connection-editor) so the interface feels more like a single-task Smart TV.

For navigation I used input-remapper-gtk to program an MX3 Pro remote—home sends Alt+F4 to close the running app and return to the dashboard. Many apps include their own on-screen keyboards, and the remote's backlit keyboard is also usable.

The Result

The media center boots quickly and opens the dashboard UI immediately. My current setup includes:

The dashboard stays pinned as the home screen; closing an app returns to the interface and the run_always.sh script ensures the dashboard relaunches if it exits.

Conclusion

After a week of daily use the setup has been stable and useful. It provides a simple, self-hosted media center with no ads or tracking, showing only the apps I want.

Starting from Debian and XFCE let me remove what I didn't need while keeping familiar tools like xfce-settings-manager, saving time versus rebuilding everything on a minimal window manager.

If you want a clean living-room interface that's fully under your control, this is a good, configurable starting point.

Here is my current setup as of the writing of this blog post.

Photo of livingroom TV displaying the Smart Dashboard. A row of rectactular buttons and icons for various streaming services, apps and tools. Orange background photo of a ladybug

Check out the project on my Github: https://github.com/teklynk/smart-dashboard"