From 4a9915a6b705afc49d85ef662ff21173ee685aa0 Mon Sep 17 00:00:00 2001 From: mohammedsaid18 Date: Fri, 3 Oct 2025 10:34:58 +0300 Subject: [PATCH] Updated the design step 1 is finsih now I'll check it with mohammed --- src/App.tsx | 12 +- src/assets/icons/Google.png | Bin 0 -> 598 bytes src/assets/icons/InProgress.png | Bin 0 -> 574 bytes src/assets/icons/Share2.png | Bin 0 -> 543 bytes src/assets/icons/amazon.png | Bin 0 -> 658 bytes src/assets/icons/gemini-border.png | Bin 0 -> 943 bytes src/assets/icons/gemini.png | Bin 0 -> 553 bytes src/assets/icons/gemini1.png | Bin 0 -> 652 bytes src/assets/icons/iconheader/Info-badge.png | Bin 0 -> 458 bytes src/assets/icons/iconheader/active.png | Bin 0 -> 1107 bytes src/assets/icons/iconheader/portfolio.png | Bin 0 -> 1086 bytes src/assets/icons/iconheader/total.png | Bin 0 -> 1351 bytes src/assets/icons/map.png | Bin 0 -> 604 bytes src/assets/icons/no.png | Bin 0 -> 636 bytes src/components/CampaignTracker.tsx | 274 +++---- src/components/DashboardGrid.tsx | 627 ++++++++++----- src/components/IntegratedStrategy.tsx | 754 +++++++++--------- src/components/MultiRingCircularProgress.tsx | 33 +- .../Portfolio/BacklinkTypeDropdown.tsx | 106 +-- src/components/ProtectedRoute.tsx | 20 + src/components/Strategy/ProgressMetrics.tsx | 213 ++--- src/components/Strategy/RoadmapSidebar.tsx | 138 ++-- src/components/Strategy/ShowDetails.tsx | 522 ++++++------ src/components/flip-card.tsx | 307 +++++++ src/components/shared/ContainerPage.tsx | 20 +- src/components/shared/Footer.tsx | 6 +- src/components/shared/HeaderPage.tsx | 38 +- src/components/shared/MetricCard.tsx | 158 ++-- .../shared/MyScrollableComponent.tsx | 22 +- src/components/shared/Stepper.tsx | 59 ++ src/components/shared/UrlDropdown.tsx | 112 +-- src/components/shared/scrollableComponent.css | 88 +- src/components/test | 136 ++++ src/pages/Dashboard.tsx | 22 +- src/pages/Portfolio.tsx | 409 +++++----- src/pages/Settings.tsx | 432 +++++----- src/pages/Strategy.tsx | 91 +-- src/pages/login.tsx | 668 ++++++++++++++++ 38 files changed, 3369 insertions(+), 1898 deletions(-) create mode 100644 src/assets/icons/Google.png create mode 100644 src/assets/icons/InProgress.png create mode 100644 src/assets/icons/Share2.png create mode 100644 src/assets/icons/amazon.png create mode 100644 src/assets/icons/gemini-border.png create mode 100644 src/assets/icons/gemini.png create mode 100644 src/assets/icons/gemini1.png create mode 100644 src/assets/icons/iconheader/Info-badge.png create mode 100644 src/assets/icons/iconheader/active.png create mode 100644 src/assets/icons/iconheader/portfolio.png create mode 100644 src/assets/icons/iconheader/total.png create mode 100644 src/assets/icons/map.png create mode 100644 src/assets/icons/no.png create mode 100644 src/components/ProtectedRoute.tsx create mode 100644 src/components/flip-card.tsx create mode 100644 src/components/shared/Stepper.tsx create mode 100644 src/components/test create mode 100644 src/pages/login.tsx diff --git a/src/App.tsx b/src/App.tsx index 617bbbb..a3194b5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,8 @@ import Portfolio from './pages/Portfolio'; import Settings from './pages/Settings'; import Strategy from './pages/Strategy'; +import Login from './pages/login'; +import ProtectedRoute from './components/ProtectedRoute'; function App() { return ( @@ -15,10 +17,12 @@ function App() {
- } /> - } /> - } /> - } /> + } /> + + } /> + } /> + } /> + } />
diff --git a/src/assets/icons/Google.png b/src/assets/icons/Google.png new file mode 100644 index 0000000000000000000000000000000000000000..6f43cadd0a0a0f91bc6b76fea98c6ccb14a6affe GIT binary patch literal 598 zcmV-c0;&CpP)IUS#f_WU{}l;mROIBqT(#3<@S%7vk}o zA*e@=!rR{LMX~2&_5Jn(SZ?+MDt2dK=*@G*%*pNl{;YCy~zjee_Va|HO# zUC=-i?uX2H8{`yFmwL7ai}P<@zK&y-Ojd?}OM`e035o%}p3?6j(P$FT<)l;hCWjmf k{+n>kwel*%C7D)t2wB;?_r1tlM*si-07*qoM6N<$g2q`6RR910 literal 0 HcmV?d00001 diff --git a/src/assets/icons/InProgress.png b/src/assets/icons/InProgress.png new file mode 100644 index 0000000000000000000000000000000000000000..f351aa628bcb5c934645ec7c890b4f1b75918d5a GIT binary patch literal 574 zcmV-E0>S->P)^vwYQbOEGmIuWRZ`7f|9%VMvJ?J<7zelG`ra;WNd zt>KIMrq3%I1}w_q&S>?fb>u(GV}&~om;yi8?d;8lpE5g4Nk>h-17bxWMbB*G40_{h zjVgrz&c%KBS{AriXEnZ_viJWjeR%s0ko{Dhx~xIUU%L~`k1jLf^jxtjcBIbls|RI` zmlAjY5a&6_pI)sQ{=oKy}&;61J&h^g10Bw=k@Z&&JEmv=3{Aa}5 zY-lzYgaY$`q_sU2#oxMpn}N_N6r%3*d-kb z4ozDyP0tiC+XhhnRFZWDkke^!hPv(RUFeOkCYsbi7#Po^cyU6OE$RbOvnO(5+=MdX zC<;=j>M&AO&7C!O$abb9yfQ%8QY*2~HA-JkaI_s!!#TU%NxUZ}_ZyMk^X4Gz>;M1& M07*qoM6N<$f@jP4)c^nh literal 0 HcmV?d00001 diff --git a/src/assets/icons/Share2.png b/src/assets/icons/Share2.png new file mode 100644 index 0000000000000000000000000000000000000000..ae682a1c680b109defe90a9e3cfb48600da92bcf GIT binary patch literal 543 zcmV+)0^t3LP)CA6uX14|SCt=c1tF_FfTv}=_P?*to9(gVzEu^5iV?Ve*f{L|kQzw0d zfEJ{av%*z70EVD)wfP2w1`6m25RS6hcFRp>D+am=6-LLlKC|B)`jd10r1PgCws)Qk&9rk03yx)ZBI(2hQ))00-ab!X&~xb zQ{&oO^PR%Fx)Oc+E)L>)dzujAD5P9%ymG*4u$Cl)k~jcnylF8k6L#pT(l}>_5TyP` hYRqVv>AuqctS>V`&PV#=P22zg002ovPDHLkV1o8u;;R4v literal 0 HcmV?d00001 diff --git a/src/assets/icons/amazon.png b/src/assets/icons/amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4a808ee70064a0f5ddc0c4e59400bf2c6b4a6f GIT binary patch literal 658 zcmV;D0&V??P)P000;W1^@s654Bdt00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPcq>#+O41250K@9+0~j|6~lwqnXSdzqXE2`(9l zBuQvA8n7%2L?pD?Yzn)t_wdnOj^iu^lx10vt`NgBl1`^12sltKmxHRR7z_sD8@FXL z87~MZUKd)emH-=%$7r|P;#@2i(d~8xc_NWOuh%;nNwr#a&*^j;`FtMPY}U2;sf#Cx zqA1XH9m!-;MB%sCi?XsNyr}(tU!;T+l*?s7l1im;Y9zd?I3NcejYg=~>%y*SntR8i zv-a*S(_k=2b1_Ym7@1JRFkCz9K4KBm3Y=dnNw~6T1ek5x#5#(G!=X4Y+GDZU@kzMX zg+hU5vzhBT2QQUMRIAm9Z2+oND*hu0FhD-M2QSS5So=~u9(Pm5?a^qI0)c>dm%Odg z+vgE_Q@Tzv`+g*e%!c}7eUqL(yh41yC66>NYDkr6J+uq_?fr(pTAD8I;gj?_k-kM= zUf-k#_d=con-PURywr%cwkjxX5A6><}7n)e14r_F4O8C1&ux!Fw zSjM%r-EjX*foHFN;L*fLLOh5U zNQ{`Mff`?E3%D)xeRpPjwwn@&26hYllj&~T?fmBd%skIb8Fpx8#Z5a7e*&g&)7vx- zt|Gt|l~mJ%gT2}Ihpc_Gy6R>)=d-3IGIqj*5F7`U)*7|Chi1didY-y7G}ODe4Q&IR zZYz`QwsF`hSL&!%n?-Uw95@c`a7@{@c_hF`_!vQPlybT(3acIu z)=lV?AtQu{+<{vIX5M*N-q4YM(_SOCjdVw=Whtldv!t<9Q0PFJj-YE>8pk-p`et;e zI~5yRq|jyy8oit&=K{H{_~6*k4_OHzfgS_sri6RFBoSA!p!44)7Jn$%rUqvU2~KnC zD!ly~4{StzaQ2&z_sa@NLE&UnX`sWDsQDUoA9T;~>XVPTtiZ%Y3#U>7Ln#&y>JsePoCl9O?4k7Srj|4`G?%DD zqD-)IQ=;OLV`_9ub(W#%2|Sbi`iLEBN^#CtOSAv?XF2$iie3d`WQa>B&qWe1n~_nzB*XZ}ndZ?#i>3@?}JsQ8S+s#>9~`oS(u2Dfqiq%7z-L`D8+H(tPR0L%Uy!n z#CbawFg7&Mt#cOAwn2-{pcFDNdC5Us#fCbxGRHF(T@AV>a3UFh&**5E$)pSFB2orNiB*UPtS2hQiwBY`I+5N2yw^q4R~(%C=Jp zIbE$aAyr2wfqfP9Td6jvrm5*&U*z+psr8L58c|aprkYJ(uWxMXT&^_JX6-7Ds|EKS zm9(dfu?%Mn2UR$an$EkJ9vDddAG!@+bI0ijl%}X0=&uFU{>A?O@KnE3e*w200FAD& Rg#!Qp002ovPDHLkV1k1OszCq% literal 0 HcmV?d00001 diff --git a/src/assets/icons/gemini.png b/src/assets/icons/gemini.png new file mode 100644 index 0000000000000000000000000000000000000000..a567733d01877ac52936176b6f7829ce43b116bd GIT binary patch literal 553 zcmV+^0@nSBP)~>jLHnZqA-@I2-O$g}uezE4Q8dZ&Xx;>=4%f}%ISz34S8;LHnkS_>H zn6n#9h`@u8kGc-VQY9t*?HUng*5!3&?uDv)5p!I%exZt>T^9w z80%U&wA6w~CgbgsXM4ry$~rIhia~66k|>|W0)Tg@oI_!O-wotRs6FpCt=oBX@A~vV z%v;lkmjO$4?uoZ%Q<2X5kw#+lQ5PTxc{l7G#Y!EdCR(ol4gw0^orrka r(+a84hasO1AF5p@o4r4`SgZ60ttGv0fIgtX00000NkvXXu0mjfEMV*> literal 0 HcmV?d00001 diff --git a/src/assets/icons/gemini1.png b/src/assets/icons/gemini1.png new file mode 100644 index 0000000000000000000000000000000000000000..4dfcd9ce8a0b6e358fd7200229aeafc093e2be3b GIT binary patch literal 652 zcmV;70(1R|P)q!myz9=H-SV%L11*--gMPPH(gc` zgoJ2+KpP~XK^v9n4oRfr+U9=E&d$tfW-1fe))56C7>2`n-rxJ2m%{%oK2qKSB4;|mYowSl#dFHUkr8Av)96fg9LHw4@lKi$Le&Fw^! zfh)<-(0eNdYs|755KDV@j55U#5Umj$D4VW9hwuITRIRRJxBhs?UfddfpDaZ2Og09j z*aUo`34A5Vtw5}%zP%yTdr62V6K%u$+k~X02Qex&0QV=IPnVY4Q-iOI#VL(k9y_@@ zl)IREDs@N^{1B(%(3G|vlKM`V(4#P}9fP^0qwbLrtvoue#!lh4?k4(}J5Db*;r(ZZ zv7i`5vy3f4V?fNYAZJ(zFZw{t*Zvpg$j~UwefhvUu;qj+r93(C;F~I6nOK!9xEgggMK?2JU`y6D9t_Dgqr1o{dFLwH*08ojr)ZqA;j7(D@v2mJI;I z6=uh;`iY*kf+V}>>Cr~Q_n1C%vf^Xm>V6@R#KqG}e zA^tQF_BuPrChQKbCUTnDy|eSpId?Dc4`QlfHd`^6##4;L03jwyZ35Ma>~kxfCEh+}O<{%^*+Ru|o)s(Wj8!*}%&3 zypq8fpOq=_3q7`;e%zN3yQ|ezo4OvAYpeCFJS^s>=|U`Py&=rCy&pMo-akH}Pe&1n zgnba3QO$*XbB{1Wk%_SUOT#YcazCAr35JF(SGXvNQVKyLCWej0`w2Xa&FpTOjM3>| z06r%JIYY$3OmWAWI5jEzMReUG)b=u)Cm4sm0COyW1o4JbmH+?%07*qoM6N<$f^Jy9 AQvd(} literal 0 HcmV?d00001 diff --git a/src/assets/icons/iconheader/active.png b/src/assets/icons/iconheader/active.png new file mode 100644 index 0000000000000000000000000000000000000000..e267f03dd5068f8f9c3985eb2b844f2a13e67439 GIT binary patch literal 1107 zcmV-Z1g!gsP) zxEQ6b?p{%v_xbrwQ9tLcrjimDWeU8@r1fjJU8=FYVp|a9Vfxv*UEGD!bFquP#TuE)GmFPwQ!Dr9k{M8Pk zAE{&0XEBi*wb!Hra7RR86=*gRiAq0%v7^CpA*WYOZ|U*F+fvru@!q-Jz^ULt_wM~? z3iS1hrEM!@ZNWe1JtN9sa6)Q))`*(!mX*!_xrL^J;Mh2|w|9%B&Fl3@>2Nb-geZ2h z*GN|4UWb0&$Vk`hW0^;BW^Y2^t=Kd+yXd4#UkTofh94h;>9)DZ4}{HRW} zgDjGmjgptOka9irhL<8JdijGZvdF1#xZmhHn7`#fk;3&2 z(6?_rt7#vjaClzyLA&c+m>?{6`I48894V!_@B$U&=h63`AA%$#Qc+R1<+nq#i~LAu zWYTaSFC`g3cW{}RNN)w`*^KNj?VTbCvG&PkPQ#;9sS!1Sh=wbzNwc-j{5Z&17kNkr z-ax?VS&?C zROF=Gec3sMM!Z0Z;khU`V4^`)5Bt&1tb;Ud#%(CejaP)OzR98jZ!i4*9gE*f<)PW}NZle!^`Mjg~>bW%6Z zjWVgI=^-Q-xWhuAJ?^Eo-$#!W5be_*SU$<+u4((+x4-xFk!TU0^|6%9V%O8Lc+9?NFgmqM6w|J{hvh9jdx5 zv*05ATefc^JMEOqwi6Ymrc6g49@lk!ED4R=bYJxG9+^o!o0~QeV-iJ$`g(;nHPj_3 zCimf(D}(y&&5g-;T&5`UZ6rs9ai$zu_sH>}WLx81NnOLNSf_OZJ@Z90X ztlhxa>Suir)`rU8tSPafg4HzhG&yNdHfxY+S%1BDb5kS#ZfR+D8%`|+A&}Uip$t8L z@s>Uf=@f)rZ7TJ2AE&0K2BG_e#SUm6=+4~-+&TyL@1@q(W>S>efBtbUXOLy(`2%X& zN4k3LCKrq~Rzz$z_k$iie#M1dxpYR@GT>n6e!k9)n|*w(_C33OhlNmr!Tqq%k*wm(p3G05Ume_}nU-Ec7dGheQpuO$8`3DJwhrldQ4MK@UM@y$Qw}tMb zL!AefoQL3QA}kh-p#tLb+}TrsEr+_D5GY?lr3*dXG#AdTuwKyl6g5{-YJ6WWBo;A= z`1E$6pkNKGRhbd|AS4!U2O^Wwa%h9Uh9bi;L3xzUX z-w!jquP>F#Mt-hHQN^?hZU{(ED<-{eOqmo#48x>isrXD)w`yFhx?@YPl`r&Xb2EIm zBq~f#TVzaI8Oe@c#PNdNj<3Vn-nh&zG;B;zZOyv>x3yF(5j>sGm)xzTn7g&qn4!gD zfv!)a9Om>$#E!X}b}Lsjmqjuh#~zd%>8Yx2>GhuZ2?|dkyQ(RncmMzZ07*qoM6N<$ Ef(*Cyg#Z8m literal 0 HcmV?d00001 diff --git a/src/assets/icons/iconheader/total.png b/src/assets/icons/iconheader/total.png new file mode 100644 index 0000000000000000000000000000000000000000..3606b4da04cda32f22485af87d0aa0e52b6f01f5 GIT binary patch literal 1351 zcmV-N1-SZ&P)nEY?Yv2+avlHd+OF$7Db9Lk*YoDhH*db# zk*Eka)jLzNL@$#>3j6A$=3|RU|0Sp8gHL&S!-W-+xKPz~H_2^_whpV?dDuZ#tA%7) zqGltP%Tp$^OIyhlp5r}lKX3zxs<$@OWHP0<3i5ePzZ2iq)xYDjf~U+sCCeAi z!-w2mU3O{}U{t$ZkCDx4nYgLmp5kSyx}jJs@;MBBD+0V^x$Og7%NptD9F7iZRoHCp z#Kd$WRGHY48BfpmiNqE!v)gUd z-R-3QzFry_a8n~t7uk4XlR}{-iY#5@gv-I@a?+^(G!1zNsUFl!Hnb3-OY@7IB$OLe zPLOi)1SbZde06P|D}E&up}FAC{Qh^R-?)E|SxA4W8*@E9UE`gHjN8|b7k=er`}&U2 z`M?N0J>aSO%$3kpn!g<8otPMZ#gxkN#118QGLxp2g*qVW^(u6J>;-Z-Y=)jYGdx5J zQ~&dsS*|kFHPXpKm~w-wk!zf+qC7*BvF0=UDV-shkagZ7}>RZO7-_2+gE3|?^zx~1Px=R3%FdBef7u@C+k@CQ4laS z!LWoDV|duhmH%w!J5I{)f1W=5WSRnFXL$!uE|%b8Jkj4h@noWOIwqOWsv>otfyrREjSUfgQmaKvYaFu}YO1Za4>)?1qv>qaXrxQmK)$GaQBwOM>qrc|ix@ z&!RJhfQukB%;X4$V-{HzejJ3W0jdJ6>^G#D5g*_-v>Uo`X#h!hh=!Y*zf3dRwK-6q53)Hl&0bva9{Ct?+dw+&E zj3fptlCYw}O(cloJ357o44GLisCf_elHbQC2-I3$zD_rSYT0|yF)YJpd_$%a_CnOP zyM?b}#~`vYC|PL!NPM7lEkj-k4S8<>wS-+gOdO~;G6#aJrV+J~zJ<4lv1~R+t&Hq0 z_(?G+8~*n{b6etOBAd;#a|SKu@f?lH9#2nL)AjK7j=4m*S=fkgBMv^q^8EtCIj zredu`SkrX=+GsbI3o=#bP*!lXw8@T^@{8=9m%FpGgS~BjR7Xo1rPvN)dnZHLT<)tU zj~|^9b^F+`1Ca?`q6tZoPqM?arXSkrI^7~&3ri%=Aw&!7?gBv!skUP5S literal 0 HcmV?d00001 diff --git a/src/assets/icons/map.png b/src/assets/icons/map.png new file mode 100644 index 0000000000000000000000000000000000000000..eda15a6b8e1d157bec87321cd79d101b9a756a21 GIT binary patch literal 604 zcmV-i0;BzjP) z(@+$~&$)Jj;{?S;8LA3_L5RnO7`iZ!lo^$X$?A}1Lt*>{GH!DpYKH&Af>RWNKBqXq*(+| z1wiwhv4+{a`eI>doZZZ% zj*O-~x@1>VUw>cozfCRHi@K~#7FeN;hm z+CUJTowdj*6#0Sjf{+)O9|Y`*t8xlDn3ReG@B+*Wzz3oVIfz@T>~i5Jzzd=$@Pkk} zBJGZ6B!p!ldoR-N_Re(A_N;zwS|IeQ1?apMrPu|b?|HL)2M@IpJv+2)sw`a6EdsQLLCW?} z%##u8R;I>okQ6;;)NvrD%i?h{Qx>IS7Lw#r$>R3nXo4uhg9JkHJYRg*Yn~N7Lg5bWT&(xG}v?)p6IVv@0p#fK}PH4qVm$pBD*JNpv z)lM}S`Kj2P?Cx$Z_2elC77tx^AomHmr$WT)G%0&V!7F3FSTzyi=SK;gsNd^UK1xrG WasHJLmt}$g0000 { - const progressSections = [ - { - title: "Social", - current: 42, - total: 80, - color: "bg-blue-500", - bgColor: "bg-blue-100", - icons: [ - { name: "Pinterest", color: "bg-red-600", text: "P", textColor: "text-white" }, - { name: "Amazon", color: "bg-black", text: "a", textColor: "text-white" }, - { name: "PayPal", color: "bg-blue-600", text: "P", textColor: "text-white" }, - { name: "Yelp", color: "bg-red-600", text: "★", textColor: "text-white" }, - { name: "Uber", color: "bg-black", text: "uber", textColor: "text-white", fontSize: "text-xs" }, - ], - }, - { - title: "Citation", - current: 30, - total: 80, - color: "bg-blue-500", - bgColor: "bg-blue-100", - icons: [ - { name: "Service", color: "bg-blue-400", text: "◐", textColor: "text-white" }, - { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, - { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, - { name: "Yelp", color: "bg-red-600", text: "★", textColor: "text-white" }, - { name: "Pinterest", color: "bg-red-600", text: "P", textColor: "text-white" }, - ], - }, - { - title: "Web 2.0", - current: 15, - total: 70, - color: "bg-green-500", - bgColor: "bg-green-100", - icons: [ - { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, - { name: "Fox", color: "bg-red-600", text: "FOX", textColor: "text-white", fontSize: "text-xs" }, - { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, - { name: "Service", color: "bg-green-600", text: "≡", textColor: "text-white" }, - { name: "Platform", color: "bg-red-600", text: "⬜", textColor: "text-white" }, - ], - }, - { - title: "Multimedia", - current: 5, - total: 15, - color: "bg-yellow-500", - bgColor: "bg-yellow-100", - icons: [ - { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, - { name: "Service", color: "bg-green-600", text: "≡", textColor: "text-white" }, - { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, - { name: "Uber", color: "bg-black", text: "uber", textColor: "text-white", fontSize: "text-xs" }, - { name: "Amazon", color: "bg-black", text: "a", textColor: "text-white" }, - ], - }, - { - title: "Crowd", - current: 5, - total: 15, - color: "bg-red-500", - bgColor: "bg-red-100", - icons: [ - { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, - { name: "PayPal", color: "bg-blue-600", text: "P", textColor: "text-white" }, - { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, - { name: "Service", color: "bg-green-600", text: "≡", textColor: "text-white" }, - { name: "Platform", color: "bg-red-600", text: "⬜", textColor: "text-white" }, - ], - }, - ] - - return ( -
- - - {/* Status Cards */} -
-
-
Indexed:
-
77%
-
-
-
Interlinked:
-
5%
-
-
-
Publishing:
-
Locked
-
-
- - {/* Progress Sections */} -
- {progressSections.map((section, index) => { - const progressPercentage = (section.current / section.total) * 100 - - return ( -
- {/* Section Title and Progress */} -
-

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

-
- {section.icons.map((icon, iconIndex) => ( -
- {icon.text} -
- ))} -
-
- - {/* Progress Bar */} -
-
-
-
- ) - })} -
-
- ) -} - -export default CampaignTracker + + +const CampaignTracker = ({ handleMenuClick }: { handleMenuClick: () => void }) => { + const progressSections = [ + { + title: "Social", + current: 42, + total: 80, + color: "bg-blue-500", + bgColor: "bg-blue-100", + icons: [ + { name: "Pinterest", color: "bg-red-600", text: "P", textColor: "text-white" }, + { name: "Amazon", color: "bg-black", text: "a", textColor: "text-white" }, + { name: "PayPal", color: "bg-blue-600", text: "P", textColor: "text-white" }, + { name: "Yelp", color: "bg-red-600", text: "★", textColor: "text-white" }, + { name: "Uber", color: "bg-black", text: "uber", textColor: "text-white", fontSize: "text-xs" }, + ], + }, + { + title: "Citation", + current: 30, + total: 80, + color: "bg-blue-500", + bgColor: "bg-blue-100", + icons: [ + { name: "Service", color: "bg-blue-400", text: "◐", textColor: "text-white" }, + { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, + { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, + { name: "Yelp", color: "bg-red-600", text: "★", textColor: "text-white" }, + { name: "Pinterest", color: "bg-red-600", text: "P", textColor: "text-white" }, + ], + }, + { + title: "Web 2.0", + current: 15, + total: 70, + color: "bg-green-500", + bgColor: "bg-green-100", + icons: [ + { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, + { name: "Fox", color: "bg-red-600", text: "FOX", textColor: "text-white", fontSize: "text-xs" }, + { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, + { name: "Service", color: "bg-green-600", text: "≡", textColor: "text-white" }, + { name: "Platform", color: "bg-red-600", text: "⬜", textColor: "text-white" }, + ], + }, + { + title: "Multimedia", + current: 5, + total: 15, + color: "bg-yellow-500", + bgColor: "bg-yellow-100", + icons: [ + { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, + { name: "Service", color: "bg-green-600", text: "≡", textColor: "text-white" }, + { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, + { name: "Uber", color: "bg-black", text: "uber", textColor: "text-white", fontSize: "text-xs" }, + { name: "Amazon", color: "bg-black", text: "a", textColor: "text-white" }, + ], + }, + { + title: "Crowd", + current: 5, + total: 15, + color: "bg-red-500", + bgColor: "bg-red-100", + icons: [ + { name: "Directory", color: "bg-blue-600", text: "◐", textColor: "text-white" }, + { name: "PayPal", color: "bg-blue-600", text: "P", textColor: "text-white" }, + { name: "Package", color: "bg-yellow-400", text: "📦", textColor: "text-white" }, + { name: "Service", color: "bg-green-600", text: "≡", textColor: "text-white" }, + { name: "Platform", color: "bg-red-600", text: "⬜", textColor: "text-white" }, + ], + }, + ] + + return ( +
+ + + {/* Status Cards */} +
+
+
Indexed:
+
77%
+
+
+
Interlinked:
+
5%
+
+
+
Publishing:
+
Locked
+
+
+ + {/* Progress Sections */} +
+ {progressSections.map((section, index) => { + const progressPercentage = (section.current / section.total) * 100 + + return ( +
+ {/* Section Title and Progress */} +
+

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

+
+ {section.icons.map((icon, iconIndex) => ( +
+ {icon.text} +
+ ))} +
+
+ + {/* Progress Bar */} +
+
+
+
+ ) + })} +
+
+ ) +} + +export default CampaignTracker diff --git a/src/components/DashboardGrid.tsx b/src/components/DashboardGrid.tsx index 6a36d82..b6193ba 100644 --- a/src/components/DashboardGrid.tsx +++ b/src/components/DashboardGrid.tsx @@ -1,6 +1,6 @@ // DashboardGrid.tsx -import { useState } from "react"; +import React, { useState } from "react"; import MultiRingCircularProgress from "./MultiRingCircularProgress"; import CampaignTracker from "./CampaignTracker"; import { @@ -14,79 +14,188 @@ import { import MetricCard from "./shared/MetricCard"; import UrlDropdown from "./shared/UrlDropdown"; import HeaderPage from "./shared/HeaderPage"; +import Google from "../assets/icons/Google.png"; +import Gemini from "../assets/icons/gemini.png"; +import Perplexity from "../assets/icons/preplextiy.png"; +import Vector from "../assets/icons/Vector.png"; +import Vector2 from "../assets/icons/Vector2.png"; +import GPT from "../assets/icons/gpt.png"; +import Map from "../assets/icons/map.png"; + +import TotalBacklinks from "../assets/icons/iconheader/total.png"; +import ActiveKeywords from "../assets/icons/iconheader/active.png"; +import PortfolioPerformance from "../assets/icons/iconheader/portfolio.png"; +import InfoBadge from "../assets/icons/iconheader/Info-badge.png"; +import Amazon from "../assets/icons/amazon.png"; + +interface TagContent { + icon: string; + text?: string; + value?: string; + extra?: string; +} + +interface Tag { + content: TagContent[]; + color?: string; +} + +interface HoverState { + cardId: string | null; + ringIndex: number | null; +} const CARDS = [ { - title: "Richard Bower CPA", + title: "CPA Hollywood", percent: 99, rings: [ - { color: "#4285F4", value: 99 }, // blue - { color: "#34A853", value: 80 }, // green - { color: "#FBBC05", value: 60 }, // yellow - { color: "#EA4335", value: 40 } // red + { color: "#4c60e5", value: 99 }, // blue + { color: "#4285f4", value: 50 }, // blue + { color: "#34a853", value: 80 }, // green + { color: "#fbbc05", value: 90 }, // yellow + { color: "#ea4335", value: 40 } // red ], tags: [ - { text: "G 14", extra: "+1", color: "#4285F4" }, - { text: "Ai" }, - { text: "LLM" }, + { + content: [ + { icon: "Google", value: "14", extra: "+1" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Map", value: "7", extra: "+2" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "Perplexity" }, + { icon: "GPT" } + ] + } ] }, { title: "CPA Los Angeles", percent: 24, rings: [ - { color: "#4285F4", value: 24 }, - { color: "#34A853", value: 18 }, - { color: "#FBBC05", value: 14 }, - { color: "#EA4335", value: 8 } + { color: "#4c60e5", value: 25 }, // blue + { color: "#4285f4", value: 21 }, // blue + { color: "#34a853", value: 40 }, // green + { color: "#fbbc05", value: 30 }, // yellow + { color: "#ea4335", value: 20 } // red ], tags: [ - { text: "G 14", extra: "-2", color: "#4285F4" } + { + content: [ + { icon: "Google", value: "14", extra: "-2" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "GPT" } + ] + } ] }, { title: "CPA Los Angeles4", percent: 45, rings: [ - { color: "#4285F4", value: 45 }, - { color: "#34A853", value: 42 }, - { color: "#FBBC05", value: 32 }, - { color: "#EA4335", value: 24 } + { color: "#4c60e5", value: 45 }, // blue + { color: "#4285f4", value: 42 }, // blue + { color: "#34a853", value: 32 }, // green + { color: "#fbbc05", value: 28 }, // yellow + { color: "#ea4335", value: 24 } // red ], tags: [ - { text: "G 14", extra: "-2", color: "#4285F4" }, - { text: "+7" }, - { text: "Ai" } + { + content: [ + { icon: "Google", value: "14", extra: "-2" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Map", value: "5", extra: "+1" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "Perplexity" } + ] + } ] }, { title: "Best CPA Los Angeles5", percent: 89, rings: [ - { color: "#4285F4", value: 89 }, - { color: "#34A853", value: 80 }, - { color: "#FBBC05", value: 72 }, - { color: "#EA4335", value: 57 } + { color: "#4c60e5", value: 89 }, // blue + { color: "#4285f4", value: 80 }, // blue + { color: "#34a853", value: 72 }, // green + { color: "#fbbc05", value: 65 }, // yellow + { color: "#ea4335", value: 57 } // red ], tags: [ - { text: "G 14", extra: "+1", color: "#4285F4" }, - { text: "+7" }, - { text: "Ai" } + { + content: [ + { icon: "Google", value: "14", extra: "+1" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Map", value: "9", extra: "+3" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "GPT" }, + { icon: "Perplexity" } + ] + } ] }, { - title: "CPA Hollywood", - percent: 100, + title: "CPA Hollywood 2", + percent: 98, rings: [ - { color: "#4285F4", value: 100 }, - { color: "#34A853", value: 100 }, - { color: "#FBBC05", value: 100 }, - { color: "#EA4335", value: 100 } + { color: "#4c60e5", value: 98 }, // blue + { color: "#4285f4", value: 98 }, // blue + { color: "#34a853", value: 98 }, // green + { color: "#fbbc05", value: 98 }, // yellow + { color: "#ea4335", value: 100 } // red ], tags: [ - { text: "G 14", extra: "+1", color: "#4285F4" }, - { text: "+7" }, - { text: "Ai" } + { + content: [ + { icon: "Google", value: "14", extra: "+1" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Map", value: "7", extra: "+2" } + ], + color: "#4285F4" + }, + { + content: [ + { icon: "Ai" }, + { icon: "Perplexity" }, + { icon: "GPT" } + ] + } ], badge: "Content Unlocked", actionLink: "View Published Content " @@ -95,15 +204,32 @@ const CARDS = [ title: "Best CPA Los Angeles21", percent: 89, rings: [ - { color: "#cccccc", value: 89 }, - { color: "#cccccc", value: 80 }, - { color: "#cccccc", value: 72 }, - { color: "#cccccc", value: 57 } + { color: "#cccccc", value: 89 }, // gray + { color: "#cccccc", value: 80 }, // gray + { color: "#cccccc", value: 72 }, // gray + { color: "#cccccc", value: 65 }, // gray + { color: "#cccccc", value: 57 } // gray ], tags: [ - { text: "G 14", extra: "+1", color: "#cccccc" }, - { text: "+7", color: "#cccccc" }, - { text: "Ai", color: "#cccccc" } + { + content: [ + { icon: "Google", value: "14", extra: "+1" } + ], + color: "#cccccc" + }, + { + content: [ + { icon: "Map", value: "7", extra: "+2" } + ], + color: "#cccccc" + }, + { + content: [ + { icon: "Ai" }, + { icon: "Perplexity" }, + { icon: "GPT" } + ] + } ], faded: true, paused: true @@ -116,33 +242,140 @@ const pillClass = (val: string) => : 'bg-gray-100 text-gray-700 font-bold'; export default function DashboardGrid() { - const [selectedCampaigns, setSelectedCampaigns] = useState([]) - const [tableView, setTableView] = useState(null) - const [activeCard, setActiveCard] = useState(null) + const [selectedCampaigns, setSelectedCampaigns] = useState([]); + const [tableView, setTableView] = useState(null); + const [activeCard, setActiveCard] = useState(null); + const [hoverState, setHoverState] = useState({ cardId: null, ringIndex: null }); + const [isHovered, setIsHovered] = useState(false); const handleCardClick = (campaignName: string, paused: boolean) => { if (paused) return; + setSelectedCampaigns([campaignName]); + setActiveCard(campaignName); + if (activeCard) { - if (!selectedCampaigns.includes(campaignName)) { - setSelectedCampaigns(prev => [...prev, campaignName]) } - setActiveCard(campaignName) - } + }; - const handleBackClick = () => { + const handleBackClick = (e: React.MouseEvent) => { + e.stopPropagation(); // Prevent event bubbling to card click if (tableView) { - setTableView(null) + setTableView(null); } else if (activeCard) { - // Remove only the active card from selected campaigns - setSelectedCampaigns(prev => prev.filter(card => card !== activeCard)) - setActiveCard(null) + setSelectedCampaigns(prev => prev.filter(card => card !== activeCard)); + setActiveCard(null); } - } + }; const handleMenuClick = (campaignName: string) => { - setTableView(campaignName) - } + setTableView(campaignName); + }; + const handleRingHover = (cardId: string, ringIndex: number | null) => { + setHoverState({ cardId, ringIndex }); + }; + + const TagComponent = ({ content, color = "#4285F4", faded = false }: Tag & { faded?: boolean }) => { + const getIconContent = (item: TagContent) => { + switch (item.icon) { + case "Google": + return ( + <> + Google + {item.value && {item.value}} + {item.extra && ( + + {item.extra} + + )} + + ); + case "Map": + return ( + <> + Map + {item.value && {item.value}} + {item.extra && ( + + {item.extra} + + )} + + ); + case "Ai": + return AI; + case "GPT": + return GPT; + case "Perplexity": + return Perplexity; + default: + return item.text || null; + } + }; + + return ( + + {content.map((item, index) => ( +
+ {getIconContent(item)} +
+ ))} +
+ ); + }; + + + const CardHeader = ({ title, value, valueChange, icon, tooltipText }: { title: string, value: string, valueChange?: string, icon: string, tooltipText?: string }) => { + + return ( +
{ + if (tooltipText) { + setIsHovered(true) + } + }} + onMouseLeave={() => { + if (tooltipText) { + setIsHovered(false) + } + }}> + Active Keywords + +
+ +
+ {value} + + {tooltipText &&
+ {/* */} + + Info + {isHovered && ( +
+ {/* Tooltip triangle */} +
+ {tooltipText} +
+ )} +
} +
+
{title}
+
+ {valueChange} +
+ +
+ + +
+ + ) + } return ( <> @@ -150,28 +383,11 @@ export default function DashboardGrid() { {/* Main content area with new metric cards */}
-
- - - +
+ + + +
@@ -179,141 +395,138 @@ export default function DashboardGrid() { {CARDS.map((card, idx) => (
handleCardClick(card.title, card.paused)} - style={{ - transform: selectedCampaigns.includes(card.title) - ? 'translateY(-5px) scale(1.02)' - : 'translateY(0px) scale(1)' - }} + className="[perspective:1000px] h-[560px]" + onClick={() => handleCardClick(card.title, card.paused || false)} > - {selectedCampaigns.includes(card.title) && activeCard === card.title ? ( -
- {/* Header */} -
-
- +
+ )} +
+
+ + {/* Back of card */} +
+
+ {/* Header */} +
+
+ +

{card.title}

+
+ {/* -

{card.title}

+ + */}
- -
- - {/* Content with smooth transitions */} -
- -
- - {/* Table View with smooth transitions */} -
-
- - - {[ - { icon: '🅰️', title: 'Questions to ask your CPA httpAmazon' }, - { icon: '🅰️', title: 'Questions to ask your CPA Published on Amazon' }, - { icon: '🎵', title: 'Questions to ask your CPA Published on Amazon AWS' }, - { icon: '🅰️', title: 'Questions to ask your CPA httpAmazon' }, - { icon: '🅰️', title: 'Questions to ask your CPA Published on Amazon' }, - { icon: '🎵', title: 'Questions to ask your CPA Published on Amazon AWS' }, - { icon: '🅰️', title: 'Questions to ask your CPA httpAmazon' }, - { icon: '🅰️', title: 'Questions to ask your CPA Published on Amazon' }, - { icon: '🎵', title: 'Questions to ask your CPA Published on Amazon AWS' }, - { icon: '🅿️', title: 'Pinterest DR 97 DA 95 Traffic 3,989,220' }, - { icon: '📄', title: 'Questions to ask your CPA Substack DR 97 DA 95' } - ].map((row, rIdx) => ( - - - - - ))} - - -
{row.icon} -
{row.title}
-
- +
+ + + {[ + { icon: Amazon, title: 'Questions to ask your CPA httpAmazon' }, + { icon: Amazon, title: 'Questions to ask your CPA Published on Amazon' }, + { icon: Amazon, title: 'Questions to ask your CPA Published on Amazon AWS' }, + { icon: Amazon, title: 'Questions to ask your CPA httpAmazon' }, + { icon: Amazon, title: 'Questions to ask your CPA Published on Amazon' }, + { icon: Amazon, title: 'Questions to ask your CPA Published on Amazon AWS' }, + { icon: Amazon, title: 'Questions to ask your CPA httpAmazon' }, + { icon: Amazon, title: 'Questions to ask your CPA Published on Amazon' }, + { icon: Amazon, title: 'Questions to ask your CPA Published on Amazon AWS' }, + { icon: Amazon, title: 'Pinterest DR 97 DA 95 Traffic 3,989,220' }, + { icon: Amazon, title: 'Questions to ask your CPA Substack DR 97 DA 95' } + ].map((row, rIdx) => ( + + + + + ))} + +
+ + +
{row.title}
+
+
+
View All
-
View All
-
- ) : ( - // Card preview state -
- {card.badge && ( -
- {card.badge} -
- )} - -
- {card.title} -
-
- {card.tags.map((tag, i) => ( - - {tag.text} - {tag.extra && ( - - {tag.extra} - - )} - - ))} -
- {card.actionLink && ( -
- {card.actionLink} -
- )} - {card.paused && ( -
-
Campaign paused
- -
- )} -
- )} - +
))} - -
); @@ -323,4 +536,4 @@ export default function DashboardGrid() { // 106 // 112 // 118-121 -// 149 \ No newline at end of file +// 149 diff --git a/src/components/IntegratedStrategy.tsx b/src/components/IntegratedStrategy.tsx index c509bbc..78d804a 100644 --- a/src/components/IntegratedStrategy.tsx +++ b/src/components/IntegratedStrategy.tsx @@ -1,377 +1,377 @@ -import './shared/scrollableComponent.css'; - - -interface TaskItem { - id: string - platform: string - icon: string - title: string - metrics?: string - isLink?: boolean -} - -interface Category { - name: string - count: number - color: string - items: TaskItem[] -} - -interface Column { - title: string - count: number - date?: string - categories: Category[] -} - -const IntegratedStrategy = () => { - const columns: Column[] = [ - { - title: "Built", - count: 104, - categories: [ - { - name: "Social", - count: 4, - color: "bg-blue-100", - items: [ - { - id: "1", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - isLink: true, - }, - { - id: "2", - platform: "Substack", - icon: "🟠", - title: "Substack DR 97 DA 95", - isLink: true, - }, - { - id: "3", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic", - isLink: true, - }, - { - id: "4", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic", - isLink: true, - }, - ], - }, - { - name: "Citation", - count: 2, - color: "bg-blue-100", - items: [ - { - id: "5", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - isLink: true, - }, - { - id: "6", - platform: "Substack", - icon: "🟠", - title: "Substack DR 97 DA 95 Traffic", - isLink: true, - }, - ], - }, - { - name: "Web 2.0", - count: 3, - color: "bg-green-100", - items: [ - { - id: "7", - platform: "Apple Music", - icon: "🎵", - title: "Apple Music DR 97 DA 95 Traffic", - isLink: true, - }, - { - id: "8", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - isLink: true, - }, - { - id: "9", - platform: "Pinterest", - icon: "⚫", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - isLink: true, - }, - ], - }, - { - name: "Multimedia", - count: 1, - color: "bg-yellow-100", - items: [ - { - id: "10", - platform: "Pinterest", - icon: "⚫", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - isLink: true, - }, - ], - }, - ], - }, - { - title: "In Progress", - count: 14, - date: "23 Oct 2025", - categories: [ - { - name: "Social", - count: 3, - color: "bg-blue-100", - items: [ - { - id: "11", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "12", - platform: "Substack", - icon: "🟠", - title: "Substack DR 97 DA 95", - }, - { - id: "13", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic", - }, - ], - }, - { - name: "Citation", - count: 5, - color: "bg-blue-100", - items: [ - { - id: "14", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "15", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "16", - platform: "Substack", - icon: "🟠", - title: "Substack DR 97 DA 95 Traffic", - }, - { - id: "17", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "18", - platform: "Apple Music", - icon: "🎵", - title: "Apple Music DR 97 DA 95 Traffic", - }, - ], - }, - { - name: "Web 2.0", - count: 5, - color: "bg-green-100", - items: [ - { - id: "19", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "20", - platform: "Questions", - icon: "⚫", - title: "Questions to ask your CPA Published o...", - }, - { - id: "21", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic", - }, - ], - }, - ], - }, - { - title: "Coming up", - count: 10, - date: "23 Nov 2025", - categories: [ - { - name: "Social", - count: 5, - color: "bg-blue-100", - items: [ - { - id: "22", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "23", - platform: "Substack", - icon: "🟠", - title: "Substack DR 97 DA 95", - }, - { - id: "24", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic", - }, - { - id: "25", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "26", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic", - }, - ], - }, - { - name: "Citation", - count: 5, - color: "bg-blue-100", - items: [ - { - id: "27", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "28", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - { - id: "29", - platform: "Substack", - icon: "🟠", - title: "Substack DR 97 DA 95 Traffic", - }, - { - id: "30", - platform: "PayPal", - icon: "🅿️", - title: "Paypal DR 97 DA 95 Traffic", - }, - { - id: "31", - platform: "Apple Music", - icon: "🎵", - title: "Apple Music DR 97 DA 95 Traffic", - }, - ], - }, - { - name: "Web 2.0", - count: 2, - color: "bg-green-100", - items: [ - { - id: "32", - platform: "Pinterest", - icon: "🅿️", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - }, - ], - }, - ], - }, - ] - - const CategorySection = ({ category }: { category: Category }) => ( -
-
-
-
- {category.name} - {category.count} -
-
-
- {category.items.map((item) => ( -
-
- {item.icon} - - {item.title} - -
-
- ))} -
-
- ) - - return ( -
-
- {columns.map((column, index) => ( -
-
-
-
-

{column.title}

- - {column.count} - -
- {column.date && {column.date}} -
-
-
- {column.categories.map((category, categoryIndex) => ( - - ))} -
-
- ))} -
-
- ) -} - -export default IntegratedStrategy +import './shared/scrollableComponent.css'; + + +interface TaskItem { + id: string + platform: string + icon: string + title: string + metrics?: string + isLink?: boolean +} + +interface Category { + name: string + count: number + color: string + items: TaskItem[] +} + +interface Column { + title: string + count: number + date?: string + categories: Category[] +} + +const IntegratedStrategy = () => { + const columns: Column[] = [ + { + title: "Built", + count: 104, + categories: [ + { + name: "Social", + count: 4, + color: "bg-blue-100", + items: [ + { + id: "1", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + isLink: true, + }, + { + id: "2", + platform: "Substack", + icon: "🟠", + title: "Substack DR 97 DA 95", + isLink: true, + }, + { + id: "3", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic", + isLink: true, + }, + { + id: "4", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic", + isLink: true, + }, + ], + }, + { + name: "Citation", + count: 2, + color: "bg-blue-100", + items: [ + { + id: "5", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + isLink: true, + }, + { + id: "6", + platform: "Substack", + icon: "🟠", + title: "Substack DR 97 DA 95 Traffic", + isLink: true, + }, + ], + }, + { + name: "Web 2.0", + count: 3, + color: "bg-green-100", + items: [ + { + id: "7", + platform: "Apple Music", + icon: "🎵", + title: "Apple Music DR 97 DA 95 Traffic", + isLink: true, + }, + { + id: "8", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + isLink: true, + }, + { + id: "9", + platform: "Pinterest", + icon: "⚫", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + isLink: true, + }, + ], + }, + { + name: "Multimedia", + count: 1, + color: "bg-yellow-100", + items: [ + { + id: "10", + platform: "Pinterest", + icon: "⚫", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + isLink: true, + }, + ], + }, + ], + }, + { + title: "In Progress", + count: 14, + date: "23 Oct 2025", + categories: [ + { + name: "Social", + count: 3, + color: "bg-blue-100", + items: [ + { + id: "11", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "12", + platform: "Substack", + icon: "🟠", + title: "Substack DR 97 DA 95", + }, + { + id: "13", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic", + }, + ], + }, + { + name: "Citation", + count: 5, + color: "bg-blue-100", + items: [ + { + id: "14", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "15", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "16", + platform: "Substack", + icon: "🟠", + title: "Substack DR 97 DA 95 Traffic", + }, + { + id: "17", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "18", + platform: "Apple Music", + icon: "🎵", + title: "Apple Music DR 97 DA 95 Traffic", + }, + ], + }, + { + name: "Web 2.0", + count: 5, + color: "bg-green-100", + items: [ + { + id: "19", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "20", + platform: "Questions", + icon: "⚫", + title: "Questions to ask your CPA Published o...", + }, + { + id: "21", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic", + }, + ], + }, + ], + }, + { + title: "Coming up", + count: 10, + date: "23 Nov 2025", + categories: [ + { + name: "Social", + count: 5, + color: "bg-blue-100", + items: [ + { + id: "22", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "23", + platform: "Substack", + icon: "🟠", + title: "Substack DR 97 DA 95", + }, + { + id: "24", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic", + }, + { + id: "25", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "26", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic", + }, + ], + }, + { + name: "Citation", + count: 5, + color: "bg-blue-100", + items: [ + { + id: "27", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "28", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + { + id: "29", + platform: "Substack", + icon: "🟠", + title: "Substack DR 97 DA 95 Traffic", + }, + { + id: "30", + platform: "PayPal", + icon: "🅿️", + title: "Paypal DR 97 DA 95 Traffic", + }, + { + id: "31", + platform: "Apple Music", + icon: "🎵", + title: "Apple Music DR 97 DA 95 Traffic", + }, + ], + }, + { + name: "Web 2.0", + count: 2, + color: "bg-green-100", + items: [ + { + id: "32", + platform: "Pinterest", + icon: "🅿️", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + }, + ], + }, + ], + }, + ] + + const CategorySection = ({ category }: { category: Category }) => ( +
+
+
+
+ {category.name} + {category.count} +
+
+
+ {category.items.map((item) => ( +
+
+ {item.icon} + + {item.title} + +
+
+ ))} +
+
+ ) + + return ( +
+
+ {columns.map((column, index) => ( +
+
+
+
+

{column.title}

+ + {column.count} + +
+ {column.date && {column.date}} +
+
+
+ {column.categories.map((category, categoryIndex) => ( + + ))} +
+
+ ))} +
+
+ ) +} + +export default IntegratedStrategy diff --git a/src/components/MultiRingCircularProgress.tsx b/src/components/MultiRingCircularProgress.tsx index f444b3b..304474a 100644 --- a/src/components/MultiRingCircularProgress.tsx +++ b/src/components/MultiRingCircularProgress.tsx @@ -13,20 +13,33 @@ interface Card { interface MultiRingCircularProgressProps { card: Card; + hoveredIndex: number | null; + onHover: (index: number | null) => void; + cardId: string; } -export default function MultiRingCircularProgress({ card }: MultiRingCircularProgressProps) { +export default function MultiRingCircularProgress({ card, hoveredIndex, onHover, cardId }: MultiRingCircularProgressProps) { const { percent, rings } = card; - + // Create ring data with proper outer and inner radius calculations const ringData = rings.map((ring, index) => ({ ...ring, - outerRadius: 120 - (index * 18), // Decrease by 18px for each ring - innerRadius: 105 - (index * 18), // Decrease by 18px for each ring + outerRadius: 125 - (index * 20), // Decrease by 20px for each ring + innerRadius: 110 - (index * 20), // Decrease by 20px for each ring })); + // When a ring is hovered, other rings become gray + const getHoverColor = (ring: Ring, index: number) => { + if (hoveredIndex === null) return ring.color; + if (hoveredIndex === index) return ring.color; + return "#d3d3d3"; // gray for non-hovered rings + }; + return ( -
+
onHover(null)} + > {ringData.map((ring, index) => ( onHover(index)} + onMouseLeave={() => onHover(null)} + fill={getHoverColor(ring, index)} > - + ))} diff --git a/src/components/Portfolio/BacklinkTypeDropdown.tsx b/src/components/Portfolio/BacklinkTypeDropdown.tsx index 3c02b9b..aa23408 100644 --- a/src/components/Portfolio/BacklinkTypeDropdown.tsx +++ b/src/components/Portfolio/BacklinkTypeDropdown.tsx @@ -1,47 +1,61 @@ -import React, { useState } from 'react' - -const BacklinkTypeDropdown = () => { - - const [dropdownOpen, setDropdownOpen] = useState(false); - const [checkedRings, setCheckedRings] = useState>({ - Social: true, Citation: true, 'Web 2.0': true, Multimedia: false, Crowd: false - }); - - const toggleRing = (ring: string) => setCheckedRings(r => ({ ...r, [ring]: !r[ring] })); - - return ( -
- - {dropdownOpen && ( -
-
Show rings:
- {Object.keys(checkedRings).map((ring, idx) => ( - - ))} -
- )} -
- ); - -} - +import { ChevronDown } from 'lucide-react'; +import React, { useState, useEffect, useRef } from 'react' + +const BacklinkTypeDropdown = ({ options, title, subTitle }: { options: Record, title: string, subTitle?: string }) => { + + const [dropdownOpen, setDropdownOpen] = useState(false); + const [checkedRings, setCheckedRings] = useState>(options); + const dropdownRef = useRef(null); + + const toggleRing = (ring: string) => setCheckedRings(r => ({ ...r, [ring]: !r[ring] })); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setDropdownOpen(false); + } + }; + + if (dropdownOpen) { + document.addEventListener('mousedown', handleClickOutside); + } + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [dropdownOpen]); + + return ( +
+ + {dropdownOpen && ( +
+
{subTitle}:
+ {Object.keys(checkedRings).map((ring, idx) => ( + + ))} +
+ )} +
+ ); + +} + export default BacklinkTypeDropdown; \ No newline at end of file diff --git a/src/components/ProtectedRoute.tsx b/src/components/ProtectedRoute.tsx new file mode 100644 index 0000000..367f6b9 --- /dev/null +++ b/src/components/ProtectedRoute.tsx @@ -0,0 +1,20 @@ +import { Navigate } from 'react-router-dom'; + +interface ProtectedRouteProps { + children: JSX.Element; +} + +const ProtectedRoute = ({ children }: ProtectedRouteProps) => { + // Check if user is logged in (from localStorage or context) + const user = localStorage.getItem('sp_user'); + + if (!user) { + // If not logged in, redirect to login page + return ; + } + + // Else render the protected component + return children; +}; + +export default ProtectedRoute; diff --git a/src/components/Strategy/ProgressMetrics.tsx b/src/components/Strategy/ProgressMetrics.tsx index 46a30b7..7e62302 100644 --- a/src/components/Strategy/ProgressMetrics.tsx +++ b/src/components/Strategy/ProgressMetrics.tsx @@ -1,93 +1,122 @@ -import Preplextiy from "../../assets/icons/Preplextiy.png" -import ChatGPT from "../../assets/icons/gpt.png" -import MetricCard from "../shared/MetricCard" - - -function ProgressMetrics() { - return ( -
-

CPA Los Angeles

- -
- {/* Left section with progress indicators */} -
- {/* 60% Progress */} -
-
-
60%
-
120/250 links
-
-
until content publishing + LLM seeding unlocked
- {/* Progress bar */} -
-
-
-
- -
- -
- {/* 75% Keyword Visibility */} -
-
75%
-
Keyword Visibility
-
- -
-
- - {/* ChatGPT */} - - -
-
-
- - {/* Right section with Chat GPT and metrics */} -
- - {/* Performance metrics with chart */} -
-
- - - - - - - - - - - -
-
-
- G - 7 - +10 -
-
- 📍 - 5 - +3 -
-
Current Rank
-
-
-
-
- - {/* */} -
- ) -} - +import MetricCard from "../shared/MetricCard" +import Progress from "../../assets/icons/InProgress.png" +import No from "../../assets/icons/no.png" +import { CircleCheck } from 'lucide-react' +import { Stepper } from "../shared/Stepper" +import Preplextiy from "../../assets/icons/preplextiy.png" +import ChatGPT from "../../assets/icons/gpt.png" +import Gemini from "../../assets/icons/gemini.png" +import Gemini1 from "../../assets/icons/gemini1.png" +import Gemini2 from "../../assets/icons/gemini-border.png" +import Google from "../../assets/icons/Google.png" + + +function ProgressMetrics() { + + return ( +
+ +
+

CPA Los Angeles

+ {/* Example 2: With Completed Status */} +
+ +
+ +
+ +
+ {/* Left section with progress indicators */} +
+ {/* 60% Progress */} +
+
+
60%
+
120/250 links
+
+
until content publishing + LLM seeding unlocked
+ {/* Progress bar */} +
+
+
+
+ +
+ +
+ {/* 75% Keyword Visibility */} +
+
75%
+
Keyword Visibility
+
+ +
+
+ + + + + + + + + +
+
+
+ + {/* Right section with Chat GPT and metrics */} +
+ + {/* Performance metrics with chart */} +
+
+ + + + + + + + + + + +
+
+
+ + 7 + +10 +
+
+ + 5 + +3 +
+
Current Rank
+
+
+
+
+ + {/* */} +
+ ) +} + export default ProgressMetrics \ No newline at end of file diff --git a/src/components/Strategy/RoadmapSidebar.tsx b/src/components/Strategy/RoadmapSidebar.tsx index c1517ff..e2d17ff 100644 --- a/src/components/Strategy/RoadmapSidebar.tsx +++ b/src/components/Strategy/RoadmapSidebar.tsx @@ -1,70 +1,70 @@ -import Vector from "../../assets/icons/Vector.png" -import Vector2 from "../../assets/icons/Vector2.png" - -// Roadmap sidebar component -const RoadmapSidebar = ({ - selectedKeyword, - onKeywordSelect, - mode -}: { - selectedKeyword: string - onKeywordSelect: (keyword: string) => void - mode: string -}) => { - const keywords = [ - "CPA Los Angeles", - "Richard Bower CPA", - "CPA Los Angeles 2", - "CPA Hollywood", - "Best CPA Los Angeles", - "CPA Los Angeles 4", - ] - - return ( -
- {mode ? - null - : -
-

Roadmap

-
- 1001 -
-
Total Links
-
Across all keywords
-
-
-
- } - - -
- {keywords.map((keyword, index) => ( - - ))} -
-
- ) -} - +import Vector from "../../assets/icons/Vector.png" +import Vector2 from "../../assets/icons/Vector2.png" + +// Roadmap sidebar component +const RoadmapSidebar = ({ + selectedKeyword, + onKeywordSelect, + mode +}: { + selectedKeyword: string + onKeywordSelect: (keyword: string) => void + mode: string +}) => { + const keywords = [ + "CPA Los Angeles", + "Richard Bower CPA", + "CPA Los Angeles 2", + "CPA Hollywood", + "Best CPA Los Angeles", + "CPA Los Angeles 4", + ] + + return ( +
+ {mode ? + null + : +
+

Roadmap

+
+ 1001 +
+
Total Links
+
Across all keywords
+
+
+
+ } + + +
+ {keywords.map((keyword, index) => ( + + ))} +
+
+ ) +} + export default RoadmapSidebar \ No newline at end of file diff --git a/src/components/Strategy/ShowDetails.tsx b/src/components/Strategy/ShowDetails.tsx index a1b2573..86d4bea 100644 --- a/src/components/Strategy/ShowDetails.tsx +++ b/src/components/Strategy/ShowDetails.tsx @@ -1,262 +1,262 @@ - -import { useState } from "react" - -interface Task { - id: string - title: string - platform: "wordpress" | "substack" | "paypal" | "pinterest" | "apple-music" - metrics?: string -} - -interface Column { - id: string - title: string - count: number - date: string - tasks: Task[] -} - -const platformIcons = { - wordpress: ( -
- W -
- ), - substack: ( -
- S -
- ), - paypal: ( -
- P -
- ), - pinterest: ( -
- P -
- ), - "apple-music": ( -
- A -
- ), -} - -const initialData: Column[] = [ - { - id: "published", - title: "Published", - count: 10, - date: "Since 23 Oct 2025", - tasks: [ - { - id: "1", - title: "Questions to ask your CPA Published o...", - platform: "wordpress", - }, - { - id: "2", - title: "Substack DR 97 DA 95", - platform: "substack", - }, - { - id: "3", - title: "Paypal DR 97 DA 95 Traffic", - platform: "paypal", - }, - { - id: "4", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "5", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "6", - title: "Substack DR 97 DA 95 Traffic", - platform: "substack", - }, - { - id: "7", - title: "Paypal DR 97 DA 95 Traffic 3,989,220", - platform: "paypal", - }, - { - id: "8", - title: "Apple Music DR 97 DA 95 Traffic", - platform: "apple-music", - }, - { - id: "9", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "10", - title: "Questions to ask your CPA Published o...", - platform: "wordpress", - }, - ], - }, - { - id: "in-progress", - title: "In Progress", - count: 10, - date: "23 Oct 2025", - tasks: [ - { - id: "11", - title: "Questions to ask your CPA Published o...", - platform: "wordpress", - }, - { - id: "12", - title: "Substack DR 97 DA 95", - platform: "substack", - }, - { - id: "13", - title: "Paypal DR 97 DA 95 Traffic", - platform: "paypal", - }, - { - id: "14", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "15", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "16", - title: "Substack DR 97 DA 95 Traffic", - platform: "substack", - }, - { - id: "17", - title: "Paypal DR 97 DA 95 Traffic 3,989,220", - platform: "paypal", - }, - { - id: "18", - title: "Apple Music DR 97 DA 95 Traffic", - platform: "apple-music", - }, - { - id: "19", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "20", - title: "Questions to ask your CPA Published o...", - platform: "wordpress", - }, - ], - }, - { - id: "next-month", - title: "Next month", - count: 10, - date: "23 Nov 2025", - tasks: [ - { - id: "21", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "22", - title: "Substack DR 97 DA 95", - platform: "substack", - }, - { - id: "23", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "24", - title: "Paypal DR 97 DA 95 Traffic", - platform: "paypal", - }, - { - id: "25", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "26", - title: "Substack DR 97 DA 95 Traffic", - platform: "substack", - }, - { - id: "27", - title: "Paypal DR 97 DA 95 Traffic 3,989,220", - platform: "paypal", - }, - { - id: "28", - title: "Apple Music DR 97 DA 95 Traffic", - platform: "apple-music", - }, - { - id: "29", - title: "Pinterest DR 97 DA 95 Traffic 3,989,220", - platform: "pinterest", - }, - { - id: "30", - title: "Questions to ask your CPA Published o...", - platform: "wordpress", - }, - ], - }, -] - -function ShowDetails() { - const [columns, setColumns] = useState(initialData) - - return ( -
-
- {columns.map((column) => ( -
- {/* Column Header */} -
-
-

{column.title}

- {column.count} -
-

{column.date}

-
- - {/* Tasks List */} -
- {column.tasks.map((task) => ( -
- {platformIcons[task.platform]} -
-

{task.title}

-
-
- ))} -
-
- ))} -
-
- ) -} - + +import { useState } from "react" + +interface Task { + id: string + title: string + platform: "wordpress" | "substack" | "paypal" | "pinterest" | "apple-music" + metrics?: string +} + +interface Column { + id: string + title: string + count: number + date: string + tasks: Task[] +} + +const platformIcons = { + wordpress: ( +
+ W +
+ ), + substack: ( +
+ S +
+ ), + paypal: ( +
+ P +
+ ), + pinterest: ( +
+ P +
+ ), + "apple-music": ( +
+ A +
+ ), +} + +const initialData: Column[] = [ + { + id: "published", + title: "Published", + count: 10, + date: "Since 23 Oct 2025", + tasks: [ + { + id: "1", + title: "Questions to ask your CPA Published o...", + platform: "wordpress", + }, + { + id: "2", + title: "Substack DR 97 DA 95", + platform: "substack", + }, + { + id: "3", + title: "Paypal DR 97 DA 95 Traffic", + platform: "paypal", + }, + { + id: "4", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "5", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "6", + title: "Substack DR 97 DA 95 Traffic", + platform: "substack", + }, + { + id: "7", + title: "Paypal DR 97 DA 95 Traffic 3,989,220", + platform: "paypal", + }, + { + id: "8", + title: "Apple Music DR 97 DA 95 Traffic", + platform: "apple-music", + }, + { + id: "9", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "10", + title: "Questions to ask your CPA Published o...", + platform: "wordpress", + }, + ], + }, + { + id: "in-progress", + title: "In Progress", + count: 10, + date: "23 Oct 2025", + tasks: [ + { + id: "11", + title: "Questions to ask your CPA Published o...", + platform: "wordpress", + }, + { + id: "12", + title: "Substack DR 97 DA 95", + platform: "substack", + }, + { + id: "13", + title: "Paypal DR 97 DA 95 Traffic", + platform: "paypal", + }, + { + id: "14", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "15", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "16", + title: "Substack DR 97 DA 95 Traffic", + platform: "substack", + }, + { + id: "17", + title: "Paypal DR 97 DA 95 Traffic 3,989,220", + platform: "paypal", + }, + { + id: "18", + title: "Apple Music DR 97 DA 95 Traffic", + platform: "apple-music", + }, + { + id: "19", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "20", + title: "Questions to ask your CPA Published o...", + platform: "wordpress", + }, + ], + }, + { + id: "next-month", + title: "Next month", + count: 10, + date: "23 Nov 2025", + tasks: [ + { + id: "21", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "22", + title: "Substack DR 97 DA 95", + platform: "substack", + }, + { + id: "23", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "24", + title: "Paypal DR 97 DA 95 Traffic", + platform: "paypal", + }, + { + id: "25", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "26", + title: "Substack DR 97 DA 95 Traffic", + platform: "substack", + }, + { + id: "27", + title: "Paypal DR 97 DA 95 Traffic 3,989,220", + platform: "paypal", + }, + { + id: "28", + title: "Apple Music DR 97 DA 95 Traffic", + platform: "apple-music", + }, + { + id: "29", + title: "Pinterest DR 97 DA 95 Traffic 3,989,220", + platform: "pinterest", + }, + { + id: "30", + title: "Questions to ask your CPA Published o...", + platform: "wordpress", + }, + ], + }, +] + +function ShowDetails() { + const [columns, setColumns] = useState(initialData) + + return ( +
+
+ {columns.map((column) => ( +
+ {/* Column Header */} +
+
+

{column.title}

+ {column.count} +
+

{column.date}

+
+ + {/* Tasks List */} +
+ {column.tasks.map((task) => ( +
+ {platformIcons[task.platform]} +
+

{task.title}

+
+
+ ))} +
+
+ ))} +
+
+ ) +} + export default ShowDetails \ No newline at end of file diff --git a/src/components/flip-card.tsx b/src/components/flip-card.tsx new file mode 100644 index 0000000..9b26931 --- /dev/null +++ b/src/components/flip-card.tsx @@ -0,0 +1,307 @@ +"use client" + +import type React from "react" +import { useState } from "react" +import { ArrowLeft, Menu } from "lucide-react" +import CampaignTracker from "./CampaignTracker"; + +// Your existing components - make sure these are imported +// import MultiRingCircularProgress from './multi-ring-circular-progress'; +// import CampaignTracker from './campaign-tracker'; + +const CARDS = [ + { + title: "Richard Bower CPA", + percent: 99, + rings: [ + { color: "#4285F4", value: 99 }, // blue + { color: "#34A853", value: 80 }, // green + { color: "#FBBC05", value: 60 }, // yellow + { color: "#EA4335", value: 40 } // red + ], + tags: [ + { text: "G 14", extra: "+1", color: "#4285F4" }, + { text: "Ai" }, + { text: "LLM" }, + ] + }, + { + title: "CPA Los Angeles", + percent: 24, + rings: [ + { color: "#4285F4", value: 24 }, + { color: "#34A853", value: 18 }, + { color: "#FBBC05", value: 14 }, + { color: "#EA4335", value: 8 } + ], + tags: [ + { text: "G 14", extra: "-2", color: "#4285F4" } + ] + }, + { + title: "CPA Los Angeles4", + percent: 45, + rings: [ + { color: "#4285F4", value: 45 }, + { color: "#34A853", value: 42 }, + { color: "#FBBC05", value: 32 }, + { color: "#EA4335", value: 24 } + ], + tags: [ + { text: "G 14", extra: "-2", color: "#4285F4" }, + { text: "+7" }, + { text: "Ai" } + ] + }, + { + title: "Best CPA Los Angeles5", + percent: 89, + rings: [ + { color: "#4285F4", value: 89 }, + { color: "#34A853", value: 80 }, + { color: "#FBBC05", value: 72 }, + { color: "#EA4335", value: 57 } + ], + tags: [ + { text: "G 14", extra: "+1", color: "#4285F4" }, + { text: "+7" }, + { text: "Ai" } + ] + }, + { + title: "CPA Hollywood", + percent: 100, + rings: [ + { color: "#4285F4", value: 100 }, + { color: "#34A853", value: 100 }, + { color: "#FBBC05", value: 100 }, + { color: "#EA4335", value: 100 } + ], + tags: [ + { text: "G 14", extra: "+1", color: "#4285F4" }, + { text: "+7" }, + { text: "Ai" } + ], + badge: "Content Unlocked", + actionLink: "View Published Content " + }, + { + title: "Best CPA Los Angeles21", + percent: 89, + rings: [ + { color: "#cccccc", value: 89 }, + { color: "#cccccc", value: 80 }, + { color: "#cccccc", value: 72 }, + { color: "#cccccc", value: 57 } + ], + tags: [ + { text: "G 14", extra: "+1", color: "#cccccc" }, + { text: "+7", color: "#cccccc" }, + { text: "Ai", color: "#cccccc" } + ], + faded: true, + paused: true + } +]; + + +export default function FlipCardComplete() { + const [selectedCampaigns, setSelectedCampaigns] = useState([]) + const [activeCard, setActiveCard] = useState(null) + const [tableView, setTableView] = useState(null) + const [flippedCards, setFlippedCards] = useState([]) + + const handleCardClick = (title: string, paused: boolean) => { + if (paused) return + + if (!flippedCards.includes(title)) { + setFlippedCards([...flippedCards, title]) + setSelectedCampaigns([...selectedCampaigns, title]) + setActiveCard(title) + } + } + + const handleBackClick = (e: React.MouseEvent, title: string) => { + e.stopPropagation() + setFlippedCards(flippedCards.filter((t) => t !== title)) + setSelectedCampaigns(selectedCampaigns.filter((t) => t !== title)) + setActiveCard(null) + setTableView(null) + } + + const handleMenuClick = (title: string) => { + setTableView(tableView === title ? null : title) + } +console.log(CARDS) + return ( +
+ {CARDS.map((card, idx) => ( +
+
+ + {/* FRONT FACE - Your original card preview */} +
handleCardClick(card.title, card.paused)} + > +
+ {card.badge && ( +
+ {card.badge} +
+ )} +
+ {card.title.charAt(0)} +
+ +
+ {card.title} +
+ +
+ {card.tags.map((tag, i) => ( + + {tag.text} + {tag.extra && ( + + {tag.extra} + + )} + + ))} +
+ + {card.actionLink && ( +
+ {card.actionLink} +
+ )} + + {card.paused && ( +
+
Campaign paused
+ +
+ )} +
+
+ + {/* BACK FACE - Your original expanded card view */} +
+
+ {/* Header */} +
+
+ +

{card.title}

+
+ +
+ + {/* Content with smooth transitions */} +
+
+ +
+
+ + {/* Table View with smooth transitions */} +
+
+ + + {[ + { icon: "🅰️", title: "Questions to ask your CPA httpAmazon" }, + { icon: "🅰️", title: "Questions to ask your CPA Published on Amazon" }, + { icon: "🎵", title: "Questions to ask your CPA Published on Amazon AWS" }, + { icon: "🅰️", title: "Questions to ask your CPA httpAmazon" }, + { icon: "🅰️", title: "Questions to ask your CPA Published on Amazon" }, + { icon: "🎵", title: "Questions to ask your CPA Published on Amazon AWS" }, + { icon: "🅰️", title: "Questions to ask your CPA httpAmazon" }, + { icon: "🅰️", title: "Questions to ask your CPA Published on Amazon" }, + { icon: "🎵", title: "Questions to ask your CPA Published on Amazon AWS" }, + { icon: "🅿️", title: "Pinterest DR 97 DA 95 Traffic 3,989,220" }, + { icon: "📄", title: "Questions to ask your CPA Substack DR 97 DA 95" }, + ].map((row, rIdx) => ( + + + + + ))} + +
{row.icon} +
{row.title}
+
+
+
+ View All +
+
+
+
+
+
+ ))} +
+ ) +} diff --git a/src/components/shared/ContainerPage.tsx b/src/components/shared/ContainerPage.tsx index d601e9f..cf72b64 100644 --- a/src/components/shared/ContainerPage.tsx +++ b/src/components/shared/ContainerPage.tsx @@ -1,11 +1,11 @@ -import React from 'react' - -const ContainerPage = ({ children }: { children: React.ReactNode }) => { - return ( -
- {children} -
- ) -} - +import React from 'react' + +const ContainerPage = ({ children }: { children: React.ReactNode }) => { + return ( +
+ {children} +
+ ) +} + export default ContainerPage \ No newline at end of file diff --git a/src/components/shared/Footer.tsx b/src/components/shared/Footer.tsx index c22294e..042a1b5 100644 --- a/src/components/shared/Footer.tsx +++ b/src/components/shared/Footer.tsx @@ -3,9 +3,9 @@ import { Link } from "react-router-dom" const Footer = () => { return (