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' => [ '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'], ], ], ];