12-05-2026 Frontend dev
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run

This commit is contained in:
Kevin Adametz 2026-05-12 18:32:33 +02:00
parent 405df0a122
commit 5b8bdf4182
779 changed files with 480564 additions and 6241 deletions

View file

@ -0,0 +1,13 @@
<?php
return [
'slow_requests' => [
'enabled' => env('ADMIN_SLOW_REQUEST_LOGGING_ENABLED', true),
'duration_threshold_ms' => (int) env('ADMIN_SLOW_REQUEST_THRESHOLD_MS', 750),
'database_threshold_ms' => (int) env('ADMIN_SLOW_DB_THRESHOLD_MS', 250),
'query_count_threshold' => (int) env('ADMIN_SLOW_QUERY_COUNT_THRESHOLD', 100),
'slow_query_threshold_ms' => (int) env('ADMIN_SLOW_QUERY_THRESHOLD_MS', 50),
'max_slow_queries' => (int) env('ADMIN_SLOW_QUERY_SAMPLE_SIZE', 5),
'channel' => env('ADMIN_SLOW_REQUEST_LOG_CHANNEL', 'admin_slow'),
],
];

31
config/blacklist.php Normal file
View file

@ -0,0 +1,31 @@
<?php
/*
|--------------------------------------------------------------------------
| Pressemitteilungs-Blacklist
|--------------------------------------------------------------------------
|
| Wörter und Phrasen, die in Pressemitteilungen (Titel + Text) nicht
| vorkommen dürfen. Werden bei der Einreichung zur Prüfung und bei der
| Veröffentlichung gegen den Inhalt geprüft. Die Liste kann in einer
| späteren Phase per Admin-UI gepflegt werden derzeit hier statisch.
|
| Hinweis: Vergleich erfolgt case-insensitiv und wortgenau (siehe
| BlacklistService::matches), Sonderzeichen werden ignoriert.
|
*/
return [
/*
|--------------------------------------------------------------------------
| Aktive Wortliste
|--------------------------------------------------------------------------
| Eine flache Liste von Begriffen oder Phrasen.
*/
'words' => [
// Beispiele vom Auftraggeber zu erweitern
'penis',
'casino royale',
'spam-keyword',
],
];

183
config/blade-icons.php Normal file
View file

@ -0,0 +1,183 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Icons Sets
|--------------------------------------------------------------------------
|
| With this config option you can define a couple of
| default icon sets. Provide a key name for your icon
| set and a combination from the options below.
|
*/
'sets' => [
// 'default' => [
//
// /*
// |-----------------------------------------------------------------
// | Icons Path
// |-----------------------------------------------------------------
// |
// | Provide the relative path from your app root to your SVG icons
// | directory. Icons are loaded recursively so there's no need to
// | list every sub-directory.
// |
// | Relative to the disk root when the disk option is set.
// |
// */
//
// 'path' => 'resources/svg',
//
// /*
// |-----------------------------------------------------------------
// | Filesystem Disk
// |-----------------------------------------------------------------
// |
// | Optionally, provide a specific filesystem disk to read
// | icons from. When defining a disk, the "path" option
// | starts relatively from the disk root.
// |
// */
//
// 'disk' => '',
//
// /*
// |-----------------------------------------------------------------
// | Default Prefix
// |-----------------------------------------------------------------
// |
// | This config option allows you to define a default prefix for
// | your icons. The dash separator will be applied automatically
// | to every icon name. It's required and needs to be unique.
// |
// */
//
// 'prefix' => 'icon',
//
// /*
// |-----------------------------------------------------------------
// | Fallback Icon
// |-----------------------------------------------------------------
// |
// | This config option allows you to define a fallback
// | icon when an icon in this set cannot be found.
// |
// */
//
// 'fallback' => '',
//
// /*
// |-----------------------------------------------------------------
// | Default Set Classes
// |-----------------------------------------------------------------
// |
// | This config option allows you to define some classes which
// | will be applied by default to all icons within this set.
// |
// */
//
// 'class' => '',
//
// /*
// |-----------------------------------------------------------------
// | Default Set Attributes
// |-----------------------------------------------------------------
// |
// | This config option allows you to define some attributes which
// | will be applied by default to all icons within this set.
// |
// */
//
// 'attributes' => [
// // 'width' => 50,
// // 'height' => 50,
// ],
//
// ],
],
/*
|--------------------------------------------------------------------------
| Global Default Classes
|--------------------------------------------------------------------------
|
| This config option allows you to define some classes which
| will be applied by default to all icons.
|
*/
'class' => '',
/*
|--------------------------------------------------------------------------
| Global Default Attributes
|--------------------------------------------------------------------------
|
| This config option allows you to define some attributes which
| will be applied by default to all icons.
|
*/
'attributes' => [
// 'width' => 50,
// 'height' => 50,
],
/*
|--------------------------------------------------------------------------
| Global Fallback Icon
|--------------------------------------------------------------------------
|
| This config option allows you to define a global fallback
| icon when an icon in any set cannot be found. It can
| reference any icon from any configured set.
|
*/
'fallback' => '',
/*
|--------------------------------------------------------------------------
| Components
|--------------------------------------------------------------------------
|
| These config options allow you to define some
| settings related to Blade Components.
|
*/
'components' => [
/*
|----------------------------------------------------------------------
| Disable Components
|----------------------------------------------------------------------
|
| This config option allows you to disable Blade components
| completely. It's useful to avoid performance problems
| when working with large icon libraries.
|
*/
'disabled' => false,
/*
|----------------------------------------------------------------------
| Default Icon Component Name
|----------------------------------------------------------------------
|
| This config option allows you to define the name
| for the default Icon class component.
|
*/
'default' => 'icon',
],
];

