293 Commits

Author SHA1 Message Date
HolgerHatGarKeineNode
7bad86dcb9 🔗 Update news view to use media.signed route for temporary signed URLs 2026-01-25 19:52:09 +01:00
HolgerHatGarKeineNode
1a73912dd9 🔒 Update media routes to support private disk and enhance file handling
- 🗂️ Change default filesystem disk from `local` to `private` in configuration
- 📤 Use `Storage::disk` for media download and response functionality
- ⚙️ Refactor download and file response logic for improved security and consistency
2026-01-25 19:45:12 +01:00
HolgerHatGarKeineNode
1391808793 🎨 Add dynamic category-based filtering for news and improve UI interactions
- 🆕 Introduce `selectedCategory` state with URL binding for category filtering
- 🪄 Add computed `filteredNews` property to handle filtered results efficiently
- 🎛️ Implement category toggle buttons and "Clear Filter" functionality in UI
- 🌟 Improve category display with badges and contextual feedback for empty states
- 🔄 Refactor repeated news loading into a single `loadNews` method
2026-01-25 19:25:22 +01:00
HolgerHatGarKeineNode
10dac9d02b 🔒 Implement signed media URLs and migrate media storage to private disk
-  Introduce `getSignedMediaUrl` in models for temporary signed URLs
- 🗂️ Migrate media collections to private disk for added security
- 🔧 Add `media:move-to-private` command to streamline migration
- ⚙️ Update views and components to use signed media URLs
- ✏️ Adjust route `media.signed` for signed file access handling
2026-01-25 19:14:49 +01:00
HolgerHatGarKeineNode
fe2f321a12 ✂️ Comment out unused backup schedule commands in console.php to disable them without deletion 2026-01-25 18:21:35 +01:00
HolgerHatGarKeineNode
f52e283f52 🔥 Remove redundant legacy files and build outputs no longer in use
- Delete outdated `.gitignore` rules for `videos/`
- Remove `.prettierrc` from `videos/`
- Clear obsolete best practice guides in skill subfolders (e.g., `.agent/`, `.claude/`)
- Delete cluttered long-build artifacts (`videos/build/129.bundle.js`, `.map`)
2026-01-25 18:20:30 +01:00
HolgerHatGarKeineNode
4fcbeb9ca6 📂 Add MIME type restrictions for 'main' media collection in ProjectProposal 2026-01-25 18:19:57 +01:00
HolgerHatGarKeineNode
070cfb0cb2 🎨 Enhance Outro Scene with cinematic improvements and extend duration
- 🕰️ Increase PortalOutroScene duration to 30 seconds for cinematic effect
- ✏️ Add LogoMatrix3DMobile component for a dynamic 3D logo display
- 🔄 Adjust animations, glow, and opacity for smoother transitions
- 🎵 Replace outdated audio timings, add precise frame-based sync for "logo-whoosh" and "final-chime"
- 💡 Update text and subtitle styles: larger fonts and adjusted colors for better readability
- 🔧 Update tests and configs for new scene duration and animations
2026-01-24 21:08:33 +01:00
HolgerHatGarKeineNode
0bf80d3989 🔥 Remove outdated PRD draft for Portal presentation
- Delete `videos/PRD.md` to clean up legacy documentation
- No longer relevant due to project completion and updated processes
2026-01-24 19:58:23 +01:00
HolgerHatGarKeineNode
e285a309fd 🔧 Fix asset file references for Portal presentation render
- Update DashboardOverviewScene to use einundzwanzig-square-inverted.svg
  instead of non-existent einundzwanzig-logo.png
- Fix MeetupShowcaseScene logo extensions: EinundzwanzigKempten.jpg and
  EinundzwanzigMemmingen.jpg (were incorrectly .png)
- Fix TopMeetupsScene logo extensions: EinundzwanzigKempten.jpg and
  EinundzwanzigTrier.jpg (were incorrectly .png)
- Update corresponding mobile scenes with same fixes
- Update test file expectations to match corrected extensions

These fixes enable successful full render of both PortalPresentation
(1920x1080) and PortalPresentationMobile (1080x1920) compositions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:45:54 +01:00
HolgerHatGarKeineNode
584532af6b 🎬 Integrate CountryStatsScene and fix test mocks
Replace placeholder with actual CountryStatsScene (Scene 5) in
PortalPresentation, remove unused PlaceholderScene component,
add missing mock for CountryStatsScene in tests, and fix
PortalPresentationMobile tests to mock correct mobile scene
components.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:35:03 +01:00
HolgerHatGarKeineNode
0ba7c5a2ef 🔊 Add frame-accurate audio sync verification system
Add comprehensive audio synchronization configuration and testing:

