Architektur

Der Stack

EbeneTechnologie
SpracheRust (stable)
Web-FrameworkAxum 0.8
TemplatesAskama 0.13 (SSR, typsicher)
DatenbankSQLite via sqlx (Compile-Time geprüft)
Sessionstower-sessions 0.14 + SQLite Store
AuthOIDC (Casdoor empfohlen)
CSSTailwindCSS v4 + DaisyUI
VideoFFmpeg (HLS) + MediaMTX (RTMP)
ObservabilityOpenTelemetry 0.31 + OTLP/gRPC

Workspace-Crate-Architektur

Aipokit ist ein Cargo-Workspace mit 34 Crates, nach Domäne organisiert:

crates/
  common/              # Gemeinsame Typen, Storage, Datenbank
  media-core/          # Medienerkennung, EXIF-Extraktion
  media-manager/       # Upload, Auslieferung, Suche, CRUD
  video-manager/       # HLS-Transcoding (8-stufige Pipeline)
  access-control/      # 4-stufiges Berechtigungsmodell
  access-codes/        # Teilbare Zugangslinks
  access-groups/       # Team-Rollen und Einladungen
  user-auth/           # OIDC + Session-Management
  workspace-manager/   # Workspace-Browser und Ordner-Typen
  vault-manager/       # Storage-Vault-Isolation
  site-generator/      # Astro-Site-Generierung
  course/              # Kurs-Viewer + Präsentationen
  ...und 22 weitere

Das Dual-Use-Muster

Jedes App-Crate implementiert das FolderTypeRenderer-Trait für den eingebetteten Modus (im Workspace-Browser) und exportiert einen Router für den Standalone-Modus (eigene URL). Dieselbe Logik, dieselben Templates, zwei Deployment-Modi.

Storage-Layout

storage/
  workspaces/{workspace_id}/     # File-Browser-Inhalte
    folder-a/                    # Regulärer Ordner
    media-gallery/               # Typisierter Ordner (media-server)
  vaults/{vault_id}/             # Medienpipeline-Storage
    media/
      images/{slug}.webp
      videos/{slug}/index.m3u8
      documents/{filename}
    thumbnails/
      images/{slug}_thumb.webp
      videos/{slug}_thumb.webp

Rate Limiting

Drei Stufen nach Ressourcenintensität:

StufeLimitEndpoints
Default60 RPMDie meisten API-Endpoints
Upload15 RPMDatei-Upload, Transcoding
Serving300 RPMMedienauslieferung, Thumbnails
Published