{"id":44944534,"url":"https://github.com/oyvhov/tunet","last_synced_at":"2026-04-30T20:00:49.191Z","repository":{"id":338064902,"uuid":"1137673060","full_name":"oyvhov/Tunet","owner":"oyvhov","description":"Tunet Dashboard for Home Assistant with real-time cards, drag-and-drop layout, and an integrated Hass.io add-on.","archived":false,"fork":false,"pushed_at":"2026-04-29T21:59:53.000Z","size":9252,"stargazers_count":280,"open_issues_count":6,"forks_count":31,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-04-29T23:36:21.074Z","etag":null,"topics":["dashboard","docker","hassio-addon","home-assistant","react","smarthome","vite","websocket"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oyvhov.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-19T17:18:03.000Z","updated_at":"2026-04-26T07:31:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oyvhov/Tunet","commit_stats":null,"previous_names":["oyvhov/tunet"],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/oyvhov/Tunet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oyvhov%2FTunet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oyvhov%2FTunet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oyvhov%2FTunet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oyvhov%2FTunet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oyvhov","download_url":"https://codeload.github.com/oyvhov/Tunet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oyvhov%2FTunet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32475192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboard","docker","hassio-addon","home-assistant","react","smarthome","vite","websocket"],"created_at":"2026-02-18T09:29:47.053Z","updated_at":"2026-04-30T20:00:49.153Z","avatar_url":"https://github.com/oyvhov.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# Tunet Dashboard\n\nA modern React dashboard for Home Assistant with real-time entity control, energy monitoring, and multi-device profile sync.\n\n![Main Dashboard](public/Main.png)\n\n## Features\n\n### 🎴 Cards\n\n- **Universal Sensor Card**: One card to rule them all. Handles numeric sensors (with history graphs), binary sensors (doors, windows, motion), switches, input booleans, scripts, and scenes.\n- **Specialized Control Cards**:\n  - **Alarm** (BETA): Arm/disarm with mode selection, PIN-protected actions, and quick-action keypad.\n  - **Light**: Brightness, color (RGB/temp), and toggle limits.\n  - **Climate**: Thermostat modes, target temperature, and HVAC action feedback.\n  - **Media**: Generic media players + dedicated **Android TV** remote with app launching.\n    - Playlist browsing requires a **Music Assistant** `media_player`.\n    - Sonos Favorites browsing requires a **Sonos** `media_player`.\n  - **Cover**: Position sliders for blinds and toggle controls for garage doors.\n  - **Vacuum**: State monitoring, start/pause/dock commands.\n  - **Fan**: Speed percentage, oscillation, and direction controls.\n- **Energy \u0026 Environment**:\n  - **Nordpool**: Hourly electricity prices with beautiful trend graphs.\n  - **Energy Cost**: Track daily and monthly energy expenditure.\n  - **Weather**: Dynamic weather animations, current temperature, and forecasts.\n  - **Car**: EV monitoring (battery, range, charging status).\n- **Productivity \u0026 Organization**:\n  - **Calendar**: Agenda view for upcoming events.\n  - **Todo Lists**: Manage Home Assistant to-do items.\n  - **Room Card**: Compact summary of a room's state (lights, temp, occupancy).\n  - **Person**: Presence detection and location tracking.\n\n### 🚀 Advanced Capabilities\n\n- **Server-side Profiles + Deploy**: Save layout configurations per user, load on any device, and publish/deploy current settings to selected devices.\n- **Validated Backend Auth**: Protected profile/settings API calls are verified against the authenticated Home Assistant user, not just browser-side state.\n- **Conflict-safe Settings Sync**: Multi-device settings updates use revision-aware sync to prevent stale tabs from overwriting newer layouts.\n- **Optional Data-at-Rest Encryption**: Encrypt server-stored profiles/settings with migration-safe compatibility modes.\n- **Persistent OAuth Session Reuse**: Browser-stored OAuth sessions can survive reloads and same-browser tab handoff while backend API calls continue to validate against Home Assistant.\n- **Dashboard Import/Export**: Portable JSON backup/restore directly from Profiles.\n- **Live Updates**: Instant state reflection via Home Assistant WebSocket.\n- **Drag-and-Drop Grid**: Fully customizable masonry layout.\n- **Settings Lock**: PIN protection prevents accidental edits.\n- **Theming**: Dark/Light modes with high-end glassmorphism and animated backgrounds.\n- **Multi-language**: Native support for English, German, Norwegian (NB/NN), Swedish, and Simplified Chinese.\n\n## Quick Start\n\n### Home Assistant Add-on\n\n1. Go to **Settings** -\u003e **Add-ons** -\u003e **Add-on Store** -\u003e **Repositories** (three dots).\n2. Add `https://github.com/oyvhov/tunet`.\n3. Install **Tunet Dashboard**.\n4. Configure and Start.\n\n### Docker Compose (Recommended)\n\n```bash\ngit clone https://github.com/oyvhov/tunet.git\ncd tunet\ndocker compose up -d\n```\n\nOpen `http://localhost:3002` and connect your Home Assistant instance.\n\n### Local Development\n\n```bash\ngit clone https://github.com/oyvhov/tunet.git\ncd tunet\nnpm install\nnpm run dev:all\n```\n\n- Frontend: `http://localhost:5173`\n- Backend API: `http://localhost:3002/api`\n\n## Updating\n\nSee [SETUP.md](SETUP.md) for detailed setup, configuration, and troubleshooting.\nSee [CARD_OPTIONS.md](CARD_OPTIONS.md) for card-by-card options and screenshots.\nSee [CSS_VARIABLES.md](src/docs/CSS_VARIABLES.md) for theme token naming and usage.\n\n## Technologies\n\n- React 18 + Vite 7\n- Tailwind CSS 4\n- Express + SQLite (profile storage)\n- Home Assistant WebSocket API\n- Lucide Icons + MDI\n\n## 🗺️ Roadmap\n\nSee our [ROADMAP.md](ROADMAP.md) for planned features and future development.\n\n## License\n\nGNU General Public License v3.0 — See [LICENSE](LICENSE)\n\n## Author\n\n[oyvhov](https://github.com/oyvhov)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foyvhov%2Ftunet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foyvhov%2Ftunet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foyvhov%2Ftunet/lists"}