@@ -158,7 +158,7 @@ export const Route = createFileRoute("/")({
158158 content :
159159 'A safe, resource-oriented programming language built for the Flow blockchain. Designed for digital ownership and optimized for AI-driven development.' ,
160160 } ,
161- { property : 'og:url' , content : SITE_URL } ,
161+ { property : 'og:url' , content : ` ${ SITE_URL } /` } ,
162162 { property : 'og:type' , content : 'website' } ,
163163 { property : 'og:image' , content : `${ SITE_URL } /og/home` } ,
164164 { property : 'og:site_name' , content : 'Cadence' } ,
@@ -172,6 +172,9 @@ export const Route = createFileRoute("/")({
172172 } ,
173173 { name : 'twitter:image' , content : `${ SITE_URL } /og/home` } ,
174174 ] ,
175+ links : [
176+ { rel : 'canonical' , href : `${ SITE_URL } /` } ,
177+ ] ,
175178 } ) ,
176179} ) ;
177180
@@ -263,46 +266,35 @@ const heroCommands: HeroCommand[] = [
263266 {
264267 key : "skills" ,
265268 label : "skills" ,
266- copyText : "npx skills add outblock/cadence-lang.org " ,
269+ copyText : "/plugin marketplace add onflow/flow-ai-tools " ,
267270 render : ( ) => (
268271 < >
269- < span className = { S . cmd } > npx </ span > { " " }
270- < span className = { S . dim } > skills add</ span > { " " }
271- < span className = { S . pkg } > outblock/cadence-lang.org </ span >
272+ < span className = { S . cmd } > /plugin </ span > { " " }
273+ < span className = { S . dim } > marketplace add</ span > { " " }
274+ < span className = { S . pkg } > onflow/flow-ai-tools </ span >
272275 </ >
273276 ) ,
274- hint : "Install the Cadence skill for your AI coding agent " ,
277+ hint : "Install Flow's Claude Code skill suite " ,
275278 href : "/docs/ai-tools/skills" ,
276279 } ,
277280 {
278281 key : "mcp" ,
279282 label : "mcp" ,
280- copyText : ( client : string , mode : McpMode ) =>
281- mode === "remote"
282- ? `npx install-mcp https://cadence-mcp.up.railway.app/mcp --client ${ client } --oauth no`
283- : `npx install-mcp @outblock/cadence-mcp --client ${ client } ` ,
284- render : ( _client : string , mode : McpMode ) =>
285- mode === "remote" ? (
286- < >
287- < span className = { S . cmd } > npx</ span > { " " }
288- < span className = { S . dim } > install-mcp</ span > { " " }
289- < span className = { S . url } > cadence-mcp…/mcp</ span > { " " }
290- < span className = { S . flag } > --client</ span > { " " }
291- < span className = { S . pkg } > { _client } </ span >
292- </ >
293- ) : (
294- < >
295- < span className = { S . cmd } > npx</ span > { " " }
296- < span className = { S . dim } > install-mcp</ span > { " " }
297- < span className = { S . pkg } > @outblock/cadence-mcp</ span > { " " }
298- < span className = { S . flag } > --client</ span > { " " }
299- < span className = { S . pkg } > { _client } </ span >
300- </ >
301- ) ,
302- hint : "Install the Cadence MCP server" ,
283+ copyText : ( _client : string , _mode : McpMode ) =>
284+ `claude mcp add --scope user cadence-mcp -- flow mcp` ,
285+ render : ( _client : string , _mode : McpMode ) => (
286+ < >
287+ < span className = { S . cmd } > claude</ span > { " " }
288+ < span className = { S . dim } > mcp add --scope user</ span > { " " }
289+ < span className = { S . pkg } > cadence-mcp</ span > { " " }
290+ < span className = { S . flag } > --</ span > { " " }
291+ < span className = { S . pkg } > flow mcp</ span >
292+ </ >
293+ ) ,
294+ hint : "Install the Cadence MCP server (built into Flow CLI)" ,
303295 href : "/docs/ai-tools/mcp-server" ,
304- hasClientSelect : true ,
305- hasModeSelect : true ,
296+ hasClientSelect : false ,
297+ hasModeSelect : false ,
306298 } ,
307299] ;
308300
@@ -311,7 +303,7 @@ function Home() {
311303 const [ copied , setCopied ] = useState ( false ) ;
312304 const [ activeCmd , setActiveCmd ] = useState ( 0 ) ;
313305 const [ mcpClient , setMcpClient ] = useState < string > ( mcpClients [ 0 ] . value ) ;
314- const [ mcpMode , setMcpMode ] = useState < McpMode > ( "remote " ) ;
306+ const [ mcpMode , setMcpMode ] = useState < McpMode > ( "local " ) ;
315307 const [ typingKey , setTypingKey ] = useState ( 0 ) ;
316308 const [ activeCodeTab , setActiveCodeTab ] = useState < "nft" | "defi" > ( "nft" ) ;
317309 const codeContainerRef = useRef < HTMLDivElement > ( null ) ;
@@ -346,7 +338,7 @@ function Home() {
346338 Ask Cadence AI
347339 </ AISearchTrigger >
348340 < HomeLayout { ...baseOptions ( ) } >
349- < div className = "relative min-h-screen overflow-x-hidden bg-[#FAFAFA] dark:bg-black text-neutral-900 dark:text-white selection:bg-[var(--accent)] selection:text-black font-sans transition-colors duration-300" >
341+ < main className = "relative min-h-screen overflow-x-hidden bg-[#FAFAFA] dark:bg-black text-neutral-900 dark:text-white selection:bg-[var(--accent)] selection:text-black font-sans transition-colors duration-300" aria-label = "Cadence homepage ">
350342 { /* Subtle Grid Background */ }
351343 < div className = "fixed inset-0 bg-[linear-gradient(to_right,#80808012_1px,transparent_1px),linear-gradient(to_bottom,#80808012_1px,transparent_1px)] bg-[size:24px_24px] pointer-events-none" />
352344
@@ -398,12 +390,13 @@ function Home() {
398390 />
399391 < button
400392 onClick = { copyCommand }
393+ aria-label = { copied ? "Command copied" : "Copy command to clipboard" }
401394 className = "p-3 hover:bg-black/5 dark:hover:bg-white/10 rounded-lg transition-colors text-neutral-500 dark:text-[#888] hover:text-black dark:hover:text-white shrink-0"
402395 >
403396 { copied ? (
404- < Check className = "w-5 h-5 text-[var(--accent)]" />
397+ < Check className = "w-5 h-5 text-[var(--accent)]" aria-hidden = "true" />
405398 ) : (
406- < Copy className = "w-5 h-5" />
399+ < Copy className = "w-5 h-5" aria-hidden = "true" />
407400 ) }
408401 </ button >
409402 </ div >
@@ -481,16 +474,16 @@ function Home() {
481474 < div className = "max-w-7xl mx-auto" >
482475 < div className = "grid lg:grid-cols-12 gap-16" >
483476 < div className = "lg:col-span-4 min-w-0" >
484- < h3 className = "text-2xl font-bold border-b border-black/10 dark:border-white/10 pb-4 mb-12" >
477+ < h2 className = "text-2xl font-bold border-b border-black/10 dark:border-white/10 pb-4 mb-12" >
485478 Architectural Pillars
486- </ h3 >
479+ </ h2 >
487480 < div className = "space-y-10" >
488481 { ( activeCodeTab === "nft" ? nftPillars : defiPillars ) . map ( ( p , i ) => (
489482 < div key = { `${ activeCodeTab } -${ i } ` } className = "group animate-[fadeIn_300ms_ease-in-out]" >
490483 < div className = "text-[10px] font-mono text-green-600 dark:text-[var(--accent)] mb-2 opacity-80 dark:opacity-50 group-hover:opacity-100 transition-opacity" >
491484 { p . label }
492485 </ div >
493- < h4 className = "text-xl font-bold mb-3" > { p . title } </ h4 >
486+ < h3 className = "text-xl font-bold mb-3" > { p . title } </ h3 >
494487 < p className = "text-sm text-neutral-600 dark:text-[#888] leading-relaxed" >
495488 { p . desc }
496489 </ p >
@@ -559,9 +552,9 @@ function Home() {
559552 The Old Way (Ledger)
560553 </ span >
561554 </ div >
562- < h4 className = "text-2xl font-bold mb-4" >
555+ < h3 className = "text-2xl font-bold mb-4" >
563556 Centralized Accounting
564- </ h4 >
557+ </ h3 >
565558 < p className = "text-neutral-600 dark:text-[#666] leading-relaxed mb-8" >
566559 Assets are just entries in a contract's private dictionary. To
567560 move value, you update two numbers. This "ledger" model is
@@ -589,9 +582,9 @@ function Home() {
589582 The Cadence Way
590583 </ span >
591584 </ div >
592- < h4 className = "text-2xl font-bold mb-4 text-neutral-900 dark:text-white" >
585+ < h3 className = "text-2xl font-bold mb-4 text-neutral-900 dark:text-white" >
593586 Direct Ownership
594- </ h4 >
587+ </ h3 >
595588 < p className = "text-neutral-600 dark:text-[#888] leading-relaxed mb-8" >
596589 Assets are objects stored directly in the user's account. To
597590 move value, you physically move the object. Impossible to
@@ -711,10 +704,20 @@ function Home() {
711704 >
712705 Discord
713706 </ Link >
714- < a href = "#" className = "hover:text-black dark:hover:text-white transition-colors" >
707+ < a
708+ href = "https://forum.flow.com/"
709+ target = "_blank"
710+ rel = "noreferrer noopener"
711+ className = "hover:text-black dark:hover:text-white transition-colors"
712+ >
715713 Forum
716714 </ a >
717- < a href = "#" className = "hover:text-black dark:hover:text-white transition-colors" >
715+ < a
716+ href = "https://twitter.com/flow_blockchain"
717+ target = "_blank"
718+ rel = "noreferrer noopener"
719+ className = "hover:text-black dark:hover:text-white transition-colors"
720+ >
718721 Twitter
719722 </ a >
720723 </ div >
@@ -730,7 +733,7 @@ function Home() {
730733 </ span >
731734 </ div >
732735 </ footer >
733- </ div >
736+ </ main >
734737 </ HomeLayout >
735738 </ AISearch >
736739 ) ;
0 commit comments