Golem, Heise und Computerbase wurden als "allgemein" kategorisiert weil
die RSS-Feeds keine spezifische Kategorie liefern. Jetzt werden diese
Sources automatisch als "tech" kategorisiert.
- Source-basiertes Mapping in news_service._row_to_dict
- DB-Queries für category=tech filtern nach Source + allgemein
- "allgemein" Filter schließt Tech-Sources aus (kein Doppel)
- get_categories injiziert "tech" wenn Tech-Sources vorhanden
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Complete admin backend with login, where all integrations (weather, news,
Home Assistant, Vikunja, Unraid, MQTT) can be configured via web UI instead
of ENV variables. Two-layer config: ENV seeds DB on first start, then DB
is source of truth. Auto-migration system on startup.
Backend: db.py shared pool, auth.py JWT, settings_service CRUD, seed_service,
admin router (protected), test_connections per integration, config.py rewrite.
Frontend: react-router v6, login page, admin layout with sidebar, 8 settings
pages (General, Weather, News, HA, Vikunja, Unraid, MQTT, ChangePassword),
shared IntegrationForm + TestButton components.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace monolithic Jinja2 template with modern stack:
Backend (FastAPI):
- Modular router/service architecture
- Async PostgreSQL (asyncpg) for news from n8n pipeline
- Live Unraid server stats (2 servers via API)
- Home Assistant, Vikunja tasks, weather (wttr.in)
- WebSocket broadcast for real-time updates (15s)
- TTL cache per endpoint, all config via ENV vars
Frontend (React + Vite + TypeScript):
- Glassmorphism dark theme with Tailwind CSS
- Responsive grid: mobile/tablet/desktop/ultrawide
- Weather cards, hourly forecast, news with category tabs
- Server stats (CPU ring, RAM bar, Docker list)
- Home Assistant controls, task management
- Live clock, WebSocket connection indicator
Infrastructure:
- Multi-stage Dockerfile (node:22-alpine + python:3.11-slim)
- docker-compose with full ENV configuration
- Kaniko CI/CD pipeline for GitLab registry
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>