1- import Image from "next/image" ;
2- import Link from "next/link" ;
1+ "use client" ;
32
4- const basePath = process . env . NODE_ENV === "production" ? "/gfbs3-portfolio-demo" : "" ;
3+ import { useState } from "react" ;
4+ import Link from "next/link" ;
55
66export default function Home ( ) {
7+ const [ menuOpen , setMenuOpen ] = useState ( false ) ;
8+
79 return (
8- < div className = "min-h-screen bg-[#050510] text-cyan-50 font-mono selection:bg-fuchsia-500/30 selection:text-fuchsia-200 overflow-x-hidden" >
9- { /* Grid Background */ }
10- < div className = "fixed inset-0 z-0 pointer-events-none" >
11- < div className = "absolute inset-0 bg-[linear-gradient(to_right,#1a1a2e_1px,transparent_1px),linear-gradient(to_bottom,#1a1a2e_1px,transparent_1px)] bg-[size:4rem_4rem] [mask-image:radial-gradient(ellipse_60%_50%_at_50%_0%,#000_70%,transparent_100%)] opacity-20" />
12- < div className = "absolute bottom-0 left-0 right-0 h-[50vh] bg-gradient-to-t from-fuchsia-900/20 to-transparent opacity-30" />
13- </ div >
10+ < div >
1411
15- { /* Navigation */ }
16- < nav className = "fixed top-0 left-0 right-0 z-50 bg-[#050510]/80 backdrop-blur-md border-b border-cyan-900/30" >
17- < div className = "max-w-6xl mx-auto px-6 h-16 flex items-center justify-between" >
18- < Link
19- href = "/"
20- className = "text-lg font-bold tracking-widest text-transparent bg-clip-text bg-gradient-to-r from-cyan-400 to-fuchsia-400 hover:to-cyan-400 transition-all duration-300"
21- >
22- GITFOLIO
23- </ Link >
24- < div className = "flex gap-8 text-xs font-bold tracking-widest uppercase text-cyan-700/80" >
25- < Link href = "#work" className = "hover:text-cyan-400 hover:drop-shadow-[0_0_5px_rgba(34,211,238,0.8)] transition-all" > PROJECTS</ Link >
26- < Link href = "#philosophy" className = "hover:text-fuchsia-400 hover:drop-shadow-[0_0_5px_rgba(232,121,249,0.8)] transition-all" > ABOUT</ Link >
27- < Link href = "#contact" className = "hover:text-yellow-400 hover:drop-shadow-[0_0_5px_rgba(250,204,21,0.8)] transition-all" > CONTACT</ Link >
28- </ div >
29- </ div >
30- </ nav >
12+ < nav >
13+ < Link href = "/" > GITFOLIO</ Link >
3114
32- < main className = "relative z-10 max-w-6xl mx-auto px-6 pt-32 pb-20" >
33- { /* Hero Section */ }
34- < section className = "py-20 md:py-32 space-y-8 relative" >
35- < div className = "space-y-2" >
36- < div className = "inline-flex items-center gap-2 px-3 py-1 rounded-full border border-cyan-500/30 bg-cyan-950/20 text-cyan-400 text-xs font-bold tracking-widest uppercase animate-pulse" >
37- < span className = "w-2 h-2 rounded-full bg-cyan-400 shadow-[0_0_10px_rgba(34,211,238,1)]" />
38- READY TO LAUNCH
39- </ div >
40- < h1 className = "text-5xl md:text-7xl font-bold tracking-tighter text-white leading-[1.1] drop-shadow-[0_0_15px_rgba(34,211,238,0.3)]" >
41- BUILD YOUR < br />
42- < span className = "text-transparent bg-clip-text bg-gradient-to-r from-fuchsia-500 via-purple-500 to-cyan-500 animate-gradient-x" > DEVELOPER PORTFOLIO</ span > < br />
43- IN MINUTES
44- </ h1 >
45- </ div >
46- < p className = "text-lg md:text-xl text-cyan-100/70 max-w-2xl leading-relaxed font-light border-l-2 border-fuchsia-500/50 pl-6" >
47- A beginner-friendly portfolio template that showcases your projects beautifully. Fork it, customize it, deploy it—no design skills required.
48- </ p >
49- < div className = "pt-8 flex gap-6" >
50- < Link
51- href = "#work"
52- className = "group relative px-8 py-3 bg-cyan-950/30 border border-cyan-500/50 text-cyan-300 font-bold tracking-widest uppercase text-sm overflow-hidden hover:bg-cyan-900/50 transition-all hover:shadow-[0_0_20px_rgba(34,211,238,0.4)]"
53- >
54- < span className = "relative z-10 flex items-center gap-2" >
55- GET STARTED < ArrowRightIcon className = "w-4 h-4 group-hover:translate-x-1 transition-transform" />
56- </ span >
57- < div className = "absolute inset-0 bg-gradient-to-r from-transparent via-cyan-400/10 to-transparent -translate-x-full group-hover:animate-shimmer" />
58- </ Link >
59- </ div >
60- </ section >
15+ < button onClick = { ( ) => setMenuOpen ( ! menuOpen ) } >
16+ ☰
17+ </ button >
6118
62- { /* Selected Work */ }
63- < section id = "work" className = "py-20 space-y-12" >
64- < div className = "flex items-end justify-between border-b border-cyan-900/30 pb-4" >
65- < h2 className = "text-2xl font-bold tracking-widest text-fuchsia-400 drop-shadow-[0_0_8px_rgba(232,121,249,0.6)]" >
66- // YOUR_PROJECTS
67- </ h2 >
68- < span className = "text-xs font-mono text-cyan-700" > Showcase what you've built with style</ span >
69- </ div >
19+ < div >
20+ < Link href = "#work" > PROJECTS</ Link >
21+ < Link href = "#about" > ABOUT</ Link >
22+ < Link href = "#contact" > CONTACT</ Link >
23+ </ div >
7024
71- < div className = "grid grid-cols-1 md:grid-cols-2 gap-8" >
72- { /* Project 1 */ }
73- < ProjectCard
74- title = "PROJECT_ONE"
75- description = "Your first amazing project goes here. Describe what problem it solves and the tech you used to build it."
76- tags = { [ "REACT" , "NEXTJS" , "TAILWIND" ] }
77- color = "cyan"
78- href = "#"
79- />
80- { /* Project 2 */ }
81- < ProjectCard
82- title = "PROJECT_TWO"
83- description = "Your second project showcase. Tell visitors what makes this project special and what you learned building it."
84- tags = { [ "JAVASCRIPT" , "API" , "CSS" ] }
85- color = "fuchsia"
86- href = "#"
87- />
88- { /* Project 3 */ }
89- < ProjectCard
90- title = "PROJECT_THREE"
91- description = "Another project to highlight your skills. Share the impact or results of this work."
92- tags = { [ "TYPESCRIPT" , "NODE" , "EXPRESS" ] }
93- color = "purple"
94- href = "#"
95- />
96- { /* Project 4 */ }
97- < ProjectCard
98- title = "PROJECT_FOUR"
99- description = "Keep building and adding to your portfolio. Each project tells part of your developer story."
100- tags = { [ "PYTHON" , "DJANGO" , "POSTGRESQL" ] }
101- color = "yellow"
102- href = "#"
103- />
25+ { menuOpen && (
26+ < div >
27+ < Link href = "#work" > PROJECTS</ Link >
28+ < Link href = "#about" > ABOUT</ Link >
29+ < Link href = "#contact" > CONTACT</ Link >
10430 </ div >
105- </ section >
31+ ) }
32+ </ nav >
10633
107- { /* Philosophy / Approach */ }
108- < section id = "philosophy" className = "py-20 grid md:grid-cols-12 gap-12 border-t border-cyan-900/30" >
109- < div className = "md:col-span-4 space-y-8" >
110- < h2 className = "text-2xl font-bold tracking-widest text-cyan-400 drop-shadow-[0_0_8px_rgba(34,211,238,0.6)]" >
111- { "// ABOUT_ME" }
112- </ h2 >
113-
114- { /* Profile Image - Replace src with your image in /public */ }
115- < div className = "relative w-full aspect-[4/5] border border-cyan-500/30 rounded-sm overflow-hidden bg-cyan-950/30 group" >
116- < div className = "absolute inset-0 bg-[linear-gradient(to_bottom,transparent_0%,rgba(5,5,16,0.8)_100%)] z-10" />
117- { /* Scanline effect */ }
118- < div className = "absolute inset-0 bg-[linear-gradient(to_bottom,rgba(34,211,238,0.05)_1px,transparent_1px)] bg-[size:100%_4px] z-20 pointer-events-none" />
119-
120- < Image
121- src = { `${ basePath } /me.png` }
122- alt = "Profile"
123- fill
124- className = "object-cover z-0 opacity-60 group-hover:opacity-100 transition-all duration-500 grayscale group-hover:grayscale-0"
125- />
126- </ div >
127- </ div >
128- < div className = "md:col-span-8 space-y-8 text-cyan-100/80 leading-relaxed font-light" >
129- < p >
130- Every developer has a unique journey. Share yours here—whether you're self-taught, a bootcamp grad, or transitioning careers. < strong className = "text-fuchsia-400 font-bold" > Your story matters.</ strong > Talk about what drives you to code and the impact you want to make.
131- </ p >
132- < div className = "p-6 bg-cyan-950/20 border border-cyan-500/20 rounded-sm relative overflow-hidden" >
133- < div className = "absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-cyan-500 via-fuchsia-500 to-cyan-500" />
134- < div className = "grid grid-cols-2 gap-8 font-mono text-sm" >
135- < div >
136- < h3 className = "text-cyan-400 mb-4 tracking-widest uppercase text-xs border-b border-cyan-800 pb-2" > STACK_TRACE</ h3 >
137- < ul className = "space-y-2 text-cyan-200/70" >
138- < li className = "flex items-center gap-2" > < span className = "text-fuchsia-500" > ›</ span > JavaScript / Python / TypeScript</ li >
139- < li className = "flex items-center gap-2" > < span className = "text-fuchsia-500" > ›</ span > React / Next.js / Node.js</ li >
140- < li className = "flex items-center gap-2" > < span className = "text-fuchsia-500" > ›</ span > Git / GitHub / VS Code</ li >
141- </ ul >
142- </ div >
143- < div >
144- < h3 className = "text-cyan-400 mb-4 tracking-widest uppercase text-xs border-b border-cyan-800 pb-2" > PROTOCOLS</ h3 >
145- < ul className = "space-y-2 text-cyan-200/70" >
146- < li className = "flex items-center gap-2" > < span className = "text-fuchsia-500" > ›</ span > Always learning</ li >
147- < li className = "flex items-center gap-2" > < span className = "text-fuchsia-500" > ›</ span > Ship > Perfect</ li >
148- < li className = "flex items-center gap-2" > < span className = "text-fuchsia-500" > ›</ span > Open source contributor</ li >
149- </ ul >
150- </ div >
151- </ div >
152- </ div >
153- </ div >
154- </ section >
34+ < main >
35+ < h1 >
36+ BUILD YOUR < br />
37+ < span > DEVELOPER PORTFOLIO</ span >
38+ </ h1 >
15539
156- { /* Contact */ }
157- < section id = "contact" className = "py-20 border-t border-cyan-900/30" >
158- < div className = "max-w-3xl mx-auto text-center space-y-8" >
159- < h2 className = "text-4xl md:text-5xl font-bold tracking-tight text-white drop-shadow-[0_0_10px_rgba(255,255,255,0.5)]" >
160- READY TO < span className = "text-transparent bg-clip-text bg-gradient-to-r from-yellow-400 to-orange-500" > LAUNCH?</ span >
161- </ h2 >
162- < p className = "text-cyan-200/60 text-lg" >
163- Fork this template on GitHub and make it yours. Update the content, add your projects, and deploy to GitHub Pages in under 30 minutes.
164- </ p >
165- < div className = "flex flex-col items-center gap-6" >
166- < a
167- href = "https://github.com/ladykerr/gfbs3-portfolio-demo"
168- className = "px-10 py-4 bg-fuchsia-600 text-white font-bold tracking-widest uppercase text-sm hover:bg-fuchsia-500 transition-all hover:shadow-[0_0_30px_rgba(232,121,249,0.6)] hover:scale-105 duration-300 clip-path-polygon"
169- >
170- FORK ON GITHUB
171- </ a >
172- < div className = "flex items-center gap-8 pt-4" >
173- < SocialLink href = "https://github.com" label = "GITHUB" />
174- < SocialLink href = "https://linkedin.com" label = "LINKEDIN" />
175- < SocialLink href = "https://twitter.com" label = "TWITTER" />
176- </ div >
177- </ div >
178- </ div >
179- </ section >
40+ < p > A beginner-friendly portfolio template.</ p >
41+
42+ < Link href = "#work" > GET STARTED</ Link >
18043 </ main >
18144
182- < footer className = "py-8 text-center text-xs font-mono text-cyan-900/50 border-t border-cyan-900/20" >
183- < p > Made with ❤️ by < a href = "https://gh.io/gfb" target = "_blank" rel = "noopener noreferrer" className = "text-cyan-700 hover:text-cyan-400 hover:drop-shadow-[0_0_5px_rgba(34,211,238,0.8)] transition-all" > GitHub for Beginners</ a > and < a href = "https://gh.io/gfb-copilot" target = "_blank" rel = "noopener noreferrer" className = "text-cyan-700 hover:text-cyan-400 hover:drop-shadow-[0_0_5px_rgba(34,211,238,0.8)] transition-all" > GitHub Copilot </ a > </ p >
45+ < footer >
46+ Made with ❤️ by GitHub for Beginners
18447 </ footer >
185- </ div >
186- ) ;
187- }
188-
189- function ProjectCard ( { title, description, tags, color, href } : { title : string , description : string , tags : string [ ] , color : "cyan" | "fuchsia" | "purple" | "yellow" , href : string } ) {
190- // Valid color options for the card styling
191- const validColors = [ "cyan" , "fuchsia" , "purple" , "yellow" ] as const ;
192-
193- // Runtime validation: default to "cyan" if an invalid color is provided
194- const safeColor = validColors . includes ( color ) ? color : "cyan" ;
195-
196- const colorClasses = {
197- cyan : "group-hover:border-cyan-500/50 group-hover:shadow-[0_0_20px_rgba(34,211,238,0.2)]" ,
198- fuchsia : "group-hover:border-fuchsia-500/50 group-hover:shadow-[0_0_20px_rgba(232,121,249,0.2)]" ,
199- purple : "group-hover:border-purple-500/50 group-hover:shadow-[0_0_20px_rgba(168,85,247,0.2)]" ,
200- yellow : "group-hover:border-yellow-500/50 group-hover:shadow-[0_0_20px_rgba(234,179,8,0.2)]" ,
201- } ;
202-
203- const textColors = {
204- cyan : "group-hover:text-cyan-400" ,
205- fuchsia : "group-hover:text-fuchsia-400" ,
206- purple : "group-hover:text-purple-400" ,
207- yellow : "group-hover:text-yellow-400" ,
208- } ;
209-
210- return (
211- < Link href = { href } className = { `group block space-y-4 p-6 bg-[#0a0a1a] border border-cyan-900/30 transition-all duration-300 ${ colorClasses [ safeColor ] } ` } >
212- < div className = "flex justify-between items-start" >
213- < h3 className = { `text-xl font-bold text-white tracking-wider transition-colors ${ textColors [ safeColor ] } ` } >
214- { title }
215- </ h3 >
216- < ArrowUpRightIcon className = { `w-5 h-5 text-cyan-700 transition-all group-hover:translate-x-1 group-hover:-translate-y-1 ${ textColors [ safeColor ] } ` } />
217- </ div >
218- < p className = "text-sm text-cyan-100/60 leading-relaxed font-light border-l border-cyan-900/50 pl-4" >
219- { description }
220- </ p >
221- < div className = "flex gap-2 pt-2" >
222- { tags . map ( tag => (
223- < span key = { tag } className = "text-[10px] uppercase tracking-widest font-bold text-cyan-700 bg-cyan-950/30 px-2 py-1 border border-cyan-900/30 group-hover:border-cyan-500/30 group-hover:text-cyan-300 transition-colors" >
224- { tag }
225- </ span >
226- ) ) }
227- </ div >
228- </ Link >
229- ) ;
230- }
23148
232- function SocialLink ( { href, label } : { href : string , label : string } ) {
233- return (
234- < a
235- href = { href }
236- target = "_blank"
237- rel = "noopener noreferrer"
238- className = "text-xs font-bold tracking-widest text-cyan-700 hover:text-cyan-400 hover:drop-shadow-[0_0_5px_rgba(34,211,238,0.8)] transition-all"
239- >
240- { label }
241- </ a >
49+ </ div >
24250 ) ;
243- }
244-
245- // Simple Icons
246- function ArrowRightIcon ( { className } : { className ?: string } ) {
247- return (
248- < svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" strokeWidth = "2" strokeLinecap = "round" strokeLinejoin = "round" className = { className } >
249- < path d = "M5 12h14" />
250- < path d = "m12 5 7 7-7 7" />
251- </ svg >
252- )
253- }
254-
255- function ArrowUpRightIcon ( { className } : { className ?: string } ) {
256- return (
257- < svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" strokeWidth = "2" strokeLinecap = "round" strokeLinejoin = "round" className = { className } >
258- < path d = "M7 17L17 7" />
259- < path d = "M7 7h10v10" />
260- </ svg >
261- )
262- }
51+ }
0 commit comments