382 lines
16 KiB
PHP
382 lines
16 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
return [
|
|
'brand' => [
|
|
'name' => 'Nova Cards',
|
|
'subtitle' => 'Create beautiful quote cards, mood cards, and visual text art.',
|
|
],
|
|
|
|
'formats' => [
|
|
'square' => ['width' => 1080, 'height' => 1080, 'label' => 'Square'],
|
|
'portrait' => ['width' => 1080, 'height' => 1350, 'label' => 'Portrait'],
|
|
'story' => ['width' => 1080, 'height' => 1920, 'label' => 'Story'],
|
|
'landscape' => ['width' => 1920, 'height' => 1080, 'label' => 'Landscape'],
|
|
],
|
|
|
|
'validation' => [
|
|
'quote_min' => 3,
|
|
'quote_max' => 420,
|
|
'title_min' => 3,
|
|
'title_max' => 120,
|
|
'description_max' => 500,
|
|
'max_tags' => 8,
|
|
'max_decorations' => 6,
|
|
'max_text_blocks' => 8,
|
|
'max_asset_items' => 12,
|
|
'max_background_upload_bytes' => 8 * 1024 * 1024,
|
|
'allowed_background_mimes' => [
|
|
'image/jpeg',
|
|
'image/png',
|
|
'image/webp',
|
|
],
|
|
'allowed_alignments' => ['left', 'center', 'right'],
|
|
'allowed_layouts' => ['quote_heavy', 'author_emphasis', 'centered', 'minimal'],
|
|
'allowed_overlay_styles' => ['none', 'dark-soft', 'dark-strong', 'light-soft'],
|
|
'allowed_positions' => ['top', 'upper-middle', 'center', 'lower-middle', 'bottom'],
|
|
'allowed_blur_levels' => [0, 4, 8, 12, 20],
|
|
'allowed_opacity_levels' => [20, 35, 50, 65, 80],
|
|
'allowed_padding_presets' => ['tight', 'comfortable', 'airy'],
|
|
'allowed_max_widths' => ['compact', 'balanced', 'wide'],
|
|
],
|
|
|
|
'storage' => [
|
|
'public_disk' => env('NOVA_CARDS_PUBLIC_DISK', 'public'),
|
|
'private_disk' => env('NOVA_CARDS_PRIVATE_DISK', 'local'),
|
|
'public_prefix' => 'cards',
|
|
'background_original_prefix' => 'cards/backgrounds/original',
|
|
'background_processed_prefix' => 'cards/backgrounds/processed',
|
|
'preview_prefix' => 'cards/previews',
|
|
],
|
|
|
|
'render' => [
|
|
'queue' => env('NOVA_CARDS_QUEUE', 'default'),
|
|
'preview_quality' => 86,
|
|
'og_quality' => 88,
|
|
'preview_format' => 'webp',
|
|
'og_format' => 'jpg',
|
|
],
|
|
|
|
'seed_demo_cards' => [
|
|
'enabled' => (bool) env('NOVA_CARDS_SEED_DEMO_CARDS', false),
|
|
'user' => [
|
|
'username' => env('NOVA_CARDS_DEMO_USERNAME', 'nova.cards'),
|
|
'name' => env('NOVA_CARDS_DEMO_NAME', 'Nova Cards'),
|
|
'email' => env('NOVA_CARDS_DEMO_EMAIL', 'nova-cards-demo@skinbase.test'),
|
|
'password' => env('NOVA_CARDS_DEMO_PASSWORD', 'password'),
|
|
],
|
|
],
|
|
|
|
'rate_limits' => [
|
|
'drafts' => ['per_user' => 20, 'per_ip' => 40],
|
|
'autosave' => ['per_user' => 120, 'per_ip' => 240],
|
|
'publish' => ['per_user' => 12, 'per_ip' => 24],
|
|
'background_upload' => ['per_user' => 30, 'per_ip' => 60],
|
|
'render' => ['per_user' => 30, 'per_ip' => 60],
|
|
],
|
|
|
|
'font_presets' => [
|
|
'modern-sans' => [
|
|
'label' => 'Modern Sans',
|
|
'family' => 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
|
|
'render_family' => 'arial',
|
|
'weight' => '600',
|
|
'recommended_use' => 'Clean motivational cards and bold statements.',
|
|
],
|
|
'elegant-serif' => [
|
|
'label' => 'Elegant Serif',
|
|
'family' => 'Georgia, Cambria, "Times New Roman", serif',
|
|
'render_family' => 'georgia',
|
|
'weight' => '700',
|
|
'recommended_use' => 'Classic quotes and romantic layouts.',
|
|
],
|
|
'bold-poster' => [
|
|
'label' => 'Bold Poster',
|
|
'family' => 'Impact, Haettenschweiler, "Arial Narrow Bold", sans-serif',
|
|
'render_family' => 'arial-black',
|
|
'weight' => '700',
|
|
'recommended_use' => 'High-contrast poster-like statements.',
|
|
],
|
|
'soft-handwritten' => [
|
|
'label' => 'Soft Handwritten',
|
|
'family' => '"Segoe Print", "Bradley Hand", cursive',
|
|
'render_family' => 'comic-sans',
|
|
'weight' => '400',
|
|
'recommended_use' => 'Warm, intimate, diary-like cards.',
|
|
],
|
|
'minimal-editorial' => [
|
|
'label' => 'Minimal Editorial',
|
|
'family' => '"Trebuchet MS", "Gill Sans", sans-serif',
|
|
'render_family' => 'trebuchet',
|
|
'weight' => '600',
|
|
'recommended_use' => 'Minimal editorial compositions.',
|
|
],
|
|
'dreamy-aesthetic' => [
|
|
'label' => 'Dreamy Aesthetic',
|
|
'family' => '"Palatino Linotype", "Book Antiqua", Palatino, serif',
|
|
'render_family' => 'palatino',
|
|
'weight' => '600',
|
|
'recommended_use' => 'Poetry, wallpaper quotes, and soft mood cards.',
|
|
],
|
|
],
|
|
|
|
'gradient_presets' => [
|
|
'midnight-nova' => ['label' => 'Midnight Nova', 'colors' => ['#0f172a', '#1d4ed8']],
|
|
'soft-pastel' => ['label' => 'Soft Pastel', 'colors' => ['#f9a8d4', '#c4b5fd']],
|
|
'amber-glow' => ['label' => 'Amber Glow', 'colors' => ['#451a03', '#f59e0b']],
|
|
'emerald-bloom' => ['label' => 'Emerald Bloom', 'colors' => ['#052e16', '#34d399']],
|
|
'romantic-dusk' => ['label' => 'Romantic Dusk', 'colors' => ['#4c0519', '#fb7185']],
|
|
'deep-cinema' => ['label' => 'Deep Cinema', 'colors' => ['#020617', '#334155']],
|
|
'dream-glow' => ['label' => 'Dream Glow', 'colors' => ['#312e81', '#ec4899']],
|
|
'nature-calm' => ['label' => 'Nature Calm', 'colors' => ['#064e3b', '#93c5fd']],
|
|
],
|
|
|
|
'decor_presets' => [
|
|
['key' => 'sparkle-cluster', 'label' => 'Sparkles', 'glyph' => '✦'],
|
|
['key' => 'soft-heart', 'label' => 'Heart', 'glyph' => '♥'],
|
|
['key' => 'moon-stars', 'label' => 'Moon', 'glyph' => '☾'],
|
|
['key' => 'minimal-dot', 'label' => 'Dot', 'glyph' => '•'],
|
|
['key' => 'asterisk-burst', 'label' => 'Burst', 'glyph' => '✷'],
|
|
],
|
|
|
|
'asset_packs' => [
|
|
[
|
|
'slug' => 'official-celestial',
|
|
'name' => 'Official Celestial Pack',
|
|
'description' => 'Sparkles, moons, and accent glyphs tuned for dreamy Nova Cards compositions.',
|
|
'type' => 'asset',
|
|
'official' => true,
|
|
'active' => true,
|
|
'manifest_json' => [
|
|
'items' => [
|
|
['key' => 'nova-sparkle', 'label' => 'Nova Sparkle', 'type' => 'glyph', 'glyph' => '✦'],
|
|
['key' => 'nova-moon', 'label' => 'Moon Accent', 'type' => 'glyph', 'glyph' => '☾'],
|
|
['key' => 'nova-heart', 'label' => 'Soft Heart', 'type' => 'glyph', 'glyph' => '♥'],
|
|
],
|
|
],
|
|
],
|
|
[
|
|
'slug' => 'official-editorial-frames',
|
|
'name' => 'Editorial Frame Pack',
|
|
'description' => 'Minimal frame treatments and lines for poster-style cards.',
|
|
'type' => 'asset',
|
|
'official' => true,
|
|
'active' => true,
|
|
'manifest_json' => [
|
|
'items' => [
|
|
['key' => 'line-top', 'label' => 'Top Line', 'type' => 'frame'],
|
|
['key' => 'line-bottom', 'label' => 'Bottom Line', 'type' => 'frame'],
|
|
],
|
|
],
|
|
],
|
|
],
|
|
|
|
'template_packs' => [
|
|
[
|
|
'slug' => 'official-story-pack',
|
|
'name' => 'Official Story Pack',
|
|
'description' => 'Tall layouts optimized for punchy story cards and serial prompts.',
|
|
'type' => 'template',
|
|
'official' => true,
|
|
'active' => true,
|
|
'manifest_json' => [
|
|
'templates' => ['story-vertical', 'dream-glow'],
|
|
],
|
|
],
|
|
[
|
|
'slug' => 'official-editorial-pack',
|
|
'name' => 'Official Editorial Pack',
|
|
'description' => 'Minimal serif and poster templates for headline-driven cards.',
|
|
'type' => 'template',
|
|
'official' => true,
|
|
'active' => true,
|
|
'manifest_json' => [
|
|
'templates' => ['classic-typography', 'golden-serif'],
|
|
],
|
|
],
|
|
],
|
|
|
|
'background_modes' => [
|
|
['key' => 'template', 'label' => 'Template Base'],
|
|
['key' => 'gradient', 'label' => 'Gradient'],
|
|
['key' => 'solid', 'label' => 'Solid'],
|
|
['key' => 'upload', 'label' => 'Upload'],
|
|
],
|
|
|
|
'layout_presets' => [
|
|
['key' => 'quote_heavy', 'label' => 'Quote Heavy'],
|
|
['key' => 'author_emphasis', 'label' => 'Author Emphasis'],
|
|
['key' => 'centered', 'label' => 'Centered'],
|
|
['key' => 'minimal', 'label' => 'Minimal'],
|
|
],
|
|
|
|
'alignment_presets' => [
|
|
['key' => 'left', 'label' => 'Left'],
|
|
['key' => 'center', 'label' => 'Center'],
|
|
['key' => 'right', 'label' => 'Right'],
|
|
],
|
|
|
|
'position_presets' => [
|
|
['key' => 'top', 'label' => 'Top'],
|
|
['key' => 'upper-middle', 'label' => 'Upper Middle'],
|
|
['key' => 'center', 'label' => 'Center'],
|
|
['key' => 'lower-middle', 'label' => 'Lower Middle'],
|
|
['key' => 'bottom', 'label' => 'Bottom'],
|
|
],
|
|
|
|
'padding_presets' => [
|
|
['key' => 'tight', 'label' => 'Tight'],
|
|
['key' => 'comfortable', 'label' => 'Comfortable'],
|
|
['key' => 'airy', 'label' => 'Airy'],
|
|
],
|
|
|
|
'max_width_presets' => [
|
|
['key' => 'compact', 'label' => 'Compact'],
|
|
['key' => 'balanced', 'label' => 'Balanced'],
|
|
['key' => 'wide', 'label' => 'Wide'],
|
|
],
|
|
|
|
'line_height_presets' => [
|
|
['key' => 'tight', 'label' => 'Tight', 'value' => 1.05],
|
|
['key' => 'balanced', 'label' => 'Balanced', 'value' => 1.2],
|
|
['key' => 'airy', 'label' => 'Airy', 'value' => 1.38],
|
|
],
|
|
|
|
'shadow_presets' => [
|
|
['key' => 'none', 'label' => 'None'],
|
|
['key' => 'soft', 'label' => 'Soft'],
|
|
['key' => 'strong', 'label' => 'Strong'],
|
|
],
|
|
|
|
'focal_positions' => [
|
|
['key' => 'center', 'label' => 'Center'],
|
|
['key' => 'top', 'label' => 'Top'],
|
|
['key' => 'bottom', 'label' => 'Bottom'],
|
|
['key' => 'left', 'label' => 'Left'],
|
|
['key' => 'right', 'label' => 'Right'],
|
|
['key' => 'top-left', 'label' => 'Top Left'],
|
|
['key' => 'top-right', 'label' => 'Top Right'],
|
|
['key' => 'bottom-left', 'label' => 'Bottom Left'],
|
|
['key' => 'bottom-right', 'label' => 'Bottom Right'],
|
|
],
|
|
|
|
'starter_templates' => [
|
|
'minimal-black-white',
|
|
'neon-nova',
|
|
'soft-pastel',
|
|
'romantic',
|
|
'cinematic-dark',
|
|
'golden-serif',
|
|
'nature-calm',
|
|
'bold-statement',
|
|
'wallpaper-style',
|
|
'story-vertical',
|
|
'dream-glow',
|
|
'classic-typography',
|
|
],
|
|
|
|
// v3 additions
|
|
|
|
'quote_mark_presets' => [
|
|
['key' => 'none', 'label' => 'None'],
|
|
['key' => 'classic', 'label' => 'Classic "…"'],
|
|
['key' => 'guillemets', 'label' => 'Guillemets «…»'],
|
|
['key' => 'large-open', 'label' => 'Large Open "'],
|
|
['key' => 'minimal-dash', 'label' => 'Dash —'],
|
|
['key' => 'decorative-star', 'label' => 'Star ✦'],
|
|
],
|
|
|
|
'text_panel_styles' => [
|
|
['key' => 'none', 'label' => 'None'],
|
|
['key' => 'frosted', 'label' => 'Frosted Glass'],
|
|
['key' => 'dark-solid', 'label' => 'Dark Solid'],
|
|
['key' => 'light-solid', 'label' => 'Light Solid'],
|
|
['key' => 'outline', 'label' => 'Outline'],
|
|
['key' => 'editorial-rule', 'label' => 'Editorial Rule'],
|
|
],
|
|
|
|
'frame_presets' => [
|
|
['key' => 'none', 'label' => 'None'],
|
|
['key' => 'thin-border', 'label' => 'Thin Border'],
|
|
['key' => 'double-line', 'label' => 'Double Line'],
|
|
['key' => 'corner-marks', 'label' => 'Corner Marks'],
|
|
['key' => 'editorial-top', 'label' => 'Editorial Top Rule'],
|
|
['key' => 'editorial-both', 'label' => 'Editorial Top & Bottom Rules'],
|
|
['key' => 'rounded-card', 'label' => 'Rounded Card'],
|
|
],
|
|
|
|
'color_grade_presets' => [
|
|
['key' => 'none', 'label' => 'None'],
|
|
['key' => 'warm', 'label' => 'Warm'],
|
|
['key' => 'cool', 'label' => 'Cool'],
|
|
['key' => 'cinematic', 'label' => 'Cinematic'],
|
|
['key' => 'muted', 'label' => 'Muted'],
|
|
['key' => 'vivid', 'label' => 'Vivid'],
|
|
['key' => 'noir', 'label' => 'Noir'],
|
|
['key' => 'golden-hour', 'label' => 'Golden Hour'],
|
|
],
|
|
|
|
'effect_presets' => [
|
|
['key' => 'none', 'label' => 'None'],
|
|
['key' => 'grain', 'label' => 'Film Grain'],
|
|
['key' => 'vignette', 'label' => 'Vignette'],
|
|
['key' => 'noise', 'label' => 'Noise'],
|
|
['key' => 'halftone', 'label' => 'Halftone'],
|
|
['key' => 'glitch', 'label' => 'Glitch'],
|
|
['key' => 'bokeh', 'label' => 'Bokeh'],
|
|
],
|
|
|
|
'style_families' => [
|
|
['key' => 'aesthetic', 'label' => 'Aesthetic'],
|
|
['key' => 'editorial', 'label' => 'Editorial'],
|
|
['key' => 'cinematic', 'label' => 'Cinematic'],
|
|
['key' => 'minimal', 'label' => 'Minimal'],
|
|
['key' => 'bold', 'label' => 'Bold'],
|
|
['key' => 'romantic', 'label' => 'Romantic'],
|
|
['key' => 'dark', 'label' => 'Dark'],
|
|
['key' => 'pastel', 'label' => 'Pastel'],
|
|
['key' => 'retro', 'label' => 'Retro'],
|
|
['key' => 'nature', 'label' => 'Nature'],
|
|
],
|
|
|
|
'palette_families' => [
|
|
['key' => 'monochrome', 'label' => 'Monochrome'],
|
|
['key' => 'warm-tones', 'label' => 'Warm Tones'],
|
|
['key' => 'cool-tones', 'label' => 'Cool Tones'],
|
|
['key' => 'earth-tones', 'label' => 'Earth Tones'],
|
|
['key' => 'pastels', 'label' => 'Pastels'],
|
|
['key' => 'neons', 'label' => 'Neons'],
|
|
['key' => 'jewel-tones', 'label' => 'Jewel Tones'],
|
|
],
|
|
|
|
'mood_families' => [
|
|
['key' => 'romantic', 'label' => 'Romantic', 'tag_slugs' => ['romantic', 'love', 'tender']],
|
|
['key' => 'dark-poetry', 'label' => 'Dark Poetry', 'tag_slugs' => ['dark', 'shadow', 'night']],
|
|
['key' => 'inspirational', 'label' => 'Inspirational', 'tag_slugs' => ['inspire', 'hope', 'believe']],
|
|
['key' => 'soft-morning', 'label' => 'Soft Morning', 'tag_slugs' => ['calm', 'morning', 'peace']],
|
|
['key' => 'minimal', 'label' => 'Minimal', 'tag_slugs' => ['minimal', 'quiet', 'still']],
|
|
['key' => 'motivational', 'label' => 'Motivational', 'tag_slugs' => ['power', 'bold', 'fire']],
|
|
['key' => 'cyber-mood', 'label' => 'Cyber Mood', 'tag_slugs' => ['cyber', 'neon', 'digital']],
|
|
],
|
|
|
|
'seasonal_hubs' => [
|
|
['key' => 'spring', 'label' => 'Spring', 'tag_slugs' => ['spring', 'bloom', 'floral']],
|
|
['key' => 'summer', 'label' => 'Summer', 'tag_slugs' => ['summer', 'sunlight', 'vacation']],
|
|
['key' => 'autumn', 'label' => 'Autumn', 'tag_slugs' => ['autumn', 'harvest', 'amber']],
|
|
['key' => 'winter', 'label' => 'Winter', 'tag_slugs' => ['winter', 'snow', 'frost']],
|
|
['key' => 'holiday', 'label' => 'Holiday', 'tag_slugs' => ['holiday', 'festive', 'celebration']],
|
|
],
|
|
|
|
'export_formats' => [
|
|
'preview' => ['width' => 1080, 'height' => 1080, 'format' => 'webp', 'label' => 'Preview (WebP)'],
|
|
'hires' => ['width' => 2160, 'height' => 2160, 'format' => 'png', 'label' => 'Hi-Res PNG'],
|
|
'square' => ['width' => 1080, 'height' => 1080, 'format' => 'png', 'label' => 'Square PNG'],
|
|
'story' => ['width' => 1080, 'height' => 1920, 'format' => 'png', 'label' => 'Story PNG'],
|
|
'wallpaper' => ['width' => 1920, 'height' => 1080, 'format' => 'png', 'label' => 'Wallpaper PNG'],
|
|
'og' => ['width' => 1200, 'height' => 630, 'format' => 'jpg', 'label' => 'OG Image (JPG)'],
|
|
],
|
|
|
|
'export_ttl_hours' => (int) env('NOVA_CARDS_EXPORT_TTL_HOURS', 48),
|
|
];
|