Skip to content

Frontend Architecture

The frontend is built with Lit Web Components, TypeScript, and Vite.

Component Structure

frontend/src/
├── main.ts                 # App bootstrap
├── app.ts                  # Router + app shell
├── demo-mode.ts            # Demo/offline fallback data
├── services/
│   ├── api-service.ts      # Type-safe REST API client
│   ├── api-data-source.ts  # Live API data source
│   ├── data-source.ts      # Data source interface
│   ├── demo-data-source.ts # Demo mode data source
│   ├── event-bus.ts        # Client-side event bus
│   ├── registry.ts         # Service registry
│   └── router.ts           # Client-side router
├── styles/                 # Global CSS design tokens
├── components/
│   ├── auth/
│   │   └── login.ts        # Split-screen login page
│   ├── dashboard/
│   │   └── dashboard.ts    # Overview with stats cards
│   ├── jobs/
│   │   ├── job-list.ts     # Job table with filters
│   │   ├── job-detail.ts   # Job detail + run/edit
│   │   └── job-edit.ts     # Job create/edit form
│   ├── agents/
│   │   ├── agent-list.ts   # Agent table
│   │   ├── agent-detail.ts # Agent detail + token mgmt
│   │   ├── agent-edit.ts   # Agent create/edit form
│   │   └── agent-onboarding.ts  # Guided agent setup wizard
│   ├── transfers/
│   │   ├── transfer-list.ts    # Transfer overview + progress bars
│   │   └── transfer-detail.ts  # Transfer detail view
│   ├── tokens/
│   │   └── token-list.ts   # Token CRUD
│   ├── settings/
│   │   └── settings-page.ts  # User settings + password change
│   └── shared/
│       ├── header.ts       # App header with user menu
│       └── sidebar-navigation.ts  # Nav sidebar
└── utils/
    ├── color-picker.ts     # Agent color generation
    └── demo-mode.ts        # Demo detection helpers

Technology Stack

Technology Version Purpose
Lit 2.6.x Web Component framework
TypeScript 5.7.x Type safety
Vite 6.2.x Build tool + dev server

Design System

All components use CSS custom properties (design tokens) for consistent theming:

  • Primary: --ff-primary (Indigo #4f46e5)
  • Colors: --ff-color-success, --ff-color-warning, --ff-color-danger
  • Spacing: --ff-space-sm, --ff-space-md, --ff-space-lg
  • Typography: Inter font family, --ff-font-size-base
  • Shadows: --ff-shadow-sm, --ff-shadow-md
  • Borders: --ff-radius-sm, --ff-radius-md

Routing

Client-side routing is handled in app.ts via hash-based navigation:

Route Component Description
/ ff-dashboard Dashboard
/login ff-login Login
/jobs ff-job-list Job-Übersicht
/jobs/:id ff-job-detail Job-Detail
/agents ff-agent-list Agent-Übersicht
/agents/:id ff-agent-detail Agent-Detail
/transfers ff-transfer-list Transfer-Übersicht
/transfers/:id ff-transfer-detail Transfer-Detail
/tokens ff-token-list Token-Verwaltung
/settings ff-settings Einstellungen

API Client

Der zentrale API-Client (services/api-service.ts) bietet typsichere Methoden für alle Backend-Endpunkte und verwaltet JWT-Token automatisch.

Real-Time Updates

Das Frontend nutzt Polling über die REST-API und einen internen Event-Bus (event-bus.ts) für Live-Updates:

  • Transfer-Fortschritt
  • Agent-Status-Änderungen
  • Job-Ausführungs-Events

WebSocket-Verbindungen werden ausschließlich für die Agent↔Backend-Kommunikation verwendet.