UI: echter Build hinter nginx, relative API-Pfade, Logs-Seite ehrlich

Vorher lief der Vite-ENTWICKLUNGSSERVER als Produktion, und vier Dateien
riefen hartkodiert http://localhost:8000 auf — vom PC aus fragte der Browser
damit den PC selbst nach Laufwerken (deshalb blieb das UI immer leer);
Settings nutzte ein nie gesetztes VITE_API_URL. Die Logs-Seite zeigte fest
einprogrammierte Fantasie-Einträge ("The Matrix gerippt").

- lib/api.ts: axios-Instanz mit baseURL /api; nginx proxied /api → api:8000
  (ein Origin, kein CORS), SSE-tauglich (proxy_buffering off)
- Dockerfile: Vite-Build → nginx:alpine statt npm run dev
- Logs + LiveLog von echtem /logs-Endpoint; MetadataPreview: echte Laufwerke
  aus /devices statt erfundener /dev/bluray-Optionen, startet echten Job

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-23 15:02:39 +02:00
parent eee3a83d0e
commit f2da1ad525
8 changed files with 111 additions and 61 deletions
+5 -4
View File
@@ -1,6 +1,6 @@
import { useState, useEffect } from 'react'
import axios from 'axios'
import { Settings, Save, Disc, Cpu, Database, Globe, AlertCircle, CheckCircle } from 'lucide-react'
import { api } from '../lib/api'
import { useDarkMode } from '../context/ThemeContext'
interface SettingsState {
@@ -39,8 +39,9 @@ export default function SettingsPage() {
useEffect(() => {
const loadSettings = async () => {
try {
const response = await axios.get(`${import.meta.env.VITE_API_URL}/settings`)
setSettings(response.data)
const response = await api.get('/settings')
// Leeres Objekt von der API = noch nichts gespeichert → Defaults behalten
setSettings({ ...defaultSettings, ...response.data })
} catch {
setSettings(defaultSettings)
} finally {
@@ -58,7 +59,7 @@ export default function SettingsPage() {
const handleSave = async () => {
setSaving(true)
try {
await axios.post(`${import.meta.env.VITE_API_URL}/settings`, settings)
await api.post('/settings', settings)
setSaved(true)
setTimeout(() => setSaved(false), 3000)
} finally {