Files
SkinbaseNova/config/collections.php
T
klevze 8a80aae21e Ship production optimization M1-M12.5A: queues, metrics, HTTP observability, and vector search reliability.
Keep similar-ai from tripping the global circuit on a lone URL 502, clamp Qdrant search to 100, and add Server-Timing plus slow-request logging. Studio shared props, Academy S3 exists caching, heat chunking, and Redis/scheduler hygiene stay in this rollout.
2026-08-25 07:58:47 +02:00

159 lines
5.8 KiB
PHP

<?php
declare(strict_types=1);
return [
'featured_limit' => 3,
'invites' => [
'expires_after_days' => (int) env('COLLECTIONS_INVITES_EXPIRE_AFTER_DAYS', 7),
],
'submissions' => [
'max_per_hour' => (int) env('COLLECTIONS_SUBMISSIONS_MAX_PER_HOUR', 8),
'duplicate_cooldown_minutes' => (int) env('COLLECTIONS_SUBMISSIONS_DUPLICATE_COOLDOWN_MINUTES', 15),
],
'editorial' => [
'system_owner_username' => env('COLLECTIONS_EDITORIAL_SYSTEM_OWNER_USERNAME'),
'system_owner_label' => env('COLLECTIONS_EDITORIAL_SYSTEM_OWNER_LABEL', 'Skinbase Editorial'),
],
'smart_rules' => [
'max_rules' => 8,
'preview_limit' => 12,
'allowed_match' => ['all', 'any'],
'allowed_sort' => ['newest', 'oldest', 'popular'],
'allowed_fields' => ['tags', 'category', 'subcategory', 'medium', 'style', 'color', 'ai_tag', 'created_at', 'is_featured', 'is_mature'],
'style_terms' => [
'abstract',
'anime',
'cartoon',
'cel shaded',
'cinematic',
'comic style',
'concept art',
'digital art',
'digital painting',
'fantasy art',
'illustration',
'low poly',
'matte painting',
'minimalist',
'oil painting',
'painterly',
'photorealistic',
'pixel art',
'realism',
'retro',
'sci fi',
'sketch',
'surreal',
'vector art',
'watercolor',
'3d render',
],
'color_terms' => [
'black and white',
'blue tones',
'cool colors',
'cyan tones',
'earth tones',
'gold tones',
'green tones',
'monochrome',
'neon colors',
'orange tones',
'pastel colors',
'pink tones',
'purple tones',
'red tones',
'teal tones',
'vibrant colors',
'warm colors',
'yellow tones',
],
],
'discovery' => [
'featured_limit' => 18,
'featured_cache_seconds' => 120,
],
'recommendations' => [
'related_limit' => 6,
],
'v5' => [
'health' => [
'stale_after_days' => (int) env('COLLECTIONS_V5_STALE_AFTER_DAYS', 90),
'low_engagement_after_days' => (int) env('COLLECTIONS_V5_LOW_ENGAGEMENT_AFTER_DAYS', 14),
],
'queue' => [
// No Horizon supervisor consumes this queue today. Keep dispatch
// off until a consumer exists (M7). Existing jobs are not deleted.
'dispatch_enabled' => (bool) env('COLLECTIONS_V5_DISPATCH_ENABLED', false),
'name' => env('COLLECTIONS_V5_QUEUE', 'collections'),
'health_batch_size' => (int) env('COLLECTIONS_V5_HEALTH_BATCH_SIZE', 40),
'recommendation_batch_size' => (int) env('COLLECTIONS_V5_RECOMMENDATION_BATCH_SIZE', 40),
'duplicate_batch_size' => (int) env('COLLECTIONS_V5_DUPLICATE_BATCH_SIZE', 30),
'health_stale_after_hours' => (int) env('COLLECTIONS_V5_HEALTH_STALE_AFTER_HOURS', 24),
'recommendation_stale_after_hours' => (int) env('COLLECTIONS_V5_RECOMMENDATION_STALE_AFTER_HOURS', 12),
'duplicate_stale_after_hours' => (int) env('COLLECTIONS_V5_DUPLICATE_STALE_AFTER_HOURS', 24),
],
'search' => [
'public_per_page' => (int) env('COLLECTIONS_V5_PUBLIC_SEARCH_PER_PAGE', 18),
'owner_per_page' => (int) env('COLLECTIONS_V5_OWNER_SEARCH_PER_PAGE', 20),
],
],
'ai' => [
'enabled' => true,
'max_candidate_artworks' => 36,
],
'layout_modules' => [
'intro_block' => [
'label' => 'Intro Block',
'description' => 'Show the subtitle, curator summary, and smart context in the hero area.',
'default_slot' => 'full',
'slots' => ['full'],
'locked' => false,
],
'featured_artworks' => [
'label' => 'Featured Artworks Block',
'description' => 'Spotlight a compact highlights strip ahead of the main artwork grid.',
'default_slot' => 'main',
'slots' => ['full', 'main'],
],
'artwork_grid' => [
'label' => 'Artwork Grid',
'description' => 'Primary artwork gallery for the collection.',
'default_slot' => 'full',
'slots' => ['full', 'main'],
'locked' => true,
],
'editorial_note' => [
'label' => 'Editorial Note',
'description' => 'Premium context block for staff picks and campaign notes.',
'default_slot' => 'full',
'slots' => ['full', 'main', 'sidebar'],
],
'collaborators' => [
'label' => 'Contributor Block',
'description' => 'Show the curation team on the page.',
'default_slot' => 'sidebar',
'slots' => ['main', 'sidebar'],
],
'submissions' => [
'label' => 'Submission CTA',
'description' => 'Highlight community submission controls when enabled.',
'default_slot' => 'sidebar',
'slots' => ['main', 'sidebar'],
],
'discussion' => [
'label' => 'Discussion Block',
'description' => 'Render lightweight collection discussion.',
'default_slot' => 'main',
'slots' => ['main', 'sidebar'],
],
'related_collections' => [
'label' => 'Related Collections',
'description' => 'Surface collection recommendations.',
'default_slot' => 'main',
'slots' => ['main', 'sidebar'],
],
],
];