HolgerHatGarKeineNode
9813343c8b
🛠 Add ciphersweet:generate-key to the setup script in composer.json
2026-02-11 20:35:37 +01:00
HolgerHatGarKeineNode
699ebeedb2
📝 Update .env.example with revised database configuration values
2026-02-11 19:53:13 +01:00
HolgerHatGarKeineNode
04e7d87af6
🔧 Upgrade dependencies and framework components
...
- ✨ Update `composer.lock` and `.junie/guidelines.md` to include new versions for Pest v4, PHPUnit v12, Laravel framework (v12.51.0), and other dependencies.
- 📚 Add Pest v4 specific rules for browser testing, smoke testing, and visual regression tests to documentation.
- 🛠 Refactor related configs for upgraded dependency compatibility, ensuring cleaner and faster development debugging.
2026-02-11 19:47:11 +01:00
HolgerHatGarKeineNode
eb9285d601
Fix this (vibe-kanban 0064af70)
...
## Exception Summary
- Class: `TypeError`
- Message: `Cannot assign array to property Livewire\Component@anonymous::$fax of type string`
- Code: `0`
- File: `vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php:555`
- Timestamp: `2026-02-11T11:10:02+00:00`
- Details: This exception was thrown during a HTTP Request.
## HTTP Request
- Method: `POST`
- URL: `https://verein.einundzwanzig.space/livewire-5c4c7b52/update `
- Route: `livewire.update`
- Status code: `500`
- IP address: `206.237.102.28`
### Request Headers
- `content-type: application/json`
- `content-length: 1484`
- `cookie: XSRF-TOKEN=[342 bytes redacted]; einundzwanzig_verein_session=[342 bytes redacted]`
- `sec-fetch-user: ?1`
- `sec-fetch-site: none`
- `sec-fetch-mode: navigate`
- `sec-fetch-dest: document`
- `upgrade-insecure-requests: 1`
- `connection: keep-alive`
- `accept-language: en-US,en;q=0.5`
- `accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8`
- `user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`
- `accept-encoding: identity`
- `host: verein.einundzwanzig.space`
### Request Payload
```json
{
"_token": "[40 bytes redacted]",
"components": [
{
"snapshot": "{\"data\": {\"form\": [{\"reason\": \"\", \"check\": false, \"currentPleb\": null}, {\"class\": \"App\\\\Livewire\\\\Forms\\\\ApplicationForm\", \"s\": \"form\"}], \"profileForm\": [{\"email\": \"\", \"nip05Handle\": \"\", \"currentPleb\": null}, {\"class\": \"App\\\\Livewire\\\\Forms\\\\ProfileForm\", \"s\": \"form\"}], \"no\": false, \"showEmail\": true, \"fax\": \"\", \"nip05Verified\": false, \"nip05VerifiedHandle\": null, \"nip05HandleMismatch\": false, \"nip05VerifiedHandles\": [[], {\"s\": \"arr\"}], \"yearsPaid\": [[], {\"s\": \"arr\"}], \"events\": [[], {\"s\": \"arr\"}], \"payments\": null, \"invoiceStatus\": null, \"invoiceStatusLabel\": null, \"invoiceStatusMessage\": null, \"invoiceStatusVariant\": \"info\", \"invoiceExpiresAt\": null, \"invoiceExpiresAtDisplay\": null, \"invoiceExpiresIn\": null, \"amountToPay\": 21000, \"currentYearIsPaid\": false, \"currentPubkey\": null, \"currentPleb\": null, \"qrCode\": null}, \"memo\": {\"id\": \"w62UhlWfdP5hmH873cUk\", \"name\": \"association.profile\", \"path\": \"association/profile\", \"method\": \"GET\", \"release\": \"a-a-a\", \"attributes\": {\"_livewire_component\": \"association.profile\"}, \"children\": [], \"scripts\": [], \"assets\": [], \"errors\": [], \"locale\": \"en\", \"islands\": []}, \"checksum\": \"ef5141c41105681483f6be62494c4717a8d5a43c8c5a07173ea799a2a58d7005\"}",
"updates": {
"fax": []
},
"calls": []
}
],
"_nightwatch_files": []
}
```
### Authenticated User
- Not authenticated for this execution.
## Database Queries (before exception)
- Not captured
## Stack Trace (most recent call first)
- [0] Livewire\\Mechanisms\\HandleComponents\\HandleComponents->setComponentPropertyAwareOfTypes()
at vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php:555
- [1] Livewire\\Mechanisms\\HandleComponents\\HandleComponents->setComponentPropertyAwareOfTypes()
at vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php:455
- [2] Livewire\\Mechanisms\\HandleComponents\\HandleComponents->updateProperty()
at vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php:426
- [3] Livewire\\Mechanisms\\HandleComponents\\HandleComponents->updateProperties()
at vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php:188
- [4] Livewire\\Mechanisms\\HandleComponents\\HandleComponents->update()
at vendor/livewire/livewire/src/LivewireManager.php:131
- [5] Livewire\\LivewireManager->update()
at vendor/livewire/volt/src/LivewireManager.php:35
- [6] Livewire\\Volt\\LivewireManager->update()
at vendor/livewire/livewire/src/Mechanisms/HandleRequests/HandleRequests.php:123
- [7] Livewire\\Mechanisms\\HandleRequests\\HandleRequests->handleUpdate()
at vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:46
- [8] Illuminate\\Routing\\ControllerDispatcher->dispatch()
at vendor/laravel/framework/src/Illuminate/Routing/Route.php:265
- [9] Illuminate\\Routing\\Route->runController()
at vendor/laravel/framework/src/Illuminate/Routing/Route.php:211
- [10] Illuminate\\Routing\\Route->run()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:822
- [11] Illuminate\\Routing\\Router->{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
- [12] Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}()
at vendor/laravel/nightwatch/src/Hooks/RouteMiddleware.php:34
- [13] Laravel\\Nightwatch\\Hooks\\RouteMiddleware->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [14] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:50
- [15] Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [16] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:87
- [17] Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [18] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:48
- [19] Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [20] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:120
- [21] Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
at vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63
- [22] Illuminate\\Session\\Middleware\\StartSession->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [23] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:36
- [24] Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [25] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:74
- [26] Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [27] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:137
- [28] Illuminate\\Pipeline\\Pipeline->then()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:821
- [29] Illuminate\\Routing\\Router->runRouteWithinStack()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:800
- [30] Illuminate\\Routing\\Router->runRoute()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:764
- [31] Illuminate\\Routing\\Router->dispatchToRoute()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:753
- [32] Illuminate\\Routing\\Router->dispatch()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:200
- [33] Illuminate\\Foundation\\Http\\Kernel->{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
- [34] Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}()
at vendor/livewire/livewire/src/Features/SupportDisablingBackButtonCache/DisableBackButtonCacheMiddleware.php:19
- [35] Livewire\\Features\\SupportDisablingBackButtonCache\\DisableBackButtonCacheMiddleware->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [36] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
- [37] Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php:31
- [38] Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [39] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
- [40] Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php:51
- [41] Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [42] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php:27
- [43] Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [44] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php:109
- [45] Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [46] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php:48
- [47] Illuminate\\Http\\Middleware\\HandleCors->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [48] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php:58
- [49] Illuminate\\Http\\Middleware\\TrustProxies->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [50] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php:22
- [51] Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [52] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php:26
- [53] Illuminate\\Http\\Middleware\\ValidatePathEncoding->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [54] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/nightwatch/src/Hooks/GlobalMiddleware.php:53
- [55] Laravel\\Nightwatch\\Hooks\\GlobalMiddleware->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [56] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:137
- [57] Illuminate\\Pipeline\\Pipeline->then()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:175
- [58] Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:144
- [59] Illuminate\\Foundation\\Http\\Kernel->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1220
- [60] Illuminate\\Foundation\\Application->handleRequest()
at public/index.php:17
## Code Context
- Not captured
## Occurrence Statistics
- First seen: `2026-02-02T01:38:48+00:00`
- Last seen: `2026-02-11T11:10:02+00:00`
- Occurrences (last 24 hours): `3`
- Occurrences (last 7 days): `3`
- Users affected: `0`
2026-02-11 14:37:05 +01:00
HolgerHatGarKeineNode
3c0cc2d07d
Fix this (vibe-kanban 762adfe2)
...
## Exception Summary
- Class: `Illuminate\Database\QueryException`
- Message: \`SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type bigint: "\*"
CONTEXT: unnamed portal parameter $1 = '...' (Connection: pgsql, Host: 127.0.0.1, Port: 5432, Database: verein, SQL: select \* from "media" where "id" = \* limit 1)\`
- Code: `22P02`
- File: `vendor/laravel/framework/src/Illuminate/Database/Connection.php:838`
- Timestamp: `2026-02-10T16:08:30+00:00`
- Details: This exception was thrown during a HTTP Request.
## HTTP Request
- Method: `GET`
- URL: `https://verein.einundzwanzig.space/media/ *`
- Route: `media.signed`
- Status code: `500`
- IP address: `185.177.72.51`
### Request Headers
- `x-forwared: 127.0.0.1`
- `x-host: 127.0.0.1`
- `x-azure-socketip: 127.0.0.1`
- `x-azure-clientip: 127.0.0.1`
- `true-client-ip: 127.0.0.1`
- `x-client-ip: 127.0.0.1`
- `x-originating-ip: 127.0.0.1`
- `x-real-ip: 127.0.0.1`
- `x-forwarded-for: 127.0.0.1`
- `accept-language: en-US,en;q=0.9`
- `accept-encoding: gzip`
- `accept: */*`
- `user-agent: curl/8.7.1`
- `host: verein.einundzwanzig.space`
### Authenticated User
- Not authenticated for this execution.
## Database Queries (before exception)
- Not captured
## Stack Trace (most recent call first)
- [0] Illuminate\\Database\\Connection->runQueryCallback()
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
- [1] Illuminate\\Database\\Connection->runQueryCallback()
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:794
- [2] Illuminate\\Database\\Connection->run()
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:411
- [3] Illuminate\\Database\\Connection->select()
at vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:3368
- [4] Illuminate\\Database\\Query\\Builder->runSelect()
at vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:3353
- [5] Illuminate\\Database\\Query\\Builder->{closure:Illuminate\\Database\\Query\\Builder::get():3352}()
at vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:3943
- [6] Illuminate\\Database\\Query\\Builder->onceWithColumns()
at vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:3352
- [7] Illuminate\\Database\\Query\\Builder->get()
at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:902
- [8] Illuminate\\Database\\Eloquent\\Builder->getModels()
at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:884
- [9] Illuminate\\Database\\Eloquent\\Builder->get()
at vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php:366
- [10] Illuminate\\Database\\Eloquent\\Builder->first()
at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:2209
- [11] Illuminate\\Database\\Eloquent\\Model->resolveRouteBinding()
at vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php:60
- [12] Illuminate\\Routing\\ImplicitRouteBinding::resolveForRoute()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:980
- [13] Illuminate\\Routing\\Router->{closure:Illuminate\\Routing\\Router::substituteImplicitBindings():980}()
at vendor/livewire/livewire/src/Features/SupportPageComponents/SupportPageComponents.php:215
- [14] Livewire\\Features\\SupportPageComponents\\SupportPageComponents::{closure:Livewire\\Features\\SupportPageComponents\\SupportPageComponents::resolvePageComponentRouteBindings():207}()
at [internal function]
- [15] call\_user\_func()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:982
- [16] Illuminate\\Routing\\Router->substituteImplicitBindings()
at vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41
- [17] Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [18] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:87
- [19] Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [20] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:48
- [21] Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [22] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:120
- [23] Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
at vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63
- [24] Illuminate\\Session\\Middleware\\StartSession->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [25] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:36
- [26] Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [27] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:74
- [28] Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [29] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:137
- [30] Illuminate\\Pipeline\\Pipeline->then()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:821
- [31] Illuminate\\Routing\\Router->runRouteWithinStack()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:800
- [32] Illuminate\\Routing\\Router->runRoute()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:764
- [33] Illuminate\\Routing\\Router->dispatchToRoute()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:753
- [34] Illuminate\\Routing\\Router->dispatch()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:200
- [35] Illuminate\\Foundation\\Http\\Kernel->{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
- [36] Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}()
at vendor/livewire/livewire/src/Features/SupportDisablingBackButtonCache/DisableBackButtonCacheMiddleware.php:19
- [37] Livewire\\Features\\SupportDisablingBackButtonCache\\DisableBackButtonCacheMiddleware->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [38] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
- [39] Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php:31
- [40] Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [41] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
- [42] Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php:51
- [43] Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [44] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php:27
- [45] Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [46] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php:109
- [47] Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [48] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php:48
- [49] Illuminate\\Http\\Middleware\\HandleCors->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [50] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php:58
- [51] Illuminate\\Http\\Middleware\\TrustProxies->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [52] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php:22
- [53] Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [54] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php:26
- [55] Illuminate\\Http\\Middleware\\ValidatePathEncoding->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [56] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/nightwatch/src/Hooks/GlobalMiddleware.php:53
- [57] Laravel\\Nightwatch\\Hooks\\GlobalMiddleware->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [58] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:137
- [59] Illuminate\\Pipeline\\Pipeline->then()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:175
- [60] Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:144
- [61] Illuminate\\Foundation\\Http\\Kernel->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1220
- [62] Illuminate\\Foundation\\Application->handleRequest()
at public/index.php:17
## Code Context
- Not captured
## Occurrence Statistics
- First seen: `2026-02-10T16:08:30+00:00`
- Last seen: `2026-02-10T16:08:30+00:00`
- Occurrences (last 24 hours): `1`
- Occurrences (last 7 days): `1`
- Users affected: `0`
2026-02-11 14:26:24 +01:00
HolgerHatGarKeineNode
7882e0d724
Fix (vibe-kanban 7be09dee)
...
## Wenn `changelog nicht mehr existert, dann lösche die Vorkommnisse.`
Exception Summary
- Class: `Livewire\Exceptions\ComponentNotFoundException`
- Message: `Unable to find component: [changelog]`
- Code: `0`
- File: `vendor/livewire/livewire/src/Factory/Factory.php:76`
- Timestamp: `2026-02-10T17:36:34+00:00`
- Details: This exception was thrown during a HTTP Request.
## HTTP Request
- Method: `GET`
- URL: `https://verein.einundzwanzig.space/changelog `
- Route: `changelog`
- Status code: `500`
- IP address: `43.173.173.8`
### Request Headers
- `accept-encoding: gzip`
- `upgrade-insecure-requests: 1`
- `accept-language: en-US,en;q=0.9`
- `accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7`
- `user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36`
- `host: verein.einundzwanzig.space`
### Authenticated User
- Not authenticated for this execution.
## Database Queries (before exception)
- Not captured
## Stack Trace (most recent call first)
- [0] Livewire\\Factory\\Factory->resolveComponentNameAndClass()
at vendor/livewire/livewire/src/Factory/Factory.php:76
- [1] Livewire\\Factory\\Factory->resolveComponentNameAndClass()
at vendor/livewire/livewire/src/Factory/Factory.php:88
- [2] Livewire\\Factory\\Factory->resolveComponentClass()
at vendor/livewire/livewire/src/Features/SupportPageComponents/SupportPageComponents.php:251
- [3] Livewire\\Features\\SupportPageComponents\\SupportPageComponents::routeActionIsAPageComponent()
at vendor/livewire/livewire/src/Features/SupportPageComponents/SupportPageComponents.php:209
- [4] Livewire\\Features\\SupportPageComponents\\SupportPageComponents::{closure:Livewire\\Features\\SupportPageComponents\\SupportPageComponents::resolvePageComponentRouteBindings():207}()
at [internal function]
- [5] call\_user\_func()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:982
- [6] Illuminate\\Routing\\Router->substituteImplicitBindings()
at vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41
- [7] Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [8] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:87
- [9] Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [10] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:48
- [11] Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [12] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:120
- [13] Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
at vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63
- [14] Illuminate\\Session\\Middleware\\StartSession->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [15] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:36
- [16] Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [17] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:74
- [18] Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [19] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:137
- [20] Illuminate\\Pipeline\\Pipeline->then()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:821
- [21] Illuminate\\Routing\\Router->runRouteWithinStack()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:800
- [22] Illuminate\\Routing\\Router->runRoute()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:764
- [23] Illuminate\\Routing\\Router->dispatchToRoute()
at vendor/laravel/framework/src/Illuminate/Routing/Router.php:753
- [24] Illuminate\\Routing\\Router->dispatch()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:200
- [25] Illuminate\\Foundation\\Http\\Kernel->{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:180
- [26] Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}()
at vendor/livewire/livewire/src/Features/SupportDisablingBackButtonCache/DisableBackButtonCacheMiddleware.php:19
- [27] Livewire\\Features\\SupportDisablingBackButtonCache\\DisableBackButtonCacheMiddleware->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [28] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
- [29] Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php:31
- [30] Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [31] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
- [32] Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php:51
- [33] Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [34] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php:27
- [35] Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [36] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php:109
- [37] Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [38] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php:48
- [39] Illuminate\\Http\\Middleware\\HandleCors->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [40] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php:58
- [41] Illuminate\\Http\\Middleware\\TrustProxies->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [42] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php:22
- [43] Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [44] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php:26
- [45] Illuminate\\Http\\Middleware\\ValidatePathEncoding->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [46] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/nightwatch/src/Hooks/GlobalMiddleware.php:53
- [47] Laravel\\Nightwatch\\Hooks\\GlobalMiddleware->handle()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
- [48] Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}()
at vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:137
- [49] Illuminate\\Pipeline\\Pipeline->then()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:175
- [50] Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:144
- [51] Illuminate\\Foundation\\Http\\Kernel->handle()
at vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1220
- [52] Illuminate\\Foundation\\Application->handleRequest()
at public/index.php:17
## Code Context
- Not captured
## Occurrence Statistics
- First seen: `2026-02-01T12:05:09+00:00`
- Last seen: `2026-02-10T17:36:34+00:00`
- Occurrences (last 24 hours): `2`
- Occurrences (last 7 days): `17`
- Users affected: `0`
2026-02-11 14:24:11 +01:00
HolgerHatGarKeineNode
5c655c83aa
🔧 Update database name in phpunit.xml for testing environment
2026-02-11 14:19:24 +01:00
HolgerHatGarKeineNode
46ab985c8c
✨ Add setup, lint, and test scripts to composer.json
...
- 🛠️ Introduce `setup` script for streamlined project initialization.
- ✅ Add `lint` and `test` scripts for improved code quality and testing.
2026-02-11 14:15:28 +01:00
HolgerHatGarKeineNode
3c17613f77
🔥 Remove Laravel Sail and Docker setup
...
- 🗑️ Eliminate `docker-compose.yml`, Dockerfiles, and related assets.
- 🎯 Transition Sail commands to native `php`, simplifying development and deployment.
- 📦 Remove `laravel/sail` dependency from `composer.json` and update lockfile accordingly.
- ⚙️ Refactor environment configurations and tooling to decouple from Sail-specific commands.
- 🔗 Adjust `.env` and various scripts for updated database and application connections.
- 📤 Add support for `reverb` broadcasting in `.env`.
- 🚀 Streamline developer workflow with simplified setup and new dev server integration in `composer.json`.
2026-02-11 14:13:45 +01:00
HolgerHatGarKeineNode
f5cb82566a
🔒 Remove #[Locked] attribute from nip05Handle in benefits view
2026-02-05 21:16:43 +01:00
HolgerHatGarKeineNode
5b814d631b
✨ Add Security Monitoring System with Command, Model, and Service
...
- 🛡️ Introduce `SecurityMonitor` service for tampering and malicious activity detection.
- 🏷️ Add `SecurityAttempt` model and migration to log, categorize, and query security attempts.
- 🖥️ Create `SecurityAttemptsCommand` for filtering, statistics, and top IP analysis.
- ✅ Add extensive tests to ensure the reliability of security monitoring and logging.
- 🔗 Integrate `SecurityMonitor` into the exception handling pipeline for real-time monitoring.
2026-02-04 13:40:30 +01:00
HolgerHatGarKeineNode
064ed68638
🛠️ Add checks to prevent unauthenticated users from voting and hide voting buttons accordingly
...
✅ Add tests to ensure proper handling of unauthenticated users during voting interactions
2026-02-04 13:34:09 +01:00
HolgerHatGarKeineNode
2957e89c79
🔒 Add #[Locked] attribute to Livewire components to enhance security against client-side state tampering
2026-02-03 22:49:42 +01:00
HolgerHatGarKeineNode
71ce57ddd3
✨ Add NIP-05 support and improve payment interaction handling
2026-02-03 20:32:04 +01:00
HolgerHatGarKeineNode
11399e7492
🔒 Handle UniqueConstraintViolationException in createPaymentEvent to prevent duplicate payment events creation
2026-02-02 13:37:06 +01:00
HolgerHatGarKeineNode
88a6623503
🔗 Add unique pleb+year constraint to payment_events and ensure migration handles duplicates
...
- 🧹 Prune duplicate `payment_events` before adding the unique index in migration
- ✅ Add tests to verify invoice management, expiration handling, and payment status updates
- ⚙️ Refactor invoice management flow with `resolveCurrentPaymentEvent` and status syncing logic
- 🎨 Enhance UI for invoice status with dynamic messages, labels, and expiration info
2026-01-31 11:03:47 +01:00
HolgerHatGarKeineNode
42fc2d744d
🔗 Update window.nostr.min.js to use version 0.7.0 for compatibility and enhancements
2026-01-28 20:11:05 +01:00
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