- Create AudioSyncConfig types for audio events, background music,
  and scene audio configurations
- Define audio timing for all 9 scenes with frame-accurate sync points
- Add utilities for absolute frame calculation, volume interpolation,
  and sync verification with tolerance support
- Include 94 tests covering timing calculations, overlap detection,
  volume consistency, and frame-accurate sync point verification

The new audioSync.ts provides a centralized source of truth for all
audio-visual synchronization, enabling automated verification of
audio timing accuracy across the Portal Presentation composition.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:31:13 +01:00
HolgerHatGarKeineNode
6f132e98b4 🎬 Fine-tune all transition timing with centralized configuration
Implement Milestone 13 requirement: Timing fine-tuning for all transitions.

Changes:
- Create centralized timing configuration (src/config/timing.ts) with:
  - SPRING_CONFIGS: Unified spring presets (SMOOTH, SNAPPY, BOUNCY, etc.)
  - STAGGER_DELAYS: Consistent stagger timing for cards, lists, activities
  - TIMING: Scene-specific delay constants (intro, CTA, outro)
  - GLOW_CONFIG: Glow effect parameters (intensity, frequency, scale)
  - Helper functions: secondsToFrames(), getStaggeredDelay()

- Fine-tune all 8 portal scenes:
  - Reduced perspective rotations (30° → 25° / 20° → 18°) for smoother entrances
  - Increased initial scales (0.8 → 0.85-0.92) for subtler animations
  - Reduced Y translations (30-40px → 18-25px) for less jarring motion
  - Standardized glow frequencies using centralized config
  - Consistent spring configurations across all scenes

- Add comprehensive tests (src/config/timing.test.ts):
  - 38 tests covering all timing constants
  - Helper function tests
  - Timing consistency validation
  - Scene duration verification (total = 90s)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:24:33 +01:00
HolgerHatGarKeineNode
d29c54cf56 🧪 Add tests for Root.tsx verifying mobile composition registration
Add comprehensive tests for RemotionRoot component to verify:
- PortalPresentationMobile is registered in Portal folder
- Mobile composition has correct dimensions (1080x1920)
- All compositions have correct fps and duration settings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:11:07 +01:00
HolgerHatGarKeineNode
e9e8038f29 📱 Add mobile scene adaptations for PortalPresentationMobile
Mobile-optimized versions of all 9 scenes with portrait layout (1080x1920):
- PortalIntroSceneMobile: Smaller logo (280px), text-5xl title
- PortalTitleSceneMobile: Title split into two lines, text-5xl
- DashboardOverviewSceneMobile: Vertical card stacking, no sidebar
- MeetupShowcaseSceneMobile: Vertical layout, 360px featured card
- CountryStatsSceneMobile: Single column, 280px bars, compact sparklines
- TopMeetupsSceneMobile: Narrower rows, 70px sparklines
- ActivityFeedSceneMobile: 400px activity cards
- CallToActionSceneMobile: max-w-md container, 100px logo
- PortalOutroSceneMobile: 450px horizontal logo

Includes 92 tests covering mobile-specific layout adaptations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:09:16 +01:00
HolgerHatGarKeineNode
364fb201b8 📱 Add PortalPresentationMobile composition for mobile (1080x1920)
- Create PortalPresentationMobile.tsx for portrait mobile resolution
- Register PortalPresentationMobile composition in Root.tsx
- Add comprehensive tests for the mobile composition
- Reuse existing portal scenes which adapt via useVideoConfig()
- Mobile version has same scene structure and timing as desktop

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:57:59 +01:00
HolgerHatGarKeineNode
634c63cfa2 🧪 Add comprehensive tests for PortalPresentation audio integration
- Add test suite for PortalPresentation main composition
- Verify PortalAudioManager renders with background music
- Test all 9 scene sequences are rendered in correct order
- Verify scene timing totals 90 seconds (2700 frames at 30fps)
- Test audio integration including loop and volume settings
- Confirm premountFor is set correctly for all scenes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:53:58 +01:00
HolgerHatGarKeineNode
57322a9556 🎵 Add PortalAudioManager component for background music
- Add PortalAudioManager.tsx with background music fade in/out
  - 1 second fade-in at the beginning
  - 3 second fade-out at the end
  - Base volume at 0.25 (25%)
