managarten/apps-archived/uload/docs/reports/card-architecture-analysis.md
Till-JS 61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00

333 lines
8.2 KiB
Markdown

# Card-Architektur Analyse
## Übersicht
Die Card-Architektur im uload-Projekt implementiert ein **dreistufiges Rendering-System** mit unterschiedlichen Komplexitätsstufen für verschiedene Nutzergruppen. Das System ist modular aufgebaut und bietet drei verschiedene Modi:
1. **Beginner Mode** - Visueller Drag-and-Drop Builder mit vorgefertigten Modulen
2. **Advanced Mode** - HTML-Templates mit Variablen-System
3. **Expert Mode** - Direkter HTML/CSS Code-Editor
## Architektur-Struktur
### Kern-Komponenten
```
src/lib/components/cards/
├── Card.svelte # Hauptkomponente - Router für verschiedene Modi
├── BaseCard.svelte # Modular-System für Beginner Mode
├── TemplateCard.svelte # Template-Engine für Advanced Mode
├── SafeHTMLCard.svelte # Sandbox-Renderer für Expert Mode
├── types.ts # TypeScript Definitionen
└── modules/ # Vorgefertigte Module
├── HeaderModule.svelte
├── ContentModule.svelte
├── LinksModule.svelte
├── MediaModule.svelte
├── StatsModule.svelte
├── ActionsModule.svelte
└── FooterModule.svelte
```
### Services
```
src/lib/services/
├── cardService.ts # Business Logic, Konvertierung, DB-Operationen
└── cardSanitizer.ts # Security, HTML/CSS Sanitization
```
## Stärken der Architektur
### 1. **Flexibles Multi-Mode System**
- Verschiedene Komplexitätsstufen für unterschiedliche Nutzergruppen
- Nahtlose Konvertierung zwischen Modi möglich
- Progressive Disclosure - Nutzer können mit einfachen Funktionen starten
### 2. **Starke Security-Maßnahmen**
- DOMPurify für HTML-Sanitization
- Sandbox-IFrames für Custom HTML
- Content Security Policy (CSP) Integration
- XSS-Prävention durch HTML-Escaping
### 3. **Modulares Design**
- Wiederverwendbare Module
- Klare Trennung von Concerns
- Einfache Erweiterbarkeit durch neue Module
### 4. **TypeScript Integration**
- Vollständige Typisierung aller Komponenten
- Interfaces für alle Module und Konfigurationen
- Type Guards und Validierung
## Kritische Punkte & Verbesserungsvorschläge
### 1. **Überkomplexe Type-Struktur** ⚠️
**Problem:**
- Zu viele überlappende Interfaces (357 Zeilen in types.ts)
- UnifiedCard enthält optionale Configs für alle drei Modi gleichzeitig
- Redundante Typen zwischen altem und neuem System
**Lösung:**
```typescript
// Vereinfachte Struktur mit discriminated unions
type CardConfig =
| { mode: 'beginner'; config: ModularConfig }
| { mode: 'advanced'; config: TemplateConfig }
| { mode: 'expert'; config: CustomHTMLConfig };
interface Card {
id: string;
metadata: CardMetadata;
constraints: CardConstraints;
config: CardConfig;
}
```
### 2. **Fehlende State Management** ⚠️
**Problem:**
- Kein zentraler Store für Card-Zustände
- Props-Drilling durch mehrere Ebenen
- Keine Optimistic Updates
**Lösung:**
```typescript
// Svelte Store für Card Management
import { writable, derived } from 'svelte/store';
export const cardStore = createCardStore({
cards: new Map(),
activeCard: null,
editMode: false,
});
```
### 3. **Performance-Probleme bei vielen Cards** ⚠️
**Problem:**
- Jede Card rendert ein eigenes IFrame (SafeHTMLCard)
- Keine Virtualisierung bei Listen
- Fehlende Lazy Loading Strategie
**Lösung:**
```typescript
// Intersection Observer für Lazy Loading
const cardObserver = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
loadCard(entry.target.dataset.cardId);
}
});
},
{ rootMargin: '100px' }
);
```
### 4. **Unvollständige Konvertierungs-Logik** ⚠️
**Problem:**
- Template zu Modular Konvertierung ist nur ein Stub
- HTML zu Modular verwendet keine echte Analyse
- Verlust von Information bei Mode-Wechsel
**Lösung:**
```typescript
// AI-gestützte Konvertierung implementieren
async function convertToModular(html: string): Promise<ModularConfig> {
const dom = parseHTML(html);
const modules = await analyzeStructure(dom);
return generateModularConfig(modules);
}
```
### 5. **Fehlende Validierung** ⚠️
**Problem:**
- Keine Schema-Validierung für Card-Konfigurationen
- Fehlende Grenzen für Module-Anzahl
- Keine Größenbeschränkungen für Custom HTML/CSS
**Lösung:**
```typescript
// Zod Schema für Validierung
import { z } from 'zod';
const CardSchema = z.object({
renderMode: z.enum(['beginner', 'advanced', 'expert']),
constraints: z.object({
maxModules: z.number().max(20),
maxHTMLSize: z.number().max(100000),
maxCSSSize: z.number().max(50000),
}),
});
```
### 6. **Unklare Module-Kommunikation** ⚠️
**Problem:**
- Module können nicht miteinander kommunizieren
- Keine Events zwischen Modulen
- Fehlende globale Card-Context
**Lösung:**
```typescript
// Event Bus für Module
const cardEventBus = {
emit: (event: string, data: any) => {},
on: (event: string, handler: Function) => {},
off: (event: string, handler: Function) => {},
};
```
## Architektur-Verbesserungen
### 1. **Vereinfachte Komponenten-Hierarchie**
```
Card.svelte (nur Routing)
├── ModularCard.svelte (Beginner)
├── TemplateCard.svelte (Advanced)
└── CustomCard.svelte (Expert)
```
### 2. **Centralized State Management**
```typescript
// stores/cards.ts
export const cardsStore = {
cards: writable<Map<string, Card>>(),
activeCard: writable<string | null>(),
editMode: writable<boolean>(),
// Actions
createCard: async (config: CardConfig) => {},
updateCard: async (id: string, updates: Partial<Card>) => {},
deleteCard: async (id: string) => {},
convertCard: async (id: string, targetMode: RenderMode) => {},
};
```
### 3. **Plugin-System für Module**
```typescript
interface CardModule {
name: string;
component: Component;
schema: ZodSchema;
defaultProps: any;
// Lifecycle hooks
onMount?: () => void;
onDestroy?: () => void;
onPropsChange?: (props: any) => void;
}
// Registry für Module
const moduleRegistry = new Map<string, CardModule>();
```
### 4. **Optimierte Rendering-Pipeline**
```typescript
// Virtual DOM für Performance
class CardRenderer {
private cache = new Map();
render(card: Card): VNode {
const cached = this.cache.get(card.id);
if (cached && !card.isDirty) return cached;
const vnode = this.createVNode(card);
this.cache.set(card.id, vnode);
return vnode;
}
}
```
### 5. **Bessere Developer Experience**
```typescript
// Dev Tools Integration
if (import.meta.env.DEV) {
window.__CARD_DEVTOOLS__ = {
inspect: (cardId: string) => {},
export: (cardId: string) => {},
import: (config: any) => {},
benchmark: () => {},
};
}
```
## Empfohlene Sofortmaßnahmen
### Phase 1: Cleanup (1-2 Tage)
1. ✅ Alte, nicht genutzte Types entfernen
2. ✅ Discriminated Unions für CardConfig einführen
3. ✅ Props-Interfaces konsolidieren
### Phase 2: State Management (2-3 Tage)
1. ✅ Svelte Stores für Cards implementieren
2. ✅ Optimistic Updates einbauen
3. ✅ Error Handling verbessern
### Phase 3: Performance (3-4 Tage)
1. ✅ Lazy Loading für Cards
2. ✅ Virtual Scrolling für Listen
3. ✅ IFrame-Pool für SafeHTMLCard
### Phase 4: Features (1 Woche)
1. ✅ Bessere Konvertierungs-Logik
2. ✅ Module-Kommunikation
3. ✅ Undo/Redo System
## Fazit
Die Card-Architektur ist **grundsätzlich gut durchdacht** mit einem innovativen Multi-Mode Ansatz und starken Security-Features. Die Hauptprobleme liegen in:
1. **Überkomplexität** der Type-Definitionen
2. **Fehlende zentrale State-Verwaltung**
3. **Performance-Engpässe** bei vielen Cards
4. **Unvollständige Features** (Konvertierung, Validierung)
Mit den vorgeschlagenen Verbesserungen könnte das System:
- **30-40% weniger Code** benötigen
- **2-3x bessere Performance** erreichen
- **Deutlich wartbarer** werden
- **Bessere Developer Experience** bieten
Die Architektur hat eine **solide Basis**, benötigt aber Refactoring für Production-Readiness.
## Metriken
- **Code-Komplexität:** 7/10 (zu hoch)
- **Performance:** 6/10 (verbesserungswürdig)
- **Security:** 9/10 (sehr gut)
- **Wartbarkeit:** 5/10 (needs improvement)
- **Erweiterbarkeit:** 7/10 (gut)
- **Developer Experience:** 6/10 (okay)
**Gesamt-Bewertung:** 6.7/10 - Solide Basis mit Verbesserungspotential