added a help system, replaced the words "tenant" and "Pwa" with better alternatives. corrected and implemented cron jobs. prepared going live on a coolify-powered system.

This commit is contained in:
Codex Agent
2025-11-10 16:23:09 +01:00
parent ba9e64dfcb
commit 447a90a742
123 changed files with 6398 additions and 153 deletions

11
config/coolify.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
return [
'api' => [
'base_url' => env('COOLIFY_API_BASE_URL'),
'token' => env('COOLIFY_API_TOKEN'),
'timeout' => (int) env('COOLIFY_API_TIMEOUT', 5),
],
'web_url' => env('COOLIFY_WEB_URL'),
'services' => json_decode(env('COOLIFY_SERVICE_IDS', '{}'), true) ?? [],
];

View File

@@ -47,6 +47,13 @@ return [
'report' => false,
],
'photobooth' => [
'driver' => 'local',
'root' => env('PHOTOBOOTH_IMPORT_ROOT', storage_path('app/photobooth')),
'throw' => false,
'report' => false,
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),

37
config/help.php Normal file
View File

@@ -0,0 +1,37 @@
<?php
return [
'source_path' => 'docs/help',
'disk' => 'local',
'compiled_path' => 'help',
'audiences' => ['guest', 'admin'],
'default_locale' => 'en',
'fallback_locale' => 'en',
'required_front_matter' => [
'title',
'locale',
'slug',
'audience',
'summary',
'version_introduced',
'status',
'translation_state',
'last_reviewed_at',
'owner',
],
'list_fields' => [
'slug',
'title',
'summary',
'version_introduced',
'requires_app_version',
'status',
'translation_state',
'last_reviewed_at',
'owner',
'related',
'audience',
'locale',
'updated_at',
],
];

View File

@@ -73,6 +73,14 @@ return [
'replace_placeholders' => true,
],
'storage-jobs' => [
'driver' => 'daily',
'path' => storage_path('logs/storage-jobs.log'),
'level' => env('LOG_LEVEL', 'info'),
'days' => env('LOG_DAILY_DAYS', 14),
'replace_placeholders' => true,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),

28
config/photobooth.php Normal file
View File

@@ -0,0 +1,28 @@
<?php
return [
'control_service' => [
'base_url' => env('PHOTOBOOTH_CONTROL_BASE_URL'),
'token' => env('PHOTOBOOTH_CONTROL_TOKEN'),
'timeout' => (int) env('PHOTOBOOTH_CONTROL_TIMEOUT', 5),
],
'ftp' => [
'host' => env('PHOTOBOOTH_FTP_HOST'),
'port' => (int) env('PHOTOBOOTH_FTP_PORT', 2121),
],
'credentials' => [
'username_prefix' => env('PHOTOBOOTH_USERNAME_PREFIX', 'pb'),
'username_length' => (int) env('PHOTOBOOTH_USERNAME_LENGTH', 8),
'password_length' => (int) env('PHOTOBOOTH_PASSWORD_LENGTH', 8),
],
'rate_limit_per_minute' => (int) env('PHOTOBOOTH_RATE_LIMIT_PER_MINUTE', 20),
'expiry_grace_days' => (int) env('PHOTOBOOTH_EXPIRY_GRACE_DAYS', 1),
'import' => [
'disk' => env('PHOTOBOOTH_IMPORT_DISK', 'photobooth'),
'max_files_per_run' => (int) env('PHOTOBOOTH_IMPORT_MAX_FILES', 50),
'allowed_extensions' => array_values(array_filter(array_map(
fn ($ext) => strtolower(trim($ext)),
explode(',', env('PHOTOBOOTH_ALLOWED_EXTENSIONS', 'jpg,jpeg,png,webp'))
))),
],
];

View File

@@ -6,5 +6,42 @@ return [
],
'queue_failure_alerts' => env('STORAGE_QUEUE_FAILURE_ALERTS', true),
];
'capacity_thresholds' => [
'warning' => (int) env('STORAGE_CAPACITY_WARNING', 75),
'critical' => (int) env('STORAGE_CAPACITY_CRITICAL', 90),
],
'monitor' => [
'lock_seconds' => (int) env('STORAGE_MONITOR_LOCK_SECONDS', 300),
'cache_minutes' => (int) env('STORAGE_MONITOR_CACHE_MINUTES', 15),
],
'archive' => [
'grace_days' => (int) env('STORAGE_ARCHIVE_GRACE_DAYS', 3),
'lock_seconds' => (int) env('STORAGE_ARCHIVE_LOCK_SECONDS', 1800),
'event_lock_seconds' => (int) env('STORAGE_ARCHIVE_EVENT_LOCK_SECONDS', 3600),
'chunk' => (int) env('STORAGE_ARCHIVE_CHUNK', 25),
'max_dispatch' => (int) env('STORAGE_ARCHIVE_MAX_DISPATCH', 100),
],
'queue_health' => [
'lock_seconds' => (int) env('STORAGE_QUEUE_HEALTH_LOCK_SECONDS', 120),
'cache_minutes' => (int) env('STORAGE_QUEUE_HEALTH_CACHE_MINUTES', 10),
'stalled_minutes' => (int) env('STORAGE_QUEUE_STALLED_MINUTES', 10),
'thresholds' => [
'default' => [
'warning' => (int) env('STORAGE_QUEUE_DEFAULT_WARNING', 100),
'critical' => (int) env('STORAGE_QUEUE_DEFAULT_CRITICAL', 300),
],
'media-storage' => [
'warning' => (int) env('STORAGE_QUEUE_MEDIA_STORAGE_WARNING', 200),
'critical' => (int) env('STORAGE_QUEUE_MEDIA_STORAGE_CRITICAL', 500),
],
'media-security' => [
'warning' => (int) env('STORAGE_QUEUE_MEDIA_SECURITY_WARNING', 50),
'critical' => (int) env('STORAGE_QUEUE_MEDIA_SECURITY_CRITICAL', 150),
],
],
],
];