- Integrate PortalAudioManager into PortalPresentation
- Add PortalOutroScene to PortalPresentation (was using placeholder)
- Add comprehensive tests for PortalAudioManager (13 tests)
  - Tests for volume at various frames
  - Tests for fade-in/fade-out behavior
  - Integration tests

Scene-specific SFX remain in individual scene components for
better timing accuracy and maintainability.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:49:15 +01:00
HolgerHatGarKeineNode
5fe779b1dc 🎬 Add PortalOutroScene component for Outro (Scene 9)
- Implement 12-second outro scene with wallpaper background
- Add horizontal EINUNDZWANZIG logo with glow pulse effect
- Include BitcoinEffect particles throughout the scene
- Add "EINUNDZWANZIG" title and subtitle animations
- Include final-chime audio effect at logo appearance
- Add final 2-second fade out for smooth ending
- Include comprehensive test suite with 21 tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:45:02 +01:00
HolgerHatGarKeineNode
5adabf5fd0 🎬 Add CallToActionScene component for Call to Action (Scene 8)
Implements Scene 8 of the Portal Presentation video:
- Dashboard blur and zoom out animation
- Glassmorphism overlay with spring entrance
- "Werde Teil der Community" title with bounce animation
- URL typing animation: portal.einundzwanzig.space
- Orange pulsing glow effect on URL after typing completes
- EINUNDZWANZIG logo with animated glow
- Audio: success-fanfare, typing, url-emphasis, logo-reveal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:40:53 +01:00
HolgerHatGarKeineNode
eebd1e84b5 🎬 Add ActivityFeedScene component for Activity Feed (Scene 7)
Implements the Activity Feed scene for the Einundzwanzig Portal
presentation video. Features include:

- 3D perspective entrance animation with smooth transitions
- "Aktivitäten" header with pulsing LIVE indicator
- 4 activity items with staggered slide-in animations:
  - EINUNDZWANZIG Kempten (vor 13 Stunden)
  - EINUNDZWANZIG Darmstadt (vor 21 Stunden)
  - EINUNDZWANZIG Vulkaneifel (vor 2 Tagen)
  - BitcoinWalk Würzburg (vor 2 Tagen)
- "Neuer Termin" badge with bounce animation
- Audio: button-click.mp3 per item, slide-in.mp3 for entrance
- Uses existing ActivityItem component for consistent styling
- Comprehensive test suite with 24 tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:37:16 +01:00
HolgerHatGarKeineNode
861c0e9245 🎬 Add TopMeetupsScene component for Top Meetups (Scene 6)
Implements Scene 6 of the Portal presentation video, showcasing the top 5
most active Einundzwanzig meetups with animated rankings, sparkline charts,
and progress bars. Features 3D perspective entrance, staggered item animations,
and audio cues.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:34:01 +01:00
HolgerHatGarKeineNode
e9b55b60aa 🎬 Add CountryStatsScene component for Top Länder (Scene 5)
Implements the Country Statistics scene which visualizes the geographic
reach of the Bitcoin community across German-speaking countries with
animated country bars, sparkline charts, and user counts.

Features:
- 3D perspective entrance animation for smooth scene transition
- Sequential country reveals with staggered timing (12 frame delay)
- CountryBar components with animated progress bars and user counts
- SparklineChart components showing growth trends for each country
- Total users badge with globe icon
- Audio: success-chime per country, slide-in for section entrance
- Countries displayed: Germany, Austria, Switzerland, Luxembourg,
  Bulgaria, and Spain

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:29:49 +01:00
HolgerHatGarKeineNode
2058140439 🎬 Add MeetupShowcaseScene component for Meine Meetups (Scene 4)
Implements the meetup showcase scene with:
- Featured meetup card with 3D perspective and shadow effects
- Date/time display with calendar and clock icons
- Upcoming meetups list (Memmingen, Friedrichshafen)
- Action buttons for calendar integration
- Staggered animations with spring physics
- Audio cues for slide-in and badge appearances

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:26:26 +01:00
HolgerHatGarKeineNode
41acbc9324 🎬 Add DashboardOverviewScene component for Dashboard Overview (Scene 3)
Implements the 12-second Dashboard Overview scene featuring:
- 3D perspective entrance animation (rotateX 30° → 0°, scale 0.85 → 1.0)
- DashboardSidebar with staggered navigation items
- Three StatsCounter cards (Meetups: 204, Users: 1247, Events: 89)
- SparklineCharts showing trend data for each metric
- Activity feed section with recent meetup activities
- Quick stats section with country and user metrics
- Audio: card-slide.mp3 and ui-appear.mp3 sound effects
- Vignette overlay and dark theme styling

