more impeorventes for kewyrods libreary
This commit is contained in:
@@ -13,6 +13,8 @@ import { GridIcon, PlusIcon } from "../../icons";
|
||||
import {
|
||||
fetchSites,
|
||||
Site,
|
||||
fetchKeywordStats,
|
||||
KeywordStats,
|
||||
} from "../../services/api";
|
||||
import { getDashboardStats } from "../../services/billing.api";
|
||||
import { useSiteStore } from "../../store/siteStore";
|
||||
@@ -33,6 +35,7 @@ import AutomationStatusWidget, { AutomationData } from "../../components/dashboa
|
||||
import SitesOverviewWidget from "../../components/dashboard/SitesOverviewWidget";
|
||||
import CreditsUsageWidget from "../../components/dashboard/CreditsUsageWidget";
|
||||
import AccountInfoWidget from "../../components/dashboard/AccountInfoWidget";
|
||||
import KeywordLibraryStatsWidget from "../../components/dashboard/KeywordLibraryStatsWidget";
|
||||
import { getSubscriptions, Subscription } from "../../services/billing.api";
|
||||
|
||||
export default function Home() {
|
||||
@@ -52,6 +55,8 @@ export default function Home() {
|
||||
const [showAddSite, setShowAddSite] = useState(false);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [subscription, setSubscription] = useState<Subscription | null>(null);
|
||||
const [keywordStats, setKeywordStats] = useState<KeywordStats | null>(null);
|
||||
const [keywordStatsLoading, setKeywordStatsLoading] = useState(true);
|
||||
|
||||
// Dashboard data state
|
||||
const [attentionItems, setAttentionItems] = useState<AttentionItem[]>([]);
|
||||
@@ -114,9 +119,23 @@ export default function Home() {
|
||||
loadSites();
|
||||
loadBalance();
|
||||
loadSubscription();
|
||||
loadKeywordStats();
|
||||
loadFromBackend().catch(() => {});
|
||||
}, [loadFromBackend, loadBalance]);
|
||||
|
||||
// Load keyword stats
|
||||
const loadKeywordStats = async () => {
|
||||
try {
|
||||
setKeywordStatsLoading(true);
|
||||
const stats = await fetchKeywordStats();
|
||||
setKeywordStats(stats);
|
||||
} catch (error) {
|
||||
console.error('Failed to load keyword stats:', error);
|
||||
} finally {
|
||||
setKeywordStatsLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
// Load subscription info
|
||||
const loadSubscription = async () => {
|
||||
try {
|
||||
@@ -414,6 +433,24 @@ export default function Home() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Row 6: Keyword Library Stats (3 columns) */}
|
||||
<div className="space-y-3">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-lg font-semibold text-gray-900 dark:text-white">
|
||||
Quick-Start Keywords — Complimentary
|
||||
</h2>
|
||||
<p className="text-sm text-gray-500 dark:text-gray-400">
|
||||
Ready-to-use, pre-vetted keywords to jumpstart your content creation — no research needed
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<KeywordLibraryStatsWidget
|
||||
stats={keywordStats}
|
||||
loading={keywordStatsLoading}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Add Site Button - Floating */}
|
||||
{canAddMoreSites && (
|
||||
<div className="fixed bottom-6 right-6 z-50">
|
||||
|
||||
@@ -954,7 +954,7 @@ export default function IndustriesSectorsKeywords() {
|
||||
<CheckCircleIcon className="w-5 h-5 text-success-600 dark:text-success-400" />
|
||||
<div>
|
||||
<h3 className="text-sm font-medium text-success-900 dark:text-success-200">
|
||||
High Opportunity Keywords Complete
|
||||
Quick-Start Keywords Added Successfully
|
||||
</h3>
|
||||
<p className="text-xs text-success-700 dark:text-success-300">
|
||||
{addedCount} keywords added to your workflow
|
||||
@@ -982,11 +982,11 @@ export default function IndustriesSectorsKeywords() {
|
||||
<div className="flex items-center justify-between mb-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<h2 className="text-xl font-bold text-gray-900 dark:text-white">
|
||||
High Opportunity Keywords
|
||||
Quick-Start Keywords — Complimentary
|
||||
</h2>
|
||||
<Badge tone="brand" variant="soft" size="sm">
|
||||
<BoltIcon className="w-3 h-3 mr-1" />
|
||||
Curated
|
||||
Pre-Vetted
|
||||
</Badge>
|
||||
</div>
|
||||
{!allAdded && (
|
||||
@@ -1000,7 +1000,7 @@ export default function IndustriesSectorsKeywords() {
|
||||
)}
|
||||
</div>
|
||||
<p className="text-sm text-gray-600 dark:text-gray-400">
|
||||
Add top keywords for each of your sectors. Keywords will be added to your planner workflow.
|
||||
Ready-to-use keywords to jumpstart your content — no research needed. Simply add to your workflow and start creating.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1151,8 +1151,8 @@ export default function IndustriesSectorsKeywords() {
|
||||
</h3>
|
||||
</div>
|
||||
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4 max-w-2xl mx-auto">
|
||||
💡 <strong>Recommended:</strong> Start by adding High Opportunity Keywords from the section above.
|
||||
They're curated for your sectors and ready to use. Once you've added those, you can browse our full keyword library below for additional targeted keywords.
|
||||
💡 <strong>Recommended:</strong> Start with the complimentary Quick-Start Keywords above to accelerate your workflow.
|
||||
They're pre-vetted and ready to use immediately. Once added, you can browse our full library below for additional targeted keywords.
|
||||
</p>
|
||||
<Button
|
||||
variant="outline"
|
||||
|
||||
Reference in New Issue
Block a user