feat: pivot to social media workflow app
Some checks failed
Backend CI/CD / build_and_deploy (push) Has been cancelled
Frontend CI/CD / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-04-24 12:58:35 -04:00
parent 0f4acc1b6d
commit df3e602015
349 changed files with 18685 additions and 16010 deletions

View File

@@ -33,9 +33,437 @@
"x": "X (Twitter)",
"youtube": "YouTube",
"website": "Website",
"common": {
"cancel": "Cancel",
"creating": "Creating..."
},
"workspaceSelector": {
"createAction": "Add workspace"
},
"workspaceCreate": {
"eyebrow": "Workspace",
"title": "Create a new workspace",
"description": "Set up a new workspace with its own slug, timezone, members, workflow, and connectors.",
"previewTitle": "Workspace URL",
"previewDescription": "The slug becomes the stable identifier used for the workspace.",
"formTitle": "Workspace details",
"formDescription": "Start with the core fields now. Members, workflow, and connectors can be configured right after creation.",
"createAction": "Create workspace",
"slugHint": "Workspace slug preview: {slug}",
"fields": {
"name": "Workspace name",
"namePlaceholder": "Northwind Studio",
"slug": "Workspace slug",
"slugPlaceholder": "northwind-studio",
"timeZone": "Time zone"
},
"errors": {
"required": "All workspace fields are required.",
"createFailed": "The workspace could not be created."
}
},
"nav": {
"brandCaption": "Approval workflow",
"workspace": "Workspace",
"notifications": "Notifications",
"dashboard": "Dashboard",
"overview": "Overview",
"workspacePlan": "Content",
"mediaLibrary": "Media Library",
"channels": "Channels",
"projects": "Campaigns",
"reviewQueue": "Review Queue",
"content": "Content",
"profile": "Profile",
"signIn": "Sign in",
"settings": "Settings",
"language": "Language",
"signOut": "Sign out",
"noWorkspace": "No workspace"
},
"notifications": {
"title": "Notifications",
"unread": "unread",
"loading": "Loading notifications...",
"empty": "No workflow notifications yet.",
"events": {
"approvalRequested": "Approval requested",
"approvalDecisionRecorded": "Approval decision recorded",
"commentCreated": "Comment added",
"commentResolved": "Comment resolved",
"contentCreated": "Content item created",
"revisionCreated": "Revision created",
"statusUpdated": "Status updated",
"assetLinked": "Asset linked",
"assetRevisionCreated": "Asset revision created"
}
},
"sidebar": {
"allClients": "All clients",
"allChannels": "All channels",
"allProjects": "All campaigns",
"allReviewItems": "Full review queue",
"noClients": "No clients yet.",
"noChannels": "No channels yet.",
"noProjects": "No campaigns yet.",
"noReviewItems": "No review items right now."
},
"settings": {
"eyebrow": "Settings",
"title": "Account settings",
"userInformation": "User information",
"workspaces": "Workspaces",
"integrations": "Integrations"
},
"dashboard": {
"eyebrow": "Workspace schedule",
"title": "Schedule",
"description": "See what is scheduled for a given day and review the posting agenda in order.",
"workspaceLabel": "Active workspace",
"loading": "Loading workspace data...",
"calendarKicker": "Daily agenda",
"executionKicker": "Next up",
"riskKicker": "Delivery risk",
"reviewKicker": "Review pulse",
"upcomingContent": "Upcoming content",
"deliveryRisks": "What can slip",
"overdueItems": "Overdue items",
"approvalBlockers": "Awaiting approval or revisions",
"unscheduledProjects": "Campaigns without scheduled content",
"reviewQueueSnapshot": "Review queue snapshot",
"emptyUpcoming": "No upcoming scheduled content.",
"emptyOverdue": "Nothing overdue right now.",
"emptyApproval": "No approval blockers at the moment.",
"emptyProjects": "Every campaign has at least one scheduled content item.",
"emptyReviewQueue": "No active review queue items.",
"previousDay": "Previous day",
"nextDay": "Next day",
"today": "Today",
"month": "Month",
"week": "Week",
"campaignDeadline": "Campaign deadline",
"emptyPeriod": "No scheduled items.",
"daySummary": "{content} content items · {projects} campaign deadlines",
"moreItems": "+{count} more",
"emptyDayAgenda": "No content is scheduled for this day.",
"projectProgress": "{scheduled} scheduled · {approved} approved",
"missingSchedule": "Needs content scheduled",
"noDueDate": "No due date",
"labels": {
"unassignedProject": "Unassigned campaign"
},
"readiness": {
"building": "In production",
"approval": "Awaiting approval",
"rework": "Needs revision",
"ready": "Ready to publish",
"published": "Published",
"blocked": "Blocked",
"archived": "Archived",
"scheduled": "Scheduled",
"missing": "No content scheduled"
},
"stats": {
"scheduledThisDay": "Scheduled this day",
"overdue": "Overdue",
"awaitingApproval": "Awaiting approval",
"readyToShip": "Ready to ship"
}
},
"overview": {
"eyebrow": "Portfolio overview",
"title": "Cross-workspace timeline",
"description": "See upcoming deliveries, risks, and activity across every workspace you can access.",
"loading": "Loading overview data...",
"workspacesKicker": "Access scope",
"workspaceRollup": "Workspace rollup",
"timelineKicker": "Upcoming",
"upcomingTitle": "Scheduled across workspaces",
"riskKicker": "Watch list",
"risksTitle": "Items already at risk",
"activityKicker": "Recent activity",
"activityTitle": "Latest workflow events",
"emptyUpcoming": "No upcoming scheduled items across your workspaces.",
"emptyRisks": "No cross-workspace delivery risks right now.",
"emptyActivity": "No recent workflow activity yet.",
"labels": {
"projects": "campaigns",
"upcoming": "upcoming",
"blocked": "blocked"
},
"stats": {
"workspaces": "Workspaces",
"projects": "Campaigns",
"upcoming": "Upcoming items",
"blockers": "At-risk items"
}
},
"clients": {
"eyebrow": "Client management",
"title": "Clients",
"description": "Client accounts, brand identity, and primary approval contacts.",
"newClient": "New client",
"createTitle": "Create client",
"loading": "Loading clients...",
"empty": "No clients are available for the active workspace.",
"noPrimaryContact": "No primary contact set",
"noPrimaryContactEmail": "No primary contact email set",
"errors": {
"nameRequired": "Client name is required.",
"createFailed": "The client could not be created."
},
"fields": {
"name": "Client name",
"portraitUrl": "Client logo or portrait URL",
"primaryContactName": "Primary contact name",
"primaryContactEmail": "Primary contact email",
"primaryContactPortraitUrl": "Primary contact portrait URL"
}
},
"projects": {
"eyebrow": "Campaign planning",
"title": "Campaigns",
"description": "Campaigns grouped inside the active workspace by status, date range, and planning notes.",
"newProject": "New campaign",
"createTitle": "Create campaign",
"loading": "Loading campaigns...",
"empty": "No campaigns are available for the active workspace.",
"unknownClient": "Unknown client",
"noDateRange": "No date range",
"errors": {
"required": "Campaign name and date range are required.",
"invalidDateRange": "The end date must be on or after the start date.",
"workspaceAccountRequired": "This workspace needs an operational account before campaigns can be created.",
"createFailed": "The campaign could not be created."
},
"fields": {
"client": "Client",
"selectClient": "Select a client",
"startDate": "Start date",
"endDate": "End date",
"name": "Campaign name",
"description": "Description",
"notes": "Notes"
}
},
"channels": {
"title": "Channels",
"description": "Add channels to the workspace.",
"createTitle": "Create channel",
"empty": "No channels are available for the active workspace yet.",
"emptyAction": "Add a channel for {network}",
"nextDue": "Next due",
"noScheduled": "Nothing scheduled",
"fields": {
"name": "Channel name",
"network": "Network"
},
"metrics": {
"scheduled": "Scheduled",
"ready": "Ready",
"blocked": "Blocked"
},
"errors": {
"createFailed": "The channel could not be created."
}
},
"reviewQueue": {
"eyebrow": "Review workflow",
"title": "Review queue",
"description": "Pending approvals, revisions, and change requests for the active workspace.",
"empty": "No review items are available for the active workspace."
},
"contentItems": {
"eyebrow": "Content workflow",
"title": "Content items",
"description": "Reviewable units with assets, copy, and approval status inside the active workspace.",
"newItem": "New content item",
"createTitle": "Create content item",
"loading": "Loading content items...",
"empty": "No content items are available for the active workspace.",
"noDueDate": "No due date",
"assetsHelper": "Google Drive assets are now linked from the content item detail page after creation.",
"errors": {
"required": "Title, campaign, message, and targets are required.",
"workspaceAccountRequired": "This workspace needs an operational account before content can be created.",
"createFailed": "The content item could not be created."
},
"fields": {
"title": "Title",
"client": "Client",
"selectClient": "Select a client",
"project": "Campaign",
"selectProject": "Select a campaign",
"dueDate": "Due date",
"publicationTargets": "Publication targets",
"publicationTargetsPlaceholder": "Instagram Reel, TikTok",
"publicationMessage": "Publication message",
"hashtags": "Hashtags",
"hashtagsPlaceholder": "#launch #brand #campaign",
"assets": "Assets"
}
},
"userSettings": {
"eyebrow": "User information",
"title": "Profile and identity",
"description": "Manage the portrait and account details shown inside the workspace.",
"updatePortrait": "Update portrait",
"accountDetails": "Account details",
"accountDetailsDescription": "Additional account editing fields can be added here next.",
"alias": "Alias",
"fullName": "Full name",
"email": "Email",
"noEmail": "No email set",
"cropperTitle": "Update user portrait",
"savePortrait": "Save portrait",
"choosePortrait": "Choose portrait"
},
"workspaceSettings": {
"eyebrow": "Settings",
"title": "Workspace settings",
"description": "Configure the current workspace across general details, members, workflow, and connectors.",
"currentWorkspace": "Current workspace",
"noWorkspaceSelected": "No workspace selected",
"activeWorkspace": "Active workspace",
"contextNote": "These settings apply to the current workspace only.",
"inviteTitle": "Invite workspace members",
"inviteDescription": "Invite clients, subcontractors, or teammates into the active workspace.",
"inviteEmpty": "No pending invites for this workspace yet.",
"sendInvite": "Send invite",
"reset": "Reset",
"errors": {
"required": "All workspace fields are required.",
"createFailed": "The workspace could not be created.",
"inviteRequired": "Email and role are required to invite a member.",
"inviteFailed": "The workspace invite could not be created."
},
"fields": {
"name": "Workspace name",
"slug": "Workspace slug",
"timeZone": "Time zone",
"memberEmail": "Member email",
"memberRole": "Role"
},
"roles": {
"administrator": "Administrator",
"manager": "Manager",
"client": "Client reviewer",
"provider": "Subcontractor",
"workspaceMember": "Workspace member"
},
"summary": {
"name": "Name",
"slug": "Slug",
"timeZone": "Time zone",
"created": "Created"
},
"tabs": {
"general": "General",
"members": "Members",
"workflow": "Workflow",
"connectors": "Connectors"
},
"members": {
"inviteTitle": "Invite",
"activeTitle": "Members",
"activeDescription": "See everyone who currently belongs to the active workspace.",
"activeEmpty": "No members found for this workspace.",
"pendingTitle": "Pending invitations",
"pendingDescription": "Track who has been invited into the active workspace."
},
"connectors": {
"title": "Connectors",
"description": "Manage workspace-level connectors that feed operational features like the media library.",
"openMediaLibrary": "Open media library",
"googleDrive": {
"title": "Google Drive",
"description": "This connector should power the workspace media sync for images, videos, and other shared files.",
"status": "Pending setup"
}
},
"general": {
"summaryTitle": "Workspace summary",
"summaryDescription": "Reference details for the workspace currently in context."
},
"approvals": {
"flowTitle": "Approval flow",
"flowDescription": "Personalize how content moves through internal review, client review, and publishing for this workspace.",
"previewTitle": "Flow preview",
"previewDescription": "This is the sequence the workspace will use based on the current configuration.",
"saved": "Approval flow saved for this workspace in this browser.",
"fields": {
"requireInternalReview": "Require internal review",
"internalApproversRequired": "Internal approvers required",
"requireClientReview": "Require client review",
"clientApproversRequired": "Client approvers required",
"defaultReviewerRole": "Default reviewer role",
"publishBehaviour": "After final approval"
},
"fieldHelp": {
"requireInternalReview": "Content must be approved internally before client review can begin.",
"requireClientReview": "Content must still pass through client approval before publication."
},
"publishBehaviour": {
"manual": "Mark ready to publish",
"auto": "Auto-advance to ready"
},
"steps": {
"internal": "Internal review",
"client": "Client review",
"publish": "Publishing handoff"
},
"stepDetail": {
"approverCount": "{count} approver(s) required",
"autoPublish": "Content moves to ready automatically after the final approval.",
"manualPublish": "Content stays in a manual ready-to-publish handoff after the final approval."
}
}
},
"integrations": {
"eyebrow": "Integrations",
"title": "Google Drive and API keys",
"description": "This is where workspace-level integrations and credential configuration should live.",
"statusLabel": "Status",
"pendingTitle": "Configuration UI pending",
"googleDrive": {
"title": "Google Drive",
"description": "Configure the workspace connection used for asset linking and revision intake.",
"nextStep": "Next step: add stored workspace integration settings and connect them to the asset-link flow."
},
"apiKeys": {
"title": "API keys",
"description": "Workspace-scoped secrets and external service credentials should be managed here.",
"nextStep": "Next step: add secure backend persistence and masked key management."
}
},
"mediaLibrary": {
"eyebrow": "Media library",
"title": "Workspace media",
"description": "Manage the shared image and video library that should sync with Google Drive for this workspace.",
"syncCard": {
"title": "Google Drive sync",
"description": "Use this area to connect the workspace drive, pull approved media in, and keep the library aligned with external folders."
},
"mediaTypesTitle": "Supported media",
"mediaTypesDescription": "The library should become the single place to browse visual assets before they are linked into content work.",
"mediaTypes": {
"images": "Images, graphics, and brand visuals",
"videos": "Videos, reels, and motion exports"
},
"workflowTitle": "Planned workflow",
"workflowDescription": "This page is the intended home for the Google Drive sync flow we discussed.",
"workflow": {
"connectDrive": "Connect the workspace Google Drive source.",
"syncAssets": "Sync image and video assets into the internal library.",
"organizeLibrary": "Review, tag, and reuse media from one workspace-level place."
},
"statusLabel": "Status",
"pendingTitle": "Management UI pending",
"pendingDescription": "The navigation and page entry point are in place. Next step is wiring actual Drive sync, listing, filters, and asset actions."
},
"errors": {
"unexpected": "An unexpected error occurred",
"imageLoad": "Error loading image",
"imageUpload": "Error uploading image"
}
}
}