@@ -19,6 +19,8 @@ function App() {
1919 // Theme is derived from the template setting — no user toggle needed.
2020 const template = ( githubConfig as { template ?: string } ) . template ?? 'minimal'
2121 const theme : Theme = template === 'classic' ? 'light' : 'dark'
22+ // hacker template overrides the shared nav/footer to terminal green
23+ const isHacker = template === 'hacker'
2224
2325 const [ mobileMenuOpen , setMobileMenuOpen ] = useState ( false )
2426
@@ -113,14 +115,17 @@ function App() {
113115 return ( ) => URL . revokeObjectURL ( url )
114116 } , [ hero . title ] )
115117
116- const rootClasses =
117- 'min-h-screen bg-slate-50 text-slate-900 dark:bg-[#050509] dark:text-slate-50'
118- const headerClasses =
119- theme === 'dark'
118+ const rootClasses = isHacker
119+ ? 'min-h-screen bg-black text-green-400'
120+ : 'min-h-screen bg-slate-50 text-slate-900 dark:bg-[#050509] dark:text-slate-50'
121+ const headerClasses = isHacker
122+ ? 'sticky top-0 z-20 border-b border-green-900/60 bg-black/95 backdrop-blur font-mono'
123+ : theme === 'dark'
120124 ? 'sticky top-0 z-20 border-b border-white/5 bg-[#050509]/90 backdrop-blur'
121125 : 'sticky top-0 z-20 border-b border-slate-200 bg-slate-50/90 backdrop-blur'
122- const footerClasses =
123- theme === 'dark'
126+ const footerClasses = isHacker
127+ ? 'border-t border-green-900/60 bg-black py-4 text-xs text-green-900 font-mono'
128+ : theme === 'dark'
124129 ? 'border-t border-slate-800 bg-gradient-to-b from-[#111120] to-[#050509] py-6 text-xs text-slate-400'
125130 : 'border-t border-slate-200 bg-gradient-to-b from-slate-50 to-slate-100 py-6 text-xs text-slate-600'
126131
@@ -138,29 +143,50 @@ function App() {
138143 < div className = "mx-auto flex max-w-5xl items-center justify-between px-4 py-3 sm:px-6 sm:py-4" >
139144 < Link
140145 to = "/"
141- className = " inline-flex items-center gap-2 no-underline text-slate-900 dark:text-slate-100"
146+ className = { ` inline-flex items-center gap-2 no-underline ${ isHacker ? ' text-green-500' : 'text- slate-900 dark:text-slate-100' } ` }
142147 aria-label = { `${ hero . title } home` }
143148 >
144- < span className = "flex h-8 w-8 items-center justify-center rounded-xl bg-gradient-to-tr from-blue-600 to-cyan-400 text-xs font-semibold text-[#050509]" aria-hidden = "true" >
145- { navInitials }
146- </ span >
149+ { isHacker ? (
150+ < span className = "font-mono text-sm text-green-500" >
151+ < span className = "text-green-800" > ~/</ span > { navInitials }
152+ < span className = "inline-block w-1.5 h-3.5 bg-green-500 animate-pulse ml-0.5 align-middle" />
153+ </ span >
154+ ) : (
155+ < span className = "flex h-8 w-8 items-center justify-center rounded-xl bg-gradient-to-tr from-blue-600 to-cyan-400 text-xs font-semibold text-[#050509]" aria-hidden = "true" >
156+ { navInitials }
157+ </ span >
158+ ) }
147159 </ Link >
148160
149161 { /* Desktop nav — hidden below md */ }
150- < nav className = "hidden md:flex items-center gap-3 text-xs font-medium text-slate-700 dark:text-slate-300" aria-label = "Primary" >
151- < Link to = "/" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Home</ Link >
152- < Link to = "/videos" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Videos</ Link >
153- < Link to = "/blogs" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Blogs</ Link >
154- < Link to = "/projects" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Projects</ Link >
155- < a href = { `${ import . meta. env . BASE_URL } #stats` } className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Stats</ a >
156- </ nav >
162+ { isHacker ? (
163+ < nav className = "hidden md:flex items-center gap-4 text-xs text-green-700" aria-label = "Primary" >
164+ { ( [ '/' , '/videos' , '/blogs' , '/projects' ] as const ) . map ( ( path , i ) => {
165+ const labels = [ '~' , 'videos' , 'blogs' , 'projects' ]
166+ return (
167+ < Link key = { path } to = { path } className = "transition hover:text-green-400" >
168+ { labels [ i ] }
169+ </ Link >
170+ )
171+ } ) }
172+ < a href = { `${ import . meta. env . BASE_URL } #stats` } className = "transition hover:text-green-400" > stats</ a >
173+ </ nav >
174+ ) : (
175+ < nav className = "hidden md:flex items-center gap-3 text-xs font-medium text-slate-700 dark:text-slate-300" aria-label = "Primary" >
176+ < Link to = "/" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Home</ Link >
177+ < Link to = "/videos" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Videos</ Link >
178+ < Link to = "/blogs" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Blogs</ Link >
179+ < Link to = "/projects" className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Projects</ Link >
180+ < a href = { `${ import . meta. env . BASE_URL } #stats` } className = "border-b border-transparent pb-0.5 transition-colors hover:border-slate-500 hover:text-slate-900 dark:hover:border-slate-400 dark:hover:text-slate-50" > Stats</ a >
181+ </ nav >
182+ ) }
157183
158184 { /* Mobile controls: hamburger */ }
159185 < div className = "flex items-center gap-2 md:hidden" >
160186 < button
161187 type = "button"
162188 onClick = { ( ) => setMobileMenuOpen ( ( prev ) => ! prev ) }
163- className = " flex h-8 w-8 items-center justify-center rounded-md text-slate-600 transition hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800"
189+ className = { ` flex h-8 w-8 items-center justify-center rounded-md transition ${ isHacker ? ' text-green-700 hover:bg-green-900/20' : 'text- slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800' } ` }
164190 aria-label = { mobileMenuOpen ? 'Close menu' : 'Open menu' }
165191 >
166192 { mobileMenuOpen ? (
@@ -178,13 +204,16 @@ function App() {
178204
179205 { /* Mobile dropdown menu */ }
180206 { mobileMenuOpen && (
181- < nav className = "border-t border-slate-200 bg-slate-50/95 backdrop-blur dark:border-white/5 dark:bg-[#050509]/95 md:hidden" aria-label = "Mobile navigation" >
182- < div className = "mx-auto flex max-w-5xl flex-col px-4 py-2 text-sm font-medium text-slate-700 dark:text-slate-300" >
183- < Link to = "/" onClick = { ( ) => setMobileMenuOpen ( false ) } className = "py-2.5 transition-colors hover:text-slate-900 dark:hover:text-slate-50" > Home</ Link >
184- < Link to = "/videos" onClick = { ( ) => setMobileMenuOpen ( false ) } className = "border-t border-slate-200/60 py-2.5 transition-colors hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50" > Videos</ Link >
185- < Link to = "/blogs" onClick = { ( ) => setMobileMenuOpen ( false ) } className = "border-t border-slate-200/60 py-2.5 transition-colors hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50" > Blogs</ Link >
186- < Link to = "/projects" onClick = { ( ) => setMobileMenuOpen ( false ) } className = "border-t border-slate-200/60 py-2.5 transition-colors hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50" > Projects</ Link >
187- < a href = { `${ import . meta. env . BASE_URL } #stats` } onClick = { ( ) => setMobileMenuOpen ( false ) } className = "border-t border-slate-200/60 py-2.5 transition-colors hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50" > Stats</ a >
207+ < nav
208+ className = { `border-t md:hidden backdrop-blur ${ isHacker ? 'border-green-900/60 bg-black/95 font-mono text-xs text-green-700' : 'border-slate-200 bg-slate-50/95 dark:border-white/5 dark:bg-[#050509]/95' } ` }
209+ aria-label = "Mobile navigation"
210+ >
211+ < div className = { `mx-auto flex max-w-5xl flex-col px-4 py-2 ${ isHacker ? '' : 'text-sm font-medium text-slate-700 dark:text-slate-300' } ` } >
212+ < Link to = "/" onClick = { ( ) => setMobileMenuOpen ( false ) } className = { `py-2.5 transition-colors ${ isHacker ? 'hover:text-green-400' : 'hover:text-slate-900 dark:hover:text-slate-50' } ` } > { isHacker ? '~ home' : 'Home' } </ Link >
213+ < Link to = "/videos" onClick = { ( ) => setMobileMenuOpen ( false ) } className = { `border-t py-2.5 transition-colors ${ isHacker ? 'border-green-900/40 hover:text-green-400' : 'border-slate-200/60 hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50' } ` } > { isHacker ? '~/videos' : 'Videos' } </ Link >
214+ < Link to = "/blogs" onClick = { ( ) => setMobileMenuOpen ( false ) } className = { `border-t py-2.5 transition-colors ${ isHacker ? 'border-green-900/40 hover:text-green-400' : 'border-slate-200/60 hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50' } ` } > { isHacker ? '~/blogs' : 'Blogs' } </ Link >
215+ < Link to = "/projects" onClick = { ( ) => setMobileMenuOpen ( false ) } className = { `border-t py-2.5 transition-colors ${ isHacker ? 'border-green-900/40 hover:text-green-400' : 'border-slate-200/60 hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50' } ` } > { isHacker ? '~/projects' : 'Projects' } </ Link >
216+ < a href = { `${ import . meta. env . BASE_URL } #stats` } onClick = { ( ) => setMobileMenuOpen ( false ) } className = { `border-t py-2.5 transition-colors ${ isHacker ? 'border-green-900/40 hover:text-green-400' : 'border-slate-200/60 hover:text-slate-900 dark:border-white/5 dark:hover:text-slate-50' } ` } > { isHacker ? '~/stats' : 'Stats' } </ a >
188217 </ div >
189218 </ nav >
190219 ) }
0 commit comments