From 873f2d80462a00842a49f8028f2df8909044205a Mon Sep 17 00:00:00 2001 From: Juri Strumpflohner Date: Fri, 23 May 2025 16:52:51 +0200 Subject: [PATCH] feat(nx-dev): AI landing page (#31310) adds a new AI landing page at `/ai` --- .gitignore | 4 +- nx-dev/nx-dev/app/ai/page.tsx | 76 +++ .../public/images/ai/ai-ci-fix-thumb.avif | Bin 0 -> 15273 bytes .../images/ai/nx-copilot-mcp-yt-thumb.avif | Bin 0 -> 10053 bytes .../images/ai/terminal-llm-comm-thumb.avif | Bin 0 -> 36156 bytes .../ai/video-code-gen-and-ai-thumb.avif | Bin 0 -> 34936 bytes .../nx-console/nx-mcp-landingpage-img.avif | Bin 0 -> 32430 bytes nx-dev/nx-dev/redirect-rules.js | 2 +- nx-dev/ui-ai-landing-page/.babelrc | 12 + nx-dev/ui-ai-landing-page/.eslintrc.json | 18 + nx-dev/ui-ai-landing-page/README.md | 7 + nx-dev/ui-ai-landing-page/jest.config.ts | 9 + nx-dev/ui-ai-landing-page/project.json | 9 + nx-dev/ui-ai-landing-page/src/index.ts | 5 + .../src/lib/call-to-action.tsx | 90 +++ .../ui-ai-landing-page/src/lib/features.tsx | 297 ++++++++++ nx-dev/ui-ai-landing-page/src/lib/hero.tsx | 519 ++++++++++++++++++ .../src/lib/problem-statement.tsx | 308 +++++++++++ .../src/lib/technical-implementation.tsx | 217 ++++++++ nx-dev/ui-ai-landing-page/tsconfig.json | 20 + nx-dev/ui-ai-landing-page/tsconfig.lib.json | 23 + nx-dev/ui-ai-landing-page/tsconfig.spec.json | 22 + nx-dev/ui-icons/src/index.ts | 1 + .../src/lib/ai/model-context-protocol.tsx | 21 + nx-dev/ui-icons/src/lib/products.tsx | 16 + tools/ai-landing-tasks.md | 222 ++++++++ tools/nx-ai-landing-page-copy.md | 287 ++++++++++ tsconfig.base.json | 3 + 28 files changed, 2186 insertions(+), 2 deletions(-) create mode 100644 nx-dev/nx-dev/app/ai/page.tsx create mode 100644 nx-dev/nx-dev/public/images/ai/ai-ci-fix-thumb.avif create mode 100644 nx-dev/nx-dev/public/images/ai/nx-copilot-mcp-yt-thumb.avif create mode 100644 nx-dev/nx-dev/public/images/ai/terminal-llm-comm-thumb.avif create mode 100644 nx-dev/nx-dev/public/images/ai/video-code-gen-and-ai-thumb.avif create mode 100644 nx-dev/nx-dev/public/images/nx-console/nx-mcp-landingpage-img.avif create mode 100644 nx-dev/ui-ai-landing-page/.babelrc create mode 100644 nx-dev/ui-ai-landing-page/.eslintrc.json create mode 100644 nx-dev/ui-ai-landing-page/README.md create mode 100644 nx-dev/ui-ai-landing-page/jest.config.ts create mode 100644 nx-dev/ui-ai-landing-page/project.json create mode 100644 nx-dev/ui-ai-landing-page/src/index.ts create mode 100644 nx-dev/ui-ai-landing-page/src/lib/call-to-action.tsx create mode 100644 nx-dev/ui-ai-landing-page/src/lib/features.tsx create mode 100644 nx-dev/ui-ai-landing-page/src/lib/hero.tsx create mode 100644 nx-dev/ui-ai-landing-page/src/lib/problem-statement.tsx create mode 100644 nx-dev/ui-ai-landing-page/src/lib/technical-implementation.tsx create mode 100644 nx-dev/ui-ai-landing-page/tsconfig.json create mode 100644 nx-dev/ui-ai-landing-page/tsconfig.lib.json create mode 100644 nx-dev/ui-ai-landing-page/tsconfig.spec.json create mode 100644 nx-dev/ui-icons/src/lib/ai/model-context-protocol.tsx create mode 100644 tools/ai-landing-tasks.md create mode 100644 tools/nx-ai-landing-page-copy.md diff --git a/.gitignore b/.gitignore index 9981a021a4..893b2561dd 100644 --- a/.gitignore +++ b/.gitignore @@ -74,4 +74,6 @@ storybook-static .kotlin .cursor/rules/nx-rules.mdc -.github/instructions/nx.instructions.md \ No newline at end of file +.github/instructions/nx.instructions.md +.cursor/rules/nx-rules.mdc +.github/instructions/nx.instructions.md diff --git a/nx-dev/nx-dev/app/ai/page.tsx b/nx-dev/nx-dev/app/ai/page.tsx new file mode 100644 index 0000000000..9112cc1f2e --- /dev/null +++ b/nx-dev/nx-dev/app/ai/page.tsx @@ -0,0 +1,76 @@ +import type { Metadata } from 'next'; +import { DefaultLayout } from '@nx/nx-dev/ui-common'; +import { Hero } from '@nx/nx-dev/ui-ai-landing-page'; +import { ProblemStatement } from '@nx/nx-dev/ui-ai-landing-page'; +import { Features } from '@nx/nx-dev/ui-ai-landing-page'; +import { CallToAction } from '@nx/nx-dev/ui-ai-landing-page'; +import { TechnicalImplementation } from '@nx/nx-dev/ui-ai-landing-page'; + +export const metadata: Metadata = { + title: 'Nx - Make AI work in large codebases', + description: + 'Empower your AI assistants with workspace intelligence to understand your codebase structure, project dependencies, and build processes at a glance.', + alternates: { + canonical: 'https://nx.dev/ai', + }, + openGraph: { + title: 'Nx - Make AI work in large codebases', + description: + 'Empower your AI assistants with workspace intelligence to understand your codebase structure, project dependencies, and build processes at a glance.', + url: 'https://nx.dev/ai', + siteName: 'Nx', + images: [ + { + url: 'https://nx.dev/images/nx-ai-landing-og.png', + width: 1200, + height: 630, + }, + ], + locale: 'en_US', + type: 'website', + }, + keywords: [ + 'nx', + 'ai', + 'workspace', + 'architecture', + 'codebase', + 'llm', + 'AI workspace development', + 'LLM code assistant', + 'Nx AI integration', + 'multi-project AI tools', + 'enterprise AI development', + 'intelligent code generation', + 'MCP server', + 'workspace AI tools', + 'monorepo AI', + 'architectural intelligence', + 'code assistant', + 'workspace intelligence', + ], +}; + +export default function AiLandingPage() { + return ( + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ ); +} diff --git a/nx-dev/nx-dev/public/images/ai/ai-ci-fix-thumb.avif b/nx-dev/nx-dev/public/images/ai/ai-ci-fix-thumb.avif new file mode 100644 index 0000000000000000000000000000000000000000..8957482690b22d94dbe4ade2cd33f63b875863f9 GIT binary patch literal 15273 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 literal 0 HcmV?d00001 diff --git a/nx-dev/nx-dev/public/images/ai/nx-copilot-mcp-yt-thumb.avif b/nx-dev/nx-dev/public/images/ai/nx-copilot-mcp-yt-thumb.avif new file mode 100644 index 0000000000000000000000000000000000000000..3a0df97f6d2d1d7c4b3970d13240df4c93e884c5 GIT binary patch literal 10053 zcmXweWmFto&+XvuQrsO%afjmW?rsBvySux)6^8=F9R_#T;_eiuIJeJx*O#o5o$Q^J zJvy0RV`9{$B(@5C8x)jQ?^vAkhAQyZ@&U z{3|RV|7-r&W8%)jD&_!k_}@w!prfMPU!^8grWD|E*u^<@a|0pao2avP98ORd=`Ojek|50Cnj&>&hY5(lsVbBneA<+M> zVz)Clam556BI4Uvy%+RBLc)f!Wy^~P0)9l(Dc|>8GU_ndG$I6Wpedck3q+4?0z#hbKs%EBh2&h8Ciz2(=`d=$^b3i%o}yKK@CDUjhBrPO9c|Q=vp*&T%)va? zf5sDjxpEPmm|;JJ=AmK>7ct~+@Rz?se$+28tBV7PN1X0nI6nL@6X zRC6rCnO%wu-Xuzsj#Fl;`Rc2TXP!r`5Z%Ty_Syn4+UxUlm2MJj&>)2s(Px+NDV*Z= zAe9YL4x}H1m%o~jt~q2C9O;hK3h6V_zrse4YL}#h~N<) zuh^S-$KJV1HC@u~+w{D3plo;eV$nLZ^R$1QOD?d9cK}E?{-0}{8@H7=0P3ZZl_V$zYVZ+ ztK`;m(->8VP(9N>dVTHAy~+b1(!x`d4I~OY8gOkTY0+1JPLvwCDPF5t(G=ZNO6p>B zwqrG7Rdc0ZaJtPKc_Yk}*;V^LlKXuDM|wk$qf!Qi#Y&@KFShofC8|R2cpm(u|20-F{xHBxKAi$6pRF@?1#f>gk4t^n3)RTeEjs z86o{2vmYmm9!s+~KI&-vyd4(KiO{}Fj|Nv!@B9NTX`x@| zRAC!EMY~0M*i7d08llyG+-6yaGM7{LweG7E{&1tHK(Cl<$(VySV$*L8oA@K{rko)z zx|*(`PX+6e@R<+|?veXQ<8*B0-|jvIn;Hzg@W-uo7IM#=q?!t~lA_nhWO*5F78R*0 zb|rsfZn?jR_f}1B);0lFFSLwh@7~{UaSE{LrpFL>Vuy3LnoZVY1t_#2#{MM}cK{Oo3};JqcH#K~6s zK2d_KGmcrtVqdcfu}TOz0aCtjSFc{XScxqA21lK95mmXwHUNRfvjs zJKOu>{@hQ)-S(*8kKItRJG!PWY!*U}cYjwvWA(`kxY2RNFUQa&L0NLn6qzG^BesoA zS(>+GVQ;=MfTBa<;HZxh^qdi->){CzMb~Xna(KEQwL7vZuK(2x?TjJmY{EU4M|w|m zOz_Ce5`gb}D+8NzheuD`@u*B+IN=Qb7N3$-o3M5II=l!AMV`Q zomPS#K^Sw7+fXiilJTNQ)2FNvB>u~RExMFL_oZgkdE5ftShD7AG`y=(N$VREF#l3a zpKGwz)`x5aO1M5Sa#!6l$gxr-YQsxgQ8l7|fDF+L=T~h$#>(c7ilG2YKfj*!yf+l# z**^DfxzLPOLw%3LEKulR5kQ(9j6H%4t5Q9o}`_a?!6)a8@g! z$kTbkdJB^9MN#Z&23IDJS~gsK=u}|g&p-+E@ksRLLJA-7>0hIZ$cihE-7KR@I*`9`41M)^K zjWXODVKa$EkA=MsFv&zv4q152-Np{l*jMGIJ8N%cYiMq7EUpq1*3LE3!+O)EqL`{F z^lb(m5#=0Nn3&aG$HDR|?QCi4W6(1j^hR(_Kn9>lHDa*$g}+}al1H!#0&n&j z+TVap%&BGzEQNX-Qu=rn$?o=bB!1>#FXj^wq=VnkS&XjFp;^p2;E(-%ju*MczbIhN zS0N!wHT#c2;Vlg7MhGI)JFWJ9YnLglXvanph5NYK52;d$OFAy*#vT*T4v(I5do_y^ zia4}xx%TT}6I9Gke~(JzV~&uxOiPl#8idh{gMe&vr#8}LHPC5e;ph$vF2`hfdh}~I zE%pcPx*M)P>T%Msw}#Std#%`zm79nYNB(&`My4zY7{!pYNVKUa#X0jSGU!ll_RDGb zVHE*t=D51}N<<pFHAuN+LAIxAXSJCF}^k5Ok31($zWGEyWIzm~Ngu@zaxop^b!7|th zW(xm!tSNB8ze8s1yJMU{59{%dlQ9j@8~@Pq{9C`f?rl&qB*)XF=6CuAXf-$9$N1YY z1iDu@x$42oJ9n59WB56d;$|!?(H}EH{!XPOd}h6UFlSqyO}!wDJyjnf{gZnq{0n!@ z`7jFR%FAAdc{YDdslh&6p{SAyDiJdee4|f<*=l<%y8NKnbpcL$k<1 zpBJl|k6o^DZf)*OEB+#~Ihomsra`NKGp0qvYO_&o$6jzeX@@|5IDiRtIB!X0H_K_D zZn5XaDjVDH6d$k`nA-3yuWg@`>S4NhEIsiVn)qRpnwT3c9+{%xzO9AMMO6J7&Xb|s zMm#v42%{(0OQ|@eA7CZY75lh}86UDud@ILpQ3}tNw0P9i{6Y99D;B?|$Ekaw-y9=Y zE>Ty#q`VKgWLM1RgEt$EjG*%iDFNQdb&w>9#8b5U4Ww_~$W0jV4>Gq16x{(_)Ofh` zd?MW&c7m$dbG91;Fk2N2)K~rT;acY0t`Qp}NOKVm0{lqZ z47Tc}IfUjgP_4RPd*rmT4>y0N{f15QC4PkKD!wBzVUTilgK|_=A%SSLuzM01##88X zi|0Cnm25T#-Ys@UMJ`M^IpmMvlC>Kx8OU%jUKDTU482-@5mhhN53?RkV=f`t3oJ=A zLECkcc0RN7LMY^Mum*;|rMA7IV?D*sZb1sk`x_=D+pyjp)w%05yZ@{T3XZqC4X{-*kp=J$)j)Lo;$L1buNmyTih~jTLa1 zzC_7?tTnsg+dn67ejvUrM-HJV5!w#nzcOTpR{nS-a_i+6)9D?xYR?+57*}_llF%-^ zQ0^K0#mSoY5@*8kK-!Q9+h_B+s*mrp5My`Ko5rs{hTnwAqe_6?yEQbcxU83OE>0Si z%x6AVb{hcVW4EHC^ApT2i7x)i_$=*-n z0@lul0^bUvdCf8GVGVZnzLR6_wkHKj0AUJtemDGBtT3Ej!VC2p(febrldicMm(Y7X zy-&%wh)Hmq6;FB{A`ek}fSFoNzbLw@Vzh_%^LNQ&@Kr+EBgN&Bklw6le5WdP0&K+e zLoy8fmsWdaM+4f)DltON5B&_3k|TNWOxYeVOz6q=q1jMwqmRF8d{!aI?`j>xtnj81 zhQe_6wO{wexi3H3X_iReL??D4hE}?-f1J2vzOOPC(t##*AE1$G8D6V|>&&?$c|92XL-*#O`*Xk^`(N6JyrC|&c=I=M# zk}lNoO#zPW9RFI02EGaxTE^Er9#(RjBPT5XZu|~qvZlnL0d`@C1WzKP zBnVDuz2N={NdbB9wtQ{T?frykcgp@DUloy^l=$uK)Fu24$1beF=Fjq0t_S+0J-zcw zwnvG>@TD4{9F_Or=TxiwK=IfcUwL<2+AvhDaZQ8>TP-qM(8VEUnR@e-vS&rAEqc}5`h%?hJF zsB$Ek5IK=A&|xC^;6k=G5-}~<^08%p8zOvmO<$0mihs+RVaP1VY(qyM>7CiBXt_v+M$!~oUY)j@#{GZBM%Uu?E$4uYSp2k17 zCw_82iTi2DIVyDOBOSl(TuzvxSw(5BN7ohlZj7eAQ*3WLEngNTZ?mL=uHWd1^kXJ< zsDEc$Da}!5doBOk(M>gA(!cuox#Ta;OfK^%MQw0o25Z@8-Hv+I@bEV@_L0&wSI)7! zZpl}?G3-Jkqn-NM*%HJ0yZROvX>{{sBtfSr1aX+zX2s?3YpvDYQEGyA2tY-a&uLA; zZb-l-?z;e9o8sIKc+1Kw_l>UmGW=w?93QSdAFCqhXwktojMUi-!a;0cpaNQ1q?%WB zq=ZOG-{Ti2hM`01cJZZi#@f5A>(?nDiux)03kv6MQdF%Aw%apQKqUC*W_xh2zJV4@ zQ91S0Z;;mDP=~yxcT-!d-riU0gZVgArn2D1oAq>0SX&PQ-um_@0%Emg%Yn2q3kPzv zrzuGfFM0=HX@o$jc3SNIV@RYc*lher+4!av);O?CI&H@0R9J>2nMn#7`sfcROlq;1 zq(DxAK!_?eEo;dkS)kg~jvkWwSAdG_iT?7(rGKYB+)bFefmUNQQg6=uz4gq|YC$tV zn?3q0z0N!e@!*ocp}lR0t^0n@?r|#8(UUZ{;-k+QF-myZD<2Ln&3qM|=g>9c2Kh90 z@gV1QoU%Hxe$d4(T0N-`LXD`ZDGm@rVadZ{r9B9uKE@@mVpRa!tJDN2d+oyA^GWp+ zhyDsQCxTgrY!X4F2VB8qGZHMz{tU>?(-pAT&6iZ zG&Rm#@-gQXjLt#U#ZLBPLK)9LT4IGY$eW=ts{7H9?rJxs)Vig9;SY84M5_XGv}l%j z7j}2dzklKM5ay*}%*doiW#&IlirXwBm&rip9i_nn-|5UPxCjY|&MBhTKlFmXHHPk+ zZplAB3fqGwB#zPT3dLqs8#}lRYePzgsF++4HbUYjCK4xKsnNVeDOKX?7@OgS9&hmv z<+v)vqLr^LaBZFkrxT2Y!VJ7y?1fZnlWdKfGf}-{OQp2+ApX7s(OepL4Lg6(bd?&? z8D4hEYTr$i+y-~QnR_-2s=!@QVEmchR-e;(_d4>gBaK!3FrKnx*T-ndOL$)PkTQU)clq9s}Egy(vDWNJetbe(;uw zdYvwHBnqP4(H64dP!qt^acI*-Z~v5M5e-v>?)gUO=ViW@|O5qcV%}3)^$I61lD)8GFUZnoY;#`_; zEs5yx9o)P@&1QQ0(X8#9KtX?BVpO0Ve*QowK_bZ(h2~fceJ>ke&2Vc$qFOLaV2d^s zJF|mr6?h|v+j#9M=T-EX`}KW{d4>^6yj(JrxqVp$eTI*!ZbJEf(sFCD@#9i7J>kIh zh`APqDMe6@X5!ST@gCBKZDs@6HAsW2@3ikt>xNz<5Dh5$4Qt-PY6lZ#EB4#;&xKgj z;^HdFqS!zUcy>3UASU(RsCdva8w~lOhndHl;QiT6N+}24qJ%$u6&wV!M$-7Er%Tp~ ztl3gTU+4`!!$4uPyk6KAc_fo>zYd0%8o?ax!Uk3Ndi&h|OV$dP@Jjba?u7vRwsno) z&b;TeMaehjH@*rkoO`os#Cby!pb6k15wR?R1X6)#i`3)@GD<=8p1e4@2&|XumsR30 z3GliAF*Ei1??pk;sL9A$RV{~KKI2K$c^1Jp-u!^j4*#In>}4Csf0$D^RxY+3K>+Yn z5FiAHmS5+3>vUzx;iTQk#c^R>rHJ62NnJO1=j>%lEE*hcPmb6{EKJ83f_}p&zB&yK zaIhiKZgt5B%i$%`cwhOmAfI&l`-UUQbY!6eU`r)qHf=%D&-Pr>I1Et2 zZ5rKm-`^3v*Y(y2QAEX2a^eNQm$NrEUD%XO-<(jo{?HmZE%}DXV{S(!l{afw##c$y z46vD!uIY5_z+C!TSH4X5{I}Y-xjbuj?S5Gq|_;!6e z$spf0*TVy0$GCC`XrtQ?MzSj!b0>HvjGrY;#EFuyzk1zrMzNc1E)iR`wpMR8&?wJNgA zaJfU1oYm?|*L;dxRqI|E(8(J_N}Iu$eT;|ZN9YS?f=dV+5Je1g{*Er#j&kBJBi(5} z$tb#1q?F~yI>gR$c=;T{4P}gzz=~<(d0h!(?n1U!=%|^QDPZ%U%Ct~l{Wl#vUH`md z%iaTV4S6xmvGHkbgY@OjqXn8oH*4*?-P~F|U3fIZ5SDSFF*2XhA>H^~?huGTD}t#K z%S|h4yj{$SIQFSh#p&1RLS?;aWVTSI0i#M}zPZZmiPcb=q(60kUx(_kbvpt4`AUz} z6J8pmP}H-Od9AqtbwOABJgn_9w$LciaWVDL~wWuxY_A285q@d zNC5b~wRR9kpNZ&MAIpFe(f;Qr36ZD7TDABWdKrw)`g*>H5uZ06XMW0e%wmJQys1Bd zyUgw-BX z60B5e)eZqXK|>cf(6ya5tG1$g1;J*i)j>6`-#2(rk`)QtRbx1G_V*-@(*U2N^|o$v z(7PE{+ByL?xPuUtA2_V_9y!A_XGJ`jOCK~6VUwK4TcREa&a~6q(pXJ2rICRPuuNEW zKI`;@-My3W3q~9MpmzE{Z*(Ck!Mmr@={U&hc-Eeo+ZV>^#cTM=1c8g5={O3KeHf2W zncl#QaZ)C!FXH6MU@fxYbM3$?H9yv=Q0)fxqpl$yBkVDjaKJTcoEZsB$r9DxBFFF^>-|zI%6f#Pqi1V(89?iFU1o}c<{^h<6FgbIS zaLda&Es}+pr&V7=mwTkVO=t8(09O5#ZEzbgC<)7cbx>2LYki$aEOSGXMX#kvm8i1g zFWzAmOj{JZ#t!Sd!!z`RXCt)e9y)jwa)W>a;>(1)?VC1yiAmtJ3C#^2S9Y%-N4UrT z{%av>vJtpOkD$B`sAqy)Bg;eIO_6K~g309|4%sV#({Sq{l@x*-yHJqu7%lg3@MT zk2dE*!AFL4XSiaCNv8WmP`%2j?3sDTdx~ac{^s;pwOAlY8(xI(CFNzw^ z#>AI@$ch@LI8ido6Xu(F6QX*)Fu3u}ehD=0FBaf|k80Rw0$@W>!Teg73wtj)65nl@ zjsa~|abxmN_8UZ!zE^he=|u&~C%sM>(3U8*p~YZ+aQFUXN-zJWv%AG-4uqU?-7*(; z=70rX(e@_y;irUMqstsVL6Fjr{Upz)Sdi;j-cIq_v0!v5<_y#_yXjczVv(O~ncjft ztC137OnfSG(AXlkl^fz%O3wl=+hAt;-iXG1G{))UA;Xfkv83!B@C;|wd%VdEv2OZp z-8*i4wRg`AH9kaW-W%4&5&YF>3(D&&?2!XC(GuV0?V*3vvTc2}rFy7HhL^CQV%Azv zxOVfwWfJzQM$>d*cW1Kic|U`J1&(m7@*AvV`t=6W;!qnSiiekyH+t+S>zN6D}g;a|Kv89#U6>3(IE;5EuK@YCd3tz zw|piba{8L#yTSV?Tcvug#Uha+HN2nowS~a95##z}_;+v@Fmpz*vA6m*0yfr@Efol|IY~YG90nU@!FLkEhruVtB z-Rk(@EHcB;efb3a1`6VX!cVY5r>TXz;|{;CV)t*{6?sHG)$-u<$}h0$8L0~;-_rC2 zHOYloDIm7GK#Zu5U&K#q6~lNp^$Rc32k|B{EsT;&O31^FH6$7>R}6YAJGcNagT6|n z%Jnd3Ira5Y+IgD~wvfj{)NtxVh>(pF*((8#8Q!0ipBbLjieFTXx=93~HQ1W2ohJI{ zguB7#ACN{y>)&MriJg?n?;*udVGjgI3wW7Ixu;*42qEnrBnd?rlgm_Y|7OPkYDGxn zrEha?vH9OG=~hW8mN!YJ=ee)$zE?BaFgcdiEA^44ODP zmZWBUR4j*CCJS7@rl?@qsu~Lvg>ONPI*0bcY9R=!#UbNl8OF@CI}ns28}YzD1V%@V z8vc=MAn0rTBxPBwFqjTX9qzsf3Gy7e-j^vvfrr)}wb3x)EzhIl4BX5wn^cqso%+YK zU|o|;spw_lw2QuPXI>x)ZC9q%*w^AemxwLT@D3NFY4gi;_8)la#W@C@LsNcXMhPF& zk+)@CC;Mr&)0XvSplhJm=qqU$WUliWl;X6JFcs2`OrCu(g|DMkIQ;A|=LbEmv zg4V-RZmNMSv!-J=Jx2ra>&&Om_+bFT_;PE1e^wbe4uty041OF_~)Vf$?a$(g%et z+HARkl=x+I3eH*AfAbPj{M2;4b(_NXJ=Lv4yRfWbz|iH}cXcA@Vx{L>hr5PWA05|? z1ywKpB`j&zEo)xH6fEWIBMO^NC(4E@qI)K@FbY=UxD+?wP9c$SUJov3_|@k^Q_#WO z_b2C3*R`??Sl9u*;Zy*{wH6)mqgi8pvfn`UT04&e1igh+RXDPr5OiWC!X!z0>c3yj zUognOR2M|B(XKeQOZo~|)op7rFvv!o`HSq&3VEK5r6#_TC+?rq+uB(f8WfcSbuBe~81P~cv-oULx;bG$)1!W@3% z25?sG-#|D;OHALV1BNJCiw!lzK17zTAbnj)0yP&y0}SkKSHqOm89|a$g=_k2#eW|* zv1-(@!$zSklp^&GK9{8gi`cHN+82Qo MF}ftyx#DgA4?NaF;s5{u literal 0 HcmV?d00001 diff --git a/nx-dev/nx-dev/public/images/ai/terminal-llm-comm-thumb.avif b/nx-dev/nx-dev/public/images/ai/terminal-llm-comm-thumb.avif new file mode 100644 index 0000000000000000000000000000000000000000..4850d4cb71688936e6eb6c0930b0f9b87b957ee0 GIT binary patch literal 36156 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 literal 0 HcmV?d00001 diff --git a/nx-dev/nx-dev/public/images/ai/video-code-gen-and-ai-thumb.avif b/nx-dev/nx-dev/public/images/ai/video-code-gen-and-ai-thumb.avif new file mode 100644 index 0000000000000000000000000000000000000000..921eb31d36b72b412d8b26a0efb88d845b76a9a1 GIT binary patch literal 34936 zcmXuIQ?M{h&n&uZ+qU&A+qP}nwr$(CZQHhOh26c!e?|JVEf6s-R)CP4oy z{;$Tsm4Q*n&f4z(T3TAzJKF!pOIg?(+5Lwo7Ebmi|0@Il0R8U(&Hon=>@D0a{>K1A zKtTKlFb1xSLII#K|D%wN?5rJajjY`Pfc|qZ|Nkg-3ws-b|7ri(e}jPl0tJEmHo!da-U{-tEVo?x2y-UYL z*!UP!HKT6Bqj|SN#U4NWp!>TM8H`?&vpAZ`?@261>yLMHyj~5j1^wn+bK*S>YLX;o zd?-<+%NV2i%t%@s1E&ihvTY=pR&`v3{#IcGIa?MRa2Y>k34EvY#$Vkm+X=5cQorc; z=agwEzsvKUe-_FP8sc$uvcb?u)K1)97-CN!m2NFSi%_&fEle1o05+!Aj0F@8^h)tc>%w{peTM z6>@6RKt7QOX>csW{bbSciUz@m6sjxNvF_*HFC)SF)djh!;wgoq&jw-g2O>I~9sbzq z=I-fXzjzV0I83Qq?dR@@~6Zv}UUFL=@>rNwzJ!I-OyfS=*c_Tjygjd0PrqbkstWILECuETVB|0~MPq(nBq&Y=W+S0=^UMgc&g?PNv-d4o6q_t{5}EU-737Ywie)>FG@~Qhbx~L zIX`XCJsvzGgH?8oZhvI@qq@4W*SJcGTRR}kz9l)i&$mxE+KkmG$m*ZjpqWtkLQj~_ zLTEuezx(RrQN|IPad7ueU_W5n%XcX zmM+sd1Droewf8tB;JrN+2d<_8M#e;IfE4az@^eO?Hz4p%{(`L0j z@v19CMj2%SXaW)oqCA}!*~hgVxn0SA{^lhesXqR`v@N;Bk5Vxqnc>w zMCA&aqM6Q?5Jdbqx72O(Qee6^s&ys;GS{=Djj5MEx5oP;(AbM!gZ`6fK`#dHSEt-G z`TmNjhyoH(JPu&6nr%BP+esidWcto(hsO@=HeF%qYJ$*ef8~5dDFHcTS6zyL)Vk;1 zt8*?nw*NL~R9TZdaODzUB{IpZylFM#J1KNso z=(TS!_O{n!AE#~pWn<(9eopS_$;Q0O!snQ(Vw(+(18DItn%d}f;Rv(%XD{qV`xcTE zk2x1pva%rU_5-LNTlBx?C#Wxuh7FD7@YD%og#5L`wrQ`{J&Vd^@w_K=tqgte$7dIy z9~$4YFep8hpEc7@Tdc-ZI(L9M6AXUs4t_qsDxq$H@dTidE+<^GZ)Amb*CSY^WDr2> zr;ZB&eTrJsI#@`ZbDla2ty5I8@q3qJ2AtGLy_l1ZUklD+AJV*79+Wtdbp8Q}!f_cV>I?dHc zIpp>yv zahcl1h3#l$#psyP0hbt>Qbye;<&M@sts`tKwty&6@*-U2hIfjN1SHue%mwbdY9N@X zg`hIm@U|jER+0s6bfFHb(m*rWbtY0JWO!|(E=}-p6Lna;bjVN?zJA4a2d+=N2PQ-d z3uH_SPg4%B3KF+s?U*^VtH4^`ADAHO9V;W!s~lBj6~sZ08o=IGr(emN(tvO*ST2{- z6ghfdeQ`YvE*|W{(3>gYn)xu1Zd@3E3bPQAJPOpZz?-Gw%SC)%P%b>s9Fk{k$mCh2 zujc>;v#kw&$4%@S4dCGCKv$NK+&Vew11H##Y4!!~50Q6&V$WZ;%*6XD{PPjbqGTd* zONDa$t6Kc`o#{(ne22E^5K9_dLXpZ5bA9EhytP~USpT|jVQG}7i#Q2R)iHVh>}skD z{|c*EQqD4hEJ3S!n_k1Dqxy|zk{Y&t*Q|Hbs!wIUm)lw+pyFhnv|&9s_mwB}86^-c z`@rqdd>M*Ynn{5+Rg2Ya4xUr@t+RQgV;C{;CXdG^Yl8*L+1y8;0u! zf;%LZ7R^e2wX_?60#)PIf{CwOQ5J@baie%X*Aa5Yy~$?W^DE^7{`Ou?@&wO*&Sz=u z1rWd)yhT9S*8y?hL(pc-4>=H);}6OI1Xyr1eeXFMBIF#5_IRlAO6!Z+0>&cUH&O#l(>Em3B(L8$!2m4}pqzYoLh?-nD1ce}kv&zn;J^$Epsf1+lalTW&w^Z zwWJIG&n;qBiYN2k*0HxGuOR_UPROFGDEsaNE3~u)*bXjB4j8JDVt&jmu@o)sL+A{W zxQOEtH{F~S+8rz)HuXa)NJ7~+N_IpDwO0!qb#j72hAJqnw!H$kl~hzsssryy8xmy; z`W#PPF21C*zr9N?PMfw&c5`oEStI_Lv-h6CH{$j%Y`Et&>GQDUwRB-+k8;=_VZcHW zy5hPmrb1!euwYhqP?)%8djrj?xrM0OT3gzqu?8`FV}u}!96xH9Q-6}CFM4K0-+~8O z|I)z+B};gj5l3=|@NZjzF9#AZ zs#kuJzH4r5HX4)?0TtUBD}~Qf_3I(AnR!hlZlP)#S2a zRT*OTb9&Of8swtRizB8QqncA9u}-j5 z;3&ymDyG3jj8nE(V2eG;AP<`YW-&UGgeOB?Au8sV+5)QfTO$$1<=s?Zb}j&^(2?BV zcBrDQyWe6?hp`lIm}dY$XeD`Iw_~&!J;>Pqdgx@X&= zo>Q;TFHyTLsuS5~I`}2a!67m((o(`eICSPrE9rplN$^eQG$3}IqgRX9M1ZLZEfV-m z5acNX83kSu4ciXHzzVO zK^1HAS&Y$S*BBi{62=i~LLc){41{6Ax#CYr{QFCQk2V&hb3>QJdhEH5tf00&1Pz)& zC+aG33!7wT-!!aVK_(cia)NKMxnXb-EAs#&A#eR^t&K>R}h-1pe553)m>ep1T?QnNH|ntT~t)33+(Iw ztFHW@z9Br#7g$+W_L9ZG-|w0h!tB8OSSt8txjp*Fl^FM^=W}y%o);t*qkCb;dRmT= zo;?TlD;?;Wfeu&Hwok`Tq@o!-Y~+(UAS-8*J?pv>pP(PO4G6{Xt^)2{gJtyl2z~_s z&NSoT=z`S>1Xz<%%&)`Kq#n8JJJpyHA$1AnB+6U)6not4*U5-g)B$VSV3O>mo5mdT zbR!iwt0G;ip`mYD5!`>$E;eBi#>~GVf@@K>lOzftPRxoeW{Oxj2=oT*ep1;xW7241 z8n`CFge>;6Fi7|Wy^FLo*D6yiBBYSBZBWv*dYXr2JDP~D*cN#H!WL>n0G~8p{jc{K zJbaKIJ(nL_ey{$_TO2b!@ut(Og2B!U}h=v8VViLFyW1a^v zsj^15!1$TYa5o={3$emgLu6mW6tI@2x-E+dWGZrMeVuvP7!5ewftNXRM;@BezCSkF z!VDn%S{`yX6RB)O51)SyVg4KDS!~=upnLK=S|60mcf~#MU*bEuCnoyho5FNkUxgEW zLQa%=smLZAA?Kpy1$Eqcak#KQ(Bm;t)7Fy)SfMpSRvw#)5Yn;E$@|QSb-<;z5nYFv z!_BB(Es4daVGF+PNge5F+az&u*8aq~#hlcr85c>x65acT$O@8$s(dM(b(}`TQM^ zaRU$b#(JVUT2@(DtF4@4b{B7jHSY=9+xOr7#K^#t9?PAdpBo@{q5bhekg_WLW3K7v zNS9cB0jRBo0_!x{A+H~fcc6U)Lw=>;AiTHOuj@o_p(QMq0QH-kWFfb)3z!0*K{JZQ zJY3KRT^+g$+AJJBTu_)B>xT^6QuO6{Ip^MF39k{QOz8#YLd5#Fil-v=)JmU%Uegx? zdau)^rW~!&Qt_IQvWh{mjJK>=eLkrQLT*@@9xFXH$eV3>kaIp25mF@T8F+N>6k_@# zdl~-K8KzS-+gGrGhw@I_vL$8?q{)S!pgzWZF z{zAPFoyxTzIe5+L-(UmECX(Y0;_wWuTRUh&C&l6hmYa7d z)SF0-Lj*yw#)ReFKw3m(w$}zKWrcC&dz~;`;}uWGjX0W$7bSe ziMUaLN98k{!E*wcLlq|9wV4;D6bhqgC{Z`C&VEsty8s%AFa#q}0lE9`#8*!VJgk4S zQ{ieX0p6G7gwT0hv2e$1W7>N3y8Y|x2k;sIN8m%QXQObS=;CjgblX2i;5(XJtrF&L zAX9Zcy$($#cH4ZLnQw#-zW3&h_0t&^Y>W=`u~sqdF?5<`wiTye&~cP=I5>iu`iagc z+V~Z~(8IHtBR+_}ozW2Q`<&@PYQ&s$^?7``<7w8a%!I)A!uQ;ZuJ&Kb>d}wHlc=7* zIvO4A8|~Vv35|o1V>HHKN&q$8{rbZ3F-pwgH`j*S-QsP1HQz$7Ncn-|#p6dCmWc!O z8eO%k9tP(c&Ga>`0wRYLHOzmh^5{lTKK*)wCSmvGpOS^H>-OEiH}(?TusYdvCA70Z znTyR?uPH7ex&tftEKu4(qPx1fSjgxElXfr}M#*}76w6yYOutCul!p1GC-D|V*QcKK z9-n)bCw_s>!qKsa_GInSVA%kDY*9k~T1Pcj?H2+wP9r~2hF?mZRzbSSJ8L}>7k-kg zMO`I}^An2rf86E_j{}G&1AoB>H8U$RgfxNq*$m^yeRqd^LpI^q+@Sz%^bcZm)a-9Y?XJkx}zbhNA=_jBmTX%5!Z8Icz?55 zS+$Dn9(mPiHtTzzy*Z$XMZmj zMhffe05};F%PcJeuvka1^=V%$iYo4BF=i+7o3zSK9^|Rub=mUh&3_u*+&^Mo0s@m5F$>}|_vO`nB@uC9* zIzB6xY-M`N?QjD5kk+`<`CYGY49$bI7Z?k?<94F=Y(kvyJ%Du2PW>L52CX{Dtuui; zmWXh3jf9l*P14rL2AKK~%gu#aIH7(H@Je1$l%PIH-WFJaJGr(ch)S_7(OVIbt=>Up=Y;Y>d$*YRtWID5ow>(0pPvCC+e)*hq5Kws$>U_)4^(ACd^y_Xh zFRK9uPkGz&5D{%KKAeC+BxcW>*CgR1Q}teV1eT$uT*348Vk@# z2SmnEdGc&Vf@3nWM&UP5bl#a(B>qYkSY2PLM)d>P|0TMuESgH%m!ZWE_fgrB1gHG- zKH418=-=TSntUU(L22B;U@6}Xhlp9~VQ`i=sx;X;qHp>aoI(9E&b%Jmg-P>-m9C%lu@l#@zTO{5+d zkN^o||DBdHZeck!#0ERK1&}9vQ3EV$wPEGF90&d-V?(v{JG0?fNDOxWlM9Yy5KNgq zpWuQJg`-}0FbJv@+#{PVK%Ulb%97HOMt27H%1O4zhUI>bLbo$8${>p~YT5g|SM0#M z?&-gy4=#r(7GbP#fjBLuM+&Ra*_NhnZ-V1bDd(*_GD*y5%|_nRL=zGNR5!{8=3=O- z(FT3KZvDqZ!y4hUk7gzQx0W^M zU3(97a`lDXqou*t7abE$^tw6}bG>;Oo##v}MIT_56M7@UH#UMEJIq6bAS@sK?-s@20gifEPfe?G88o%=h0H^c&)`{2TtL^0F zT?J%RSoM*4Oy=#7LLoj2Tvs(zY-Y28D9o}8zv{i5z4vDx6gw7StGPj|ewQM8;WVue~ml%_Wjr_baXjITuV>>wvhe z>HBB;nqz6SJ-WNd$F`Tp0^sCDvU=UBP>8X$mKfCJ8wI1g25Y9tal-I81M9$dq~taU zc*XLC&oQ3AB@*oA5@U0N){va+M!=LXsX3 z3YX?x8c;_&-@SCwNHyTEb-R!~sok6{S)9u)pyQ(WcR5hTI}I)_uZ4PC)rH#ewO8>) zbl6%vkyhR6g=}@XX8=E&z1VzxM^d*~7lY|7E&`wqk$aCd4oLnBFq}THtiTDs591^u zOiNzWoBT?a)cU2~Wf(hk)0~L3N{yMrCMA57&0{VY;;nuC*FXu&QCW{FJW2}b#R;vq z{t>yavO{jp2b=5E$J$7Z+(Rjtn&)&qNKUAmGAKs(o7^aY!pE3H2^)(afLc`zj^Iro zFjDAaHsT&tY4Myq_fOs!O`&@>TF9K)C)>5=7aU!ljF8JIK(+hEt9dyYvRzR zM9VT}Vtr_csx&^u1U?!)wVQ^=7B>HhuS7E%RKY}V;xmEd$?Zgzv~ZgdN(c0xpI4{-=3-|HY9 z19}ZDBc=nCD8&plw%u_Ll(%;mCc4c=myx~1IIH3D_@R5wlrs+t99zq%46_N<1NMOt znI1#B*VfPAOBpXNHx|^f$}o~wt8f04cpunZ@>*ZdR6}JdiJu6H=cR2)kz9} z5hN@5(Uc?9sXehn8`nDoMKo8J8OeGXws}%FsGkjo^yT;#u30145-4R&2a+56vlYy? zXMkD_77)KS!^-+4jAsIqKXuL+3HG@L(VyKT9I#tU39ktEGoJXgYt5=Y(_2IA?7c1{ z7_C-Sietta!E4wWTG%T?;ieVl7PdS?{4a~VH&CFNQlNih#r8996KNi4dwzGvKZv=E zsCVz_guNKR;E|*ZIB?>&`l=}qIC^4MGhju2_XiAMiy)l&S)P-iEQi(I;P1?R7`EFB zd)*3jI!q%}HciP~+Tl~rn|9c|@DhR0*jKrf)&l=x{+<@fLcpKSqIGeq)^Tb-7oB?* zLmKM#Elvtim14-4+3m7x-iiE*PN=sJxYZtgU#{^m^>Me=Fg!MZZ}oLF(5-H(7BcYU zIBhvQ4Tr)OUK<)tXKqgQL0uOvTQTe9f;&>`dIhH88aw^iR(t(TPA(JlE!Oe_T1FvI zaP&uz&^#^_bd23B4u5pYM&3IRTAXaGQ!{wb9zvnQ-2F{R!l7dhm+m=pRm%!NO56@7 zC#oN8FOIR~i30sznF4iqYI{0MDJe1*xLc)g6;0hc$X)Zt;eW%OjNfN-;QFY-7i(? zGm!ZZ`^j@Q9j3&@1!`UGGmZ;J4Wr=^D^~r~2)6FK*}X0hpeO#`6GG zz!RiiE3!eN`b3Y+y9Nn9rBRVk4%*JN?pP}>pYAHskBMA^KBHmlgtP{`7BC$R(nW#4 zY_AREYv(n}Bc=$vsF}!klre4#KxKMN*7(>#l&2jw>0CC`Cm%e!`gwC?9;1~T{(~DB z4M?FsrZw`DqXpcgs-N3#9^6VS1~i#4pkfPX39bfyv$8}&{R<48{QNB6N-FyKD*QER zGh9h8W(t~e>uuuqBJQ|v4^^?Q|G;iH`xBN&!8KusqWHlqJqvHrN{JXg44XrRfijN?10q0PLdrbp7^P-=l;8GQoSp#E z!B8bdIWjN0rAsU<-4;WRaT*K^=hN2=k`= zi$YCMTGFEpP|KSC&z+MxBB#xGw_Ds{!ZI>$)`WWH{4df2GpmHDX#x>hEWTzBgu8>J z*$}SE76M#~O7-EpmLUx#$|%!EO4~^x#S=?3HttBGxl)L5j}5i=gqA>7>S-4{(G-;d zPs%7C>?kts>vnI|$Nq^;kRBX3KWL7)Owp`9MYwPCC4X)=-6%hicgGdr_=A^mR;`#{ zu%^yH|ES1_&c~fpyxy|hPHE#~)2i5t|7DDFcyNV(CAjfM{+`ZsF9qQ*7PC?jnFNHOqI+Z9VQLMX3E|TrT1~J-?KxoRmQWW=pqkeg zM}_-G%}?Q8Q0f_^a@G;+uwHja*+U!FM@VactU(@bi~NcVDwX?5uF(XxEIYy6!@eKC zmnJFkrj39!p14ZZJ!rrP6^@lJ@Y~&94#_CI%Rm9rzo?5Afk3V9xM>n2h)h2Z5{>m` zQdH>TMZOw{H^b_7SI+R`4h$gjL41t7w|8~tznvG0boG-DB*a&MX7Gw+v4@aEOaq_f zMreLsWuLW-R`km1WQEMWT)um1n%Rdni*m#YNgKaJ-8Z`8E|@V=ZKgkYVma0q5BP9u ztc;ntnimL^Q=~iYOpfKq%`AJiRr!x3?U3jX@}lhQ=8y`9E@=Z|MeaoHn45oa=@p_d z#w5de5o(CghTz@y#p2SA^KcZCOc&$S@2u@VIF69&M!*<8i^9Mo*7)2$RZT?Q0P3Qw zqcg$b!{pxD`mbEh-ou?lD16rj7rUUWxuRWm3Dv;E_DAGrmzI770Ne9~j50#@!9-w~GWhPQ)F)xWoV zDYB!+Lsdq5V~73%(mQlFU^MJ@(Pa4V=iF0kC!hwL4)Ub1-%%oHPndGJjmG$>)tth6 z3b3p;i9Cw_Sl$0NNeB|9mEA5@jMn{Q=wm<^i->?Tsw>~E^a@w*QI!E1Kwf@{+~%88 z!iHkN7-9v6(Lc}h%+&mxk@Hxc%QFh74k8L8m7H7{dbstohfZY&^?0>=^df_!Uk* z*-6q@XSeui`?N#)NzlrZe2-i<^$D0$u~an;dXWbR6OY?NfUYxYMAX)@O2G=VE%1Y5 zzqhURD&OQ{{#GbdT0A(;=QhX=I%tiHnzckqegYR9sirj|dmcOnPR}9D%`o8=vCdp8 zz^WIy%Ll7pt-$-<7gA%A?*alsrLX4k&0!S7!?8zC1+Z6>5-BEJc=s1t%~+FRI8w9p;* zJ(WkGin_#Mn0y;xt~PHk2>Lrn!lsbluR(#BtqJAiJe6?_=D^;%`)u)CZ1=OaYZGd6OQnJ|k~t0ZSmoa#L$yN0%cgBWnNz z5f67`!8q%2yO{rY!6T1Lddm42VhY}pS|Wsj;?UcHP({yo0+El7sm^u8asDYHrR`Im zg~+nm9@e3_+(;@Y1fp)h#S#{2VxH~9BB!=qTBWokPXSRGOvw| zfScMLw6SV%MSD1gyK_Ps_G!(8p9Gb zlSv{5yJ2y+%BNpK4@ob?p;{fRK`s)8+cH7tlI|~~^#2hzp!!2&HWo(ZKotw)-9;)Q z&GCZ1R-u0_ly!DftU?J=vxGRaL-?B0K@rc`6EU{mGj|k81|GNs5_0Vb9>#D2+afQt zMy1dyK z#)9FVNjmt2g%%gSAE{>XZ)WA~XjX5Oql=CX&W)GTfuj>sj|ht+JfW*jv4E+BW26WW zgngy32MagXv4U>Hbog8?+GJy$`v{340iq!vst(s}5tf%|c+`(WeS3M`-Ffj6`KXb4ZF5KT?WDlyYCM*(tc zu1<7HwWeINQXk^KlQ5}+)SpWY5KjhbB=>Q*3<4~o(s7rr9HKnybwOc6qh zM)OGP{@W+_< zfmPK;guv*!t%2MKXh1yNb-9#d^|jp7-uyerMtr=L=LJ}tH>%EV?-qlHkE0;hM zgIpM#9mBChJz%)MPA1%PQvGyqj@J}04A6(ZOb(V?8lFe&aG~-vTJsh4jl+@4pOF8T z-z>GWU7RNRSXKCO`f9p0Dum_ zr@#SJ0Xp^AKb#glbIs8Om=PKhFt8>sL1Vp@W#b{WN4mEZ3s_=}jLw#|}7Z$U}kl ziQ+^?351kcn_`xS(u&Tui%Ja@I9OtWK zH91guOD-JzT%M|WJut{r0JTpEgL%GvJEw=+qu8dQr#cCxOY0+{-`KK1mb5!DeQvxN zX7GnPNNZ0Z(ZzTnB&Q~mO53;F%OZDavCJs^^Who)7>N9qJp+glancqra_O^-@X*q$ zbVicsPUII#z_3DPKXUvTKKHxURw00tX7z(88VfUoeH`qDWExFSKm@Ls65wH*5p!hPg!9)7?CzHZH2Q6zu`SqV+By&d&W)W<<%*_(#6 z)t?~`ovy}*Ji0zGs*T!eGzpH-S^HDIAkfs<2_GGyEofZ6WS$;QUHB=@ZOLsGM{-K> z+kiujy~ZW~Q=eI`h!_G-qg0@|yFn`1bd3$vDtLIY=lPX?{Q8U74vP zs|hfg*Z+G@C`b)+2Tfp!nj(_CIez`If3+^^qfQuWRW^0IAe0Q!|6s%%f2Rg-|hcYe~&xe9V zuLIwVeRK%CPiUwdW{@5L7Dd1B!o1qcNlT zPML9TfwzPs(9T$FMKT)Yik@nc zp_;m0NJH#m?~L3Q-eoZs;%0Bcy)FDwrJ9N-9EP3jWmw0dyHZ8kp<<81<=omkYl-P! zt!2?@zmUXO+jA_r9`vP_!}rJqQ}I{ER=O-V!Wu&`k%wDsiBIq|Yp~F_P~CC^mDEPe zR4j&kG2*rOf@~`Z7P)Dr3a#bJZJV`yxle`+hJ$DL+4q=i5vBAgFAlqvJ#n$HtdTcv zX^>&_fSR5BL;!1AhP07vO4omZL6;mj93v1!VvR*1EcXRBv6g0}ZB1=BR!BtRIlIJc z*PGJ*)~N&eY{0NhI)Qu2s-k!t2s?b7xeD5d8?k8QL}=UU*=8;~4J{+>^620*O!+TgRtOtMaD-1jT}5XUbh;9djEoC2H(^r zlA^RrGkBss?B&n$2G|@w#6GcF|7|=wW#8c42CB-LwnsqU)F8beO9R-AhF~X6U{si4 z^5;n+kgK6(zHZx`eBKP7wv=r=*yLDtBFnb-tq{se?b|5wy-}OTr2&O;(M9s?X1cYt zF?{#|Y0?g5UOlXZ8+?V&mgo~F^dT@dJ_d12~EKM@^ zOcu)FCR~>J?``)VP+X+kHouJvJB4jc&a4-S{zOsthb`>ILuQURJ9BN=A}@8+0#k4Y z32XxseFiJz2wD4?O(8)*m*e3f2w(bLys(f>wc89o@eE5R1K5cs`L}JW;(-Xo%7B^= z1qIpuh>r0=U*_NKxRAc8E1_;<{LK}7!x~~=LHKcq))!|%_AzN^--TU*!4ktf zTEm!SAMR0*ROXqb{&|L4vC3Wt=u(~zGQ2${d)czL(M9Fc zt-xN_6@X+eAND_!#5iTtSG1no+CiF;cA2W(YK=1VD43I;A3g-)9wB?KXuP#-i$rBD z>e7f+0ZeI^=aXta)E%l*qeJnKp}^&K;kxgK{HT|!BdRnMcbi=n%rGSoVAXsee_JVI zFseYgKT0#DK-?Y}t)oRxLThEg+P$J%&v1!$*k;x|*doGA}S5DHVF-P51c zp1gsDNBLz%&=ELDwngp~n4dN-FOSOO)H@EfA32Mve%s~`tnyYU`<%zUva!tAS88Jr9Z^4OzH6PTHX!9AdaRvCFvixK^VN3T7^0U&YiunBu8+c+|3XytqPb~d14 zz~(hCe)GGp-T4c7985vlQbs>jtBD;W*Zydj)tK1--o;Av^s+wXcOd z6~8e2IThm(J#Y{9O6;2ggA__bxcju$$e&JcNX_rH9k9Wkeejldv98AG@9ft zDfJAyA+BCJd+E8PEkQsP!02BnNe^SllDafCC!oF<7~4Fhxm(aI^sS>!c%=z8e|bcQ zmAO?@T(ShStvMHuF2@gO89+bMF16+b5^yahmVi%zj(A)0zOVUz4Ob-jDKYfYJAzRH zS2mBr<|2>i4ar;IFd^XI6w64K4;hq?b6GPZl4>HUUN3*&e;@i2zu4nd-+A9*?qQHF zS$|6Lii_T7uJ zQm=K78R@gz6O%5y*>#T&Yu`rRO~!l6K?BlapW|;Fiz~ne)GowulYK%}S5YoOaFzp( zA+$bg3woxFc(n#tVPECjdXZ>G1^P&tw9H3*W_ls2BMYj#@>7fEno41CaVIgZ43;R* z`3~=sBs9-W!Smki)oo_@ZS#hIqMaOg1T#<)95)W_0(yuZ=1ge?OPqO$Jqxhby&7|} zcHt7xi7L-D5Mdv%OzeR~jsJ#UD6d!zdKwaG?AQEWnXVHgngU(%gjvm4Gp8COe`5iX zjrTww^8I4^D<7~+oA$^g(*#mLvQzQ;T9Lb-$419i>d-9_AKG-$b3-Du%ngiTDyB2T z^( zU=!t2=~f+IVS8@3agZ-Y$}5;CrzaLu4*N|7VX;t76CHz&0piw`v3xJg@$#HHew9>N zW)$Du){-D4eeZ?P&#U8zq80eZ>SLmfNhmoBYi%?>{%H7;7~diFbG){@&={o)Xm?Mo zQ4wO0)Y>tT0*e+;7e;2K$~$wsZabtr+kke97d3t(U+kEtF38X`1Yd)76N;Gubyg#5 z1q;jEU=7#Wo5W){X~NVqUFwqba(o7T{%+J`lyR$2DUXw$#aFhze%%U89?xf@qBa+!*UuW6J<~b zA9BzGrTDA8@3X5T2N!hjS_!*3s8bqWm7_)7GX{=0l_~Q&`r&i$Rm@7!6S#hP5>iMh znM*2mQ+x@SnYc_8KB08YFyHlKVFuv49RVtRwRv!r3xDwBM=1DiwviNQ)RsVM23z{U zlBh%io#>KkXG%A}y}=pFDQa7e{md>>P}hIj1jP4sXsh7ROr3=xre9B@8`#GJ{hM73KZTxUy|lUS$15FfBm~LBL0i{WK^)Yt zbMh<1=fGP|1*+TYq(6tuyA)XlkjGol$KFpz@@CnSXt86|5lS6>O z)ps8merjet=ehtTxZO(4{%JdLS41XO|3$mBHog`F>)e?Z@0nuPO;|E)`-gEHk!s+T zz{1IP^DoV^ADP*-k^>BoqUNZpaNcWG@qQb34HRgp3OJ?aUS=%3@wTpKF#Q-5G`Ri( zplX@}jRAbj9^Ya??ZbLk=Qsg3RdFJZiwU%sz2LxSDHl*Q$}aR?F$3w{XaG&_)&V-K z9`lMRn>F-Si~ybkwwIWeUl=iu7b(z>Hn$ zZkv>Uh#Rx)O(epdH=r{`Dg{Fa$%WC%#CV47vi8*w7{IOVcZXum?cdkwQn3YPHcwQ| zHn6EZTG`G`U-+IH#cSnW0si_47*RGkw9spQ7`kWmo%s1jAilNGPokE9WSw7BdJX3h zMVCPLUm4#;VRKp?Lk1uixyG+~WMpYgLr7#YNvcyLmu4x?oGo~^PliXUsP46?^!Hv1 zKZVu8d$UIOgIM>M`AI<}A4}``zz`s+Uj4~T?if&5$|18qsA#-lI7bqQugNzhj~r|~ zjas7cU?@NL=GU0CJ_BXWp^+6;+3}wdd*Z7&{uFV>&g`yj?f3dUkYCD&oMR?6{AWj|i^+)Rw`II(*4q4n8sPzTRW*VFC<(Hx>(W7e+ph{g~_>h z7S3L&%glnYQ$2@P_^0aY$#6$_y6cd7ClVJ+JT9!k0T5qV+r+G>zSr-f(l9)iY`r;= zTT*LVQI1HhR2evYs67azD)EuGVD#+f`Bpt&>7Gzqr7D}xyy|?P6UvIsm@0pNBEOgMI1yd1Fm=a89#dgnk>Mcl9$=5YpjlSd0J0r$d9hQ3N*!;?Uf?2 z1I@fP6)7z!mN2pc!je-9Eb%cAA7dZ9IHJyyNrdu1GqxH5jF2LRiK2YLG2=kTQF_#* zj850@Z7EhosvIZ9Vc&>ivAgmOl#zGte9>%rPBM^Yko^5o9h+p=;t>m?en6 zf^-D>`X>h(c*eT{16}W_+@T|>WI>ySLD(V!o5rQbW2g2LvutkpRkfi2vxr zkv<19H1Y^LiTyG?@>}RcRhlFN%E*C1){p0G0W3guz4AkKpgjgqXfrBahguAnu?9oW z>n4jqMHBm-Xw)HXeSu0}v>Lj!j+7Gpyw#=!#3vrJd#zTi35#s>2DQh^1?Hqewl|4L zS5J6|?(NhESadRv^Zs&JH$QR|<4-^{{`X03{Lo7T&p!g4NbL^f3dVb3FXiWEQT+7r zPulD7hJs`M4sQD+2H@!yX9_j@62EZY`?3a%>0z!$YTq^Cy0y#=@wipRfXvAJokxRW zpHDo0ydgTQ&rSP_T9?isEy-b#lxLP#B}rHr0UKYM2WUk0dPV&xq}SGuaWpOCKk>S;CB2UC<+^nM$v+!pvRhFFts{;y%}DK9?mf zo!^Z>5v-?(BZ2thUsXeJE=7&^K})9p?le00 zG#>UxA(*yJQ>J+`FMU1KZanlbVIxChN5hmjGS^^dz59JN>QNX6v8Mfp~vCd@% z*b2WMoqENH9c;B(0M@cY(@Dve4&8Z3vKh}f5)QvNTGWvJY4unvkebj;BnsQ=c(^a) zyM~K;%L14ALoFLkT|))4gmj%oIO41%u}MgNjw&sON*F3d^(uFDXFpZF%)=041&T>f zriF(zNMqbN%?!C76kF}3=vm=B1PklHS8Pvl7kP#Z^|CSq_*t+;g%tAy<#+ecfh1iO zXRV&2?*r4eQsd9uj|N+)3BYT7m+*_r^hTQv%D7l(Jz4AkKwOh^we(5J=tcf(3v$5h z6ZbJgm5T!j{bid^Y>hQD61M!^Qx*S?O3>=j*EuSv<8z@WHvyMe*uiPs-o54Er?K=m zdBj)&#Lp`)D@yl~+#nKy2WkHjQv7z&_}^a1NC&t30jOyzqD9QAYJw&3kUDVnG*nBX zw-sk~*!v!HzQ7k@FJOzzf$PQVC>7yZ}V*DTb$p*3es1Lw1l6V z_H`pfKrEllTUQZS{W4i%g=z8yo1;_tGPdX!tA3?!vN79coQf3~8___&`6=opuxh3t zZ(e)O8RkUHKi*rPIng;e%2>~WV$L$LRgOt}mh#Z+d?vx(R3-pgXmX|qSNg05&jF}1EwI1sFz0oG)q2o1?$?7v7e z46z~D(Lwu1*s%GtxZ;iR9Xkn@%4Ai<^=4ngnEOg(SC^t&lS{9Ds-a(02!Yijxw1YZ ztEH68&a7aN-omz7bUjHZ^Z_4R#4_U#qAD#&jNjOh>L?{3h+t$aN4u~W+K>Q**ZfAQ zXh?LR(vS%6uV?z|4j}?^9MgcGQ^<6|N7Z0g-5tPR*MN}~@iqh}&j-Vt;D%|@F{Xe>;$%-@Utn)r$Y48WE{yThw(6fz4u*7^ta0b@hC%j8m-Cvn* z!Tm}Rfb4qy>at-rP!TtoRuSMmH*o1Mf3Mmt*cF8ru0^M&K=i3{1B8N}>&TCXn%ebS z0%w4Q_Oe{e0{MHzW;EYX{W+p>Y$EY#qObQuIu{hh4}e_HRPn=@7};meHkRDIk{9Y} z8JyBX263-Zd}`fFO*4jYi-xHLNbNe4xx3}aV{YORePF2ti@F|!aJ)9gZchsuQcKNm zc94ZL5c2y0@jO6#1F<_3VF`MnSK%L;C*p1iTUi>l>SAr%aKYC(Klv@RJZJ@aFlPsB zMz-JE<#nJMsDb_fly?(tH&8I@bn{_oLLE}8O@@EAYw)bCxcV1=e^<7bLgNa zvE?SS4=>W*9ZwQ5rMY#w#89(k5lBb=KgJmL>CkN!3ouEvUT@Y+lZy$FkQ2&N!n#1j z+c}5Df$L%CwQ&?<2N6LjZ?7XUCKh?1ooUMm5IE3XAA{}0WGle+*p|y)cx)k8mXz*j z?VHzrV&jnF!k1iNcI&A=@L$Jq8vh;j|86a4(ohi0T=ctbSjPo8LXF)QqWJf%W(KfA z7O|GaBTz$~oT%^L`LX_x`53Y;wv3IF;BYZrez|yT)#8~uZ9C5T$I+772eqXa@y?zR zRNa*cVHT(!1HL7Z!Ex9zm#XIzDyBpVT4{=yJmA952DiEisU-B^DjllY)*Gju0ka#| z!n&I*{%l+b!R6QixaBqY=H(14@wDGg6TT#{-4q`DWR_3mah@yrEu2nK<~2s$MVM5ZQ9H zYTM&KQ}zJa8&DKjRb40YIK;I_v&cy!L9<(wQUyKKBeo(^KE@Last7IA_&vsT{M#K) zF0j)w79Jl1B|hL!fi`5Zq7+z>=-d6jSXz8@EN|4sWlW zdE;Idx+qgCxL5aXzx|kD0Kf8`FoxU;h(({(D|3hOMoEep2J@D%;#{JOwF82ziX#n8H zbdgh4? zGQ%L>a|6u5*X&_CF-ga5J(0KjJ72ENYpwGdxVqH7l_|H30MEC>T9539@fRDD#;zU3 zr zf<;_OM(b_X3{?ufY4W+}l)&P(`b&iBZei-0viCXFezO9@jSv+?{m+@9VydPGzVN4p zo5FW7eoFHji|_>&Xg<_gdZXi?|8k~QZ=}aw!B`$M#(Z?pIV{w@#)P!R#Xnbx@PcLF3*^@{KSe9<1cQf?&6qc!_+3Yp98LhIkT+F35CglG51>7G5Nrfa-CT(#&3T~L4u9U5y97<+ zN6^=}UtT%YgGX4?*hHI?#zi(T5+o`$Ii!H<%|jzlNIcPHJ5I=ohMsn_G91<`13&{J zhVVL*7J=FZpq%*HnEng5hZIz^j5Cs1(F%MtHl0{a4<;dZ{0(LX*^ftCdlnE)KbK>+ z%cOxDiaOj7vNH8&mM1rHu z%xPK{CsGy|EF2tkhLn55uF2N)4)Ma1Zm+h2LQSXh9;(!O)BaJM%Qc91&nCR^%p(Tm z;*B;<#ucv$Et-h3X|GU8z`?Q9&%8W(F#qN}d!8m-``WNDzX7Zns?k&^G>M|mox%@O zz`zdh#>q#*Yq3)d$gA$j=etXh1USyr{}N3(gCMi?b0^8XfI|4yI7_Ue>JemlUF<_E zL2G(AF}ZlBaKiZ-We>hpA>cd4q5GUSnZ##;s)04(XUV<=?vQ@C7E?CWypqlZJ&C7J z)*O@De6+-R-E@pVtL#A`)+(}7Wc;t|3`)AziXi6qaUw%c3t1;T?FbuFa zoloCJ5KkNeGLa`9&mhtO+ITrAVz=~Ux}2b zO!8;5L=LB2GPr@vk{vvZvr7AVk}L4&A(iFx`Lb!iY~Jj5g9sk|6&o-=^Q-J{J)jmT z*`}Ud>hE5yG4k=V;Ma>*1@id|^w;50R#UV zxkQTYNk+87AG5I$*aH;W*5j-yqD~$v+IJrM^QA0zlm)(-t>i>EjV22%*Mf&{3kDz9 zWA)h^v9N<4zLfy|ao*~A)@R-A1KZ$dDVHKi$O-3}rXD-V==b=g5(Nx;%!T>+tF0(ITF!_~dwAN`t0~E=6zRN~~3jDN*UoJ_FmkNBa7^O3@ zR~Yc8OWj`C=N=2DgpfNa<~cQ)L$;f{#E_!$z$t9);pSd6qk)empm zTeWJvc2b zd>DiZHev4iin{>N6Y}GozV0Q3a%lhvu2^Z;dC7r6kZUVh`tI;v<3Q~AyAxuKk32ih zaEmzU!@md{6c9E8IT+!pizD+oz0yzbyx6+@AZDD!J_U#gUEY0NU9n|e3u8*(9h=)V z6^^p;pEsXlWc(N@f;O3Z$+`ufo1%YiR~B(p6M3bvM)BJQU93xYtv;g`(CmL=4vZyctTdGOP(3oRGZYPOd4f~kNQ-DUOZ9|=tzZoCOwh>%Js?=Fs-vJcxj2Zpnh49xVOwWhUsc5NGo9>)wRN(EW${7AVm zaPPx%=l=CAP)d62P)bSA3GxKgyJ$pBFe%a^xJ7aF!iA`z;9-OGjTnFYCEO*|`C_22 z0Oh&88D%?XREhhBr!DC^RXyqoq*#%NXh)iDx_u44)l@3xH7L z*H!6m+4NS=EajnQJLLy7(U@0qx&ky3PFHheGX?d{cl}`_z%^{B{|ZxGI70Y7!t@56 zj#YCj$V@?TlT}l}T_sheDiXuUhzRcezrD0I4iSj2hEsC;t_Xw zY#A?}JA_z3BmC$=91Sl%P`*7a?EH9Tb>|-UI72xNQ<&_wON(BvIE@ARi-k}R5MRL? zQ~so+zw;_8ETiHvl!@rAP|9?ht2lYPJiFgGrul(^yLT4Bw=f73ul-Prs#jNS$~=Ml z5UYE6J?~_`TOxKnuu)UJBlQ;%yUP7zHg{{g28`!M;;UbU`FJp16+=exk;)%i0&@s8 z5tJfx&W%m-zu(wXee8Qt%1Fzgh|{hv9LS;~AyqlJ2w=uyN<3t}*Az0gW- zT)zBAdeXmqGNw^_>&^3g6jG6Nu+hr8!p<$}g}YO_1Cj<9?)ugka*-gs$1$r{3~m1K zd<2xWXai+Y$e+PY`iqqDv^$I61x0^8|;OOVAp2axY?CR_u2pxHW+S zvoOiZQ;u`bBw#nkO3M^MX=CrXQilQg1=G=T2y}aN*D8AkZ;JDO5iFyEL1DmnWP!&! z>FLO`KDxBR!WQxl$-C~n;C3`N?AS%Mfy28%j7Mo>S&Phr+Ef~*XBSTN4i?rris)gsCE!gEPbvp^AJv*IBmY>JrP7Tt2>U?JnPyt@2 zJfQ8-)0G2SBA-;f(E8aY6%*2i<4&;q+7-+QF!2K=X)pGahv(5-d$2U*XBKXO^zSwd z)sLdCDv-(%wg(ntq_W}Iv>|NgU2g%}iIrT&NYLMF^Aj=jMW&$%1zr>;N_av1{2z$YsE=?V5!KC0bouX`Bq%C`(UNs88n0VAqgPov zIEC(FZ^y1&!oJgfkbA~p`eRUt8*3bX4v6Zr&&-7|(04eCA8}IetAr_o&mB3pa$EGG z9f}TsLx*A~1E!aDa1xtiI|3DuXEUEziw(fmwYNra@hM>*{uIDFjQ|Mn>16#gv_7R7$%GPCIsI0uWD+4rBYqY%^HKG|l5=v-2mxQi8 z;^73!96O5>*3DEfREI}y@S=MLR8cXLK=)|Ez}3DbBHA6ZDl}Rcz@OkFz0M#jOo;!*q%r--V5h&PQbP! zWs0-sBYfq zXnJcVHSnSAln3fZTIFjmcU!8(lua57=WoIMtx{7}4~C@;Y%$>{D}xkdyE#;T7w*sA zCkRGr2<7_}|GUXF469eiIc~df3rw0%xto)uqhKZ@k}gS66)6S{qB%?#i~5dZIzs4! z!ijc6&22#g!od#nle_h7kQo(H8qwV|Y=8iqRKK~p(*jSA2 z{GDhM9TT+U%o<@izmhQ%)z)=PFNlDf^h^sG(UPO+oSy)7 zpx0h!SAxQ{-I8=tSux+oTj*M>si^%x>FSNo*o)x=Dg7pWCK?plzajCt1l2YSkZCIa z1{A!6{H;N*#x&L&W^~wcHFhaUJ}G`@X`}?J*x1+E0Rb3ZiNZnHcF`^>R%z{Nj>QhVChf44TZMd5-CUi^(c#d5MQ{)83Jky$yw6i_{^H}hm^rpy!-ZDPG6 zvbu_VWeZZNmbTKnY<$=Qfr*xmlNng~>iG25a*6#w6uBBuisFU1iSoQV|62?=&?C@x zH5fuZsOyWGY>`kWFMj+vXZ=^YSR@X9xv(c9$!%5(ujym8@jM&?K6F&yLk=F> zpLH-Q4)CE&cra`&|Z*^;5mTVVi#}`^o;ONtg!QR4?be!g#&? z7_vyXhK%z|03R>snq{^iI$C>*X@8M^2-Atu+*t{z>QT4%ab)BM?;tc(7M>kQzFmma z^!d&c);pkfDL)NUAdO7JpRgLjN-F0G#A4!nGtZ z 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 literal 0 HcmV?d00001 diff --git a/nx-dev/nx-dev/public/images/nx-console/nx-mcp-landingpage-img.avif b/nx-dev/nx-dev/public/images/nx-console/nx-mcp-landingpage-img.avif new file mode 100644 index 0000000000000000000000000000000000000000..d3be89a6487c75edf7aab4071dce9f7e73eea429 GIT binary patch literal 32430 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�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 literal 0 HcmV?d00001 diff --git a/nx-dev/nx-dev/redirect-rules.js b/nx-dev/nx-dev/redirect-rules.js index 440f4da811..3edb460a04 100644 --- a/nx-dev/nx-dev/redirect-rules.js +++ b/nx-dev/nx-dev/redirect-rules.js @@ -1037,7 +1037,7 @@ const coreFeatureAndConceptsRefactoring = { * For AI Chat to make sure old URLs are not broken (added 2023-09-14) */ const aiChat = { - '/ai': '/ai-chat', + // '/ai': '/ai-chat', }; // rename nx/linter to eslint diff --git a/nx-dev/ui-ai-landing-page/.babelrc b/nx-dev/ui-ai-landing-page/.babelrc new file mode 100644 index 0000000000..1ea870ead4 --- /dev/null +++ b/nx-dev/ui-ai-landing-page/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/nx-dev/ui-ai-landing-page/.eslintrc.json b/nx-dev/ui-ai-landing-page/.eslintrc.json new file mode 100644 index 0000000000..a39ac5d057 --- /dev/null +++ b/nx-dev/ui-ai-landing-page/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["plugin:@nx/react", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/nx-dev/ui-ai-landing-page/README.md b/nx-dev/ui-ai-landing-page/README.md new file mode 100644 index 0000000000..cfb9b199d4 --- /dev/null +++ b/nx-dev/ui-ai-landing-page/README.md @@ -0,0 +1,7 @@ +# ui-ai-landing-page + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test ui-ai-landing-page` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/nx-dev/ui-ai-landing-page/jest.config.ts b/nx-dev/ui-ai-landing-page/jest.config.ts new file mode 100644 index 0000000000..068cf81dca --- /dev/null +++ b/nx-dev/ui-ai-landing-page/jest.config.ts @@ -0,0 +1,9 @@ +export default { + displayName: 'ui-ai-landing-page', + preset: '../../jest.preset.js', + transform: { + '^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@nx/react/babel'] }], + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/nx-dev/ui-ai-landing-page', +}; diff --git a/nx-dev/ui-ai-landing-page/project.json b/nx-dev/ui-ai-landing-page/project.json new file mode 100644 index 0000000000..8db9242c1b --- /dev/null +++ b/nx-dev/ui-ai-landing-page/project.json @@ -0,0 +1,9 @@ +{ + "name": "ui-ai-landing-page", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "nx-dev/ui-ai-landing-page/src", + "projectType": "library", + "tags": [], + "// targets": "to see all targets run: nx show project ui-ai-landing-page --web", + "targets": {} +} diff --git a/nx-dev/ui-ai-landing-page/src/index.ts b/nx-dev/ui-ai-landing-page/src/index.ts new file mode 100644 index 0000000000..991541eee9 --- /dev/null +++ b/nx-dev/ui-ai-landing-page/src/index.ts @@ -0,0 +1,5 @@ +export * from './lib/hero'; +export * from './lib/problem-statement'; +export * from './lib/features'; +export * from './lib/technical-implementation'; +export * from './lib/call-to-action'; diff --git a/nx-dev/ui-ai-landing-page/src/lib/call-to-action.tsx b/nx-dev/ui-ai-landing-page/src/lib/call-to-action.tsx new file mode 100644 index 0000000000..e6daae0d9e --- /dev/null +++ b/nx-dev/ui-ai-landing-page/src/lib/call-to-action.tsx @@ -0,0 +1,90 @@ +import { ButtonLink } from '@nx/nx-dev/ui-common'; +import { cx } from '@nx/nx-dev/ui-primitives'; +import React, { ReactElement } from 'react'; +import Link from 'next/link'; + +export function CallToAction(): ReactElement { + return ( +
+ {/* Background pattern */} + + + {/* Gradient background */} +
+ ); +} diff --git a/nx-dev/ui-ai-landing-page/src/lib/features.tsx b/nx-dev/ui-ai-landing-page/src/lib/features.tsx new file mode 100644 index 0000000000..a56b054037 --- /dev/null +++ b/nx-dev/ui-ai-landing-page/src/lib/features.tsx @@ -0,0 +1,297 @@ +import { SectionHeading } from '@nx/nx-dev/ui-common'; +import { cx } from '@nx/nx-dev/ui-primitives'; +import { CommandLineIcon } from '@heroicons/react/24/outline'; +import { ReactElement } from 'react'; + +export function Features(): ReactElement { + return ( +
+
+
+ + Make your AI workspace-aware + + +

+ Transform your AI from context-blind to architecture-aware with + complete workspace intelligence. +

+
+ +
+ + + + + + + + + } + /> + + + + + + } + /> + } + /> + + + + + + + } + /> + + + + + + + + + } + /> + + + + + + + + + + + } + /> +
+
+
+ ); +} + +interface FeatureCardProps { + title: string; + description: string; + icon: JSX.Element; + href?: string; +} + +function FeatureCard({ + title, + description, + icon, + href = '#', +}: FeatureCardProps): ReactElement { + return ( +
+
+
+
+ {icon} +
+

{title}

+

{description}

+
+
+
+ ); +} diff --git a/nx-dev/ui-ai-landing-page/src/lib/hero.tsx b/nx-dev/ui-ai-landing-page/src/lib/hero.tsx new file mode 100644 index 0000000000..7319cd41c1 --- /dev/null +++ b/nx-dev/ui-ai-landing-page/src/lib/hero.tsx @@ -0,0 +1,519 @@ +'use client'; +import { ComponentProps, ReactElement, useState } from 'react'; +import { ButtonLink, SectionHeading, VideoModal } from '@nx/nx-dev/ui-common'; +import { + PlayIcon, + CommandLineIcon, + CpuChipIcon, +} from '@heroicons/react/24/outline'; +import { sendCustomEvent } from '@nx/nx-dev/feature-analytics'; +import { cx } from '@nx/nx-dev/ui-primitives'; +import { MovingBorder } from '@nx/nx-dev/ui-animations'; +import { motion, AnimatePresence } from 'framer-motion'; +import Image from 'next/image'; + +function PlayButton({ + className, + ...props +}: ComponentProps<'div'>): ReactElement { + const parent = { + initial: { + width: 82, + transition: { + when: 'afterChildren', + }, + }, + hover: { + width: 296, + transition: { + duration: 0.125, + type: 'tween', + ease: 'easeOut', + }, + }, + }; + const child = { + initial: { + opacity: 0, + x: -6, + }, + hover: { + x: 0, + opacity: 1, + transition: { + duration: 0.015, + type: 'tween', + ease: 'easeOut', + }, + }, + }; + + return ( +
+
+ +
+ +
+ + +
+ ); +} + +interface AIFeature { + id: string; + title: string; + description: string; + icon: React.ComponentType>; + videoUrl: string; + thumbnailUrl: string; + eventId: string; + blogUrl?: string; +} + +const aiFeatures: AIFeature[] = [ + { + id: 'vscode-copilot', + title: 'Integrate with your LLM via MCP', + description: + 'Connect your AI assistants directly to your Nx workspace for deep project understanding.', + icon: CpuChipIcon, + videoUrl: 'https://youtu.be/RNilYmJJzdk', + thumbnailUrl: '/images/ai/nx-copilot-mcp-yt-thumb.avif', + eventId: 'nx-ai-vscode-video-click', + blogUrl: '/blog/nx-mcp-vscode-copilot', + }, + { + id: 'ci-fixes', + title: 'AI-Powered CI Failure Analysis', + description: + 'Your LLM automatically diagnoses CI failures and suggests targeted fixes.', + icon: ({ className, ...props }: React.ComponentProps<'svg'>) => ( + + + + + + ), + videoUrl: 'https://youtu.be/fPqPh4h8RJg', + thumbnailUrl: '/images/ai/ai-ci-fix-thumb.avif', + eventId: 'nx-ai-ci-video-click', + blogUrl: '/blog/nx-editor-ci-llm-integration', + }, + { + id: 'terminal-integration', + title: 'Active Terminal Task and Log Awareness', + description: + 'Give your LLM real-time visibility into running tasks and build outputs.', + icon: CommandLineIcon, + videoUrl: 'https://youtu.be/Cbc9_W5J6DA', + thumbnailUrl: '/images/ai/terminal-llm-comm-thumb.avif', + eventId: 'nx-ai-terminal-video-click', + // blogUrl: '/blog/nx-editor-ci-llm-integration', + }, + { + id: 'code-generation', + title: 'Predictable Code Generation That Works', + description: + 'Generate workspace-aware code that follows your patterns and architecture.', + icon: ({ className, ...props }: React.ComponentProps<'svg'>) => ( + + + + + + + ), + videoUrl: 'https://youtu.be/PXNjedYhZDs', + thumbnailUrl: '/images/ai/video-code-gen-and-ai-thumb.avif', + eventId: 'nx-ai-codegen-video-click', + blogUrl: '/blog/nx-generators-ai-integration', + }, +]; + +export interface HeroProps { + className?: string; +} + +export function Hero(): JSX.Element { + const [isOpen, setIsOpen] = useState(false); + const [selectedFeature, setSelectedFeature] = useState( + aiFeatures[0] + ); + + const headingVariants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { + duration: 0.6, + ease: 'easeOut', + }, + }, + }; + + return ( +
+
+ {/* Header Section */} +
+ + + AI that{' '} + + actually works + {' '} +
+ for large codebases +
+
+
+ + {/* Interactive Video + Features Section */} +
+ {/* Video Section */} + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + {`${selectedFeature.title} + + +
+ + + + { + setIsOpen(true); + sendCustomEvent( + selectedFeature.eventId, + 'ai-landing-hero-video', + 'ai-landing' + ); + }} + /> + + +
+ + {selectedFeature.blogUrl && ( + + + + sendCustomEvent( + `${selectedFeature.eventId}-learn-more`, + 'ai-landing-hero-learn-more', + 'ai-landing' + ) + } + > + Learn more about {selectedFeature.title.toLowerCase()} + + → + + + + + )} +
+ + {/* Features Section */} + +
+ {aiFeatures.map((feature, index) => { + const Icon = feature.icon; + const isSelected = selectedFeature.id === feature.id; + + return ( + + ); + })} +
+ + + + sendCustomEvent( + 'ai-landing-enhance-click', + 'ai-landing-hero', + 'ai-landing' + ) + } + > + Enhance your AI assistant + + +
+
+
+ + setIsOpen(false)} + videoUrl={selectedFeature.videoUrl} + /> +
+ ); +} diff --git a/nx-dev/ui-ai-landing-page/src/lib/problem-statement.tsx b/nx-dev/ui-ai-landing-page/src/lib/problem-statement.tsx new file mode 100644 index 0000000000..55e702ef0e --- /dev/null +++ b/nx-dev/ui-ai-landing-page/src/lib/problem-statement.tsx @@ -0,0 +1,308 @@ +import { SectionHeading } from '@nx/nx-dev/ui-common'; + +export interface ProblemStatementProps { + className?: string; +} + +export function ProblemStatement({ + className, +}: ProblemStatementProps): JSX.Element { + return ( +
+
+
+ + Your AI is blind to your workspace architecture + + +

+ As monorepos scale, AI tools become progressively less effective + without true workspace understanding. +

+
+ +
+ {/* Left Column - Problems */} +
+

+ The challenges +

+ +
+
+
+ + + + + + + + + + +
+
+

+ Limited context +

+

+ LLMs only see individual files, missing the architectural + relationships in large monorepos. +

+
+
+ +
+
+ + + + + + +
+
+

+ Inconsistent output +

+

+ AI generates code that doesn't follow team standards or may + break components it can't see. +

+
+
+ +
+
+ + + + + + + + +
+
+

+ No workspace awareness +

+

+ AI can't understand project dependencies, ownership, or + cross-project integration points. +

+
+
+ +
+
+ + + + + +
+
+

+ Manual context burden +

+

+ Developers must repeatedly provide the same contextual + information about project structure. +

+
+
+
+
+ + {/* Right Column - Solutions */} +
+

+ How Nx helps +

+ +
+
+
+ + + + + + + + + + +
+
+

+ Architectural awareness +

+

+ Move from file-level to workspace-level understanding with + rich project relationship metadata. +

+
+
+ +
+
+ + + + + + +
+
+

+ Predictable + intelligent +

+

+ Combine consistent generators with AI customization that + follows team standards. +

+
+
+ +
+
+ + + + + +
+
+

+ Integrated workflows +

+

+ Connect editor, terminal, CI, and AI for truly context-aware + assistance across your entire workspace. +

+
+
+ +
+
+ + + + + + + + +
+
+

+ Up-to-Date Documentation +

+

+ Access current docs and best practices for accurate, + workspace-specific guidance. +

+
+
+
+
+
+
+
+ ); +} diff --git a/nx-dev/ui-ai-landing-page/src/lib/technical-implementation.tsx b/nx-dev/ui-ai-landing-page/src/lib/technical-implementation.tsx new file mode 100644 index 0000000000..bd7583511d --- /dev/null +++ b/nx-dev/ui-ai-landing-page/src/lib/technical-implementation.tsx @@ -0,0 +1,217 @@ +import { + ModelContextProtocolIcon, + NxConsoleSmallIcon, +} from '@nx/nx-dev/ui-icons'; +import Image from 'next/image'; + +export interface TechnicalImplementationProps { + className?: string; +} + +export function TechnicalImplementation({ + className, +}: TechnicalImplementationProps): JSX.Element { + return ( +
+
+
+ {/* Left Side - Title and How It Works */} +
+

+ Powered by Nx workspace intelligence +

+ +
+
+
+ 1 +
+
+

+ Nx daemon runs in the background, maintaining up-to-date + workspace metadata +

+
+
+ +
+
+ 2 +
+
+

+ This rich contextual data is processed and optimized for AI + consumption +

+
+
+ +
+
+ 3 +
+
+

+ Nx Console exposes the data to your AI assistant via an MCP +

+
+
+
+
+ + {/* Right Side - Image */} +
+
+ Nx MCP visualization +
+
+
+ +
+ {/* Flow diagram with connected boxes */} +
+ {/* Nx Console Box */} +
+
+
+ +
+

+ Start with Nx Console +

+
+

+ Install the Nx Console Extension, available for VSCode, Cursor, + and IntelliJ. +

+ + {/* Right arrow - only visible on md and larger screens */} +
+ + + +
+ + {/* Down arrow - only visible on small screens */} +
+ + + +
+
+ + {/* MCP Box */} +
+
+
+ +
+

+ Nx MCP +

+
+

+ Nx Console automatically registers its MCP server or you can + configure it in any MCP compatible client. +

+ + {/* Right arrow - only visible on md and larger screens */} +
+ + + +
+ + {/* Down arrow - only visible on small screens */} +
+ + + +
+
+ + {/* Enhanced LLM Workflow Box */} +
+
+
+ + + +
+

+ Enhanced LLM workflow +

+
+

+ Your existing AI tools understand your workspace architecture + without changing your development habits. +

+
+
+
+
+
+ ); +} diff --git a/nx-dev/ui-ai-landing-page/tsconfig.json b/nx-dev/ui-ai-landing-page/tsconfig.json new file mode 100644 index 0000000000..3c41f10fb2 --- /dev/null +++ b/nx-dev/ui-ai-landing-page/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../tsconfig.base.json" +} diff --git a/nx-dev/ui-ai-landing-page/tsconfig.lib.json b/nx-dev/ui-ai-landing-page/tsconfig.lib.json new file mode 100644 index 0000000000..578a3fb7dd --- /dev/null +++ b/nx-dev/ui-ai-landing-page/tsconfig.lib.json @@ -0,0 +1,23 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": [ + "node", + "@nx/react/typings/cssmodule.d.ts", + "@nx/react/typings/image.d.ts" + ] + }, + "exclude": [ + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.spec.tsx", + "src/**/*.test.tsx", + "src/**/*.spec.js", + "src/**/*.test.js", + "src/**/*.spec.jsx", + "src/**/*.test.jsx" + ], + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] +} diff --git a/nx-dev/ui-ai-landing-page/tsconfig.spec.json b/nx-dev/ui-ai-landing-page/tsconfig.spec.json new file mode 100644 index 0000000000..ec9d3e281b --- /dev/null +++ b/nx-dev/ui-ai-landing-page/tsconfig.spec.json @@ -0,0 +1,22 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "moduleResolution": "node10", + "jsx": "react-jsx", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] +} diff --git a/nx-dev/ui-icons/src/index.ts b/nx-dev/ui-icons/src/index.ts index 1dea615205..e01d3784cd 100644 --- a/nx-dev/ui-icons/src/index.ts +++ b/nx-dev/ui-icons/src/index.ts @@ -2,6 +2,7 @@ export * from './lib/ai/cursor'; export * from './lib/ai/github-copilot'; export * from './lib/ai/intellij-ai'; +export * from './lib/ai/model-context-protocol'; // CI PROVIDERS export * from './lib/ci-providers/azure-devops'; diff --git a/nx-dev/ui-icons/src/lib/ai/model-context-protocol.tsx b/nx-dev/ui-icons/src/lib/ai/model-context-protocol.tsx new file mode 100644 index 0000000000..7eb765c1e1 --- /dev/null +++ b/nx-dev/ui-icons/src/lib/ai/model-context-protocol.tsx @@ -0,0 +1,21 @@ +import { FC, SVGProps } from 'react'; + +/** + * Model Context Protocol (MCP) icon. + */ +export const ModelContextProtocolIcon: FC> = ( + props +) => ( + + ModelContextProtocol + + + +); diff --git a/nx-dev/ui-icons/src/lib/products.tsx b/nx-dev/ui-icons/src/lib/products.tsx index 78706a2b9a..9eb7433fa9 100644 --- a/nx-dev/ui-icons/src/lib/products.tsx +++ b/nx-dev/ui-icons/src/lib/products.tsx @@ -130,3 +130,19 @@ export const NxConsoleIcon: FC> = (props) => ( /> ); + +export const NxConsoleSmallIcon: FC> = (props) => ( + + + +); diff --git a/tools/ai-landing-tasks.md b/tools/ai-landing-tasks.md new file mode 100644 index 0000000000..1bb9644d4c --- /dev/null +++ b/tools/ai-landing-tasks.md @@ -0,0 +1,222 @@ +# Nx AI Landing Page Implementation + +This file tracks the implementation of a new AI-focused landing page for Nx, based on the content strategy from `nx-ai-landing-page-copy.md`. The page will showcase how Nx enhances AI assistants with workspace intelligence. + +## Completed Tasks + +- [x] Create initial task list + +## In Progress Tasks + +- [ ] Project setup and scaffolding + +## Future Tasks + +### Project Setup + +- [ ] Create UI Library for AI Landing Page Components + + - Run `nx g @nx/react:lib nx-dev/ui-ai-landing-page` + - Configure project structure similar to ui-enterprise + - Set up proper export patterns in index.ts + +- [ ] Create Next.js Page Component for AI Landing Page + + - Create `nx-dev/nx-dev/app/ai/page.tsx` following same structure as React page + - Set up metadata and SEO properties + - Import components from new ui-ai-landing-page library + +- [ ] Configure Routing and Navigation + - Update navigation components to include AI landing page + - Configure proper routing in Next.js app + +### Component Development + +- [ ] Create Hero Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/hero.tsx` + - Use headline "Make Your AI Assistant 10x Smarter" + - Add sub-headline with proper styling + - Create split-screen visual comparison (before/after) + - Add primary CTA "Enhance Your AI Assistant" + - Add secondary CTA "Watch 3-min Demo" + +- [ ] Create Video Demo Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/nx-ai-benefits-video` + - Create thumbnail with play button + - Set up video modal similar to existing examples + - Connect to appropriate YouTube video link + +- [ ] Create Problem Statement Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/problem-statement.tsx` + - Add section heading "Why Your AI Assistant Struggles with Enterprise Codebases" + - Create visual elements for the three core problems + - Add diagram comparing LLM "street view" vs Nx "map view" + +- [ ] Create Solution Overview Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/solution-overview.tsx` + - Add headline "Nx Provides the Missing Context Your AI Needs" + - Create visual elements for the three core value props + - Add appropriate styling and animations + +- [ ] Create Features Container Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/features.tsx` + - Create wrapper structure for all feature sections + +- [ ] Create Individual Feature Components + + - Implement workspace intelligence feature (`workspace-intelligence.tsx`) + - Implement CI integration feature (`ci-integration.tsx`) + - Implement terminal integration feature (`terminal-integration.tsx`) + - Implement smart code generation feature (`smart-code-generation.tsx`) + - Implement documentation-aware feature (`documentation-aware.tsx`) + +- [ ] Create Demo Snippets + + - Implement visual demos for each feature section + - Create stylized code snippets demonstrating features + +- [ ] Create Technical Implementation Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/technical-implementation.tsx` + - Add headline "Powered by Nx's Rich Workspace Intelligence" + - Create visual elements for explaining how it works + - Add integration options section + +- [ ] Create Use Cases Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/use-cases.tsx` + - Create visual elements for each use case scenario + - Add appropriate icons and styling + +- [ ] Create Competitive Differentiation Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/competitive-differentiation.tsx` + - Add headline "Why Large Workspaces Are AI Future-Proof" + - Create visual comparison for each key point + +- [ ] Create Social Proof Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/social-proof.tsx` + - Add headline "Join Forward-Thinking Teams Already Using AI-Enhanced Nx" + - Create carousel for customer testimonials + - Add customer logos section + +- [ ] Create Getting Started Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/getting-started.tsx` + - Add headline "Transform Your AI Assistant in Minutes" + - Create visual step-by-step guide with three steps + - Add technical requirements section + +- [ ] Create Resources Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/resources.tsx` + - Add featured content with video links + - Add blog series links + - Add additional resources section + +- [ ] Create Call-to-Action Component + + - Implement in `nx-dev/ui-ai-landing-page/src/lib/call-to-action.tsx` + - Add strong headline encouraging action + - Add primary and secondary CTAs + - Add appropriate styling and animations + +- [ ] Create Shared UI Components + - Create comparison slider component for before/after visuals + - Create stylized code snippets component + - Create feature card component template + - Create animated icon components for features + +### Integration and Testing + +- [ ] Assemble Components in Page + + - Assemble all components in proper order in page.tsx + - Ensure proper spacing and responsive layout + - Add scroll anchors for navigation + +- [ ] Implement Responsive Design + + - Ensure all components are responsive for mobile, tablet and desktop + - Implement proper dark mode support + - Test across different viewport sizes + +- [ ] Optimize Performance + + - Lazy load videos and heavy content + - Optimize images for web + - Implement proper caching strategies + +- [ ] Perform Component Testing + + - Create tests for critical components + - Test responsive behavior + - Test dark/light mode switching + +- [ ] Perform Page Integration Testing + + - Test full page rendering + - Test navigation to/from page + - Test all links and CTAs + +- [ ] Conduct Final Review + + - Review content for grammar and style consistency + - Verify all links work correctly + - Check analytics tracking + +- [ ] Prepare for Release + - Coordinate with marketing for announcement + - Prepare social media assets + - Set up tracking for KPIs + +## Implementation Plan + +The AI landing page will be implemented following the React landing page structure as a model. We'll create a dedicated UI library for all AI landing page components, similar to the ui-enterprise library. + +The page will feature multiple sections based on the content strategy in `nx-ai-landing-page-copy.md`: + +1. **Hero Section**: Eye-catching introduction with a clear value proposition +2. **Video Demo**: Showcase Nx AI capabilities in action +3. **Problem Statement**: Explain challenges AI assistants face with enterprise codebases +4. **Solution Overview**: How Nx provides the missing context +5. **Features Deep Dive**: Detailed exploration of key features and capabilities +6. **Technical Implementation**: Explanation of how the integration works +7. **Use Cases**: Real-world scenarios demonstrating value +8. **Competitive Differentiation**: Why Nx + AI is superior +9. **Social Proof**: Testimonials and customer examples +10. **Getting Started**: Simple steps to implement +11. **Resources**: Additional learning materials +12. **Call-to-Action**: Final conversion point + +The implementation will follow best practices for responsive design, accessibility, and performance optimization. We'll prioritize component reusability and maintain consistency with existing Nx design patterns. + +### Relevant Files + +Overall project information is in `./nx-ai-landing-page-copy.md`. + +- `nx-dev/ui-ai-landing-page/src/index.ts` - Main exports for the AI landing page library +- `nx-dev/ui-ai-landing-page/src/lib/hero.tsx` - Hero component with main headline and CTAs +- `nx-dev/ui-ai-landing-page/src/lib/nx-ai-benefits-video/` - Video demo components +- `nx-dev/ui-ai-landing-page/src/lib/problem-statement.tsx` - Problem statement section +- `nx-dev/ui-ai-landing-page/src/lib/solution-overview.tsx` - Solution overview section +- `nx-dev/ui-ai-landing-page/src/lib/features.tsx` - Features container component +- `nx-dev/ui-ai-landing-page/src/lib/workspace-intelligence.tsx` - Workspace intelligence feature +- `nx-dev/ui-ai-landing-page/src/lib/ci-integration.tsx` - CI integration feature +- `nx-dev/ui-ai-landing-page/src/lib/terminal-integration.tsx` - Terminal integration feature +- `nx-dev/ui-ai-landing-page/src/lib/smart-code-generation.tsx` - Smart code generation feature +- `nx-dev/ui-ai-landing-page/src/lib/documentation-aware.tsx` - Documentation-aware feature +- `nx-dev/ui-ai-landing-page/src/lib/technical-implementation.tsx` - Technical implementation section +- `nx-dev/ui-ai-landing-page/src/lib/use-cases.tsx` - Use cases section +- `nx-dev/ui-ai-landing-page/src/lib/competitive-differentiation.tsx` - Competitive differentiation section +- `nx-dev/ui-ai-landing-page/src/lib/social-proof.tsx` - Social proof section +- `nx-dev/ui-ai-landing-page/src/lib/getting-started.tsx` - Getting started section +- `nx-dev/ui-ai-landing-page/src/lib/resources.tsx` - Resources section +- `nx-dev/ui-ai-landing-page/src/lib/call-to-action.tsx` - Call to action section +- `nx-dev/nx-dev/app/ai/page.tsx` - Main Next.js page component for the AI landing page diff --git a/tools/nx-ai-landing-page-copy.md b/tools/nx-ai-landing-page-copy.md new file mode 100644 index 0000000000..589a9f33fe --- /dev/null +++ b/tools/nx-ai-landing-page-copy.md @@ -0,0 +1,287 @@ +# Nx AI Landing Page: Content Strategy & Structure + +## Executive Summary + +Based on the analysis of Nx's AI blog series and existing landing pages, here's a comprehensive strategy for an AI-focused landing page that positions Nx as the essential foundation for AI-powered development in monorepos. + +## Page Structure & Content Strategy + +### Hero Section + +**Primary Headline:** "Make Your AI Assistant 10x Smarter" +**Sub-headline:** "Integrate Nx's workspace intelligence directly into your existing AI assistant through MCP - transforming basic code helpers into architecturally-aware development partners." + +**Primary CTA:** "Enhance Your AI Assistant" +**Secondary CTA:** "Watch 3-min Demo" + +### Problem Statement Section + +**Headline:** "Why Your AI Assistant Struggles with Enterprise Codebases" + +**Four Core Problems:** + +1. **Limited Context** - LLMs only see individual files, missing architectural relationships. As monorepos grow larger, this problem compounds dramatically, requiring developers to manually provide context for every interaction. + +2. **Inconsistent Output** - AI generates code that doesn't follow your team's best practices and may introduce breaking changes by deprecating components it doesn't see being used elsewhere in the codebase. + +3. **No Workspace Awareness** - Can't understand project dependencies, ownership, or integration points, making it difficult for AI to know where to start when fixing issues across multiple projects. + +4. **Manual Context Burden** - Developers must constantly provide the same contextual information about project structure, relationships, and interdependencies, negating much of the productivity gains AI promises. + +**Visual:** Diagram showing LLM with limited "street view" vs. Nx providing "map view" of codebase, with callouts showing the increasing context burden as repository size grows. + +**Additional Callout Box:** +"As monorepos scale, AI tools become progressively less effective - a challenge that only architectural intelligence can solve. While type safety provides some guardrails, it's not enough without true workspace understanding." + +### Solution Overview Section + +**Headline:** "Nx Provides the Missing Context Your AI Needs" + +**Core Value Props:** + +1. **Architectural Awareness** - Move from file-level to workspace-level understanding +2. **Predictable + Intelligent** - Combine consistent generators with AI customization +3. **Integrated Workflows** - Connect editor, CI, and AI for seamless development + +### Features Deep Dive + +#### 1. Workspace Intelligence + +**Headline:** "Elevate Your AI from File-Level to Architecture-Level Understanding" + +**Content:** + +- Project relationship mapping +- Dependency analysis and impact assessment +- Team ownership and responsibility identification +- Technology stack and configuration understanding + +**Demo:** "Ask your AI: 'If I change the API of this library, which teams need to know?'" + +**Resources:** + +- 📹 [Watch: Nx Just Made Your LLM Way Smarter](https://youtu.be/RNilYmJJzdk) +- 📖 [Blog: Nx Just Made Your LLM Way Smarter](/blog/nx-just-made-your-llm-smarter) + +#### 2. CI Integration & Failure Resolution + +**Headline:** "Fix CI Issues Before You Even Know They Exist" + +**Content:** + +- Real-time CI failure notifications in your editor +- AI-powered failure analysis and suggested fixes +- Access to detailed Nx Cloud pipeline data +- Automated resolution suggestions + +**Demo:** "Get notified of CI failures and let AI suggest the fix" + +**Resources:** + +- 📹 [Watch: Connect Your Editor, CI and LLMs](https://youtu.be/fPqPh4h8RJg) +- 📖 [Blog: Save Time: Connecting Your Editor, CI and LLMs](/blog/nx-editor-ci-llm-integration) + +#### 3. Terminal Integration & Live Assistance + +**Headline:** "Your AI Assistant Sees What You See in the Terminal" + +**Content:** + +- Real-time terminal output awareness +- Live task execution monitoring +- Contextual error analysis and fixes +- No more copy-pasting terminal errors + +**Demo:** "Run a task that fails, and AI immediately offers solutions based on the actual error output" + +**Resources:** + +- 📖 Blog post coming soon + +#### 4. Smart Code Generation + +**Headline:** "Predictable Generators + AI Intelligence" + +**Content:** + +- Nx generators provide consistent, tested scaffolding +- AI adds contextual customization and integration +- Human-in-the-loop workflow for quality control +- Workspace-aware code integration + +**Demo:** "Generate a new library and automatically connect it to existing projects" + +**Resources:** + +- 📹 [Watch: Enhancing Nx Generators with AI](https://youtu.be/PXNjedYhZDs) +- 📖 [Blog: Combining Predictability and Intelligence With Nx Generators and AI](/blog/nx-generators-ai-integration) + +#### 5. Documentation-Aware Assistance + +**Headline:** "Always Up-to-Date, Never Hallucinating" + +**Content:** + +- Live access to current Nx documentation +- Context-aware configuration guidance +- Best practices enforcement +- Migration assistance + +**Resources:** + +- 📹 [Watch: Making Cursor Smarter with MCP](https://youtu.be/V2W94Sq_v6A) +- 📖 [Blog: Making Cursor Smarter with an MCP Server For Nx](/blog/nx-made-cursor-smarter) + +### Technical Implementation Section + +**Headline:** "Powered by Nx's Rich Workspace Intelligence" + +**Content:** +Nx already maintains comprehensive metadata about your workspace to optimize builds, manage dependencies, and enforce architectural boundaries. The Nx daemon continuously monitors your workspace, tracking project relationships and updates in real-time to keep this intelligence current and accurate. + +**How It Works:** + +- Nx daemon runs in the background, maintaining up-to-date workspace metadata +- This rich contextual data is processed and optimized for AI consumption +- Intelligence is exposed through the Model Context Protocol (MCP) +- Integrates seamlessly into your existing AI assistant workflows + +**The key advantage:** Rather than building something entirely new, this enhances the AI tools you already use and trust, making your existing collaboration with LLMs significantly more powerful and context-aware. + +**Integration Options:** + +- **Nx Console Extension**: Available for VSCode, Cursor, and IntelliJ +- **Pure MCP Server**: Works with any MCP-compatible client (Claude Desktop, Cline, Windsurf, etc.) +- **Existing Workflow**: Enhances your current AI assistant without changing your development habits + +### Use Cases & Examples + +#### Enterprise Developer + +**Scenario:** "Understanding impact of API changes across 50+ projects in a large workspace" +**Solution:** AI uses project graph to identify all affected teams and suggests migration strategy + +#### New Team Member + +**Scenario:** "Getting up to speed on complex multi-project architecture" +**Solution:** AI explains project relationships, ownership, and where to implement features + +#### DevOps Engineer + +**Scenario:** "Optimizing CI/CD pipeline performance across multiple related projects" +**Solution:** AI analyzes Nx Cloud data to suggest task distribution and caching improvements + +### Competitive Differentiation + +**Headline:** "Why Large Workspaces Are AI Future-Proof" + +**Key Points:** + +1. **Complete Context** - All related projects in one workspace vs. scattered repositories +2. **Rich Metadata** - Nx's architectural understanding vs. basic file access +3. **Predictable Patterns** - Consistent generators vs. variable AI output +4. **Integrated Tooling** - Connected workflow vs. isolated tools + +### Social Proof Section + +**Headline:** "Join Forward-Thinking Teams Already Using AI-Enhanced Nx" + +**Featured Testimonials:** + +- Focus on teams using AI + Nx successfully +- Metrics: reduced onboarding time, faster feature delivery +- Use existing customer logos where applicable + +### Getting Started Section + +**Headline:** "Transform Your AI Assistant in Minutes" + +**Three Steps:** + +1. **Install Nx Console** - Available for VSCode, Cursor, IntelliJ +2. **Enable MCP Integration** - One-click setup +3. **Start Asking Better Questions** - AI now understands your workspace + +**Technical Requirements:** + +- Existing Nx workspace or `nx init` for new setup +- Compatible AI assistant (Copilot, Claude, etc.) +- Nx Console extension + +### Resources & Next Steps + +**Featured Content:** + +- 📹 [Nx Just Made Your LLM Way Smarter](https://youtu.be/RNilYmJJzdk) - Foundation overview +- 📹 [Why Nx and AI Work So Well Together](https://youtu.be/[video-url]) - Strategic perspective +- 📹 [Making Cursor Smarter with MCP](https://youtu.be/V2W94Sq_v6A) - Cursor setup guide +- 📹 [Nx MCP for VS Code Copilot](https://youtu.be/dRQq_B1HSLA) - VSCode setup guide +- 📹 [Enhancing Nx Generators with AI](https://youtu.be/PXNjedYhZDs) - Smart generation workflow + +**Blog Series:** + +- 📖 [Nx Just Made Your LLM Way Smarter](/blog/nx-just-made-your-llm-smarter) (foundational post) +- 📖 [Making Cursor Smarter with an MCP Server](/blog/nx-made-cursor-smarter) (Cursor integration) +- 📖 [Nx MCP Now Available for VS Code Copilot](/blog/nx-mcp-vscode-copilot) (VSCode integration) +- 📖 [Nx and AI: Why They Work so Well Together](/blog/nx-and-ai-why-they-work-together) (strategic overview) +- 📖 [Combining Predictability and Intelligence With Nx Generators and AI](/blog/nx-generators-ai-integration) (generator workflow) + +**Additional Resources:** + +- Live demo videos +- Documentation links +- Community Discord for questions +- Blog series for deep dives + +## Page Optimization Strategy + +### SEO Keywords + +**Primary:** "AI workspace development", "LLM code assistant", "Nx AI integration", "multi-project AI tools" +**Secondary:** "enterprise AI development", "intelligent code generation", "MCP server", "workspace AI tools" + +### Conversion Optimization + +1. **Multiple entry points** - Different CTAs for different user types +2. **Progressive disclosure** - Start with benefits, dive into technical details +3. **Social proof throughout** - Testimonials and usage stats +4. **Risk reduction** - Free trial, easy setup, existing workspace compatibility + +### Developer-Focused Messaging + +- Technical accuracy and specificity +- Real code examples and demos +- Focus on productivity gains and workflow improvements +- Emphasis on maintaining control and predictability + +## Content Tone & Voice + +**Technical but Accessible:** Explain complex concepts clearly without dumbing down +**Benefit-Focused:** Lead with outcomes, support with features +**Confident but Not Overhyped:** Realistic about current capabilities while showing vision +**Developer-to-Developer:** Written by and for engineers who understand the pain points + +## Success Metrics + +### Primary KPIs + +- Nx Console downloads/installs +- MCP server configurations +- AI-related feature adoption +- Time-to-first-AI-query in workspace + +### Secondary KPIs + +- Page engagement time +- Video completion rates +- Documentation page visits from AI landing page +- Community Discord joins related to AI features + +## Implementation Recommendations + +1. **Start with Core Message Testing** - A/B test hero section messaging +2. **Progressive Rollout** - Begin with essential features, add advanced use cases +3. **Continuous Content Updates** - Regular examples and case studies as features evolve +4. **Community Feedback Loop** - Use Discord and GitHub discussions to refine messaging + +This landing page strategy positions Nx as the essential infrastructure for AI-powered development, focusing on the unique value of architectural awareness and workspace intelligence that generic AI tools simply cannot provide. diff --git a/tsconfig.base.json b/tsconfig.base.json index 9019aa1a2a..c64023e782 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -93,6 +93,9 @@ "@nx/nx-dev/models-document": ["nx-dev/models-document/src/index.ts"], "@nx/nx-dev/models-menu": ["nx-dev/models-menu/src/index.ts"], "@nx/nx-dev/models-package": ["nx-dev/models-package/src/index.ts"], + "@nx/nx-dev/ui-ai-landing-page": [ + "nx-dev/ui-ai-landing-page/src/index.ts" + ], "@nx/nx-dev/ui-animations": ["nx-dev/ui-animations/src/index.ts"], "@nx/nx-dev/ui-blog": ["nx-dev/ui-blog/src/index.ts"], "@nx/nx-dev/ui-brands": ["nx-dev/ui-brands/src/index.ts"],