@@ -6,6 +6,34 @@ import { BlogSection } from './components/BlogSection';
66import { WebGLBackground } from './components/WebGLBackground' ;
77import cvData from './data/cv' ;
88
9+ // Simple responsive navbar
10+ function Navbar ( ) {
11+ const navItems = [
12+ { label : 'Education' , href : '#education' } ,
13+ { label : 'Skills' , href : '#skills' } ,
14+ { label : 'Experience' , href : '#experience' } ,
15+ { label : 'Projects' , href : '#projects' } ,
16+ { label : 'Certifications' , href : '#certifications' } ,
17+ { label : 'Clubs' , href : '#clubs' } ,
18+ { label : 'Contact' , href : '#contact' } ,
19+ ] ;
20+ return (
21+ < nav className = "fixed top-0 left-0 w-full z-50 bg-black/70 backdrop-blur border-b border-white/10" >
22+ < div className = "container mx-auto px-4 flex justify-between items-center h-16" >
23+ < span className = "font-bold text-lg text-white tracking-wide" > My Portfolio</ span >
24+ < ul className = "flex gap-4" >
25+ { navItems . map ( ( item ) => (
26+ < li key = { item . href } >
27+ < a href = { item . href } className = "text-gray-200 hover:text-blue-400 transition-colors px-2 py-1 rounded focus:outline-none focus:ring-2 focus:ring-blue-400" >
28+ { item . label }
29+ </ a >
30+ </ li >
31+ ) ) }
32+ </ ul >
33+ </ div >
34+ </ nav >
35+ ) ;
36+ }
937
1038// Utility components for rendering sections
1139function SectionTitle ( { children } : { children : React . ReactNode } ) {
@@ -14,11 +42,11 @@ function SectionTitle({ children }: { children: React.ReactNode }) {
1442
1543function EducationSection ( ) {
1644 return (
17- < section className = "min-h-screen py-20 snap-start" >
45+ < section id = "education" className = "min-h-screen py-20 snap-start" >
1846 < div className = "container mx-auto px-4" >
1947 < SectionTitle > Education</ SectionTitle >
2048 < div className = "space-y-8 max-w-3xl mx-auto" >
21- { cvData . education . map ( ( edu , i ) => (
49+ { [ ... cvData . education ] . reverse ( ) . map ( ( edu , i ) => (
2250 < div key = { i } className = "bg-white/5 rounded-xl p-6" >
2351 < div className = "flex flex-col md:flex-row md:justify-between md:items-center mb-2" >
2452 < div >
@@ -45,28 +73,38 @@ function EducationSection() {
4573 ) ;
4674}
4775
76+ import type { TechnicalSkills } from './data/cv' ;
77+
4878function SkillsSection ( ) {
79+ const skills = cvData . skills ;
80+ const skillCategories : { key : keyof TechnicalSkills ; label : string ; color : string } [ ] = [
81+ { key : 'programmingLanguages' , label : 'Programming Languages' , color : 'bg-blue-500/20 text-blue-300' } ,
82+ { key : 'frameworksLibraries' , label : 'Frameworks & Libraries' , color : 'bg-green-500/20 text-green-300' } ,
83+ { key : 'dataScienceAnalytics' , label : 'Data Science & Analytics' , color : 'bg-cyan-500/20 text-cyan-300' } ,
84+ { key : 'cloudDevOps' , label : 'Cloud & DevOps' , color : 'bg-purple-500/20 text-purple-300' } ,
85+ { key : 'cybersecurity' , label : 'Cybersecurity' , color : 'bg-red-500/20 text-red-300' } ,
86+ { key : 'databases' , label : 'Databases' , color : 'bg-pink-500/20 text-pink-300' } ,
87+ { key : 'blockchainWeb3' , label : 'Blockchain & Web3' , color : 'bg-yellow-500/20 text-yellow-700' } ,
88+ { key : 'roboticsIoT' , label : 'Robotics & IoT' , color : 'bg-teal-500/20 text-teal-300' } ,
89+ { key : 'aiGenerativeAI' , label : 'AI & Generative AI' , color : 'bg-indigo-500/20 text-indigo-300' } ,
90+ ] ;
4991 return (
50- < section className = "min-h-screen py-20 snap-start" >
92+ < section id = "skills" className = "min-h-screen py-20 snap-start" >
5193 < div className = "container mx-auto px-4" >
52- < SectionTitle > Core Skills</ SectionTitle >
94+ < SectionTitle > Technical Skills</ SectionTitle >
5395 < div className = "grid grid-cols-1 md:grid-cols-2 gap-8 max-w-4xl mx-auto" >
54- < div className = "bg-white/5 rounded-xl p-6" >
55- < h3 className = "text-xl font-semibold mb-2" > Hard Skills</ h3 >
56- < ul className = "flex flex-wrap gap-2" >
57- { cvData . skills . hard . map ( ( skill , i ) => (
58- < li key = { i } className = "px-3 py-1 rounded-full bg-blue-500/20 text-blue-300 text-sm" > { skill } </ li >
59- ) ) }
60- </ ul >
61- </ div >
62- < div className = "bg-white/5 rounded-xl p-6" >
63- < h3 className = "text-xl font-semibold mb-2" > Soft Skills</ h3 >
64- < ul className = "flex flex-wrap gap-2" >
65- { cvData . skills . soft . map ( ( skill , i ) => (
66- < li key = { i } className = "px-3 py-1 rounded-full bg-teal-500/20 text-teal-300 text-sm" > { skill } </ li >
67- ) ) }
68- </ ul >
69- </ div >
96+ { skillCategories . map ( ( { key, label, color } ) => (
97+ skills [ key ] && skills [ key ] . length > 0 && (
98+ < div key = { key } className = "bg-white/5 rounded-xl p-6" >
99+ < h3 className = "text-xl font-semibold mb-2" > { label } </ h3 >
100+ < ul className = "flex flex-wrap gap-2" >
101+ { skills [ key ] . map ( ( skill , i ) => (
102+ < li key = { i } className = { `px-3 py-1 rounded-full ${ color } text-sm` } > { skill } </ li >
103+ ) ) }
104+ </ ul >
105+ </ div >
106+ )
107+ ) ) }
70108 </ div >
71109 </ div >
72110 </ section >
@@ -75,11 +113,11 @@ function SkillsSection() {
75113
76114function ExperienceSection ( ) {
77115 return (
78- < section className = "min-h-screen py-20 snap-start" >
116+ < section id = "experience" className = "min-h-screen py-20 snap-start" >
79117 < div className = "container mx-auto px-4" >
80118 < SectionTitle > Experience</ SectionTitle >
81119 < div className = "space-y-8 max-w-3xl mx-auto" >
82- { cvData . experience . map ( ( exp , i ) => (
120+ { [ ... cvData . experience ] . reverse ( ) . map ( ( exp , i ) => (
83121 < div key = { i } className = "bg-white/5 rounded-xl p-6" >
84122 < div className = "flex flex-col md:flex-row md:justify-between md:items-center mb-2" >
85123 < div >
@@ -103,11 +141,11 @@ function ExperienceSection() {
103141
104142function ProjectsSection ( ) {
105143 return (
106- < section className = "min-h-screen py-20 snap-start" >
144+ < section id = "projects" className = "min-h-screen py-20 snap-start" >
107145 < div className = "container mx-auto px-4" >
108146 < SectionTitle > Projects</ SectionTitle >
109147 < div className = "space-y-8 max-w-3xl mx-auto" >
110- { cvData . projects . map ( ( proj , i ) => (
148+ { [ ... cvData . projects ] . reverse ( ) . map ( ( proj , i ) => (
111149 < div key = { i } className = "bg-white/5 rounded-xl p-6" >
112150 < h3 className = "text-lg font-semibold mb-2" > { proj . title } </ h3 >
113151 < ul className = "text-gray-300 text-sm mb-2 list-disc ml-5" >
@@ -132,11 +170,11 @@ function ProjectsSection() {
132170
133171function CertificationsSection ( ) {
134172 return (
135- < section className = "py-20 snap-start" >
173+ < section id = "certifications" className = "py-20 snap-start" >
136174 < div className = "container mx-auto px-4" >
137175 < SectionTitle > Certifications, Courses & Workshops </ SectionTitle >
138176 < ul className = "flex flex-wrap gap-2 max-w-4xl mx-auto justify-center" >
139- { cvData . certifications . map ( ( cert , i ) => (
177+ { [ ... cvData . certifications ] . reverse ( ) . map ( ( cert , i ) => (
140178 < li key = { i } className = "px-3 py-1 rounded-full bg-purple-500/20 text-purple-300 text-sm mb-2" > { cert . name } </ li >
141179 ) ) }
142180 </ ul >
@@ -147,11 +185,11 @@ function CertificationsSection() {
147185
148186function ClubsSection ( ) {
149187 return (
150- < section className = "py-20 snap-start" >
188+ < section id = "clubs" className = "py-20 snap-start" >
151189 < div className = "container mx-auto px-4" >
152190 < SectionTitle > Clubs & Leadership </ SectionTitle >
153191 < div className = "flex flex-wrap gap-4 justify-center" >
154- { cvData . clubs . map ( ( club , i ) => (
192+ { [ ... cvData . clubs ] . reverse ( ) . map ( ( club , i ) => (
155193 < div key = { i } className = "bg-white/5 rounded-xl p-4 min-w-[220px]" >
156194 < h4 className = "font-semibold text-lg mb-1" > { club . name } </ h4 >
157195 < div className = "text-gray-300 text-sm mb-1" > { club . role } </ div >
@@ -176,9 +214,10 @@ function App() {
176214 < h1 className = "text-5xl md:text-7xl font-bold mb-6 bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-teal-400 animate-fade-in" >
177215 Akhil Devarasetty
178216 </ h1 >
179- < p className = "text-xl md:text-2xl text-gray-300 mb-8 animate-fade-in animate-delay-200" >
180- Computer Science and Engineering Student
181- </ p >
217+ < p className = "text-xl md:text-2xl text-gray-300 mb-8 animate-fade-in animate-delay-200" >
218+ Computer Science and Engineering Student
219+ </ p >
220+ < Navbar />
182221 < div className = "flex justify-center gap-6 animate-fade-in animate-delay-300" >
183222 < a href = "https://github.com/DDH2004" className = "text-gray-300 hover:text-white transition-colors hover:scale-110 transform duration-200" >
184223 < Github size = { 24 } />
@@ -212,10 +251,10 @@ function App() {
212251 { /* Clubs Section */ }
213252 < ClubsSection />
214253
215- { /* Blog Section */ }
216- < div className = "snap-start" >
217- < BlogSection />
218- </ div >
254+ { /* Blog Section */ }
255+ < div className = "snap-start" >
256+ < BlogSection />
257+ </ div >
219258
220259 { /* Contact Section */ }
221260 < section className = "min-h-screen py-20 snap-start" >
0 commit comments