Includes 23 comprehensive tests covering all components and animations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:20:56 +01:00
HolgerHatGarKeineNode
74e1bb8742 🎬 Add PortalTitleScene component for Title Card (Scene 2)
Implements the Title Card scene with:
- Typing animation for "EINUNDZWANZIG PORTAL" title
- Blinking cursor during typing effect
- Subtitle fade-in animation after title completes
- Audio integration with typing and ui-appear sounds
- Background glow and vignette effects

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:16:05 +01:00
HolgerHatGarKeineNode
04ccf917f0 🎬 Add PortalIntroScene component for Logo Reveal (Scene 1)
Implement the first scene of the Portal presentation video (6 seconds):
- AnimatedLogo scales from 0 to 100% with spring animation
- Wallpaper background with zoom effect (1.2 → 1.0 scale)
- Bitcoin particle effects in the background
- Pulsing glow effect around the logo
- Audio integration: logo-whoosh at start, logo-reveal when logo appears
- Title "EINUNDZWANZIG" and subtitle "Das Portal" with staggered entrance
- Vignette overlay for cinematic depth

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:12:45 +01:00
HolgerHatGarKeineNode
68e4ea1743 🧭 Add DashboardSidebar component for portal navigation sidebar
Adds a fully animated sidebar component for the portal dashboard with:
- Slide-in animation from left with spring physics
- Animated logo section with scale entrance
- Navigation items with staggered reveal animations
- Badge counters with bounce animation and glow effects
- Support for section headers and nested items with indentation
- Active state highlighting with accent color border
- SVG icons for all navigation types (dashboard, nostr, meetups, etc.)
- Customizable dimensions, accent color, and animation timing

Includes comprehensive test suite with 28 tests covering:
- Rendering and layout
- Navigation item display
- Badge count display
- Section headers and nested items
- Custom styling and accent colors
- Icon rendering for all icon types

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:07:54 +01:00
HolgerHatGarKeineNode
fb9da68451 🎬 Add ActivityItem component for displaying activity feed entries
- Implements animated activity item with slide-in from right animation
- Badge with bounce effect ("Neuer Termin" default)
- Event name with fade/slide animation
- Timestamp with clock icon and monospace font
- Configurable props: eventName, timestamp, badgeText, showBadge, delay, width, accentColor
- Follows established component patterns with spring animations and glow effects
- Includes comprehensive test suite with 21 tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:04:43 +01:00
HolgerHatGarKeineNode
5475b9ee34 🌍 Add CountryBar component for displaying country information
Add a new CountryBar component that displays:
- Country flag emoji with scale animation
- Country name with slide-in animation
- Animated user count with tabular numbers
- Progress bar that fills based on user count ratio

The component follows existing patterns from StatsCounter and
MeetupCard, using Remotion's spring animations and interpolation
for smooth entrance effects and a subtle glow pulse.

Includes comprehensive test suite with 30 tests covering:
- Basic rendering and props
- Custom styling and colors
- Bar rendering and animation
- Real-world country data scenarios

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:01:30 +01:00
HolgerHatGarKeineNode
55feaeeb21 🃏 Add MeetupCard component for displaying meetup information
Animated card component with logo, name, and location for showcasing
Bitcoin meetups. Features spring-based entrance animations, location
pin icon, and customizable styling with Bitcoin orange accent color.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:58:07 +01:00
HolgerHatGarKeineNode
6a8578494b 📈 Add SparklineChart component with animated SVG line drawing
Implement SparklineChart for visualizing data trends with animated line
drawing using stroke-dasharray/dashoffset technique. Features include
configurable dimensions, spring animations, optional fill gradient,
glow effects, and support for delay/duration parameters.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:55:01 +01:00
HolgerHatGarKeineNode
d7966580f5 🎯 Add StatsCounter component with animated number counting
Implement reusable animated statistics counter component for Remotion videos
that smoothly animates from 0 to a target number (default: 204).

