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>
This commit is contained in:
Till-JS 2025-11-29 07:03:59 +01:00
parent b97149ac12
commit 61d181fbc2
3148 changed files with 437 additions and 46640 deletions

View file

@ -0,0 +1,194 @@
# Split-View Implementation Plan für iPad & Web
## Übersicht
Implementation einer Apple Notes-ähnlichen Split-View für die Memos-Seite auf iPad und größeren Bildschirmen. Links die Memo-Liste, rechts die Detail-Ansicht.
## Verfügbare Optionen
### Option 1: Responsive Container-Ansatz (Empfohlen) ✅
**Vorteile**:
- Einfach und schnell umzusetzen
- Nutzt bestehende Komponenten wieder
- Keine Breaking Changes für mobile Ansicht
**Nachteile**:
- Keine native Split-View Navigation
- URL bleibt auf /memos statt /memos/[id]
**Umsetzung**:
- Conditional Rendering basierend auf `useResponsive()` Hook
- Flexbox Layout mit zwei Spalten
- Memo-Liste links (40%), Detail rechts (60%)
- State-basierte Navigation statt Router
### Option 2: Expo Router Groups mit Parallel Routes
**Vorteile**:
- Native Router-Integration
- Deep-Linking Support
- URLs spiegeln aktuelle Ansicht wider
**Nachteile**:
- Komplexer, mehr Refactoring nötig
- Potenzielle Breaking Changes
- Mehr Testing erforderlich
**Umsetzung**:
- Neue Route-Gruppe `(split)` für Tablet/Desktop
- Parallel Routes für Liste und Detail
- Platform-basiertes Routing
- Conditional exports je nach Bildschirmgröße
### Option 3: Custom Navigation Container
**Vorteile**:
- Volle Kontrolle über Navigation
- Optimale Performance
- Maximale Flexibilität
**Nachteile**:
- Sehr aufwändig
- Eigene Navigation-Logic nötig
- Wartungsintensiv
**Umsetzung**:
- Eigener SplitViewController
- State Management für aktives Memo
- Custom Navigation Handling
- Eigene Gesture-Handler
## Implementierungsschritte (Option 1)
### 1. Responsive Layout Component erstellen
```typescript
// components/containers/SplitViewContainer.tsx
- Layout-Logik für Split-View
- Nutzt useResponsive() für Breakpoint-Detection
- Conditional Rendering je nach Bildschirmgröße
- Props: leftPanel, rightPanel, showSplit
```
### 2. Embedded MemoDetail Component
```typescript
// components/organisms/MemoDetailEmbedded.tsx
- Variante der Memo-Detail-Seite als Component
- Akzeptiert memoId als Prop
- Eigenes Loading/Error Handling
- Keine Router-Navigation
```
### 3. Memos-Seite anpassen
```typescript
// app/(protected)/(tabs)/memos.tsx
- Split-View Modus erkennen mit useResponsive()
- selectedMemoId State hinzufügen
- MemoList onMemoPress Handler anpassen
- SplitViewContainer einbinden
```
### 4. State Management
- `selectedMemoId` in memos.tsx verwalten
- Bei Klick auf Memo:
- Mobile: router.push()
- Tablet/Desktop: setSelectedMemoId()
- Sync mit URL optional über searchParams
### 5. Navigation anpassen
- Back-Button nur auf Mobile
- ESC-Taste zum Schließen auf Desktop
- Swipe-Gesten auf Tablet
- Keyboard-Navigation (Arrow Keys)
### 6. UI Optimierungen
- Selektion-Highlighting in Liste
- Responsive Padding/Margins
- Smooth Transitions
- Loading States
- Empty States
## Technische Details
### Breakpoints
- **Mobile**: < 768px (normale Navigation)
- **Tablet**: ≥ 768px (Split-View)
- **Desktop**: ≥ 1024px (Split-View mit mehr Platz)
- **Wide**: ≥ 1440px (optimierte Breiten)
### Layout-Verhältnisse
- **Standard**: 40% Liste / 60% Detail
- **Kompakt**: 35% Liste / 65% Detail
- **Wide**: 30% Liste / 70% Detail
### Mindestbreiten
- **Liste**: min. 320px
- **Detail**: min. 480px
- **Gesamt**: min. 800px für Split-View
### State Management
```typescript
interface SplitViewState {
selectedMemoId: string | null;
isDetailOpen: boolean;
splitRatio: number;
}
```
## Implementierungs-Reihenfolge
1. **Phase 1: Grundgerüst**
- SplitViewContainer Component
- useResponsive Hook erweitern
- Basic Layout Test
2. **Phase 2: Integration**
- MemoDetailEmbedded Component
- Memos.tsx anpassen
- State Management
3. **Phase 3: Navigation**
- Conditional Navigation Logic
- Keyboard Support
- Touch/Swipe Gesten
4. **Phase 4: Polish**
- Animationen
- Loading States
- Error Boundaries
- Performance Optimierung
## Offene Fragen
1. **URL-Sync**: Soll die URL den ausgewählten Memo widerspiegeln?
2. **Persistenz**: Soll die Auswahl beim Reload erhalten bleiben?
3. **Gesten**: Welche Touch-Gesten sollen unterstützt werden?
4. **Resize**: Soll der User die Split-Ratio anpassen können?
5. **Master-Detail**: Soll auf Tablet im Portrait-Modus ein Overlay verwendet werden?
## Performance-Überlegungen
- Lazy Loading für MemoDetail
- Virtualisierung der Memo-Liste beibehalten
- Memoization für expensive Berechnungen
- Debounced Resize-Handler
- Optimistic UI Updates
## Testing-Strategie
1. **Unit Tests**
- SplitViewContainer Logic
- Responsive Hook
- State Management
2. **Integration Tests**
- Navigation Flow
- Data Loading
- Error Handling
3. **E2E Tests**
- Mobile Navigation
- Tablet Split-View
- Desktop Keyboard Nav
4. **Manual Testing**
- iPad (verschiedene Modelle)
- Web (verschiedene Browser)
- Resize-Verhalten
- Orientation Changes