11'use client' ;
22
33import Link from "next/link" ;
4- import { useLanguage } from "@/components/providers/language-provider" ;
54import { MarkdownRenderer } from "@/components/markdown-renderer" ;
65import { useEffect , useState } from "react" ;
76
@@ -12,7 +11,6 @@ interface HeroData {
1211}
1312
1413export default function RoadmapToOpenSuperintelligence ( ) {
15- const { language } = useLanguage ( ) ;
1614 const [ markdownContent , setMarkdownContent ] = useState < string > ( '' ) ;
1715 const [ heroData , setHeroData ] = useState < HeroData | null > ( null ) ;
1816 const [ isLoading , setIsLoading ] = useState ( true ) ;
@@ -21,36 +19,35 @@ export default function RoadmapToOpenSuperintelligence() {
2119 useEffect ( ( ) => {
2220 const fetchMarkdownContent = async ( ) => {
2321 try {
24- const filename = language === 'zh' ? 'content-zh.md' : 'content.md' ;
25- const response = await fetch ( `/content/path-to-open-superintelligence/${ filename } ` ) ;
22+ const response = await fetch ( `/content/path-to-open-superintelligence/content.md` ) ;
2623 const content = await response . text ( ) ;
27-
24+
2825 // Parse frontmatter
2926 const frontmatterMatch = content . match ( / ^ - - - \n ( [ \s \S ] * ?) \n - - - \n ( [ \s \S ] * ) $ / ) ;
3027 if ( frontmatterMatch ) {
3128 const frontmatterContent = frontmatterMatch [ 1 ] ;
3229 const markdownBody = frontmatterMatch [ 2 ] ;
33-
30+
3431 // Parse YAML-like frontmatter (simple parsing for our use case)
3532 const heroData : HeroData = {
3633 title : "Path To Open Superintelligence" ,
3734 subtitle : "A Strategic Path Forward for Building AGI Through Open Collaboration" ,
3835 tags : [ "🚀 Path" , "🎯 Vision" , "🔬 Research" ]
3936 } ;
40-
37+
4138 // Extract values from frontmatter
4239 const lines = frontmatterContent . split ( '\n' ) ;
4340 let currentKey = '' ;
4441 let currentArray : string [ ] = [ ] ;
45-
42+
4643 for ( const line of lines ) {
4744 const trimmedLine = line . trim ( ) ;
4845 if ( trimmedLine . startsWith ( 'hero:' ) ) continue ;
49-
46+
5047 if ( trimmedLine . includes ( ':' ) ) {
5148 const [ key , ...valueParts ] = trimmedLine . split ( ':' ) ;
5249 const value = valueParts . join ( ':' ) . trim ( ) . replace ( / ^ [ " ' ] | [ " ' ] $ / g, '' ) ;
53-
50+
5451 switch ( key . trim ( ) ) {
5552 case 'title' :
5653 heroData . title = value ;
@@ -76,12 +73,12 @@ export default function RoadmapToOpenSuperintelligence() {
7673 }
7774 }
7875 }
79-
76+
8077 // Handle final array
8178 if ( currentArray . length > 0 && currentKey === 'tags' ) {
8279 heroData . tags = currentArray ;
8380 }
84-
81+
8582 setHeroData ( heroData ) ;
8683 setMarkdownContent ( markdownBody ) ;
8784 } else {
@@ -97,21 +94,20 @@ export default function RoadmapToOpenSuperintelligence() {
9794 } ;
9895
9996 fetchMarkdownContent ( ) ;
100- } , [ language ] ) ;
97+ } , [ ] ) ;
10198
10299 const handleCopyArticle = async ( ) => {
103100 try {
104101 // Get the raw markdown content without frontmatter
105- const filename = language === 'zh' ? 'content-zh.md' : 'content.md' ;
106- const response = await fetch ( `/content/path-to-open-superintelligence/${ filename } ` ) ;
102+ const response = await fetch ( `/content/path-to-open-superintelligence/content.md` ) ;
107103 const content = await response . text ( ) ;
108-
104+
109105 // Remove frontmatter if present
110106 let contentWithoutFrontmatter = content . replace ( / ^ - - - \n [ \s \S ] * ?\n - - - \n / , '' ) ;
111-
107+
112108 // Remove image paths (markdown image syntax: )
113109 contentWithoutFrontmatter = contentWithoutFrontmatter . replace ( / ! \[ .* ?\] \( .* ?\) / g, '' ) ;
114-
110+
115111 await navigator . clipboard . writeText ( contentWithoutFrontmatter ) ;
116112 setCopySuccess ( true ) ;
117113 setTimeout ( ( ) => setCopySuccess ( false ) , 2000 ) ;
@@ -140,15 +136,15 @@ export default function RoadmapToOpenSuperintelligence() {
140136 < div className = "absolute inset-0 opacity-30" >
141137 < div className = "absolute inset-0 bg-gradient-to-br from-transparent via-blue-500/5 to-transparent" > </ div >
142138 </ div >
143-
139+
144140 { /* Animated background particles */ }
145141 < div className = "absolute inset-0 overflow-hidden" >
146142 < div className = "absolute top-1/6 left-1/6 w-3 h-3 bg-gradient-to-r from-blue-400 to-cyan-400 rounded-full opacity-60 animate-pulse" > </ div >
147143 < div className = "absolute top-1/4 right-1/5 w-2 h-2 bg-gradient-to-r from-purple-400 to-pink-400 rounded-full opacity-50 animate-pulse delay-300" > </ div >
148144 < div className = "absolute top-1/3 left-1/8 w-4 h-4 bg-gradient-to-r from-emerald-400 to-teal-400 rounded-full opacity-40 animate-pulse delay-700" > </ div >
149145 < div className = "absolute bottom-1/4 right-1/6 w-2.5 h-2.5 bg-gradient-to-r from-cyan-400 to-blue-400 rounded-full opacity-55 animate-pulse delay-1000" > </ div >
150146 </ div >
151-
147+
152148 < div className = "relative container mx-auto px-6 pt-32 pb-12" >
153149 < div className = "text-center max-w-4xl mx-auto" >
154150 < div className = "relative" >
@@ -160,7 +156,7 @@ export default function RoadmapToOpenSuperintelligence() {
160156 < div className = "text-lg md:text-xl text-slate-400 mb-8" >
161157 { heroData ?. subtitle || 'A Strategic Path Forward for Building AGI Through Open Collaboration' }
162158 </ div >
163-
159+
164160 { /* Tags */ }
165161 { heroData ?. tags && heroData . tags . length > 0 && (
166162 < div className = "flex items-center justify-center gap-3 text-sm text-slate-400 mb-8 flex-wrap" >
@@ -189,7 +185,7 @@ export default function RoadmapToOpenSuperintelligence() {
189185 ) ) }
190186 </ div >
191187 ) }
192-
188+
193189 { /* Glow effect for the title */ }
194190 < div className = "absolute inset-0 text-4xl md:text-5xl lg:text-6xl font-medium leading-tight blur-sm" >
195191 < span className = "bg-gradient-to-r from-amber-300/20 via-orange-400/20 to-rose-400/20 bg-clip-text text-transparent" >
@@ -214,19 +210,18 @@ export default function RoadmapToOpenSuperintelligence() {
214210 < div className = "relative inline-block group" >
215211 < button
216212 onClick = { handleCopyArticle }
217- className = { `flex items-center gap-2 px-4 py-2 rounded-lg transition-all duration-300 ${
218- copySuccess
213+ className = { `flex items-center gap-2 px-4 py-2 rounded-lg transition-all duration-300 ${ copySuccess
219214 ? 'text-green-400 bg-green-400/10 border border-green-400/20'
220215 : 'text-slate-400 hover:text-blue-400 bg-white/5 hover:bg-white/10 border border-white/10 hover:border-blue-500/50'
221- } `}
216+ } `}
222217 >
223218 { copySuccess ? (
224219 < >
225220 < svg className = "w-4 h-4" fill = "none" stroke = "currentColor" viewBox = "0 0 24 24" >
226221 < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = { 2 } d = "M5 13l4 4L19 7" />
227222 </ svg >
228223 < span className = "text-sm font-medium" >
229- { language === 'en' ? ' Copied!' : '已复制!' }
224+ Copied!
230225 </ span >
231226 </ >
232227 ) : (
@@ -237,13 +232,10 @@ export default function RoadmapToOpenSuperintelligence() {
237232 </ >
238233 ) }
239234 </ button >
240-
235+
241236 { /* Tooltip */ }
242237 < div className = "absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-3 py-2 bg-slate-800 text-white text-sm rounded-lg shadow-lg opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none whitespace-nowrap z-10 border border-slate-600" >
243- { language === 'en'
244- ? 'Perfect for pasting into AI chatbots for self-studying! 🤖'
245- : '非常适合粘贴到AI聊天机器人进行自学!🤖'
246- }
238+ Perfect for pasting into AI chatbots for self-studying! 🤖
247239 { /* Tooltip arrow */ }
248240 < div className = "absolute top-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-slate-800" > </ div >
249241 </ div >
@@ -271,16 +263,15 @@ export default function RoadmapToOpenSuperintelligence() {
271263 </ div >
272264 < div className = "flex items-center gap-3" >
273265 < span className = "text-xs text-slate-500 uppercase tracking-wider font-semibold" > Share</ span >
274-
266+
275267 { /* Copy Article Button */ }
276268 < div className = "relative inline-block group" >
277269 < button
278270 onClick = { handleCopyArticle }
279- className = { `flex items-center justify-center p-2 rounded-lg transition-all duration-300 ${
280- copySuccess
271+ className = { `flex items-center justify-center p-2 rounded-lg transition-all duration-300 ${ copySuccess
281272 ? 'text-green-400'
282273 : 'text-slate-400 hover:text-blue-400'
283- } `}
274+ } `}
284275 >
285276 { copySuccess ? (
286277 < svg className = "w-5 h-5" fill = "none" stroke = "currentColor" viewBox = "0 0 24 24" >
@@ -292,54 +283,51 @@ export default function RoadmapToOpenSuperintelligence() {
292283 </ svg >
293284 ) }
294285 </ button >
295-
286+
296287 { /* Tooltip */ }
297288 < div className = "absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-3 py-2 bg-slate-800 text-white text-sm rounded-lg shadow-lg opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none whitespace-nowrap z-10 border border-slate-600" >
298- { language === 'en'
299- ? 'Perfect for pasting into AI chatbots for self-studying! 🤖'
300- : '非常适合粘贴到AI聊天机器人进行自学!🤖'
301- }
289+ Perfect for pasting into AI chatbots for self-studying! 🤖
302290 { /* Tooltip arrow */ }
303291 < div className = "absolute top-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-slate-800" > </ div >
304292 </ div >
305293 </ div >
306-
307- < a href = "https://twitter.com/intent/tweet?text=Path%20To%20Open%20Superintelligence%20%F0%9F%9A%80& url = https ://opensuperintelligencelab.com/blog/path-to-open-superintelligence/"
308- target = "_blank"
309- rel = "noopener noreferrer"
310- className = "text-slate-400 hover:text-blue-400 transition-colors" >
294+
295+ < a href = "https://twitter.com/intent/tweet?text=Path%20To%20Open%20Superintelligence%20%F0%9F%9A%80& url = https ://opensuperintelligencelab.com/blog/path-to-open-superintelligence/"
296+ target = "_blank"
297+ rel = "noopener noreferrer"
298+ className = "text-slate-400 hover:text-blue-400 transition-colors" >
311299 < svg className = "w-5 h-5" fill = "currentColor" viewBox = "0 0 24 24" >
312- < path d = "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
300+ < path d = "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
313301 </ svg >
314302 </ a >
315- < a href = "https://www.linkedin.com/sharing/share-offsite/?url=https://opensuperintelligencelab.com/blog/path-to-open-superintelligence/"
316- target = "_blank"
317- rel = "noopener noreferrer"
318- className = "text-slate-400 hover:text-blue-400 transition-colors" >
303+ < a href = "https://www.linkedin.com/sharing/share-offsite/?url=https://opensuperintelligencelab.com/blog/path-to-open-superintelligence/"
304+ target = "_blank"
305+ rel = "noopener noreferrer"
306+ className = "text-slate-400 hover:text-blue-400 transition-colors" >
319307 < svg className = "w-5 h-5" fill = "currentColor" viewBox = "0 0 24 24" >
320- < path d = "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
308+ < path d = "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
321309 </ svg >
322310 </ a >
323311 </ div >
324312 </ div >
325313 </ div >
326- </ div >
314+ </ div >
327315
328316 { /* Navigation */ }
329317 < div className = "mt-12 flex flex-col sm:flex-row items-center justify-between gap-4" >
330- < Link
331- href = "/"
318+ < Link
319+ href = "/"
332320 className = "group flex items-center gap-2 px-6 py-3 bg-white/5 hover:bg-white/10 border border-white/10 hover:border-blue-500/50 text-slate-300 hover:text-blue-400 font-medium rounded-xl transition-all duration-300"
333- >
321+ >
334322 < svg className = "w-5 h-5 group-hover:-translate-x-1 transition-transform" fill = "none" stroke = "currentColor" viewBox = "0 0 24 24" >
335- < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = { 2 } d = "M10 19l-7-7m0 0l7-7m-7 7h18" />
336- </ svg >
337- { language === 'en' ? ' Back to Home' : '返回首页' }
338- </ Link >
339-
323+ < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = { 2 } d = "M10 19l-7-7m0 0l7-7m-7 7h18" />
324+ </ svg >
325+ Back to Home
326+ </ Link >
327+
340328 < div className = "flex items-center gap-2 text-sm text-slate-500" >
341329 < span className = "hidden sm:inline" > Scroll to</ span >
342- < button
330+ < button
343331 onClick = { ( ) => window . scrollTo ( { top : 0 , behavior : 'smooth' } ) }
344332 className = "flex items-center gap-1 px-4 py-2 hover:text-blue-400 transition-colors"
345333 >
@@ -349,7 +337,7 @@ export default function RoadmapToOpenSuperintelligence() {
349337 Top
350338 </ button >
351339 </ div >
352- </ div >
340+ </ div >
353341 </ article >
354342 </ div >
355343 </ main >
0 commit comments