Features:
- Spring-based or linear animation modes
- Configurable delay, duration, and decimal places
- Support for prefix/suffix (e.g., "$", "%", "+")
- Customizable colors and font sizes
- Glow effect that pulses with counting progress
- Optional label display below the number

Includes comprehensive test suite with 12 passing tests.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:51:11 +01:00
HolgerHatGarKeineNode
b7740a9750 🧪 Add Vitest testing framework with basic composition test
Set up testing infrastructure using Vitest and React Testing Library.
Add test verifying empty MyComposition renders without errors.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:48:10 +01:00
HolgerHatGarKeineNode
4022fbde83 📂 Organize compositions with Folders: group NIP-05 tutorials and Portal presentation into logical Folder structures for better Remotion studio sidebar organization.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:44:37 +01:00
HolgerHatGarKeineNode
ffbf1b1f32 🎬 Add PortalPresentation skeleton composition: implement main composition structure with 9 scene sequences for the 90-second cinematic Portal presentation video.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:42:01 +01:00
HolgerHatGarKeineNode
7b728b56af 📁 Add portal components directory structure: create src/components/portal/ for upcoming Portal Presentation video components.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:37:52 +01:00
HolgerHatGarKeineNode
0f0c8fcbb1 📁 Add portal scenes directory structure: create src/scenes/portal/ for upcoming Portal Presentation video scenes.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:36:36 +01:00
HolgerHatGarKeineNode
756c9d4c70 🗑️ Remove unused assets: delete obsolete SVGs, MP3 files, README documentation, and public assets from the videos/ directory. 2026-01-24 12:34:56 +01:00
HolgerHatGarKeineNode
fe92418dbb 🎨 Modularize and refactor CSS: restructure styles into theme.css, base.css, utilities.css, and component-specific files (flux-overrides.css, custom.css, leaflet.css) to improve maintainability and align with the Einundzwanzig Design System. 2026-01-23 23:16:09 +01:00
HolgerHatGarKeineNode
b30fec150c 🎨 Add new Flux icons: implement multiple reusable icon components (e.g., hand-raised, hand-thumb-up, heart, hashtag, home) with variant support for improved UI consistency. 2026-01-23 23:00:02 +01:00
HolgerHatGarKeineNode
578e4f13fc 🧹 Migrate Yarn registry URLs to npm registry: update yarn.lock dependencies for consistency and clean up unused entries. 2026-01-23 20:02:21 +01:00
HolgerHatGarKeineNode
a2bce07520 ✏️ Simplify NIP-05 verified handles text: update messaging in benefits and profile views for clarity and consistency. 2026-01-23 17:14:23 +01:00
HolgerHatGarKeineNode
4b9ad0f6ab Refactor NIP-05 verification: extract handle-fetching logic into reusable NostrFetcherTrait and enhance UI to display all verified handles with improved feedback. 2026-01-23 17:09:00 +01:00
HolgerHatGarKeineNode
dfb1c3fa0f Add membership benefits page: implement Nostr Relay, NIP-05 verification, and Lightning Watchtower features with interactive UI and backend logic. 2026-01-23 16:51:31 +01:00
HolgerHatGarKeineNode
0a9498676c Add Lightning Watchtower feature: introduce Watchtower details, usage instructions, and clipboard copying functionality in association profile.
♻️ Update authentication buttons: replace `flux:navbar.item` and `flux:sidebar.item` with `flux:button` for improved UX and consistency.
🗑️ Update `.gitignore`: include additional configuration files (`.opencode`, `.switch-omo-config*`).
2026-01-23 15:52:52 +01:00
HolgerHatGarKeineNode
2995063f6c remove: unused Livewire component EinundzwanzigPlebTable (0 references in codebase, pre-existing broken test unrelated) 2026-01-23 01:44:49 +01:00
HolgerHatGarKeineNode
b280376376 remove: unused method NostrAuth::pleb() (0 usages in codebase) 2026-01-23 01:30:58 +01:00
HolgerHatGarKeineNode
acd3b3c395 remove: unused Livewire component MeetupTable (0 references in codebase) 2026-01-23 01:25:35 +01:00
HolgerHatGarKeineNode
29d83e9af7 remove: unused Livewire component NotificationForm (0 references in codebase) 2026-01-23 01:11:35 +01:00