Core changes:
- Replace Unsplash slide pipeline with gpt-image-2 via Laravel AI SDK.
New AiImageClient builds prompts from a Blade template seeded by the
workspace's ImageStyle enum, content language, brand color (mapped to a
human-readable name via HexColorName helper) and brand description.
- Drop Template B from TemplateImageGenerator: every slide now renders as
Template A (full-bleed photo + bottom gradient + white/grey overlay).
Removes renderTemplateB, roundCorners, blendHex, ensureContrast and the
closing-slide pipeline.
- StreamPostCreation creates the Post directly and dispatches
PostCreationReady with post_id; the wizard kills its preview step and
redirects straight to the post editor on completion. Finalize endpoint
removed.
- New Workspace.image_style enum field with an 8-option visual picker
shared by /workspaces/create and /settings/workspace/brand via a single
BrandForm component (autofill is a prop). 8 sample webp thumbs ship
under public/images/branding/image-styles/.
- Media items gain optional source ('ai'|'unsplash'|'giphy') and
source_meta (recipe needed to regenerate AI images later); the gallery
picker tags Unsplash/Giphy attachments.
- Brand-color autofill: new CssColorFrequencyExtractor parses every
hex/rgb/hsl value in the homepage CSS, clusters perceptually similar
shades in CIE LAB (Delta E 76 < 12), filters neutrals and returns the
most frequent cluster. Solves Tailwind/utility-CSS sites where no
semantic --primary variable is exposed.
- Credits: gpt-image-2 metered at 15 credits/image (low quality default).
- Layout: AuthSplitLayout right column is sticky/h-svh so the form
textarea growth no longer stretches the marketing slider.
- i18n cleanup: localized labels follow the no-em-dash convention.
319 lines
13 KiB
PHP
319 lines
13 KiB
PHP
<?php
|
|
|
|
return [
|
|
'title' => 'Settings',
|
|
'description' => 'Manage your profile and account settings',
|
|
|
|
'hub' => [
|
|
'title' => 'Settings',
|
|
'description' => 'Choose what you want to manage.',
|
|
'profile' => [
|
|
'title' => 'Profile',
|
|
'description' => 'Update your personal info, password, and notification preferences.',
|
|
],
|
|
'workspace' => [
|
|
'title' => 'Workspace',
|
|
'description' => 'Configure your workspace, brand, members, and API keys.',
|
|
],
|
|
'account' => [
|
|
'title' => 'Account',
|
|
'description' => 'Manage your account info, usage, and billing.',
|
|
],
|
|
],
|
|
|
|
'nav' => [
|
|
'profile' => 'Profile',
|
|
'authentication' => 'Authentication',
|
|
'workspace' => 'Workspace',
|
|
'members' => 'Members',
|
|
'notifications' => 'Notifications',
|
|
'billing' => 'Billing',
|
|
],
|
|
|
|
'notifications' => [
|
|
'title' => 'Notification preferences',
|
|
'heading' => 'Email notifications',
|
|
'description' => 'Choose which email notifications you want to receive',
|
|
'post_published' => 'Post published',
|
|
'post_published_description' => 'Receive an email when your post is published successfully',
|
|
'post_failed' => 'Post failed',
|
|
'post_failed_description' => 'Receive an email when your post fails to publish',
|
|
'account_disconnected' => 'Account disconnected',
|
|
'account_disconnected_description' => 'Receive an email when a social account is disconnected',
|
|
'save' => 'Save preferences',
|
|
],
|
|
|
|
'profile' => [
|
|
'title' => 'Profile settings',
|
|
'photo_heading' => 'Profile photo',
|
|
'photo_description' => 'Upload a profile photo',
|
|
'heading' => 'Profile information',
|
|
'description' => 'Update your name and email address',
|
|
'avatar' => 'Avatar',
|
|
'name' => 'Name',
|
|
'name_placeholder' => 'Full name',
|
|
'email' => 'Email address',
|
|
'email_placeholder' => 'Email address',
|
|
'email_unverified' => 'Your email address is unverified.',
|
|
'resend_verification' => 'Click here to resend the verification email.',
|
|
'verification_sent' => 'A new verification link has been sent to your email address.',
|
|
'save' => 'Save',
|
|
],
|
|
|
|
'authentication' => [
|
|
'title' => 'Authentication',
|
|
'page_title' => 'Authentication settings',
|
|
'sessions' => [
|
|
'title' => 'Active sessions',
|
|
'description' => 'If you notice anything suspicious, sign out of other devices.',
|
|
'unknown_browser' => 'Unknown browser',
|
|
'unknown_ip' => 'Unknown IP',
|
|
'on' => 'on',
|
|
'active_now' => 'Active now',
|
|
'log_out_others' => 'Log out other devices',
|
|
'modal_title' => 'Log out other devices',
|
|
'modal_description_password' => 'Enter your current password to confirm you want to log out other browser sessions.',
|
|
'modal_description_email' => 'Type your email address to confirm you want to log out other browser sessions.',
|
|
'password_placeholder' => 'Current password',
|
|
'email_placeholder' => 'Your account email',
|
|
'cancel' => 'Cancel',
|
|
'submit' => 'Log out other devices',
|
|
'email_mismatch' => 'The email address does not match your account.',
|
|
'flash_logged_out' => 'You have been logged out from other devices.',
|
|
],
|
|
'password' => [
|
|
'update_title' => 'Update password',
|
|
'set_title' => 'Set a password',
|
|
'update_description' => 'Ensure your account is using a long, random password to stay secure.',
|
|
'set_description' => 'Add a password so you can sign in without a connected provider.',
|
|
'current_password' => 'Current password',
|
|
'new_password' => 'New password',
|
|
'confirm_password' => 'Confirm password',
|
|
'save' => 'Save password',
|
|
'set' => 'Set password',
|
|
],
|
|
'providers' => [
|
|
'title' => 'Connected accounts',
|
|
'description' => 'Sign in faster with these connected providers.',
|
|
'connected' => 'Connected',
|
|
'not_connected' => 'Not connected',
|
|
'connect' => 'Connect',
|
|
'disconnect' => 'Disconnect',
|
|
'flash_disconnected' => ':provider disconnected successfully.',
|
|
'flash_connected' => ':provider connected successfully.',
|
|
'flash_already_linked' => 'That :provider account is already linked to another user.',
|
|
'flash_cannot_disconnect' => 'You cannot disconnect your only sign-in method. Set a password or connect another provider first.',
|
|
],
|
|
],
|
|
|
|
'delete_account' => [
|
|
'heading' => 'Delete account',
|
|
'description' => 'Delete your account and all of its resources',
|
|
'warning' => 'Warning',
|
|
'warning_message' => 'Please proceed with caution, this cannot be undone.',
|
|
'button' => 'Delete account',
|
|
'modal_title' => 'Are you sure you want to delete your account?',
|
|
'modal_description_password' => 'Once your account is deleted, all of its resources and data will also be permanently deleted. Please enter your password to confirm.',
|
|
'modal_description_email' => 'Once your account is deleted, all of its resources and data will also be permanently deleted. Please type your email address :email to confirm.',
|
|
'password' => 'Password',
|
|
'password_placeholder' => 'Password',
|
|
'email_placeholder' => 'Your account email',
|
|
'email_mismatch' => 'The email address does not match your account.',
|
|
'cancel' => 'Cancel',
|
|
'confirm' => 'Delete account',
|
|
],
|
|
|
|
'workspace' => [
|
|
'tabs' => [
|
|
'workspace' => 'Workspace',
|
|
'brand' => 'Brand',
|
|
'users' => 'Members',
|
|
'api_keys' => 'API Keys',
|
|
],
|
|
'title' => 'Workspace settings',
|
|
'logo_heading' => 'Workspace logo',
|
|
'logo_description' => 'Upload a logo for your workspace',
|
|
'heading' => 'Workspace name',
|
|
'description' => 'Update your workspace name',
|
|
'members_heading' => 'Members',
|
|
'members_description' => 'Manage workspace members and invitations',
|
|
'name' => 'Name',
|
|
'name_placeholder' => 'My Workspace',
|
|
'save' => 'Save',
|
|
],
|
|
|
|
'brand' => [
|
|
'title' => 'Brand',
|
|
'description' => 'Configure your brand identity for AI-generated content.',
|
|
'name' => 'Workspace name',
|
|
'name_placeholder' => 'My brand',
|
|
'website' => 'Website',
|
|
'website_placeholder' => 'https://yourbrand.com',
|
|
'brand_description' => 'Description',
|
|
'brand_description_placeholder' => 'Tell us about your brand, what you do, and who your audience is...',
|
|
'tone' => 'Tone of voice',
|
|
'tone_professional' => 'Professional',
|
|
'tone_casual' => 'Casual',
|
|
'tone_friendly' => 'Friendly',
|
|
'tone_bold' => 'Bold',
|
|
'tone_inspirational' => 'Inspirational',
|
|
'tone_humorous' => 'Humorous',
|
|
'tone_educational' => 'Educational',
|
|
'voice_notes' => 'Voice notes',
|
|
'voice_notes_placeholder' => 'Additional writing guidelines, words to avoid, style preferences...',
|
|
'brand_color' => 'Brand color',
|
|
'background_color' => 'Background color',
|
|
'text_color' => 'Text color',
|
|
'font' => 'Font',
|
|
'image_style' => 'Image style',
|
|
'image_style_description' => 'Visual style applied when generating slide and cover images for AI posts.',
|
|
'image_style_cinematic' => 'Cinematic',
|
|
'image_style_illustration' => 'Illustration',
|
|
'image_style_isometric_3d' => 'Isometric',
|
|
'image_style_cartoon' => 'Cartoon',
|
|
'image_style_typographic' => 'Typographic',
|
|
'image_style_infographic' => 'Infographic',
|
|
'image_style_minimalist' => 'Minimalist',
|
|
'image_style_mockup' => 'Mockup',
|
|
'content_language' => 'Content language',
|
|
'content_language_description' => 'Language used for AI-generated captions, hashtags, and any text inside generated images or videos.',
|
|
],
|
|
|
|
'members' => [
|
|
'title' => 'Members',
|
|
'heading' => 'Team members',
|
|
'description' => 'Manage members and invites for this workspace',
|
|
|
|
'cancel' => 'Cancel',
|
|
'remove' => 'Remove',
|
|
'make_admin' => 'Make admin',
|
|
'make_member' => 'Make member',
|
|
|
|
'invite' => [
|
|
'title' => 'Invite Member',
|
|
'description' => 'Send an email invite to add collaborators',
|
|
'email' => 'Email',
|
|
'email_placeholder' => 'collaborator@email.com',
|
|
'role' => 'Role',
|
|
'role_placeholder' => 'Select a role',
|
|
'submit' => 'Send Invite',
|
|
],
|
|
|
|
'pending' => [
|
|
'title' => 'Pending Invites',
|
|
'description' => 'Invites awaiting acceptance',
|
|
'empty' => 'No pending invites',
|
|
],
|
|
|
|
'list' => [
|
|
'title' => 'Members',
|
|
'description' => 'People with access to this workspace',
|
|
'empty' => 'No members besides the owner',
|
|
],
|
|
|
|
'remove_modal' => [
|
|
'title' => 'Remove member',
|
|
'description' => 'Are you sure you want to remove this member from the workspace? They will lose access to all workspace resources.',
|
|
'action' => 'Remove member',
|
|
],
|
|
|
|
'cancel_invite_modal' => [
|
|
'title' => 'Cancel invitation',
|
|
'description' => 'Are you sure you want to cancel this invitation?',
|
|
'action' => 'Cancel invitation',
|
|
],
|
|
|
|
'roles' => [
|
|
'owner' => 'Owner',
|
|
'admin' => 'Admin',
|
|
'member' => 'Member',
|
|
'viewer' => 'Viewer',
|
|
],
|
|
|
|
'flash' => [
|
|
'invite_sent' => 'Invite sent successfully!',
|
|
'invite_deleted' => 'Invite deleted.',
|
|
'member_removed' => 'Member removed successfully.',
|
|
'role_updated' => 'Member role updated.',
|
|
'wrong_email' => 'This invite is for a different email address.',
|
|
'already_member' => 'You are already a member of this workspace.',
|
|
'invite_accepted' => 'Welcome! You are now a member of the workspace.',
|
|
'invite_declined' => 'Invite declined.',
|
|
],
|
|
],
|
|
|
|
'account' => [
|
|
'tabs' => [
|
|
'account' => 'Account',
|
|
'usage' => 'Usage',
|
|
'billing' => 'Billing',
|
|
],
|
|
'title' => 'Account Settings',
|
|
'description' => 'Manage your account name and billing email',
|
|
'name' => 'Account Name',
|
|
'name_placeholder' => 'My Company',
|
|
'billing_email' => 'Billing Email',
|
|
'billing_email_placeholder' => 'billing@company.com',
|
|
'billing_email_hint' => 'This email will be used for invoices and billing communications from Stripe.',
|
|
'submit' => 'Save',
|
|
],
|
|
|
|
'flash' => [
|
|
'account_updated' => 'Account updated successfully!',
|
|
'profile_updated' => 'Profile updated successfully!',
|
|
'language_updated' => 'Language updated successfully!',
|
|
'password_updated' => 'Password updated successfully!',
|
|
'workspace_updated' => 'Settings updated successfully!',
|
|
'photo_updated' => 'Photo updated successfully!',
|
|
'photo_deleted' => 'Photo removed successfully!',
|
|
'logo_updated' => 'Logo uploaded successfully!',
|
|
'logo_deleted' => 'Logo removed successfully!',
|
|
'notifications_updated' => 'Notification preferences updated!',
|
|
],
|
|
|
|
'api_keys' => [
|
|
'title' => 'API Keys',
|
|
'page_title' => 'API Keys',
|
|
'heading' => 'API Keys',
|
|
'description' => 'Manage API keys for programmatic access to your workspace.',
|
|
'create' => 'Create API Key',
|
|
'copy' => 'Copy',
|
|
'new_token_message' => 'Your new API key has been created. Copy it now — you won\'t be able to see it again.',
|
|
'table' => [
|
|
'name' => 'Name',
|
|
'key' => 'Key',
|
|
'status' => 'Status',
|
|
'expires' => 'Expires',
|
|
'last_used' => 'Last Used',
|
|
'never' => 'Never',
|
|
],
|
|
'actions' => [
|
|
'copy_id' => 'Copy API Key ID',
|
|
'copy_id_success' => 'API Key ID copied to clipboard',
|
|
'delete' => 'Delete',
|
|
],
|
|
'empty' => [
|
|
'title' => 'No API keys yet',
|
|
'description' => 'Create an API key to access your workspace programmatically.',
|
|
],
|
|
'delete_modal' => [
|
|
'title' => 'Delete API key',
|
|
'description' => 'Are you sure you want to delete this API key? Any applications using this key will lose access immediately.',
|
|
'action' => 'Delete API key',
|
|
],
|
|
'create_dialog' => [
|
|
'title' => 'Create API Key',
|
|
'description' => 'Create a new API key for programmatic access to your workspace.',
|
|
'name' => 'Name',
|
|
'name_placeholder' => 'e.g. Production API Key',
|
|
'expires' => 'Expiration date (optional)',
|
|
'expires_placeholder' => 'No expiration',
|
|
'submit' => 'Create',
|
|
'cancel' => 'Cancel',
|
|
],
|
|
'flash' => [
|
|
'created' => 'API key created successfully!',
|
|
'deleted' => 'API key deleted successfully!',
|
|
],
|
|
],
|
|
];
|