18
config/countries.php Normal file
View file

@ -0,0 +1,18 @@
<?php
return [
'default' => 'DE',
'items' => [
'DE' => 'Deutschland',
'AT' => 'Oesterreich',
'CH' => 'Schweiz',
'LI' => 'Liechtenstein',
'LU' => 'Luxemburg',
'BE' => 'Belgien',
'NL' => 'Niederlande',
'FR' => 'Frankreich',
'GB' => 'Vereinigtes Koenigreich',
'US' => 'Vereinigte Staaten',
],
];

View file

@ -13,26 +13,23 @@ return [
*/
'protocol' => env('APP_PROTOCOL', 'https://'),
'domain_portal' => env('APP_PORTAL_NAME', 'pr-copilot.test'),
'domain_portal' => env('APP_PORTAL_NAME', 'presseportale.test'),
'domain_presseecho' => env('APP_PRESSEECHO_NAME', 'presseecho.test'),
'domain_businessportal' => env('APP_BUSINESSPORTAL_NAME', 'businessportal24.test'),
'domain_portal_url' => env('APP_PORTAL_URL', 'https://pr-copilot.test'),
'domain_portal_url' => env('APP_PORTAL_URL', 'https://presseportale.test'),
'domain_presseecho_url' => env('APP_PRESSEECHO_URL', 'https://presseecho.test'),
'domain_businessportal_url' => env('APP_BUSINESSPORTAL_URL', 'https://businessportal24.test'),
'domains' => [
'portal' => [
'domain_name' => env('APP_PORTAL_NAME', 'pr-copilot.test'),
'url' => env('APP_PORTAL_URL', 'https://pr-copilot.test'),
'asset_url' => 'https://assets.pr-copilot.test',
'domain_name' => env('APP_PORTAL_NAME', 'presseportale.test'),
'url' => env('APP_PORTAL_URL', 'https://presseportale.test'),
'asset_url' => env('APP_PORTAL_ASSET_URL', 'https://assets.presseportale.test'),
'theme' => 'main',
'view_prefix' => 'portal',
'assets_dir' => 'build/portal',
'description' => 'Backend Page PR-Copilot',
'description' => 'Backend Presseportale',
'color_scheme' => [
'primary' => env('APP_PORTAL_PRIMARY', '#526266'), //
'secondary' => env('APP_PORTAL_SECONDARY', '#82a0a7'), //
@ -49,10 +46,26 @@ return [
'assets_dir' => 'build/web',
'description' => 'Frontend Page Presseecho',
'color_scheme' => [
'primary' => env('APP_PRESSEECHO_PRIMARY', '#345636'), //
'secondary' => env('APP_PRESSEECHO_SECONDARY', '#6b8f71'), //
'primary' => env('APP_PRESSEECHO_PRIMARY', '#345636'),
'secondary' => env('APP_PRESSEECHO_SECONDARY', '#6b8f71'),
],
'font' => 'Montserrat',
'brand' => [
'name' => 'presseecho',
'accent' => null,
'tagline_short' => 'Pressemitteilungen · DACH',
'tagline_long' => 'Fachmeldungen aus Wirtschaft und Industrie. Redaktionell geprüft. Strukturiert distribuiert.',
'footer_legal' => '© :year presseecho.com · Alle Rechte vorbehalten',
'about_label' => 'Über presseecho',
'meta_title' => 'Aktuelle Pressemitteilungen aus Wirtschaft & Industrie presseecho',
'meta_description' => 'Redaktionell kuratierte Pressemitteilungen aus Wirtschaft und Industrie im DACH-Raum.',
'newsletter_topics' => [
['name' => 'Tageszusammenfassung', 'meta' => 'MoFr · 07:00 Uhr', 'active' => true],
['name' => 'Wochenrückblick', 'meta' => 'Sonntags · 18:00 Uhr', 'active' => false],
['name' => 'Energie & Klima', 'meta' => 'ab Content-Score 80 · max. 2× pro Woche', 'active' => true],
['name' => 'Industrie & Forschung', 'meta' => 'ausgewählt von der Redaktion · ca. 35 Mails/Monat', 'active' => false],
],
],
],
'businessportal24' => [
@ -64,10 +77,26 @@ return [
'assets_dir' => 'build/web',
'description' => 'Frontend Page Businessportal24',
'color_scheme' => [
'primary' => env('APP_BUSINESSPORTAL_PRIMARY', '#cf3628'), //
'secondary' => env('APP_BUSINESSPORTAL_SECONDARY', '#f0834a'), //
'primary' => env('APP_BUSINESSPORTAL_PRIMARY', '#cf3628'),
'secondary' => env('APP_BUSINESSPORTAL_SECONDARY', '#f0834a'),
],
'font' => 'Montserrat',
'brand' => [
'name' => 'businessportal',
'accent' => '24',
'tagline_short' => 'Pressemitteilungen · DACH',
'tagline_long' => 'Veröffentlichungs-Portal für redaktionell geprüfte Pressemitteilungen aus Deutschland, Österreich und der Schweiz.',
'footer_legal' => '© :year businessportal24.com · Alle Rechte vorbehalten',
'about_label' => 'Über businessportal24',
'meta_title' => 'Aktuelle Pressemitteilungen aus der deutschen Wirtschaft businessportal24',
'meta_description' => 'Pressemitteilungen aus Deutschland, Österreich und der Schweiz. Redaktionell geprüft. Strukturiert distribuiert.',
'newsletter_topics' => [
['name' => 'Tageszusammenfassung', 'meta' => 'MoFr · 07:00 Uhr', 'active' => true],
['name' => 'Wochenrückblick', 'meta' => 'Sonntags · 18:00 Uhr', 'active' => false],
['name' => 'Energie & Klima', 'meta' => 'ab Content-Score 80 · max. 2× pro Woche', 'active' => true],
['name' => 'IPO & M&A', 'meta' => 'ausgewählt von der Redaktion · ca. 35 Mails/Monat', 'active' => false],
],
],
],
],
];

View file

@ -73,6 +73,14 @@ return [
'replace_placeholders' => true,
],
'admin_slow' => [
'driver' => 'daily',
'path' => storage_path('logs/admin-slow.log'),
'level' => env('ADMIN_SLOW_REQUEST_LOG_LEVEL', 'warning'),
'days' => env('ADMIN_SLOW_REQUEST_LOG_DAYS', 14),
'replace_placeholders' => true,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),

11
config/newsletter.php Normal file
View file

@ -0,0 +1,11 @@
<?php
return [
'sync' => [
'enabled' => env('NEWSLETTER_SYNC_ENABLED', false),
'provider' => env('NEWSLETTER_SYNC_PROVIDER', 'placeholder'),
'endpoint' => env('NEWSLETTER_SYNC_ENDPOINT'),
'api_key' => env('NEWSLETTER_SYNC_API_KEY'),
'timeout' => (int) env('NEWSLETTER_SYNC_TIMEOUT', 10),
],
];

View file

@ -0,0 +1,7 @@
{
"folders": [
{
"path": ".."
}
]
}

24
config/salutations.php Normal file
View file

@ -0,0 +1,24 @@
<?php
return [
'default' => 'mr',
'items' => [
'mr' => [
'de' => 'Herr',
'en' => 'Mr.',
],
'mrs' => [
'de' => 'Frau',
'en' => 'Ms.',
],
'diverse' => [
'de' => 'Divers',
'en' => 'Diverse',
],
'none' => [
'de' => 'Keine Angabe',
'en' => 'Prefer not to say',
],
],
];

View file

@ -25,7 +25,7 @@ return [
|
*/
'dev_url' => env('ASSET_URL', env('VITE_DEV_SERVER_URL', 'https://assets.pr-copilot.test')),
'dev_url' => env('ASSET_URL', env('VITE_DEV_SERVER_URL', 'https://assets.presseportale.test')),
/*
|--------------------------------------------------------------------------