diff --git a/src/App.tsx b/src/App.tsx index 067750f..c2f35a1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,20 +1,14 @@ import React from 'react'; -import Hero from './Components/Home/Hero/Hero'; -import Project from './Components/Projects/Projects'; -import About from './Components/About/About'; -import Experience from './Components/Experience/Experience'; -import { Route, Routes } from 'react-router-dom'; -import Navbar from './Components/Navbar'; -import './App.scss'; +import Navbar from './Components/Navbar/Navbar'; +import Content from './Components/Content/Content'; import Footer from './Components/Footer/Footer'; - -import OnePager from './Components/Test-Onepager/OnePager'; +import './App.scss'; const App: React.FC = () => { return (
- +
); diff --git a/src/Components/About/About.scss b/src/Components/About/About.scss index d15544a..8d3f9f0 100644 --- a/src/Components/About/About.scss +++ b/src/Components/About/About.scss @@ -46,60 +46,6 @@ $tools-item-tint: darken($list-item-color, 40%); padding: 0px 40px 0px 30px; /* top, right, bottom, left */ } -.Technologies { - flex: 1; -} - -.CategoryContainer { - margin-bottom: 20px; -} - -.CategoryTitle { - font-size: 1.3rem; - margin-bottom: 10px; - color: $text-color; - text-align: center; -} - -.TechList { - list-style-type: none; - padding: 0; - display: flex; - flex-wrap: wrap; - gap: 15px; - justify-content: center; -} - -.TechList.programming-languages li { - background-color: $language-item-tint; -} - -.TechList.frameworks-libraries li { - background-color: $framework-item-tint; -} - -.TechList.tools-platforms li { - background-color: $tools-item-tint; -} - -.TechList li { - font-size: 1.1rem; - padding: 12px 20px; - border-radius: $border-radius; - color: $text-color; - display: flex; - align-items: center; - gap: 10px; - transition: - background-color 0.3s ease, - transform 0.3s ease; - - &:hover { - background-color: darken($background-color, 15%); - transform: scale(1.05); - } -} - @media screen and (max-width: 768px) { .AboutContentContainer { flex-direction: column; @@ -113,7 +59,7 @@ $tools-item-tint: darken($list-item-color, 40%); @media screen and (max-width: 768px) { .AboutText { - font-size: 1.4em; // Adjust for readability + font-size: 1.4em; padding-left: 20px; padding-right: 20px; text-align: center; diff --git a/src/Components/About/About.tsx b/src/Components/About/About.tsx index 238e5fd..6446609 100644 --- a/src/Components/About/About.tsx +++ b/src/Components/About/About.tsx @@ -1,56 +1,5 @@ import React from 'react'; import './About.scss'; -import { - FaPython, - FaJava, - FaJsSquare, - FaReact, - FaGitAlt, - FaDocker, - FaHtml5, - FaCss3Alt, - FaAws, - FaNodeJs, - FaSass, - FaPhp, - FaMarkdown, - FaAngular, - FaBootstrap, - FaFigma, - FaRaspberryPi, -} from 'react-icons/fa'; -import { - SiCsharp, - SiSqlite, - SiKotlin, - SiDotnet, - SiXamarin, - SiTypescript, - SiJquery, - SiNextdotjs, - SiAzuredevops, - SiFirebase, - SiVercel, - SiCloudflare, - SiExpress, - SiTailwindcss, - SiNginx, - SiMongodb, - SiMysql, - SiMicrosoftsqlserver, - SiKeras, - SiPytorch, - SiScikitlearn, - SiPostman, - SiSwagger, - SiJira, - SiKubernetes, - SiCisco, - SiUnity, - SiMantine, - SiGnubash, - SiPowershell, -} from 'react-icons/si'; const About: React.FC = () => { return ( @@ -123,173 +72,14 @@ const About: React.FC = () => {

-
-
-

Languages

- -
- -
-

Frameworks & Libraries

- -
- -
-

Tools

- -
+
+ PlaceHolder +
- ); }; diff --git a/src/Components/Test-Onepager/OnePager.tsx b/src/Components/Content/Content.tsx similarity index 83% rename from src/Components/Test-Onepager/OnePager.tsx rename to src/Components/Content/Content.tsx index 812f86d..4d453f8 100644 --- a/src/Components/Test-Onepager/OnePager.tsx +++ b/src/Components/Content/Content.tsx @@ -4,7 +4,7 @@ import Projects from '../Projects/Projects'; import Experience from '../Experience/Experience'; import About from '../About/About'; -const OnePager: React.FC = () => { +const Content: React.FC = () => { return (
@@ -15,4 +15,4 @@ const OnePager: React.FC = () => { ); }; -export default OnePager; +export default Content; diff --git a/src/Components/Data/experience.ts b/src/Components/Data/experience.ts index 4a4f7b4..ca51610 100644 --- a/src/Components/Data/experience.ts +++ b/src/Components/Data/experience.ts @@ -8,8 +8,8 @@ export const experience = [ }, { date: 'March 2024 - Ongoing', - title: 'Head Delegate Montreal', - company: 'Canadian University Software Engineering Conference (CUSEC)', + title: 'HD Montreal', + company: 'CUSEC', description: 'Leading the delegation of post-secondary students across Montreal for the annual conference.', statsKey: 'Head Delegate Montreal', @@ -19,7 +19,7 @@ export const experience = [ title: 'IT Intern', company: 'Town of Kirkland', description: - 'Delivered technical support to government employees and received training in cybersecurity under the Cybersecurity Analyst of the municipality.', + 'Delivered technical support to government employees and trained under the Cybersecurity Lead of the municipality.', statsKey: 'IT Intern', }, { diff --git a/src/Components/Experience/Experience.scss b/src/Components/Experience/Experience.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/Components/Experience/Experience.tsx b/src/Components/Experience/Experience.tsx index 45ce7a6..dd281e1 100644 --- a/src/Components/Experience/Experience.tsx +++ b/src/Components/Experience/Experience.tsx @@ -1,6 +1,5 @@ import React from 'react'; import ExperienceTimeline from './ExperienceTimeline'; -import './Experience.scss'; const Experience = () => (
diff --git a/src/Components/Experience/ExperienceTimeline.scss b/src/Components/Experience/ExperienceTimeline.scss index 1287f5b..4e59c53 100644 --- a/src/Components/Experience/ExperienceTimeline.scss +++ b/src/Components/Experience/ExperienceTimeline.scss @@ -5,56 +5,144 @@ $quaternary-color: #95b9b0; $background-color: #262f2aec; $text-color: #fafff0; $font-color: #a2aa94; +$list-item-color: #2bd4a0; +$hover-color: #ced4da; +$box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); +$border-radius: 8px; +$language-item-tint: darken($list-item-color, 30%); +$framework-item-tint: darken($list-item-color, 35%); +$tools-item-tint: darken($list-item-color, 40%); + +.experience-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 6rem; + padding: 2rem; + max-width: 1900px; + margin: 0 auto; + align-items: start; + + .category-containers { + display: grid; + grid-template-columns: 1fr; + + .CategoryContainer { + padding: 1rem; + border-radius: 8px; + + .CategoryTitle { + font-size: 1.5rem; + color: $text-color; + text-align: center; + &:not(:first-child) { + margin-top: 0; + } + } + + .TechList { + font-family: 'Poppins', sans-serif; + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 0.5rem; + list-style-type: none; + padding: 0; + + li { + display: flex; + align-items: center; + color: darken(white, 5%); + padding: 1rem; + font-weight: 500; + font-size: 1.1rem; + border-radius: $border-radius; + + svg { + margin-right: 0.5rem; + color: white; + } + } + + li:hover { + background-color: darken($background-color, 15%); + transform: scale(1.05); + } + } + } + } +} + +@media (max-width: 768px) { + .experience-grid { + grid-template-columns: 1fr; + gap: 0em; + + .category-containers { + .CategoryContainer { + .TechList { + grid-template-columns: repeat(2, 1fr); + } + } + } + } +} + +.TechList.programming-languages li { + background-color: $language-item-tint; +} + +.TechList.frameworks-libraries li { + background-color: $framework-item-tint; +} + +.TechList.tools-platforms li { + background-color: $tools-item-tint; +} .timeline { position: relative; - padding: 20px 0; + padding: 15px 0; margin-left: 10px; display: flex; flex-direction: column; align-items: flex-start; @media (max-width: 768px) { - margin-left: 20px; + margin-left: 15px; } @media (max-width: 430px) { - margin-left: 15px; - padding: 10px 0; + margin-left: 10px; + padding: 5px 0; } } .timeline-item { position: relative; - margin-right: 20px; - margin-bottom: 30px; - padding-left: 20px; + margin-left: -15px; + margin-bottom: 20px; + padding-left: 15px; background: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0%, rgba(245, 245, 245, 0.1) 200% ); + background-size: 200% 100%; + background-position: left; border-radius: 8px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); overflow: hidden; position: relative; transform-origin: left center; + transition: background-position 0.3s ease-in-out, transform 0.3s ease-in-out; &:hover { - background: linear-gradient( - 90deg, - rgba(255, 255, 255, 0.1) 0%, - rgba(245, 245, 245, 0.2) 200% - ); + background-position: right; transform: translateY(-5px); - transition: - transform 0.3s ease-in-out, - background 0.3s ease-in-out; } .timeline-content { padding-left: 10px; - margin-right: 20px; + margin-right: 10px; color: $text-color; border-left: 2px solid $primary-color; @@ -67,10 +155,6 @@ $font-color: #a2aa94; @media (max-width: 768px) { font-size: 1.3em; } - - @media (max-width: 430px) { - font-size: 1.1em; - } } p { @@ -78,18 +162,12 @@ $font-color: #a2aa94; color: lighten($font-color, 30%); @media (max-width: 768px) { - font-size: 0.9em; - } - - @media (max-width: 430px) { - font-size: 0.8em; + font-size: 0.95em; } } } - .timeline-company { - color: lighten($secondary-color, 10%); - } + .timeline-company, .timeline-institution { color: lighten($secondary-color, 10%); } @@ -107,7 +185,7 @@ $font-color: #a2aa94; .timeline-step { position: absolute; - left: -12px; + left: -10px; top: 0; height: 100%; display: flex; @@ -115,15 +193,16 @@ $font-color: #a2aa94; } .timeline-section { - margin-left: 30px; - margin-right: 30px; + margin-left: 20px; + margin-right: 20px; } .timeline-section-title { font-size: 2em; color: $text-color; - margin-bottom: 15px; - padding-left: 10px; + margin-bottom: 10px; + margin-left: -15px; + padding-left: 5px; font-weight: bold; @media (max-width: 768px) { @@ -136,18 +215,18 @@ $font-color: #a2aa94; } .timeline-stats { - margin-top: 10px; - margin-bottom: 10px; + margin-top: 5px; + margin-bottom: 5px; display: flex; flex-direction: column; .stat-item { font-size: 0.9em; color: $text-color; - margin-bottom: 5px; + margin-bottom: 3px; strong { color: $primary-color; } } -} +} \ No newline at end of file diff --git a/src/Components/Experience/ExperienceTimeline.tsx b/src/Components/Experience/ExperienceTimeline.tsx index e455ce9..184d8d1 100644 --- a/src/Components/Experience/ExperienceTimeline.tsx +++ b/src/Components/Experience/ExperienceTimeline.tsx @@ -4,12 +4,60 @@ import { education } from '../Data/education'; import { experience } from '../Data/experience'; import { statistics } from '../Data/statistics'; import './ExperienceTimeline.scss'; +import { + FaPython, + FaJava, + FaJsSquare, + FaReact, + FaGitAlt, + FaDocker, + FaHtml5, + FaCss3Alt, + FaAws, + FaNodeJs, + FaSass, + FaPhp, + FaAngular, + FaBootstrap, + FaFigma, + FaRaspberryPi, +} from 'react-icons/fa'; +import { + SiCsharp, + SiSqlite, + SiKotlin, + SiDotnet, + SiXamarin, + SiTypescript, + SiJquery, + SiNextdotjs, + SiAzuredevops, + SiFirebase, + SiVercel, + SiCloudflare, + SiExpress, + SiTailwindcss, + SiNginx, + SiMongodb, + SiMysql, + SiMicrosoftsqlserver, + SiKeras, + SiPytorch, + SiScikitlearn, + SiPostman, + SiSwagger, + SiJira, + SiKubernetes, + SiUnity, + SiGnubash, + SiPowershell, +} from 'react-icons/si'; const ExperienceTimeline = () => { const controls = useAnimation(); useEffect(() => { - controls.start(i => ({ + controls.start((i) => ({ opacity: 1, y: 0, transition: { delay: i * 0.2 }, @@ -17,75 +65,235 @@ const ExperienceTimeline = () => { }, [controls]); return ( -
- +
+
+ -
-

Education

- {education.map((item, index) => ( - -
-
-

- {item.title} @ - {item.institution} -

-
{item.date}
-

{item.description}

-
- {Object.entries(statistics[item.statsKey] || {}).map( - ([key, value]: [string, number | string]) => ( -
- {value}{' '} - {key.replace(/([A-Z])/g, ' $1').toLowerCase()} -
- ), - )} +
+

Education

+ {education.map((item, index) => ( + +
+
+

+ {item.title} @ + {item.institution} +

+
{item.date}
+

{item.description}

+
+ {Object.entries(statistics[item.statsKey] || {}).map( + ([key, value]: [string, number | string]) => ( +
+ {value}{' '} + {key.replace(/([A-Z])/g, ' $1').toLowerCase()} +
+ ), + )} +
-
- - ))} -
+ + ))} +
-
-

Experience

- {experience.map((item, index) => ( - -
-
-

- {item.title} @ - {item.company} -

-
{item.date}
-

{item.description}

-
- {Object.entries(statistics[item.statsKey] || {}).map( - ([key, value]: [string, number | string]) => ( -
- {value}{' '} - {key.replace(/([A-Z])/g, ' $1').toLowerCase()} -
- ), - )} +
+

Experience

+ {experience.map((item, index) => ( + +
+
+

+ {item.title} @ + {item.company} +

+
{item.date}
+

{item.description}

+
+ {Object.entries(statistics[item.statsKey] || {}).map( + ([key, value]: [string, number | string]) => ( +
+ {value}{' '} + {key.replace(/([A-Z])/g, ' $1').toLowerCase()} +
+ ), + )} +
-
- - ))} + + ))} +
+
+ +
+
+

Languages

+
    +
  • + Python +
  • +
  • + Java +
  • +
  • + JavaScript +
  • +
  • + TypeScript +
  • +
  • + C# +
  • +
  • + Kotlin +
  • +
  • + PHP +
  • +
  • + PowerShell +
  • +
  • + Bash +
  • +
  • + HTML +
  • +
  • + CSS +
  • +
  • + MSSQL +
  • +
  • + SQLite +
  • +
  • + MySQL +
  • +
+
+ +
+

Frameworks & Libraries

+
    +
  • + ASP.NET +
  • +
  • + .NET MAUI +
  • +
  • + WPF +
  • +
  • + Xamarin +
  • +
  • + React +
  • +
  • + Next.js +
  • +
  • + jQuery +
  • +
  • + Angular +
  • +
  • + Bootstrap +
  • +
  • + Node.js +
  • +
  • + SCSS +
  • +
  • + TailwindCSS +
  • +
  • + Express.js +
  • +
  • + Keras +
  • +
  • + PyTorch +
  • +
  • + scikit-learn +
  • +
+
+ +
+

Tools

+
    +
  • + Git +
  • +
  • + MongoDB +
  • +
  • + Docker +
  • +
  • + Azure +
  • +
  • + AWS +
  • +
  • + Cloudflare +
  • +
  • + Firebase +
  • +
  • + Vercel +
  • +
  • + Nginx +
  • +
  • + Unity +
  • +
  • + Kubernetes +
  • +
  • + Postman +
  • +
  • + Swagger +
  • +
  • + Jira +
  • +
  • + Rasp Pi +
  • +
  • + Figma +
  • +
+
); diff --git a/src/Components/Home/Hero/LeftContainer.tsx b/src/Components/Home/Hero/LeftContainer.tsx index 7743b8b..7595853 100644 --- a/src/Components/Home/Hero/LeftContainer.tsx +++ b/src/Components/Home/Hero/LeftContainer.tsx @@ -12,7 +12,7 @@ const LeftContainer: React.FC = () => { {