diff --git a/src/App.css b/src/App.css index 6d3c128..63084be 100644 --- a/src/App.css +++ b/src/App.css @@ -3,40 +3,58 @@ @tailwind utilities; .container { - width: 100%; - /* max-width: 1500px; */ - margin: 0 auto; - padding-left: 1rem; - padding-right: 1rem; - box-sizing: border-box; - } + width: 100%; + /* max-width: 1500px; */ + margin: 0 auto; + padding-left: 1rem; + padding-right: 1rem; + box-sizing: border-box; +} - @media (max-width: 1299px) { - .container { - max-width: 100%; - } +@media (max-width: 1299px) { + .container { + max-width: 100%; } +} - @media (min-width: 1300px) { - .container { - max-width: 1300px; - } +@media (min-width: 1300px) { + .container { + max-width: 1300px; } - - @media (min-width: 1600px) { - .container { - max-width: 1600px; - } - } - +} - .recharts-surface { - cursor: pointer !important; - outline: none !important; - border: none !important; - box-shadow: none !important; - focus:outline-none !important; - focus:ring-0 !important; - focus:border-none !important; - } \ No newline at end of file +@media (min-width: 1500px) { + .container { + max-width: 1500px; + } +} + +@media (min-width: 1600px) { + .container { + max-width: 1600px; + } +} + + +.recharts-surface { + cursor: pointer !important; + outline: none !important; + border: none !important; + box-shadow: none !important; + focus: outline-none !important; + focus: ring-0 !important; + focus: border-none !important; +} + +@media (min-width: 1024px) and (max-width: 1250px) { + .pr-m-5 { + padding-right: 5px; + } +} + +@media (min-width: 1024px) and (max-width: 1296px) { + .w-m-40 { + width: 40% !important; + } +} \ No newline at end of file diff --git a/src/components/CampaignTracker.tsx b/src/components/CampaignTracker.tsx index 38254e2..a8e5d09 100644 --- a/src/components/CampaignTracker.tsx +++ b/src/components/CampaignTracker.tsx @@ -95,14 +95,14 @@ const CampaignTracker = ({ handleMenuClick }: { handleMenuClick: () => void }) = {/* Progress Sections */} -
+
{progressSections.map((section, index) => { const progressPercentage = (section.current / section.total) * 100 return (
{/* Section Title and Progress */} -
+

{section.title}: {section.current}/{section.total}

diff --git a/src/components/DashboardGrid.tsx b/src/components/DashboardGrid.tsx index 827b931..0e3d55c 100644 --- a/src/components/DashboardGrid.tsx +++ b/src/components/DashboardGrid.tsx @@ -9,13 +9,16 @@ import { Info, ArrowUp, Link, - ChevronDown + ChevronDown, + MapPin, + Sparkles } from "lucide-react"; import MetricCard from "./shared/MetricCard"; import UrlDropdown from "./shared/UrlDropdown"; import HeaderPage from "./shared/HeaderPage"; import Google from "../assets/icons/google-original-logo.svg"; import Gemini from "../assets/icons/gemini.svg"; +import Gemini2 from "../assets/icons/gemini2.svg"; import Perplexity from "../assets/icons/perplexity-dark-logo.svg"; import Vector from "../assets/icons/Vector.png"; import Vector2 from "../assets/icons/Vector2.png"; @@ -236,6 +239,103 @@ const CARDS = [ } ]; +const competitors = [ + { + domain: "Cherrybekaertla.com", + googleRank: 1, + mapPins: 7, + hasAi: true, + hasCircle: true, + hasDiamond: true, + hasTree: true, + hasLLM: true, + tags: [ + { + content: [ + { icon: "Google", value: "1" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Map", value: "7", } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "Perplexity" }, + { icon: "GPT" } + ] + } + ] + }, + { + domain: "Gerbercompany.com", + googleRank: 1, + mapPins: 7, + hasAi: true, + hasCircle: true, + hasDiamond: true, + hasTree: true, + hasLLM: true, + tags: [ + { + content: [ + { icon: "Google", value: "1" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Map", value: "7", } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "Perplexity" }, + { icon: "GPT" } + ] + } + ] + }, + { + domain: "Mysite.com", + googleRank: 1, + mapPins: 7, + hasAi: true, + hasCircle: true, + hasDiamond: true, + hasTree: true, + hasLLM: true, + tags: [ + { + content: [ + { icon: "Google", value: "1" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Map", value: "7", } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "Perplexity" }, + { icon: "GPT" } + ] + } + ] + }, +] + + const pillClass = (val: string) => val === 'Done' ? 'bg-green-100 text-green-700 font-bold' : val === 'In Progress' ? 'bg-blue-100 text-blue-700 font-bold' @@ -247,6 +347,7 @@ export default function DashboardGrid() { const [activeCard, setActiveCard] = useState(null); const [hoverState, setHoverState] = useState({ cardId: null, ringIndex: null }); const [isHovered, setIsHovered] = useState(false); + const [showKeywordAnalysis, setShowKeywordAnalysis] = useState(null); const handleCardClick = (campaignName: string, paused: boolean) => { if (paused) return; @@ -275,6 +376,14 @@ export default function DashboardGrid() { setHoverState({ cardId, ringIndex }); }; + const handleResumeClick = (campaignName: string) => { + setShowKeywordAnalysis(campaignName); + }; + + const handleCloseKeywordAnalysis = () => { + setShowKeywordAnalysis(null); + }; + const TagComponent = ({ content, color = "#4285F4", faded = false }: Tag & { faded?: boolean }) => { const getIconContent = (item: TagContent) => { switch (item.icon) { @@ -282,7 +391,7 @@ export default function DashboardGrid() { return ( <> Google - {item.value && {item.value}} + {item.value && {item.value}} {item.extra && ( {item.extra} @@ -293,7 +402,7 @@ export default function DashboardGrid() { case "Map": return ( <> - Map + Map {item.value && {item.value}} {item.extra && ( @@ -303,11 +412,41 @@ export default function DashboardGrid() { ); case "Ai": - return AI; + return ( + <> + AI + {item.value && {item.value}} + {item.extra && ( + + {item.extra} + + )} + + ) case "GPT": - return GPT; + return ( + <> + GPT + {item.value && {item.value}} + {item.extra && ( + + {item.extra} + + )} + + ) case "Perplexity": - return Perplexity; + return ( + <> + Perplexity + {item.value && {item.value}} + {item.extra && ( + + {item.extra} + + )} + + ) default: return item.text || null; } @@ -401,59 +540,119 @@ export default function DashboardGrid() {
{/* Front of card */} -
-
- {card.badge && ( -
-
-
- - - + { + card.paused && showKeywordAnalysis === card.title + ? +
+ {/* New Keyword Badge */} - {card.badge} +
+
+ + NEW High-Value Keyword Found
+ + {/* Keyword Title */} +

Tax Prep Attorney Los Angeles

+ + {/* Competitors List */} +
+ {competitors.map((competitor, index) => ( +
+
{competitor.domain}
+
+ {competitor.tags.map((tag, i) => ( + + ))} + +
+
+ ))} +
+ + {/* Bottom CTA */} +
+

Your competitors own this keyword.

+

Add it to capture visibility and sales.

+ +
- )} - handleRingHover(card.title, index)} - cardId={card.title} - /> -
- {card.title} -
- {/* Tags */} -
- {card.tags.map((tag, i) => ( - + {card.badge && ( +
+
+
+ + + + + {card.badge} +
+
+
+ )} + handleRingHover(card.title, index)} + cardId={card.title} /> - ))} -
- {card.actionLink && ( -
- {card.actionLink} +
+ {card.title} +
+ {/* Tags */} +
+ {card.tags.map((tag, i) => ( + + ))} +
+ {card.actionLink && ( +
+ {card.actionLink} +
+ )} + + {card.paused && ( +
+
Campaign paused
+ +
+ ) + + }
- )} - {card.paused && ( -
-
Campaign paused
- -
- )} -
+ + } +
{/* Back of card */} @@ -536,6 +735,7 @@ export default function DashboardGrid() {
))}
+ ); } diff --git a/src/components/MultiRingCircularProgress.tsx b/src/components/MultiRingCircularProgress.tsx index 744daa0..b25a997 100644 --- a/src/components/MultiRingCircularProgress.tsx +++ b/src/components/MultiRingCircularProgress.tsx @@ -64,6 +64,7 @@ export default function MultiRingCircularProgress({ card, hoveredIndex, onHover, onMouseEnter={() => onHover(index)} onMouseLeave={() => onHover(null)} fill={getHoverColor(ring, index)} + className="focus:outline-none focus:ring-0 focus:border-none" // pointerEvents={'none'} > {dropdownOpen && ( -
+
{subTitle}:
{Object.keys(checkedRings).map((ring, idx) => (
-
+
{/* 75% Keyword Visibility */}
75%
@@ -57,16 +57,12 @@ function ProgressMetrics() {
-
+
- - {/* */} - @@ -100,7 +96,7 @@ function ProgressMetrics() {
-
+
7 diff --git a/src/pages/Portfolio.tsx b/src/pages/Portfolio.tsx index 9b80a35..cdbf6fc 100644 --- a/src/pages/Portfolio.tsx +++ b/src/pages/Portfolio.tsx @@ -1,17 +1,11 @@ import React, { useState } from 'react'; -import Vector from "../assets/icons/Vector.png" -import Vector2 from "../assets/icons/Vector2.png" import BacklinkTypeDropdown from '../components/Portfolio/BacklinkTypeDropdown'; import RoadmapSidebar from '../components/Strategy/RoadmapSidebar'; import HeaderPage from '../components/shared/HeaderPage'; import ContainerPage from '../components/shared/ContainerPage'; -import Amazing from "../assets/icons/amazon.png" +import Amazing from "../assets/icons/amazon.svg" import { CircleCheck } from 'lucide-react'; -// import Pinterest from "../assets/icons/pinterest.png" -// import AppleMusic from "../assets/icons/apple-music.png" -// import Substack from "../assets/icons/substack.png" -// import Pin from "../assets/icons/pin.png" import Progress from "../assets/icons/InProgress.svg" import No from "../assets/icons/NA.svg" import Share2 from "../assets/icons/Share2.png" @@ -108,7 +102,7 @@ function Portfolio() { -