text udpates ux

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-25 11:51:44 +00:00
parent d21b5b1363
commit e736697d6d
23 changed files with 199 additions and 126 deletions

View File

@@ -92,6 +92,7 @@ export default function SiteCard({
variant="outline" variant="outline"
size="md" size="md"
onClick={() => onSettings(site)} onClick={() => onSettings(site)}
title="Configure Site - Update connection details and publishing settings"
className="shadow-theme-xs inline-flex h-11 w-11 items-center justify-center rounded-lg border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-400" className="shadow-theme-xs inline-flex h-11 w-11 items-center justify-center rounded-lg border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-400"
> >
<svg <svg
@@ -121,9 +122,10 @@ export default function SiteCard({
variant="outline" variant="outline"
size="md" size="md"
onClick={() => onDetails(site)} onClick={() => onDetails(site)}
title="View Site Details - See all information about this website"
className="shadow-theme-xs inline-flex h-11 items-center justify-center rounded-lg border border-gray-300 px-4 py-3 text-sm font-medium text-gray-700 dark:border-gray-700 dark:text-gray-400" className="shadow-theme-xs inline-flex h-11 items-center justify-center rounded-lg border border-gray-300 px-4 py-3 text-sm font-medium text-gray-700 dark:border-gray-700 dark:text-gray-400"
> >
Details View Details
</Button> </Button>
</div> </div>
<Switch <Switch

View File

@@ -109,15 +109,18 @@ export default function PublishingRules({ rules, onChange }: PublishingRulesProp
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<div> <div>
<h3 className="text-lg font-semibold text-gray-900 dark:text-white"> <h3 className="text-lg font-semibold text-gray-900 dark:text-white">
Publishing Rules Advanced Publishing Rules
</h3> </h3>
<p className="text-sm text-gray-600 dark:text-gray-400 mt-1"> <p className="text-sm text-gray-600 dark:text-gray-400 mt-1">
Configure how and where content is published Set specific rules for different types of content
</p>
<p className="text-xs text-gray-500 dark:text-gray-400 mt-1">
Example: Publish blog posts to WordPress but guides to your main site
</p> </p>
</div> </div>
<Button onClick={handleAddRule} variant="primary" size="sm"> <Button onClick={handleAddRule} variant="primary" size="sm">
<PlusIcon className="w-4 h-4 mr-2" /> <PlusIcon className="w-4 h-4 mr-2" />
Add Rule + Add a Publishing Rule
</Button> </Button>
</div> </div>

View File

@@ -12,7 +12,7 @@ export const titleColumn = {
export const keywordColumn = { export const keywordColumn = {
key: 'keyword', key: 'keyword',
label: 'Keyword', label: 'Search Term',
sortable: true, sortable: true,
width: 'auto', width: 'auto',
}; };
@@ -27,7 +27,7 @@ export const statusColumn = {
export const volumeColumn = { export const volumeColumn = {
key: 'volume', key: 'volume',
label: 'Search Volume', label: 'Monthly Searches',
sortable: true, sortable: true,
numeric: true, numeric: true,
width: '100px', width: '100px',
@@ -35,7 +35,7 @@ export const volumeColumn = {
export const difficultyColumn = { export const difficultyColumn = {
key: 'difficulty', key: 'difficulty',
label: 'Difficulty', label: 'Competition Level',
sortable: true, sortable: true,
badge: true, badge: true,
width: '120px', width: '120px',
@@ -43,7 +43,7 @@ export const difficultyColumn = {
export const countryColumn = { export const countryColumn = {
key: 'country', key: 'country',
label: 'Country', label: 'Target Location',
sortable: true, sortable: true,
badge: true, badge: true,
width: '120px', width: '120px',
@@ -90,7 +90,7 @@ export const wordCountColumn = {
export const sectorColumn = { export const sectorColumn = {
key: 'sector_name', key: 'sector_name',
label: 'Category', label: 'Topic Area',
sortable: false, sortable: false,
width: '150px', width: '150px',
}; };

View File

@@ -84,7 +84,7 @@ const AppSidebar: React.FC = () => {
if (isModuleEnabled('thinker')) { if (isModuleEnabled('thinker')) {
setupItems.push({ setupItems.push({
icon: <BoltIcon />, icon: <BoltIcon />,
name: "Content Strategy", name: "AI Writer Setup",
path: "/thinker/prompts", // Default to prompts, submenus shown as in-page navigation path: "/thinker/prompts", // Default to prompts, submenus shown as in-page navigation
}); });
} }
@@ -105,7 +105,7 @@ const AppSidebar: React.FC = () => {
if (isModuleEnabled('writer')) { if (isModuleEnabled('writer')) {
workflowItems.push({ workflowItems.push({
icon: <TaskIcon />, icon: <TaskIcon />,
name: "Create Content", name: "Write Articles",
path: "/writer/tasks", // Default to tasks, submenus shown as in-page navigation path: "/writer/tasks", // Default to tasks, submenus shown as in-page navigation
}); });
} }
@@ -114,7 +114,7 @@ const AppSidebar: React.FC = () => {
if (isModuleEnabled('automation')) { if (isModuleEnabled('automation')) {
workflowItems.push({ workflowItems.push({
icon: <BoltIcon />, icon: <BoltIcon />,
name: "Automation", name: "Automate Everything",
path: "/automation", path: "/automation",
}); });
} }
@@ -158,7 +158,7 @@ const AppSidebar: React.FC = () => {
items: workflowItems, items: workflowItems,
}, },
{ {
label: "ACCOUNT", label: "MANAGE ACCOUNT",
items: [ items: [
{ {
icon: <UserCircleIcon />, icon: <UserCircleIcon />,
@@ -183,7 +183,7 @@ const AppSidebar: React.FC = () => {
], ],
}, },
{ {
label: "PREFERENCES", label: "CONFIGURATION",
items: [ items: [
{ {
icon: <UserCircleIcon />, icon: <UserCircleIcon />,
@@ -208,7 +208,7 @@ const AppSidebar: React.FC = () => {
], ],
}, },
{ {
label: "SUPPORT", label: "HELP & LEARNING",
items: [ items: [
{ {
icon: <DocsIcon />, icon: <DocsIcon />,

View File

@@ -37,13 +37,13 @@ import {
} from '../../icons'; } from '../../icons';
const STAGE_CONFIG = [ const STAGE_CONFIG = [
{ icon: ListIcon, color: 'from-blue-500 to-blue-600', textColor: 'text-blue-600', hoverColor: 'hover:border-blue-500', name: 'Keywords → Clusters' }, { icon: ListIcon, color: 'from-blue-500 to-blue-600', textColor: 'text-blue-600', hoverColor: 'hover:border-blue-500', name: 'Organize Keywords', description: 'Group related search terms into topic clusters' },
{ icon: GroupIcon, color: 'from-purple-500 to-purple-600', textColor: 'text-purple-600', hoverColor: 'hover:border-purple-500', name: 'Clusters → Ideas' }, { icon: GroupIcon, color: 'from-purple-500 to-purple-600', textColor: 'text-purple-600', hoverColor: 'hover:border-purple-500', name: 'Create Article Ideas', description: 'Generate article titles and outlines for each cluster' },
{ icon: CheckCircleIcon, color: 'from-indigo-500 to-indigo-600', textColor: 'text-indigo-600', hoverColor: 'hover:border-indigo-500', name: 'Ideas → Tasks' }, { icon: CheckCircleIcon, color: 'from-indigo-500 to-indigo-600', textColor: 'text-indigo-600', hoverColor: 'hover:border-indigo-500', name: 'Prepare Writing Jobs', description: 'Convert ideas into tasks for the AI writer' },
{ icon: PencilIcon, color: 'from-green-500 to-green-600', textColor: 'text-green-600', hoverColor: 'hover:border-green-500', name: 'Tasks → Content' }, { icon: PencilIcon, color: 'from-green-500 to-green-600', textColor: 'text-green-600', hoverColor: 'hover:border-green-500', name: 'Write Articles', description: 'AI generates full, complete articles' },
{ icon: FileIcon, color: 'from-amber-500 to-amber-600', textColor: 'text-amber-600', hoverColor: 'hover:border-amber-500', name: 'Content → Image Prompts' }, { icon: FileIcon, color: 'from-amber-500 to-amber-600', textColor: 'text-amber-600', hoverColor: 'hover:border-amber-500', name: 'Create Image Descriptions', description: 'Generate descriptions for AI to create images' },
{ icon: FileTextIcon, color: 'from-pink-500 to-pink-600', textColor: 'text-pink-600', hoverColor: 'hover:border-pink-500', name: 'Image Prompts → Images' }, { icon: FileTextIcon, color: 'from-pink-500 to-pink-600', textColor: 'text-pink-600', hoverColor: 'hover:border-pink-500', name: 'Generate Images', description: 'AI creates custom images for your articles' },
{ icon: PaperPlaneIcon, color: 'from-teal-500 to-teal-600', textColor: 'text-teal-600', hoverColor: 'hover:border-teal-500', name: 'Manual Review Gate' }, { icon: PaperPlaneIcon, color: 'from-teal-500 to-teal-600', textColor: 'text-teal-600', hoverColor: 'hover:border-teal-500', name: 'Review & Publish ⚠️', description: 'Review articles before they go live (manual approval needed)' },
]; ];
const AutomationPage: React.FC = () => { const AutomationPage: React.FC = () => {
@@ -389,7 +389,7 @@ const AutomationPage: React.FC = () => {
<BoltIcon className="text-white size-5" /> <BoltIcon className="text-white size-5" />
</div> </div>
<div> <div>
<h2 className="text-2xl font-bold text-gray-800 dark:text-white/90">Content Automation</h2> <h2 className="text-2xl font-bold text-gray-800 dark:text-white/90">Automate Everything</h2>
{activeSite && ( {activeSite && (
<p className="text-sm text-gray-500 dark:text-gray-400 mt-0.5"> <p className="text-sm text-gray-500 dark:text-gray-400 mt-0.5">
Site: <span className="font-medium text-brand-600 dark:text-brand-400">{activeSite.name}</span> Site: <span className="font-medium text-brand-600 dark:text-brand-400">{activeSite.name}</span>
@@ -411,7 +411,7 @@ const AutomationPage: React.FC = () => {
<div className="text-sm font-semibold text-slate-900 dark:text-white truncate"> <div className="text-sm font-semibold text-slate-900 dark:text-white truncate">
{currentRun?.status === 'running' && `Running - Stage ${currentRun.current_stage}/7`} {currentRun?.status === 'running' && `Running - Stage ${currentRun.current_stage}/7`}
{currentRun?.status === 'paused' && 'Paused'} {currentRun?.status === 'paused' && 'Paused'}
{!currentRun && totalPending > 0 && 'Ready to Run'} {!currentRun && totalPending > 0 && 'Ready to Go!'}
{!currentRun && totalPending === 0 && 'No Items Pending'} {!currentRun && totalPending === 0 && 'No Items Pending'}
</div> </div>
<div className="text-xs text-slate-600 dark:text-gray-400 truncate"> <div className="text-xs text-slate-600 dark:text-gray-400 truncate">
@@ -740,6 +740,9 @@ const AutomationPage: React.FC = () => {
{!isActive && !isComplete && stage.pending > 0 && <span className="text-xs px-2 py-0.5 bg-gray-400 text-white rounded-full">Ready</span>} {!isActive && !isComplete && stage.pending > 0 && <span className="text-xs px-2 py-0.5 bg-gray-400 text-white rounded-full">Ready</span>}
</div> </div>
<div className="text-xs font-medium text-gray-600 dark:text-gray-400">{stageConfig.name}</div> <div className="text-xs font-medium text-gray-600 dark:text-gray-400">{stageConfig.name}</div>
{stageConfig.description && (
<div className="text-xs text-gray-500 dark:text-gray-500 mt-1">{stageConfig.description}</div>
)}
</div> </div>
<div className={`size-8 rounded-lg bg-gradient-to-br ${stageConfig.color} flex items-center justify-center shadow-md flex-shrink-0`}> <div className={`size-8 rounded-lg bg-gradient-to-br ${stageConfig.color} flex items-center justify-center shadow-md flex-shrink-0`}>
<StageIcon className="size-4 text-white" /> <StageIcon className="size-4 text-white" />
@@ -835,6 +838,9 @@ const AutomationPage: React.FC = () => {
{!isActive && !isComplete && stage.pending > 0 && <span className="text-xs px-2 py-0.5 bg-gray-400 text-white rounded-full">Ready</span>} {!isActive && !isComplete && stage.pending > 0 && <span className="text-xs px-2 py-0.5 bg-gray-400 text-white rounded-full">Ready</span>}
</div> </div>
<div className="text-xs font-medium text-gray-600 dark:text-gray-400">{stageConfig.name}</div> <div className="text-xs font-medium text-gray-600 dark:text-gray-400">{stageConfig.name}</div>
{stageConfig.description && (
<div className="text-xs text-gray-500 dark:text-gray-500 mt-1">{stageConfig.description}</div>
)}
</div> </div>
<div className={`size-8 rounded-lg bg-gradient-to-br ${stageConfig.color} flex items-center justify-center shadow-md flex-shrink-0`}> <div className={`size-8 rounded-lg bg-gradient-to-br ${stageConfig.color} flex items-center justify-center shadow-md flex-shrink-0`}>
<StageIcon className="size-4 text-white" /> <StageIcon className="size-4 text-white" />

View File

@@ -595,7 +595,7 @@ export default function Home() {
<h2 className="text-2xl font-bold text-gray-800 dark:text-white/90">Your Content Creation Dashboard</h2> <h2 className="text-2xl font-bold text-gray-800 dark:text-white/90">Your Content Creation Dashboard</h2>
{lastUpdated && ( {lastUpdated && (
<p className="text-sm text-gray-500 dark:text-gray-400 mt-1"> <p className="text-sm text-gray-500 dark:text-gray-400 mt-1">
Last updated: {lastUpdated.toLocaleTimeString()} Last checked: {lastUpdated.toLocaleTimeString()}
</p> </p>
)} )}
</div> </div>
@@ -626,9 +626,12 @@ export default function Home() {
<h1 className="text-3xl md:text-4xl font-bold mb-2"> <h1 className="text-3xl md:text-4xl font-bold mb-2">
AI-Powered Content Creation Workflow AI-Powered Content Creation Workflow
</h1> </h1>
<p className="text-lg text-white/90"> <p className="text-lg text-white/90 mb-1">
Transform keywords into published content with intelligent automation. Transform keywords into published content with intelligent automation.
</p> </p>
<p className="text-sm text-white/80">
Your complete toolkit for finding topics, creating content, and publishing it to your site - all automated
</p>
</div> </div>
{/* Add Site Button and Site Count in Single Row - Right Side */} {/* Add Site Button and Site Count in Single Row - Right Side */}
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
@@ -636,7 +639,7 @@ export default function Home() {
<div className="text-right"> <div className="text-right">
{sites.length > 1 ? ( {sites.length > 1 ? (
<div className="text-3xl font-bold text-white"> <div className="text-3xl font-bold text-white">
{sites.length}/{maxSites || '∞'} Sites {sites.length} of {maxSites || '∞'} Sites Active
</div> </div>
) : ( ) : (
<div className="text-xl font-semibold text-white/90"> <div className="text-xl font-semibold text-white/90">
@@ -655,7 +658,7 @@ export default function Home() {
startIcon={<PlusIcon className="w-6 h-6 fill-current" />} startIcon={<PlusIcon className="w-6 h-6 fill-current" />}
className="!bg-white !text-brand-600 hover:!bg-gray-50 font-bold text-base px-8 py-4 shadow-2xl hover:shadow-[0_25px_50px_-12px_rgba(0,0,0,0.4)] hover:scale-105 active:scale-100 transition-all duration-200" className="!bg-white !text-brand-600 hover:!bg-gray-50 font-bold text-base px-8 py-4 shadow-2xl hover:shadow-[0_25px_50px_-12px_rgba(0,0,0,0.4)] hover:scale-105 active:scale-100 transition-all duration-200"
> >
Add Site + Add Another Website
</Button> </Button>
)} )}
{!canAddMoreSites && sites.length > 0 && maxSites > 0 && ( {!canAddMoreSites && sites.length > 0 && maxSites > 0 && (
@@ -696,6 +699,9 @@ export default function Home() {
color="primary" color="primary"
className="h-4" className="h-4"
/> />
<p className="text-xs text-gray-500 dark:text-gray-400 mt-2">
(This shows your progress from keywords through to published content)
</p>
</div> </div>
{/* Icon-based Progress Flow */} {/* Icon-based Progress Flow */}

View File

@@ -155,7 +155,7 @@ export default function Help() {
<Card className="p-6 mb-8 bg-gradient-to-r from-brand-50 to-purple-50 dark:from-brand-900/10 dark:to-purple-900/10 border-brand-200 dark:border-brand-800"> <Card className="p-6 mb-8 bg-gradient-to-r from-brand-50 to-purple-50 dark:from-brand-900/10 dark:to-purple-900/10 border-brand-200 dark:border-brand-800">
<h2 className="text-xl font-bold text-gray-900 dark:text-white mb-4 flex items-center gap-2"> <h2 className="text-xl font-bold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
<ListIcon className="size-5 text-brand-600 dark:text-brand-400" /> <ListIcon className="size-5 text-brand-600 dark:text-brand-400" />
Table of Contents What Do You Want to Learn?
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2">
{tableOfContents.map((item) => ( {tableOfContents.map((item) => (
@@ -178,14 +178,14 @@ export default function Help() {
<div ref={(el) => (sectionRefs.current["getting-started"] = el)} className="mb-12 scroll-mt-24"> <div ref={(el) => (sectionRefs.current["getting-started"] = el)} className="mb-12 scroll-mt-24">
<h2 className="text-3xl font-bold text-gray-900 dark:text-white mb-6 flex items-center gap-3"> <h2 className="text-3xl font-bold text-gray-900 dark:text-white mb-6 flex items-center gap-3">
<BoltIcon className="size-8 text-brand-600 dark:text-brand-400" /> <BoltIcon className="size-8 text-brand-600 dark:text-brand-400" />
Getting Started I'm New - Help Me Get Started!
</h2> </h2>
<Accordion> <Accordion>
<AccordionItem title="Quick Start Guide" defaultOpen> <AccordionItem title="Quick Start Guide" defaultOpen>
<div className="space-y-4"> <div className="space-y-4">
<p className="text-gray-700 dark:text-gray-300"> <p className="text-gray-700 dark:text-gray-300">
Welcome to IGNY8! Follow these steps to get started with content creation: Let's Get You Creating Content! Follow these simple steps:
</p> </p>
<div className="space-y-3"> <div className="space-y-3">
@@ -194,9 +194,9 @@ export default function Help() {
1 1
</div> </div>
<div className="flex-1"> <div className="flex-1">
<h4 className="font-semibold text-gray-900 dark:text-white mb-1">Set Up Your Site</h4> <h4 className="font-semibold text-gray-900 dark:text-white mb-1">Step 1: Connect Your Website</h4>
<p className="text-gray-600 dark:text-gray-400 text-sm"> <p className="text-gray-600 dark:text-gray-400 text-sm">
Go to Settings &gt; Sites and add your WordPress site. Configure the connection details and verify the integration. Tell IGNY8 which website you want to create content for. Go to Settings &gt; Sites and add your WordPress site.
</p> </p>
</div> </div>
</div> </div>
@@ -206,9 +206,9 @@ export default function Help() {
2 2
</div> </div>
<div className="flex-1"> <div className="flex-1">
<h4 className="font-semibold text-gray-900 dark:text-white mb-1">Discover Keywords</h4> <h4 className="font-semibold text-gray-900 dark:text-white mb-1">Step 2: Find Search Terms to Target</h4>
<p className="text-gray-600 dark:text-gray-400 text-sm"> <p className="text-gray-600 dark:text-gray-400 text-sm">
Navigate to Planner &gt; Keyword Opportunities. Browse the global keyword database and add relevant keywords to your workflow. Search for keywords people are looking for in your topic area. Navigate to Planner &gt; Keyword Opportunities and add relevant keywords.
</p> </p>
</div> </div>
</div> </div>
@@ -218,9 +218,9 @@ export default function Help() {
3 3
</div> </div>
<div className="flex-1"> <div className="flex-1">
<h4 className="font-semibold text-gray-900 dark:text-white mb-1">Organize Keywords</h4> <h4 className="font-semibold text-gray-900 dark:text-white mb-1">Step 3: Organize Keywords by Topic</h4>
<p className="text-gray-600 dark:text-gray-400 text-sm"> <p className="text-gray-600 dark:text-gray-400 text-sm">
Go to Planner &gt; Keywords and use Auto Cluster to group related keywords. This helps create comprehensive content. Group related keywords together. Go to Planner &gt; Keywords and use Auto Cluster to organize them by theme.
</p> </p>
</div> </div>
</div> </div>
@@ -230,9 +230,9 @@ export default function Help() {
4 4
</div> </div>
<div className="flex-1"> <div className="flex-1">
<h4 className="font-semibold text-gray-900 dark:text-white mb-1">Generate Ideas</h4> <h4 className="font-semibold text-gray-900 dark:text-white mb-1">Step 4: Create Article Outlines</h4>
<p className="text-gray-600 dark:text-gray-400 text-sm"> <p className="text-gray-600 dark:text-gray-400 text-sm">
Select clusters in Planner &gt; Clusters and click Generate Ideas. AI will create content ideas based on your keywords. Let AI generate article ideas for each topic. Select clusters in Planner &gt; Clusters and click Generate Ideas.
</p> </p>
</div> </div>
</div> </div>
@@ -242,9 +242,9 @@ export default function Help() {
5 5
</div> </div>
<div className="flex-1"> <div className="flex-1">
<h4 className="font-semibold text-gray-900 dark:text-white mb-1">Create Content</h4> <h4 className="font-semibold text-gray-900 dark:text-white mb-1">Step 5: Write Your Articles</h4>
<p className="text-gray-600 dark:text-gray-400 text-sm"> <p className="text-gray-600 dark:text-gray-400 text-sm">
Ideas automatically become tasks. Go to Writer &gt; Tasks, select tasks, and generate content. Review and edit as needed. Turn ideas into full articles. Go to Writer &gt; Tasks, select tasks, and generate content. Review and publish when ready.
</p> </p>
</div> </div>
</div> </div>

View File

@@ -444,8 +444,8 @@ export default function Clusters() {
// Planner navigation tabs // Planner navigation tabs
const plannerTabs = [ const plannerTabs = [
{ label: 'Keywords', path: '/planner/keywords', icon: <ListIcon /> }, { label: 'Keywords (individual terms)', path: '/planner/keywords', icon: <ListIcon /> },
{ label: 'Clusters', path: '/planner/clusters', icon: <GroupIcon /> }, { label: 'Topics (keyword groups)', path: '/planner/clusters', icon: <GroupIcon /> },
{ label: 'Ideas', path: '/planner/ideas', icon: <BoltIcon /> }, { label: 'Ideas', path: '/planner/ideas', icon: <BoltIcon /> },
]; ];

View File

@@ -350,8 +350,8 @@ export default function Ideas() {
// Planner navigation tabs // Planner navigation tabs
const plannerTabs = [ const plannerTabs = [
{ label: 'Keywords', path: '/planner/keywords', icon: <ListIcon /> }, { label: 'Keywords (individual terms)', path: '/planner/keywords', icon: <ListIcon /> },
{ label: 'Clusters', path: '/planner/clusters', icon: <GroupIcon /> }, { label: 'Topics (keyword groups)', path: '/planner/clusters', icon: <GroupIcon /> },
{ label: 'Ideas', path: '/planner/ideas', icon: <BoltIcon /> }, { label: 'Ideas', path: '/planner/ideas', icon: <BoltIcon /> },
]; ];

View File

@@ -569,7 +569,7 @@ export default function KeywordOpportunities() {
bulkActions: !activeSector ? [] : [ bulkActions: !activeSector ? [] : [
{ {
key: 'add_selected_to_workflow', key: 'add_selected_to_workflow',
label: 'Add Selected to Workflow', label: 'Add Selected Keywords',
variant: 'primary' as const, variant: 'primary' as const,
}, },
], ],
@@ -579,7 +579,7 @@ export default function KeywordOpportunities() {
return ( return (
<> <>
<PageHeader <PageHeader
title="Discover Keywords" title="Find & Add Keywords to Your Site"
badge={{ icon: <BoltIcon />, color: 'orange' }} badge={{ icon: <BoltIcon />, color: 'orange' }}
/> />
@@ -595,10 +595,10 @@ export default function KeywordOpportunities() {
</div> </div>
<div className="flex-1"> <div className="flex-1">
<h3 className="text-sm font-medium text-blue-900 dark:text-blue-200"> <h3 className="text-sm font-medium text-blue-900 dark:text-blue-200">
Select a Sector to Add Keywords Choose a Topic Area First
</h3> </h3>
<p className="mt-1 text-sm text-blue-700 dark:text-blue-300"> <p className="mt-1 text-sm text-blue-700 dark:text-blue-300">
Please select a sector from the dropdown above to enable adding keywords to your workflow. Keywords must be added to a specific sector. Pick a topic area first, then add keywords - You need to choose what you're writing about before adding search terms to target
</p> </p>
</div> </div>
</div> </div>

View File

@@ -611,8 +611,8 @@ export default function Keywords() {
// Planner navigation tabs // Planner navigation tabs
const plannerTabs = [ const plannerTabs = [
{ label: 'Keywords', path: '/planner/keywords', icon: <ListIcon /> }, { label: 'Keywords (individual terms)', path: '/planner/keywords', icon: <ListIcon /> },
{ label: 'Clusters', path: '/planner/clusters', icon: <GroupIcon /> }, { label: 'Topics (keyword groups)', path: '/planner/clusters', icon: <GroupIcon /> },
{ label: 'Ideas', path: '/planner/ideas', icon: <BoltIcon /> }, { label: 'Ideas', path: '/planner/ideas', icon: <BoltIcon /> },
]; ];

View File

@@ -1,21 +1,68 @@
import PageMeta from "../../components/common/PageMeta"; import PageMeta from "../../components/common/PageMeta";
import ComponentCard from "../../components/common/ComponentCard"; import ComponentCard from "../../components/common/ComponentCard";
import { Card } from "../../components/ui/card";
import { Download, Upload, Database, FileArchive, CheckCircle } from 'lucide-react';
export default function ImportExport() { export default function ImportExport() {
return ( return (
<> <>
<PageMeta title="Import/Export - IGNY8" description="Data management" /> <PageMeta title="Import/Export - IGNY8" description="Data management" />
<ComponentCard title="Coming Soon" desc="Data management"> <Card className="p-8">
<div className="text-center py-8"> <div className="text-center py-8 max-w-3xl mx-auto">
<p className="text-gray-600 dark:text-gray-400"> <div className="mb-6 flex justify-center">
Import/Export - Coming Soon <div className="p-4 bg-brand-100 dark:bg-brand-900/30 rounded-full">
</p> <Database className="w-12 h-12 text-brand-600 dark:text-brand-400" />
<p className="text-sm text-gray-500 dark:text-gray-400 mt-2"> </div>
Import and export data, manage backups, and transfer content </div>
<h1 className="text-3xl font-bold text-gray-900 dark:text-white mb-3">
Coming Soon: Manage Your Data
</h1>
<p className="text-lg text-gray-600 dark:text-gray-400 mb-8">
Import and Export Your Content - Backup your keywords, articles, and settings. Move your content to other platforms. Download everything safely.
</p> </p>
<div className="bg-gradient-to-br from-brand-50 to-purple-50 dark:from-brand-900/20 dark:to-purple-900/20 rounded-lg p-6 border border-brand-200 dark:border-brand-800">
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-4">
What will be available:
</h2>
<div className="space-y-3 text-left">
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-success-600 dark:text-success-400 flex-shrink-0 mt-0.5" />
<div className="text-gray-700 dark:text-gray-300">
<strong>Export your keywords as a file</strong> (backup or share)
</div>
</div>
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-success-600 dark:text-success-400 flex-shrink-0 mt-0.5" />
<div className="text-gray-700 dark:text-gray-300">
<strong>Export all your articles</strong> in different formats
</div>
</div>
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-success-600 dark:text-success-400 flex-shrink-0 mt-0.5" />
<div className="text-gray-700 dark:text-gray-300">
<strong>Import keywords from other sources</strong>
</div>
</div>
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-success-600 dark:text-success-400 flex-shrink-0 mt-0.5" />
<div className="text-gray-700 dark:text-gray-300">
<strong>Backup and restore</strong> your entire account
</div>
</div>
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-success-600 dark:text-success-400 flex-shrink-0 mt-0.5" />
<div className="text-gray-700 dark:text-gray-300">
<strong>Download your settings</strong> and configurations
</div>
</div>
</div>
</div>
</div> </div>
</ComponentCard> </Card>
</> </>
); );
} }

View File

@@ -68,9 +68,9 @@ export default function Publishing() {
}; };
const DESTINATIONS = [ const DESTINATIONS = [
{ value: 'sites', label: 'IGNY8 Sites' }, { value: 'sites', label: 'Publish to My Sites (using IGNY8)' },
{ value: 'wordpress', label: 'WordPress' }, { value: 'wordpress', label: 'Publish to WordPress (your self-hosted WordPress site)' },
{ value: 'shopify', label: 'Shopify' }, { value: 'shopify', label: 'Publish to Shopify (your Shopify store)' },
]; ];
if (loading) { if (loading) {
@@ -90,10 +90,10 @@ export default function Publishing() {
<div className="mb-6"> <div className="mb-6">
<h1 className="text-2xl font-bold text-gray-900 dark:text-white"> <h1 className="text-2xl font-bold text-gray-900 dark:text-white">
Publishing Settings Where to Publish
</h1> </h1>
<p className="text-gray-600 dark:text-gray-400 mt-1"> <p className="text-gray-600 dark:text-gray-400 mt-1">
Configure default publishing destinations and rules Set up automatic publishing - Tell us where your content should go
</p> </p>
</div> </div>
@@ -103,10 +103,13 @@ export default function Publishing() {
<div className="space-y-4"> <div className="space-y-4">
<div> <div>
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-1"> <h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-1">
Default Publishing Destinations Where Should Articles Go?
</h2> </h2>
<p className="text-sm text-gray-600 dark:text-gray-400"> <p className="text-sm text-gray-600 dark:text-gray-400">
Select default platforms where content will be published Choose which platforms get your articles - You can pick multiple
</p>
<p className="text-sm text-gray-600 dark:text-gray-400 mt-2">
When you publish an article, it will go to all the platforms you check here
</p> </p>
</div> </div>
@@ -129,10 +132,10 @@ export default function Publishing() {
<div className="space-y-4"> <div className="space-y-4">
<div> <div>
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-1"> <h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-1">
Auto-Publish Settings Automatic Publishing
</h2> </h2>
<p className="text-sm text-gray-600 dark:text-gray-400"> <p className="text-sm text-gray-600 dark:text-gray-400">
Automatically publish content when it's ready Publish articles without asking me
</p> </p>
</div> </div>
@@ -140,15 +143,14 @@ export default function Publishing() {
<Checkbox <Checkbox
checked={autoPublishEnabled} checked={autoPublishEnabled}
onChange={(e) => setAutoPublishEnabled(e.target.checked)} onChange={(e) => setAutoPublishEnabled(e.target.checked)}
label="Enable auto-publish" label="Automatically publish articles when they're finished and reviewed"
/> />
</div> </div>
{autoPublishEnabled && ( {autoPublishEnabled && (
<div className="mt-4 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg"> <div className="mt-4 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
<p className="text-sm text-blue-800 dark:text-blue-200"> <p className="text-sm text-blue-800 dark:text-blue-200">
When enabled, content will be automatically published to selected destinations When you turn this on, articles will publish to your site right away. You can still review them first if you want
when generation is complete.
</p> </p>
</div> </div>
)} )}
@@ -160,10 +162,10 @@ export default function Publishing() {
<div className="space-y-4"> <div className="space-y-4">
<div> <div>
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-1"> <h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-1">
Auto-Sync Settings Keep Everything Updated
</h2> </h2>
<p className="text-sm text-gray-600 dark:text-gray-400"> <p className="text-sm text-gray-600 dark:text-gray-400">
Configure automatic content synchronization with publishing platforms Automatically sync articles between platforms
</p> </p>
</div> </div>
@@ -171,7 +173,7 @@ export default function Publishing() {
<Checkbox <Checkbox
checked={autoSyncEnabled} checked={autoSyncEnabled}
onChange={(e) => setAutoSyncEnabled(e.target.checked)} onChange={(e) => setAutoSyncEnabled(e.target.checked)}
label="Enable auto-sync" label="Automatically update articles on all my platforms if I make changes"
/> />
</div> </div>

View File

@@ -386,26 +386,26 @@ export default function Sites() {
return ( return (
<> <>
<PageMeta title="Sites Management" description="Manage your sites and configure industries and sectors" /> <PageMeta title="Your Websites" description="Manage all your websites here - Add new sites, configure settings, and track content for each one" />
<div className="space-y-8"> <div className="space-y-8">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h1 className="text-2xl font-bold text-gray-900 dark:text-white">Sites Management</h1> <h1 className="text-2xl font-bold text-gray-900 dark:text-white">Your Websites</h1>
<p className="mt-1 text-sm text-gray-500 dark:text-gray-400"> <p className="mt-1 text-sm text-gray-500 dark:text-gray-400">
Manage your sites, configure industries, and select sectors. Multiple sites can be active simultaneously. Manage all your websites here - Add new sites, configure settings, and track content for each one
</p> </p>
</div> </div>
<Button onClick={handleCreateSite} variant="primary"> <Button onClick={handleCreateSite} variant="primary">
+ Add Site + Add Another Website
</Button> </Button>
</div> </div>
{/* Info Alert */} {/* Info Alert */}
<Alert <Alert
variant="info" variant="info"
title="Sites Configuration" title="About Your Sites"
message="Each site can have up to 5 sectors selected from 15 major industries. Keywords and clusters are automatically associated with sectors. Multiple sites can be active simultaneously." message="Active sites can receive new content. Inactive sites are paused. Each site can have up to 5 sectors selected from 15 major industries."
/> />
{/* Sites Grid */} {/* Sites Grid */}

View File

@@ -280,10 +280,10 @@ export default function Content() {
// Writer navigation tabs // Writer navigation tabs
const writerTabs = [ const writerTabs = [
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> }, { label: 'Ready to Write', path: '/writer/tasks', icon: <TaskIcon /> },
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> }, { label: 'Finished Drafts', path: '/writer/content', icon: <FileIcon /> },
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> }, { label: 'Article Images', path: '/writer/images', icon: <ImageIcon /> },
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> }, { label: 'Review Before Publishing', path: '/writer/review', icon: <CheckCircleIcon /> },
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> }, { label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
]; ];

View File

@@ -449,10 +449,10 @@ export default function Images() {
// Writer navigation tabs // Writer navigation tabs
const writerTabs = [ const writerTabs = [
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> }, { label: 'Ready to Write', path: '/writer/tasks', icon: <TaskIcon /> },
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> }, { label: 'Finished Drafts', path: '/writer/content', icon: <FileIcon /> },
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> }, { label: 'Article Images', path: '/writer/images', icon: <ImageIcon /> },
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> }, { label: 'Review Before Publishing', path: '/writer/review', icon: <CheckCircleIcon /> },
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> }, { label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
]; ];

View File

@@ -307,10 +307,10 @@ export default function Published() {
// Writer navigation tabs // Writer navigation tabs
const writerTabs = [ const writerTabs = [
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> }, { label: 'Ready to Write', path: '/writer/tasks', icon: <TaskIcon /> },
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> }, { label: 'Finished Drafts', path: '/writer/content', icon: <FileIcon /> },
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> }, { label: 'Article Images', path: '/writer/images', icon: <ImageIcon /> },
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> }, { label: 'Review Before Publishing', path: '/writer/review', icon: <CheckCircleIcon /> },
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> }, { label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
]; ];

View File

@@ -346,10 +346,10 @@ export default function Review() {
// Writer navigation tabs // Writer navigation tabs
const writerTabs = [ const writerTabs = [
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> }, { label: 'Ready to Write', path: '/writer/tasks', icon: <TaskIcon /> },
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> }, { label: 'Finished Drafts', path: '/writer/content', icon: <FileIcon /> },
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> }, { label: 'Article Images', path: '/writer/images', icon: <ImageIcon /> },
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> }, { label: 'Review Before Publishing', path: '/writer/review', icon: <CheckCircleIcon /> },
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> }, { label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
]; ];

View File

@@ -424,10 +424,10 @@ export default function Tasks() {
// Writer navigation tabs // Writer navigation tabs
const writerTabs = [ const writerTabs = [
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> }, { label: 'Ready to Write', path: '/writer/tasks', icon: <TaskIcon /> },
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> }, { label: 'Finished Drafts', path: '/writer/content', icon: <FileIcon /> },
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> }, { label: 'Article Images', path: '/writer/images', icon: <ImageIcon /> },
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> }, { label: 'Review Before Publishing', path: '/writer/review', icon: <CheckCircleIcon /> },
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> }, { label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
]; ];

View File

@@ -353,9 +353,9 @@ export default function PlansAndBillingPage() {
return ( return (
<div className="p-6"> <div className="p-6">
<div className="mb-6"> <div className="mb-6">
<h1 className="text-2xl font-bold text-gray-900 dark:text-white">Plans & Billing</h1> <h1 className="text-2xl font-bold text-gray-900 dark:text-white">Your Subscription</h1>
<p className="text-gray-600 dark:text-gray-400 mt-1"> <p className="text-gray-600 dark:text-gray-400 mt-1">
Manage your subscription, credits, and billing information Manage your plan and payments - View what's included, upgrade, or buy more credits
</p> </p>
</div> </div>

View File

@@ -96,12 +96,12 @@ export default function TeamManagementPage() {
return ( return (
<div className="p-6"> <div className="p-6">
<PageMeta title="Team Management" description="Manage your team members" /> <PageMeta title="Your Team" description="Manage who can access your account - Add team members and control what they can do" />
<div className="mb-6"> <div className="mb-6">
<h1 className="text-2xl font-bold text-gray-900 dark:text-white">Team Management</h1> <h1 className="text-2xl font-bold text-gray-900 dark:text-white">Your Team</h1>
<p className="text-gray-600 dark:text-gray-400 mt-1"> <p className="text-gray-600 dark:text-gray-400 mt-1">
Manage team members, invitations, and access control Manage who can access your account - Add team members and control what they can do
</p> </p>
</div> </div>
@@ -138,8 +138,9 @@ export default function TeamManagementPage() {
size="md" size="md"
startIcon={<UserPlus className="w-4 h-4" />} startIcon={<UserPlus className="w-4 h-4" />}
onClick={() => setShowInviteModal(true)} onClick={() => setShowInviteModal(true)}
title="Send an invitation to someone to join your team"
> >
Invite Team Member + Invite Someone
</Button> </Button>
</div> </div>

View File

@@ -59,9 +59,9 @@ export default function UsageAnalyticsPage() {
} }
const tabs = [ const tabs = [
{ id: 'limits' as TabType, label: 'Plan Limits & Usage', icon: <BarChart3 className="w-4 h-4" /> }, { id: 'limits' as TabType, label: 'Your Limits & Usage (What you\'re using)', icon: <BarChart3 className="w-4 h-4" /> },
{ id: 'activity' as TabType, label: 'Credit Activity', icon: <TrendingUp className="w-4 h-4" /> }, { id: 'activity' as TabType, label: 'Credit History (Where credits go)', icon: <TrendingUp className="w-4 h-4" /> },
{ id: 'api' as TabType, label: 'API Usage', icon: <Activity className="w-4 h-4" /> }, { id: 'api' as TabType, label: 'API Activity (Technical requests)', icon: <Activity className="w-4 h-4" /> },
]; ];
return ( return (
@@ -70,9 +70,9 @@ export default function UsageAnalyticsPage() {
{/* Page Header */} {/* Page Header */}
<div className="mb-6"> <div className="mb-6">
<h1 className="text-2xl font-bold text-gray-900 dark:text-white">Usage & Analytics</h1> <h1 className="text-2xl font-bold text-gray-900 dark:text-white">Your Usage</h1>
<p className="text-gray-600 dark:text-gray-400 mt-1"> <p className="text-gray-600 dark:text-gray-400 mt-1">
Track plan limits, credit consumption, and API usage patterns See how much you're using - Track your credits, content limits, and API activity
</p> </p>
</div> </div>
@@ -85,10 +85,11 @@ export default function UsageAnalyticsPage() {
<Zap className="w-5 h-5 text-white" /> <Zap className="w-5 h-5 text-white" />
</div> </div>
<div> <div>
<div className="text-xs text-brand-700 dark:text-brand-300">Current Balance</div> <div className="text-xs text-brand-700 dark:text-brand-300">Credits Left</div>
<div className="text-2xl font-bold text-brand-600 dark:text-brand-400"> <div className="text-2xl font-bold text-brand-600 dark:text-brand-400">
{creditBalance.credits.toLocaleString()} {creditBalance.credits.toLocaleString()}
</div> </div>
<div className="text-xs text-brand-600 dark:text-brand-400 mt-1">available</div>
</div> </div>
</div> </div>
</Card> </Card>
@@ -99,10 +100,11 @@ export default function UsageAnalyticsPage() {
<TrendingUp className="w-5 h-5 text-white" /> <TrendingUp className="w-5 h-5 text-white" />
</div> </div>
<div> <div>
<div className="text-xs text-purple-700 dark:text-purple-300">Used This Month</div> <div className="text-xs text-purple-700 dark:text-purple-300">Credits Used This Month</div>
<div className="text-2xl font-bold text-purple-600 dark:text-purple-400"> <div className="text-2xl font-bold text-purple-600 dark:text-purple-400">
{creditBalance.credits_used_this_month.toLocaleString()} {creditBalance.credits_used_this_month.toLocaleString()}
</div> </div>
<div className="text-xs text-purple-600 dark:text-purple-400 mt-1">spent so far</div>
</div> </div>
</div> </div>
</Card> </Card>
@@ -113,10 +115,11 @@ export default function UsageAnalyticsPage() {
<BarChart3 className="w-5 h-5 text-white" /> <BarChart3 className="w-5 h-5 text-white" />
</div> </div>
<div> <div>
<div className="text-xs text-success-700 dark:text-success-300">Monthly Allocation</div> <div className="text-xs text-success-700 dark:text-success-300">Your Monthly Limit</div>
<div className="text-2xl font-bold text-success-600 dark:text-success-400"> <div className="text-2xl font-bold text-success-600 dark:text-success-400">
{creditBalance.plan_credits_per_month.toLocaleString()} {creditBalance.plan_credits_per_month.toLocaleString()}
</div> </div>
<div className="text-xs text-success-600 dark:text-success-400 mt-1">total each month</div>
</div> </div>
</div> </div>
</Card> </Card>

View File

@@ -32,10 +32,10 @@ export default function ProfileSettingsPage() {
<div> <div>
<h1 className="text-2xl font-bold text-gray-900 dark:text-white flex items-center gap-2"> <h1 className="text-2xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
<User className="w-6 h-6" /> <User className="w-6 h-6" />
Profile Settings Your Profile
</h1> </h1>
<p className="text-gray-600 dark:text-gray-400 mt-1"> <p className="text-gray-600 dark:text-gray-400 mt-1">
Manage your personal information and preferences Update your personal settings - Your name, preferences, and notification choices
</p> </p>
</div> </div>
<button <button
@@ -44,13 +44,13 @@ export default function ProfileSettingsPage() {
className="flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50" className="flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50"
> >
{saving ? <Loader2 className="w-4 h-4 animate-spin" /> : <Save className="w-4 h-4" />} {saving ? <Loader2 className="w-4 h-4 animate-spin" /> : <Save className="w-4 h-4" />}
{saving ? 'Saving...' : 'Save Changes'} {saving ? 'Saving...' : 'Save My Settings'}
</button> </button>
</div> </div>
<div className="space-y-6"> <div className="space-y-6">
<Card className="p-6"> <Card className="p-6">
<h2 className="text-lg font-semibold mb-4">Personal Information</h2> <h2 className="text-lg font-semibold mb-4">About You</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div> <div>
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"> <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
@@ -87,7 +87,7 @@ export default function ProfileSettingsPage() {
</div> </div>
<div> <div>
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"> <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
Phone Phone Number (optional)
</label> </label>
<input <input
type="tel" type="tel"
@@ -100,11 +100,11 @@ export default function ProfileSettingsPage() {
</Card> </Card>
<Card className="p-6"> <Card className="p-6">
<h2 className="text-lg font-semibold mb-4">Preferences</h2> <h2 className="text-lg font-semibold mb-4">How You Like It</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div> <div>
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"> <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
Timezone Your Timezone
</label> </label>
<select <select
value={profile.timezone} value={profile.timezone}
@@ -136,13 +136,16 @@ export default function ProfileSettingsPage() {
</Card> </Card>
<Card className="p-6"> <Card className="p-6">
<h2 className="text-lg font-semibold mb-4">Notifications</h2> <h2 className="text-lg font-semibold mb-4">What You Want to Hear About</h2>
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">
Choose what emails you want to receive:
</p>
<div className="space-y-4"> <div className="space-y-4">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<div className="font-medium">Email Notifications</div> <div className="font-medium">Important Updates</div>
<div className="text-sm text-gray-600 dark:text-gray-400"> <div className="text-sm text-gray-600 dark:text-gray-400">
Receive important updates via email Get notified about important changes to your account
</div> </div>
</div> </div>
<input <input
@@ -154,9 +157,9 @@ export default function ProfileSettingsPage() {
</div> </div>
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<div className="font-medium">Marketing Emails</div> <div className="font-medium">Tips & Product Updates (optional)</div>
<div className="text-sm text-gray-600 dark:text-gray-400"> <div className="text-sm text-gray-600 dark:text-gray-400">
Receive marketing and promotional emails Hear about new features and content tips
</div> </div>
</div> </div>
<input <input