11 KiB
PRD: Einundzwanzig Portal - Cinematic Presentation Video
Executive Summary
Produkt: 90-Sekunden kinoreifes Präsentationsvideo des Einundzwanzig Portals Technologie: Remotion 4.0.409 + React Three Fiber + Tailwind CSS v4 Auflösung: 1920x1080 (Desktop) + 1080x1920 (Mobile) Ziel: Das Portal als lebendige, wachsende Bitcoin-Community-Infrastruktur präsentieren
Vision
Das Video zeigt nicht einfach eine Website — es enthüllt eine Bewegung. Jede Animation verstärkt die Botschaft: Die deutschsprachige Bitcoin-Community ist organisiert, aktiv und wächst. Das Portal ist das Nervenzentrum.
Verfügbare Assets
Logos
public/einundzwanzig-square-inverted.svg— Hauptlogopublic/einundzwanzig-horizontal-inverted.svg— Horizontal Logopublic/bitcoin-logo.svg— Bitcoin Symbolpublic/einundzwanzig-wallpaper.png— Background
Meetup-Logos (100+)
public/logos/EinundzwanzigKempten.pngpublic/logos/EinundzwanzigFrankfurtAmMain.pngpublic/logos/EinundzwanzigSaarland.pngpublic/logos/EinundzwanzigDarmstadt.pngpublic/logos/EinundzwanzigTrier.png- ... (vollständige Liste in
public/logos/)
Audio
public/music/background-music.mp3public/sfx/— 17 Sound Effects (logo-whoosh, typing, card-slide, etc.)
Bestehende Komponenten (wiederverwendbar)
src/components/AnimatedLogo.tsx— 3D Logo mit Glowsrc/components/BitcoinEffect.tsx— Fallende Bitcoin-Partikelsrc/components/AudioManager.tsx— Audio-Orchestrierung
Szenen-Übersicht
| # | Szene | Dauer | Frames | Fokus |
|---|---|---|---|---|
| 1 | Logo Reveal | 6s | 0-180 | Brand Impact |
| 2 | Portal Title | 4s | 180-300 | Erwartung setzen |
| 3 | Dashboard Overview | 12s | 300-660 | Full Picture |
| 4 | Meine Meetups | 12s | 660-1020 | Persönliche Verbindung |
| 5 | Top Länder | 12s | 1020-1380 | Geografische Reichweite |
| 6 | Top Meetups | 10s | 1380-1680 | Community Chapters |
| 7 | Activity Feed | 10s | 1680-1980 | Live Pulse |
| 8 | Call to Action | 12s | 1980-2340 | Conversion |
| 9 | Outro | 12s | 2340-2700 | Brand Cement |
Total: 90 Sekunden = 2700 Frames @ 30fps
Milestones
Milestone 1: Foundation Setup
Ziel: Projektstruktur und Basis-Komponenten Deliverables:
- Ordnerstruktur
src/scenes/portal/erstellen - Ordnerstruktur
src/components/portal/erstellen PortalPresentation.tsxHauptkomposition (Skeleton)- Root.tsx mit neuen Compositions aktualisieren
- Basis-Test: Leere Composition rendert ohne Fehler
Verifikation: npm run dev → "PortalPresentation" auswählbar, schwarzer Bildschirm
Milestone 2: Reusable UI Components
Ziel: Dashboard-Elemente als wiederverwendbare Komponenten Deliverables:
StatsCounter.tsx— Animierte Zahlen (0 → 204)SparklineChart.tsx— SVG Linien-AnimationMeetupCard.tsx— Meetup-Karte mit Logo, Name, LocationCountryBar.tsx— Land + Flag + User-Count + BarActivityItem.tsx— Aktivitäts-Feed EintragDashboardSidebar.tsx— Komplette Sidebar Recreation
Verifikation: Jede Komponente einzeln in einer Test-Composition sichtbar
Milestone 3: Scene 1+2 — Intro & Title
Ziel: Kinoqualität Einstieg Deliverables:
PortalIntroScene.tsx— Logo Reveal (6s)- AnimatedLogo von 0 auf 100% mit Particles
- Wallpaper Background mit Zoom
- Audio: logo-whoosh → logo-reveal
PortalTitleScene.tsx— Title Card (4s)- "EINUNDZWANZIG PORTAL" Typing-Animation
- Subtitle Fade-in
- Audio: typing → ui-appear
Verifikation: Frame 0-300 zeigt Logo-Animation + Titel
Milestone 4: Scene 3 — Dashboard Overview
Ziel: Das vollständige Dashboard erscheint Deliverables:
DashboardOverviewScene.tsx(12s)- 3D Perspective Entrance (von oben, kippt zu flat)
- Sidebar slides in (spring, von links)
- Header animiert ein
- Content Cards staggered reveal (5 Frames Delay)
- Sidebar Badges zählen hoch (Meetups: 204, etc.)
- Audio: card-slide (mehrfach, gestaffelt)
Verifikation: Frame 300-660 zeigt komplettes Dashboard
Milestone 5: Scene 4 — Meine Meetups
Ziel: Persönliche Verbindung zum Nutzer Deliverables:
MeetupShowcaseScene.tsx(12s)- Camera zoom in auf "Meine nächsten Meetup Termine"
- "Einundzwanzig Kempten" Karte hebt sich (3D Shadow)
- Echtes Logo:
EinundzwanzigKempten.png - Location + Datum animieren ein
- "Meine Meetups" Liste: Kempten, Memmingen, Friedrichshafen
- Action Buttons erscheinen
- Audio: slide-in, badge-appear
Verifikation: Frame 660-1020 zeigt Meetup-Details
Milestone 6: Scene 5 — Top Länder
Ziel: Geografische Reichweite visualisieren Deliverables:
CountryStatsScene.tsx(12s)- Smooth transition vom Dashboard
- Länder erscheinen sequentiell:
- 🇩🇪 Germany — 458 User
- 🇦🇹 Austria — 59 User
- 🇨🇭 Switzerland — 34 User
- 🇱🇺 Luxembourg — 8 User
- 🇧🇬 Bulgaria — 7 User
- 🇪🇸 Spain — 3 User
- Zahlen zählen hoch (StatsCounter)
- Progress Bars füllen sich (spring)
- SparklineCharts animieren
- Audio: success-chime pro Land
Verifikation: Frame 1020-1380 zeigt Länder-Statistiken
Milestone 7: Scene 6 — Top Meetups
Ziel: Lokale Chapters sind aktiv Deliverables:
TopMeetupsScene.tsx(10s)- Top Meetups Liste animiert:
- Einundzwanzig Saarland — 26 User
- Einundzwanzig Frankfurt am Main — 26 User
- Einundzwanzig Kempten — 20 User
- Einundzwanzig Pfalz — 17 User
- Einundzwanzig Trier — 15 User
- Echte Logos aus public/logos/
- SparklineCharts zeigen Wachstum
- Hervorhebung des führenden Meetups
- Audio: checkmark-pop sequentiell
- Top Meetups Liste animiert:
Verifikation: Frame 1380-1680 zeigt Top Meetups
Milestone 8: Scene 7 — Activity Feed
Ziel: Echtzeit Community-Puls Deliverables:
ActivityFeedScene.tsx(10s)- "Aktivitäten" Spalte im Fokus
- Items sliden von rechts ein:
- "Neuer Termin" Badge bounces
- Meetup Name types out
- Timestamp fades in
- Stack-Effekt: Neue Items pushen alte nach unten
- Events aus Screenshot:
- Einundzwanzig Kempten (vor 13 Stunden)
- Einundzwanzig Darmstadt (vor 21 Stunden)
- Einundzwanzig Vulkaneifel (vor 2 Tagen)
- BitcoinWalk Würzburg (vor 2 Tagen)
- Audio: button-click pro Item
Verifikation: Frame 1680-1980 zeigt Activity Feed
Milestone 9: Scene 8 — Call to Action
Ziel: Conversion Deliverables:
CallToActionScene.tsx(12s)- Dashboard blurt + zoomt leicht raus
- Overlay erscheint mit Glassmorphism
- "Werde Teil der Community" — spring entrance
- URL types:
portal.einundzwanzig.space - URL pulst orange
- Optional: QR Code materializes
- EINUNDZWANZIG Logo center mit Glow
- Audio: success-fanfare
Verifikation: Frame 1980-2340 zeigt CTA
Milestone 10: Scene 9 — Outro
Ziel: Brand Cement Deliverables:
PortalOutroScene.tsx(12s)- Fade to wallpaper background
- Horizontal Logo fade in (center)
- BitcoinEffect particles
- "Einundzwanzig e.V." text
- Background music fade out (3s)
- Audio: final-chime
Verifikation: Frame 2340-2700 zeigt Outro
Milestone 11: Audio Integration
Ziel: Vollständige Audio-Synchronisation Deliverables:
PortalAudioManager.tsx— Audio für alle Szenen- Background Music: Frame 0-2700, fade in/out
- SFX Timeline synchronisiert mit Szenen
- Audio-Test: Volle Composition mit Sound
Verifikation: Audio spielt korrekt zu allen Animationen
Milestone 12: Mobile Version
Ziel: 1080x1920 Portrait-Variante Deliverables:
PortalPresentationMobile.tsx- Mobile Szenen-Adaptionen (Layout-Anpassungen)
- Mobile in Root.tsx registriert
Verifikation: Mobile Composition rendert korrekt
Milestone 13: Polish & Final Render
Ziel: Produktionsreif Deliverables:
- Timing Fine-Tuning aller Übergänge
- Frame-genaue Audio-Sync Überprüfung
- Test-Render:
npx remotion render PortalPresentation --frames=0-300 - Full Render:
npx remotion render PortalPresentation - Mobile Render:
npx remotion render PortalPresentationMobile
Verifikation: MP4 Dateien in /out ohne Fehler
Technische Architektur
Dateistruktur (Final)
src/
├── PortalPresentation.tsx # Desktop Composition
├── PortalPresentationMobile.tsx # Mobile Composition
├── components/
│ ├── AnimatedLogo.tsx # (existing)
│ ├── BitcoinEffect.tsx # (existing)
│ ├── AudioManager.tsx # (existing)
│ └── portal/
│ ├── StatsCounter.tsx
│ ├── SparklineChart.tsx
│ ├── MeetupCard.tsx
│ ├── CountryBar.tsx
│ ├── ActivityItem.tsx
│ └── DashboardSidebar.tsx
├── scenes/
│ ├── IntroScene.tsx # (existing)
│ └── portal/
│ ├── PortalIntroScene.tsx
│ ├── PortalTitleScene.tsx
│ ├── DashboardOverviewScene.tsx
│ ├── MeetupShowcaseScene.tsx
│ ├── CountryStatsScene.tsx
│ ├── TopMeetupsScene.tsx
│ ├── ActivityFeedScene.tsx
│ ├── CallToActionScene.tsx
│ └── PortalOutroScene.tsx
└── Root.tsx # +2 Compositions
Animation Patterns
Spring Configs (wiederverwendbar):
const SMOOTH = { damping: 200 }; // Sanft, kein Bounce
const SNAPPY = { damping: 20, stiffness: 200 }; // Schnell, minimal Bounce
const BOUNCY = { damping: 12 }; // Verspielt, Bounce
Staggered Reveal:
const STAGGER_DELAY = 5; // Frames zwischen Items
items.map((item, i) => {
const itemSpring = spring({
frame: frame - (i * STAGGER_DELAY),
fps,
config: SNAPPY,
});
// ...
});
3D Perspective Entrance:
const perspectiveX = interpolate(frame, [0, 60], [30, 0], { extrapolateRight: 'clamp' });
const zoom = interpolate(frame, [0, 60], [0.85, 1], { extrapolateRight: 'clamp' });
style={{
transform: `perspective(1000px) rotateX(${perspectiveX}deg) scale(${zoom})`,
}}
Erfolgskriterien
- Technisch: Alle Milestones abgeschlossen, keine Render-Fehler
- Visuell: Jede Szene hat mindestens 2 aktive Animationen
- Audio: Jeder Szenenübergang hat korrespondierenden Sound
- Performance: Render-Zeit < 5 Minuten für Full HD
- Qualität: Video wirkt professionell, nicht "zusammengestückelt"
Risiken & Mitigations
| Risiko | Mitigation |
|---|---|
| Logo-Formate inkonsistent (jpg/png/svg) | Img-Komponente mit fallback handling |
| Performance bei vielen Animationen | Premounting für smooth transitions |
| Audio Sync drift | Frame-genaue Sequence-Platzierung |
| Mobile Layout bricht | Separate Scene-Varianten pro Format |
Nächster Schritt
Nach Genehmigung dieser PRD:
- Milestone 1 beginnen: Foundation Setup