Rueckmeldung vom Kunden: der Screenshot war als Funktionsaenderung gemeint, nicht nur als Optik. Statt eine Karte nach der anderen durchzuschieben, liegen jetzt alle nebeneinander und werden einzeln gemerkt, ausgeblendet oder geoeffnet. Raus: - Kartenstapel, Maus-Drag, Pfeiltasten, Exit-Animation - Undo samt History - "gemerkt" ist ein Zustand, den ein zweiter Klick zuruecknimmt, keine Entscheidung in einer History - die drei Aktions-Buttons, das Kuerzel-Panel, die feste Detailspalte Rein: - Masonry-Raster (columns 3-6, Standard 5) mit gestaffelten Hoehen - Merken-Pille und ⋯ beim Hover auf der Kachel; ⋯ bietet "Nicht mehr zeigen" und "Details oeffnen" - Detailansicht als Overlay mit Medium, Beschreibung, Tags, Kennzahlen - Auswahlmodus mit Auswahlkreisen und Sammelaktion "Zur Sammlung hinzufuegen" - Escape schliesst der Reihe nach Detailansicht, Menue, Auswahlmodus Karten haben jetzt eine id; Merken, Ausblenden, Auswahl und Detail referenzieren darueber statt ueber einen Index. Die Profil-Galerie zeigt dadurch genau die gemerkten Karten, die Kennzahl "Gemerkt" zaehlt sie. Beispieldaten auf 10/8/6 Karten erweitert, damit das Raster traegt. Offen und im README vermerkt: Suche ist weiterhin eine Attrappe, Ausblenden ist fluechtig, Nachladen fuer echte Datenmengen fehlt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
19 KiB
Handoff: Videogen — Web-App (Desktop-Adaption der Mobile-App)
Überblick
Die bestehende Mobile-App („videogen") als Desktop-Web-App. Statt einer schmalen Handy-Spalte im Browser: Icon-Rail links, breite Kopfzeile mit Suche und ein Masonry-Raster als Feed.
Das Swipen entfällt. In der Mobile-App wird eine Karte nach der anderen durchgeschoben; auf dem Desktop liegen stattdessen alle Karten nebeneinander und werden einzeln gemerkt, ausgeblendet oder geöffnet. Damit fallen Kartenstapel, Maus-Drag, Pfeiltasten, die Exit-Animation und das Undo weg — „gemerkt" ist jetzt ein Zustand, den ein zweiter Klick zurücknimmt, keine Entscheidung in einer History.
Visuelle Sprache: Pinterest Desktop. Heller Hintergrund, schmale Icon-Leiste ohne Beschriftung,
Suchfeld als breite Pille, rote Primäraktion („Merken"), randlose Karten mit 16px-Radius,
gestaffeltes Raster. Referenz ist die Pinterest-Web-App (de.pinterest.com); der Screenshot dafür
liegt bisher nicht im Repo, siehe Offene Punkte.
Zu den Design-Dateien
Die Dateien in diesem Bundle sind Design-Referenzen in HTML — Prototypen, die Aussehen und Verhalten zeigen, kein Produktionscode zum Kopieren. Aufgabe ist, diese Designs in der bestehenden Umgebung des Ziel-Codebases nachzubauen (React, Vue, Svelte, Next.js …) mit dessen etablierten Patterns und Bibliotheken. Existiert noch keine Umgebung, das passendste Framework wählen (Empfehlung: React + TypeScript) und dort umsetzen.
Die HTML-Datei ist ein „Design Component"-Format: Videogen Web.dc.html enthält Template + Logikklasse,
support.js ist die Laufzeit dazu. Zum Ansehen: beide Dateien im selben Ordner belassen und die
.dc.html im Browser öffnen. Die Logikklasse am Dateiende ist lesbarer JS-Code und dient als Referenz
für Zustand und Interaktion.
Fidelity
High-fidelity. Farben, Typografie, Abstände, Radien, Übergänge und Interaktionen sind final gemeint und sollen pixelgenau nachgebaut werden — mit den Komponenten/Utilities des Ziel-Codebases.
Globales Layout (App-Shell)
- Wurzel:
display:flex,min-height:100vh,min-width:1180px(darunter horizontales Scrollen, die App ist Desktop-only gedacht). - Hintergrund durchgehend
#ffffff, Grundschrift#111111. Keine Verläufe, keinbackdrop-filter.
1. Icon-Rail (links)
- Breite
80px,flex:none,position:sticky; top:0; height:100vh,background:#ffffff, rechte Kante1px solid #efefef. Padding12px 0 16px, zentrierte Flex-Spalte,gap:8px. - Brand: 32×32 Kreis
#e60023in einem 48px-Slot, weißes „V" 17px/700. - Nav-Buttons: 48×48,
border-radius:50%, Icon 20px, ohne Textlabel — der Name steht imtitle-Attribut und wird als Tooltip gezeigt.- Inaktiv: transparent, Icon
#111111. Hover:background:#e9e9e9. - Aktiv:
background:#111111, Icon#ffffff. Aktiv + Hover:background:#000000. - Transition
.12s ease. - Umsetzungshinweis: Die Zustände gehören in Klassen (
.rail,.rail.active), nicht in Inline-Styles. Im Prototyp setzt die.dc-Laufzeitstyle-hovermit!important; ein inline gesetztes Aktiv-Schwarz würde beim Hover überschrieben und der aktive Button hellte auf. - Reihenfolge oben: Feed, Profil, Erstellen. Unten (
margin-top:auto): Einstellungen. - Icons (im Prototyp Unicode-Glyphen als Platzhalter) — Lucide:
home,user,plus,settings.
- Inaktiv: transparent, Icon
2. Kopfzeile
padding:12px 16px 4px, Flex-Zeile,gap:8px.- Suchfeld:
flex:1, Höhe48px,border-radius:24px,background:#efefef,padding:0 16px, Platzhaltertext „Suchen" 16px#767676; links Lupe, rechts Objektiv-Symbol (Lucidesearchundcamera). - Konto: 40px Kreis
linear-gradient(140deg,#b2323c,#5d1620)mit weißer Initiale 15px/700, daneben 28px Chevron-Button (▾, Hover#e9e9e9).
3. Tab-Leiste
padding:0 24px, Unterkante1px solid #efefef, Tabs mitgap:24px, an der Grundlinie ausgerichtet.- Tabs: „Videos", „Folge ich", „Posts" — drei Raster. Ein Wechsel springt auf den Feed-Screen
und verwirft eine laufende Auswahl.
padding:0 2px 12px, Unterkante3px solid— aktiv#111111, inaktivtransparent.- Aktiv:
#111111, 700. Inaktiv:#767676, 500; Hover →#111111. Schriftgröße 16px.
- Rechts: Zähler „9 Karten · 4 gemerkt" (13px
#767676) und der Auswählen-Umschalter: Pillepadding:10px 18px,radius:22px,font:700 15px; aus →#efefef/#111111mit Beschriftung „Auswählen", an →#111111/#ffffffmit „Fertig".
Screens
A. Feed (Startansicht)
Zweck: Material sichten, Gutes merken, Uninteressantes ausblenden.
- Bereich:
flex:1; min-height:0; overflow:auto; padding:24px 24px 96px(unten Platz für die Auswahlleiste). - Masonry-Raster:
columns:5; column-gap:16px— Spaltenzahl ist als Prop einstellbar (3–6). Kachel-Wrapper:break-inside:avoid; margin-bottom:16px; position:relative.
A1 Kachel
- Medienfläche:
position:relative, variable Höhe (Zyklus 320 / 400 / 260 / 340 / 280 / 440 / 300 / 360 / 240 / 380 px),border-radius:16px,overflow:hidden, kein Rahmen,cursor:zoom-in(im Auswahlmoduspointer). - Inhalt von unten nach oben:
- Grundfläche
linear-gradient(155deg, <hue0> 0%, <hue1> 100%). - Streifen-Overlay
repeating-linear-gradient(<40+9·i>deg, rgba(255,255,255,.08) 0 2px, transparent 2px 16px),opacity:.45. (Platzhalter für das Medium — im Produkt liegt hier Bild oder Video.) - Hover-Scrim
rgba(0,0,0,.24),opacity0 → 1 in.12s. - Fußzeile auf
linear-gradient(0deg, rgba(0,0,0,.62), transparent),padding:14px: Caption 14px/700 weiß, darunter „Name · Art" 12pxrgba(255,255,255,.82).
- Grundfläche
- Hover-Steuerung (beide
opacity0 → 1 in.12s, gebunden an den Hover der Kachel):- Merken-Pille oben rechts (
right:12px; top:12px):padding:11px 16px; radius:22px; font:700 15px, ungemerkt#e60023mit weißem Text, gemerkt#111111mit „Gemerkt". Klick schaltet um — ein zweiter Klick nimmt zurück. - ⋯-Button unten rechts (
right:12px; bottom:12px): 40px Kreis#ffffff,box-shadow: 0 1px 8px rgba(0,0,0,.2), Hover#e9e9e9.
- Merken-Pille oben rechts (
- ⋯-Menü: öffnet über dem Button (
right:12px; bottom:56px), 210px,radius:16px,background:#ffffff,box-shadow: 0 1px 20px rgba(0,0,0,.22),padding:8px, EinblendungriseIn .14s. Einträgepadding:12px 14px,radius:12px, 15px/600, Hover#efefef: „Nicht mehr zeigen" (blendet die Kachel aus) und „Details öffnen". Ein zweiter Klick auf ⋯ schließt das Menü,Escapeebenfalls. - Leerzustand (alles ausgeblendet): zentriert, Titel „Nichts mehr in dieser Ansicht" 20px/700,
Text 15px
#5f5f5f, roter Pill-Button „Ausgeblendete wieder anzeigen".
A2 Detailansicht (Overlay)
Ein Klick auf die Kachel öffnet sie — Pinterests Pin-Seite als Overlay.
- Backdrop:
position:fixed; inset:0; background:rgba(0,0,0,.6), Inhalt zentriert,padding:32px,z-index:60, EinblendungfadeIn .16s. Klick auf den Backdrop schließt. - Karte:
width:min(1016px,100%),max-height:calc(100vh - 64px),background:#ffffff,border-radius:32px,overflow:hidden,grid-template-columns:1fr 1fr,riseIn .2s. - Schließen: 40px Kreis
#ffffffmitbox-shadow: 0 1px 8px rgba(0,0,0,.2), absolutleft:16px; top:16pxüber dem Medium. ZusätzlichEscape. - Links: das Medium,
min-height:520px, Verlauf + Streifen wie auf der Kachel. - Rechts:
padding:32px,overflow:auto, Flex-Spaltegap:20px:- Aktionszeile rechtsbündig: „Nicht mehr zeigen" (
#efefef, 48px hoch,radius:24px, 15px/700) und die Merken-Pille (48px hoch,padding:0 24px,radius:24px, rot bzw. schwarz wie auf der Kachel). - Titel = Caption, 32px/700,
letter-spacing:-.02em. - Creator-Zeile: 48px Avatar-Kreis, Name 16px/700, Untertitel 14px
#767676. - Beschreibung 16px,
line-height:1.6,#333333. - Statistik-Raster 3 Spalten,
gap:10px: Kachelbackground:#f5f5f5,radius:16px,padding:14px; Wert 18px/700tabular-nums, Label 12px#767676. - Tags: Pills
padding:8px 14px,radius:18px,background:#efefef, 13px/600.
- Aktionszeile rechtsbündig: „Nicht mehr zeigen" (
A3 Auswahlmodus
Für das Abarbeiten ganzer Strecken. Umschalter sitzt in der Tab-Leiste.
- Im Auswahlmodus verschwinden Merken-Pille und ⋯ — auf der Kachel zählt nur noch die Auswahl.
- Jede Kachel bekommt oben links (
left:12px; top:12px) einen Auswahlkreis 28px,border:2px solid #ffffff: nicht gewähltbackground:rgba(0,0,0,.35), Haken unsichtbar; gewähltbackground:#e60023mit weißem ✓ 15px/700.pointer-events:none— geklickt wird die Kachel. - Gewählte Kachel zusätzlich
outline:4px solid #e60023; outline-offset:-4px. - Ein Klick auf die Kachel wählt aus bzw. ab (öffnet nicht die Detailansicht).
- Auswahlleiste, sobald mindestens eine Kachel gewählt ist: fixiert
bottom:28px, zentriert,padding:12px 12px 12px 22px,radius:32px,background:#ffffff,box-shadow: 0 1px 20px rgba(0,0,0,.22),riseIn .2s,z-index:45. Inhalt: „3 ausgewählt" 15px/700, roter Button „Zur Sammlung hinzufügen", grauer „Auswahl aufheben" (beidepadding:12px 20px,radius:24px, 15px/700). - „Zur Sammlung hinzufügen" merkt alle gewählten Karten, leert die Auswahl und verlässt den Auswahlmodus; Toast „N Karten zur Sammlung hinzugefügt".
Escapeverlässt den Auswahlmodus und verwirft die Auswahl.
B. Profil
padding:32px 24px 40px,overflow:auto, EinblendungriseIn .26s.- Kopf zentriert als Spalte,
gap:10px,padding-bottom:28px: 120px Avatar-Kreis (linear-gradient(140deg,#b2323c,#5d1620), ohne Rand), Name 36px/700letter-spacing:-.02em, Meta „Studio-Konto · seit März 2026" 15px#5f5f5f; darunter drei Kennzahlen (gap:28px, zentriert): Posts 38, Gemerkt (live: Anzahl der gemerkten Karten), Follower 1.204 — Werte 18px/700tabular-nums, Labels 13px#767676. - Die Galerie zeigt genau die gemerkten Karten — dasselbe Masonry-Raster wie im Feed, aber ohne Hover-Steuerung. Ein Klick öffnet die Detailansicht.
C. Erstellen
padding:32px 24px 40px; Inhalt in einer weißen Karte:max-width:920px, zentriert,radius:24px,box-shadow: 0 1px 20px rgba(0,0,0,.12),padding:32px,grid-template-columns: 1fr 320px,gap:32px.- Titel „Neuen Post erstellen" 30px/700, Untertitel 15px
#5f5f5f. - Dropzone: Höhe 220px,
border:2px dashed #cdcdcd,radius:16px,background:#f5f5f5; Hover Border#e60023, BG#fafafa. Text „Dateien hierher ziehen" 16px/700 + „MP4, MOV oder bis zu 10 Bilder" 14px#767676. - Felder Titel und Untertitel: Label 13px/700
#111111; Inputpadding:14px 16px,radius:16px,border:2px solid #cdcdcd,background:#ffffff, 15px. Beide sind an die Live-Vorschau gebunden. - Art: Pills „Produkt / Video / Serie",
padding:11px 18px,radius:22px,font:700 15px; aktivbackground:#111111, Text#ffffff; inaktivbackground:#efefef, Text#111111. - Aktionen: „Veröffentlichen" (rot
#e60023, löst Toast „Post veröffentlicht" aus), „Als Entwurf sichern" (#efefef), beidepadding:14px 24px,radius:24px,font:700 15px. - Vorschau (rechte Spalte): Kicker 12px/600
#767676+ Karte 420px hoch,radius:16px, Verlauf + Streifen, unten Titel 18px/700 und Untertitel 14px auf schwarzem Verlauf — spiegelt die Eingaben live.
D. Einstellungen
padding:32px 24px 40px, Inhaltmax-width:660px, zentriert. Titel „Einstellungen" 30px/700.- Liste: Container
radius:16px,overflow:hidden,box-shadow: 0 1px 20px rgba(0,0,0,.12), kein Rahmen. Zeilepadding:20px,background:#ffffff, Trenner1px solid #efefef; Label 16px/700, Hinweis 14px#767676. - Toggle: Track 52×30,
radius:999px, kein Rahmen; aus#cdcdcd, an#e60023. Knopf 24px, immer#ffffffmitbox-shadow: 0 1px 3px rgba(0,0,0,.25), links 3px → 25px, Transitionleft .2s cubic-bezier(.22,.9,.3,1). - Einträge: Videos automatisch abspielen (an), Ton beim Öffnen (aus), Wochenrückblick (an), Bewegte Übergänge (an).
Interaktion & Verhalten
Merken — zwei Wege, beide schalten um (zweiter Klick nimmt zurück):
- Merken-Pille auf der Kachel (erscheint beim Hover).
- Merken-Button in der Detailansicht. Toast: „Zu ‚' gemerkt" bzw. „Aus der Sammlung entfernt".
Ausblenden — „Nicht mehr zeigen" im ⋯-Menü oder in der Detailansicht. Die Kachel verschwindet aus dem Raster, eine offene Detailansicht schließt sich, Toast „Wird nicht mehr gezeigt".
Öffnen — Klick auf die Kachel oder „Details öffnen" im ⋯-Menü.
Mehrfachauswahl — siehe A3.
Tastatur: Escape schließt der Reihe nach: offene Detailansicht → offenes ⋯-Menü →
Auswahlmodus. Weitere Kürzel gibt es nicht mehr; die Pfeiltasten sind mit dem Swipen entfallen.
Hover-Zustände: Scrim, Merken-Pille und ⋯ hängen am Hover der Kachel, nicht am eigenen Element
(im Prototyp .pin:hover .pin-hover, zusätzlich :focus-within für Tastaturbedienung).
Im Ziel-Framework als Hover-State der Kartenkomponente umsetzen — und den Fokusfall nicht vergessen,
sonst sind Merken und ⋯ per Tastatur nicht erreichbar.
Toast: fixiert, horizontal zentriert, bottom:28px — bei sichtbarer Auswahlleiste 96px,
damit beide nicht übereinanderliegen. padding:16px 22px, radius:16px, background:#ffffff,
box-shadow: 0 1px 20px rgba(0,0,0,.22), 15px/600, riseIn .2s, verschwindet nach 1700ms.
Keyframes:
riseIn:opacity:0; translateY(14px)→opacity:1; none(.14–.26s ease)fadeIn:opacity:0→1- Fokus:
:focus-visible { outline: 2px solid #0074e8; outline-offset: 2px; }— nie der Browser-Default.
Responsive: Desktop-only, min-width:1180px; darunter horizontal scrollen.
State
| State | Typ | Zweck |
|---|---|---|
screen |
'feed' | 'profile' | 'create' | 'settings' |
aktive Ansicht (Icon-Rail) |
tab |
'videos' | 'following' | 'posts' |
aktives Raster; Wechsel verwirft Auswahl und Menü |
saved |
string[] (Karten-IDs) |
gemerkte Karten — speist Profil-Galerie und Kennzahl |
hidden |
string[] (Karten-IDs) |
ausgeblendete Karten, aus dem Raster gefiltert |
selectMode |
boolean | Auswahlmodus aktiv |
selection |
string[] (Karten-IDs) |
aktuell gewählte Kacheln |
detail |
string | null |
ID der offenen Detailansicht |
menuFor |
string | null |
ID der Kachel mit offenem ⋯-Menü |
toast |
string | Toast-Text (leer = versteckt) |
draftTitle, draftSub, draftKind |
string | Formular „Erstellen", live in der Vorschau |
settings |
{autoplay, sound, digest, motion} booleans |
Einstellungen |
Datenbedarf pro Karte: id, name, sub, kind, assets, caption, hue: [from, to],
avatar (Verlauf oder Bild-URL), body, tags: string[], stats: [wert, label][].
Die id ist neu und trägt jetzt alles — Merken, Ausblenden, Auswahl und Detailansicht referenzieren
Karten darüber, nicht mehr über einen Index. Im Produkt ersetzt das Medium (Bild/Video) die
Verlaufs-/Streifenfläche. Die drei Tabs liefern drei Raster.
Design-Tokens
Farben
| Rolle | Wert |
|---|---|
| Seite | #ffffff |
| Text | #111111 |
| Text gedämpft | #5f5f5f (sekundär), #767676 (Labels, inaktive Tabs), #333333 (Beschreibung) |
| Akzent (Rot) | #e60023, Hover #ad081b; auch Auswahl-Outline und Auswahlkreis |
| Dunkel | #111111 (aktiver Rail-Button, aktive Art-Pille, gemerkt-Zustand, „Fertig"), Hover #000000 |
| Neutrale Flächen | #efefef (Suchfeld, Buttons, Tags), Hover #e2e2e2; #e9e9e9 (Rail-/⋯-Hover); #f5f5f5 (Statistik-Kacheln, Dropzone) |
| Linien | #efefef (Trenner, Kanten), #cdcdcd (Eingabe-Rahmen, Toggle aus) |
| Auf Medien | rgba(255,255,255,.82) Untertitel, rgba(0,0,0,.24) Hover-Scrim, rgba(0,0,0,.62) Fußzeilen-Verlauf, rgba(0,0,0,.35) Auswahlkreis leer |
| Overlay | rgba(0,0,0,.6) Backdrop der Detailansicht |
| Fokus | #0074e8 |
| Karten-Verläufe | grün #1f8163→#0d4034, blau #256f8b→#0c2f3f, ocker #8a6a2f→#3a2a11, rot #7a2f38→#2c1014, tannen #2f6f5a→#0e332b, türkis #1c6f7f→#0a2c33, violett #6a2f7a→#26102c, gold #7a5a2a→#2f2110 |
Typografie — nur Manrope 400/500/600/700. Zahlen mit font-variant-numeric: tabular-nums.
Skala: 36 / 32 / 30 / 20 / 18 / 17 / 16 / 15 / 14 / 13 / 12 px.
Große Überschriften letter-spacing:-.02em. Kicker sind 12px/600 in #767676, normal geschrieben.
Abstände 2 / 4 / 6 / 8 / 10 / 12 / 14 / 16 / 18 / 20 / 22 / 24 / 28 / 32 / 40 / 56 / 96 px.
Radien 12px (Menüeinträge), 16px (Kacheln, Eingaben, Toast, Menü), 18 / 22 / 24px (Pillen),
32px (Detailansicht, Auswahlleiste), 50% Kreise, 999px Toggle-Track.
Schatten 0 1px 8px rgba(0,0,0,.2) schwebende Rundbuttons · 0 1px 20px rgba(0,0,0,.12)
Flächen/Listen · .22 Menü, Auswahlleiste, Toast · 0 1px 3px rgba(0,0,0,.25) Toggle-Knopf.
Kein backdrop-filter — die Oberfläche ist deckend.
Transitions .12s ease (Hover, Farbwechsel, Ein-/Ausblenden), .2s (Toggle).
Karten- und Exit-Animationen des alten Stapels entfallen ersatzlos.
Assets
Keine Binärdateien im Prototyp. Alle Medien sind Platzhalter aus CSS-Verläufen und Streifenmustern — im Produkt durch echte Bilder/Videos ersetzen. Icons: Lucide (im Prototyp Unicode-Glyphen als Platzhalter). Fonts: Google Fonts — nur Manrope.
Offene Punkte
- Suchfeld ohne Funktion. Die Pinterest-Kopfzeile lebt von der Suche, im Prototyp ist sie eine reine Attrappe — es gibt bisher keine Suchfunktion in der App. Vor der Umsetzung klären, ob Suche gebaut wird; wenn nicht, gehört das Feld raus, statt eine Funktion vorzutäuschen.
- Ausblenden ist im Prototyp flüchtig.
hiddenlebt nur im Zustand der Seite. Im Produkt muss entschieden werden, ob „Nicht mehr zeigen" dauerhaft pro Konto gilt und ob es einen Weg zurück gibt (im Prototyp nur über den Leerzustand). - Nachladen fehlt. Das Raster zeigt einen endlichen Satz. Für echte Datenmengen braucht es Infinite Scroll oder Paginierung samt Ladeplatzhaltern — beides ist hier nicht gestaltet.
- Pinterest-Referenz liegt nicht im Repo. Die Vorlage kam als Screenshot im Chat. Wer sie
dauerhaft braucht, legt sie als
referenz/pinterest-desktop.pngdaneben.
Dateien in diesem Bundle
PROMPT.md— fertiger Auftrag zum Einfügen in Claude Code.Videogen Web.dc.html— der Prototyp (Template oben, Logikklasse mit Zustand/Interaktion unten, Beispieldaten inDATA).support.js— Laufzeit, damit die HTML-Datei sich lokal öffnen lässt. Nicht portieren.README.md— dieses Dokument.referenz/mobile-ansicht-im-browser.png— Ausgangslage: die Mobile-App als schmale Spalte untervideogen.project.webklar.com, die diese Desktop-Adaption ersetzt.