diff --git a/index.html b/index.html index 4cab95e..b148363 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Nicholas Magi Portfolio + NM's Portfolio diff --git a/package-lock.json b/package-lock.json index 5986df9..5c1fde0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "flowbite": "^2.5.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.26.2" + "react-router-dom": "^6.26.2", + "react-switch": "^7.1.0" }, "devDependencies": { "@types/react": "^18.2.43", @@ -3184,7 +3185,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3522,6 +3522,16 @@ "node": ">= 0.8.0" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3574,6 +3584,11 @@ "react": "^18.2.0" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", @@ -3613,6 +3628,18 @@ "react-dom": ">=16.8" } }, + "node_modules/react-switch": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-7.1.0.tgz", + "integrity": "sha512-4xVeyImZE8QOTDw2FmhWz0iqo2psoRiS7XzdjaZBCIP8Dzo3rT0esHUjLee5WsAPSFXWWl1eVA5arp9n2C6yQA==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/package.json b/package.json index 7810414..63b8505 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "flowbite": "^2.5.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.26.2" + "react-router-dom": "^6.26.2", + "react-switch": "^7.1.0" }, "devDependencies": { "@types/react": "^18.2.43", diff --git a/src/App.css b/src/App.css deleted file mode 100644 index bb1134b..0000000 --- a/src/App.css +++ /dev/null @@ -1,110 +0,0 @@ -@font-face { - font-family: "Figtree"; - src: url("./assets/fonts/Figtree/static/Figtree-Regular.ttf"); -} - -@font-face { - font-family: "RubikDoodleShadow"; - src: url("./assets/fonts/RubikDoodleShadow/RubikDoodleShadow-Regular.ttf"); -} - -@font-face { - font-family: "AGaramondPro"; - src: url("./assets/fonts/AGaramondPro-Regular.otf"); -} - -[data-theme="dark"] -{ - --nav-bg: rgb(10,10,10); - --icon-fill: white; - --bg-color: rgb(18, 18, 18); - --primary-color: white; - --secondary-color: rgb(35, 35, 35); - --accent-color: rgb(209, 0, 0); - --accent-color-darker: rgb(148, 6, 6); -} - -[data-theme="light"] { - --nav-bg: rgb(255, 255, 255); - --icon-fill: black; - --bg-color: rgb(245, 245, 245); - --primary-color: black; - --secondary-color: rgb(201, 201, 201); - --accent-color: rgb(209, 0, 0); - --accent-color-opaque: rgba(209, 0, 0, .5); - --accent-color-darker: rgb(148, 6, 6); -} - -:root { - --main-font-family: "Figtree"; - --secondary-font-family: "RubikDoodleShadow"; -} - -.first-letter { - /* font-family: var(--secondary-font-family); */ - color: var(--accent-color); -} - -body { - background: var(--bg-color); - background-image: radial-gradient(var(--secondary-color) 1px, transparent 0); - background-size: 40px 40px; - /* background-position: -19px -19px; */ -} - -html, body { - height: 100%; -} - -progress::-moz-progress-bar { - background-color: var(--accent-color) !important; -} - -progress::-webkit-progress-value { - background: red; -} - -.text-primary { - color: var(--primary-color); -} - -.accent-clr, h1, h2 { - color: var(--accent-color); -} - -a:not(.exclude) { - display: inline-block; - position: relative; - top: 0; -} - -a:not(.exclude)::after { - content: ''; - position: absolute; - width: 100%; - transform: scaleX(0); - height: 2px; - bottom: 0; - left: 0; - background-color: var(--accent-color); - transform-origin: bottom right; - transition: transform 0.25s ease-out; -} - -a:not(.exclude):hover::after { - transform: scaleX(1); - transform-origin: bottom left; -} - -*, body { - font-family: var(--main-font-family); -} - -progress::-webkit-progress-bar -{ - background-color: rgba(209,0,0, .25); -} - -progress::-webkit-progress-value { - background-color: var(--accent-color); -} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index f019ccc..2f777ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,30 +1,28 @@ -import './App.css' -import Navbar from './components/Navbar' -import Footer from './components/Footer' import { BrowserRouter as Router, Routes, Route } from 'react-router-dom' import InitialScreen from './pages/InitialScreen' import Education from './pages/Education' import Projects from './pages/Projects' import ContactMe from './pages/ContactMe' +import DefaultLayout from './components/LayoutComponents/DefaultLayout' function App() { - - localStorage.setItem("theme", "light") - + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + localStorage.setItem("theme", "dark") + } else { + localStorage.setItem("theme", "light") + } return ( - - -
- - - - -
-
- }> + + + + + + + }>
diff --git a/src/components/EducationCard.tsx b/src/components/EducationCard.tsx index a82fe67..b210a91 100644 --- a/src/components/EducationCard.tsx +++ b/src/components/EducationCard.tsx @@ -14,13 +14,12 @@ function EducationCard({ data }: IProps)
-
{data?.start_year} - {data?.end_year} {current_year < data?.end_year!! ? (expected) : <>}
+
{data?.start_year} - {data?.end_year} {current_year < data?.end_year!! ? (expected) : <>}
{data?.title_description}
{data?.school}
- { data?.grade ? -
Grade: {data?.grade}/{data.max_grade} {data?.withHonours ? with honours : <>}
: +
Grade: {data?.grade}/{data.max_grade} {data?.withHonours ? with honours : <>}
: <> }
diff --git a/src/components/GHRepoCard.tsx b/src/components/GHRepoCard.tsx index 61bca90..0458294 100644 --- a/src/components/GHRepoCard.tsx +++ b/src/components/GHRepoCard.tsx @@ -9,13 +9,13 @@ function GHRepoCard({ data }: IProps ) { let tooltip_id = "tooltip-" + data.name + data.language return <> -
+
{/* */}

Made by {data.author}

-

by {data.stars} people
{data.stars === 0 ? —{" you can be the first!"} : <>}

+

by {data.stars} people
{data.stars === 0 ? —{" you can be the first!"} : <>}

diff --git a/src/components/LayoutComponents/DefaultLayout.tsx b/src/components/LayoutComponents/DefaultLayout.tsx new file mode 100644 index 0000000..2bf3508 --- /dev/null +++ b/src/components/LayoutComponents/DefaultLayout.tsx @@ -0,0 +1,16 @@ +import Footer from "./Footer"; +import Navbar from "./Navbar"; + +type Props = { + children: string | JSX.Element | JSX.Element[] +} + +export default function DefaultLayout({ children }: Props) { + return <> + +
+ { children } +
+
+ +} \ No newline at end of file diff --git a/src/components/Footer.module.css b/src/components/LayoutComponents/Footer.module.css similarity index 100% rename from src/components/Footer.module.css rename to src/components/LayoutComponents/Footer.module.css diff --git a/src/components/Footer.tsx b/src/components/LayoutComponents/Footer.tsx similarity index 68% rename from src/components/Footer.tsx rename to src/components/LayoutComponents/Footer.tsx index 12ef22d..86cdee3 100644 --- a/src/components/Footer.tsx +++ b/src/components/LayoutComponents/Footer.tsx @@ -3,7 +3,7 @@ import styles from './Footer.module.css' function Footer() { return <> -
+ diff --git a/src/components/Navbar.module.css b/src/components/LayoutComponents/Navbar.module.css similarity index 100% rename from src/components/Navbar.module.css rename to src/components/LayoutComponents/Navbar.module.css diff --git a/src/components/Navbar.tsx b/src/components/LayoutComponents/Navbar.tsx similarity index 69% rename from src/components/Navbar.tsx rename to src/components/LayoutComponents/Navbar.tsx index 3e10fad..335fd33 100644 --- a/src/components/Navbar.tsx +++ b/src/components/LayoutComponents/Navbar.tsx @@ -1,4 +1,5 @@ -import ContactCard from "./ContactCard" +import SocialCard from "../SocialCard" +import ThemeSwitcher from "../ThemeSwitcher" // import ThemeSwitcher from "./ThemeSwitcher" function Navbar() @@ -7,23 +8,23 @@ function Navbar() Icon Website: https://iconmonstr.com/ */ const contact_tabs = [ - { key: 1, item: ContactCard(1, "@Nickolausen", "https://github.com/Nickolausen", { width: 30, height: 30 }, "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z")}, - { key: 2, item: ContactCard(2, "@nicholas-magi", "https://linkedin.com/in/nicholas-magi", { width: 30, height: 30 }, "M0 0v24h24v-24h-24zm8 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.397-2.586 7-2.777 7 2.476v6.759z")}, - { key: 3, item: ContactCard(3, "nicholas.magi24@gmail.com", "#contact-me", { width: 30, height: 30 }, "M12 12.713l-11.985-9.713h23.971l-11.986 9.713zm-5.425-1.822l-6.575-5.329v12.501l6.575-7.172zm10.85 0l6.575 7.172v-12.501l-6.575 5.329zm-1.557 1.261l-3.868 3.135-3.868-3.135-8.11 8.848h23.956l-8.11-8.848z")}, + { item: SocialCard(1, "@Nickolausen", "https://github.com/Nickolausen", { width: 30, height: 30 }, "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z")}, + { item: SocialCard(2, "@nicholas-magi", "https://linkedin.com/in/nicholas-magi", { width: 30, height: 30 }, "M0 0v24h24v-24h-24zm8 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.397-2.586 7-2.777 7 2.476v6.759z")}, + { item: SocialCard(3, "nicholas.magi24@gmail.com", "#contact-me", { width: 30, height: 30 }, "M12 12.713l-11.985-9.713h23.971l-11.986 9.713zm-5.425-1.822l-6.575-5.329v12.501l6.575-7.172zm10.85 0l6.575 7.172v-12.501l-6.575 5.329zm-1.557 1.261l-3.868 3.135-3.868-3.135-8.11 8.848h23.956l-8.11-8.848z")}, ] return ( -
diff --git a/src/components/ProjectCard.tsx b/src/components/ProjectCard.tsx index bb697d0..26b8976 100644 --- a/src/components/ProjectCard.tsx +++ b/src/components/ProjectCard.tsx @@ -5,7 +5,7 @@ interface IProps { project_info?: ProjectDetails } -const month_conversion: { [nr: string]: string } = { +const monthConversion: { [nr: string]: string } = { "01": "January", "02": "February", "03": "March", @@ -24,8 +24,8 @@ const month_conversion: { [nr: string]: string } = { export default function ProjectCard( { project_info }: IProps) { - let start_month: string = month_conversion[project_info?.start_date.split("/")[0]!!] - let end_month: string | undefined = month_conversion[project_info?.end_date?.split("/")[0]!!] + let start_month: string = monthConversion[project_info?.start_date.split("/")[0]!!] + let end_month: string | undefined = monthConversion[project_info?.end_date?.split("/")[0]!!] let start_year: string = project_info?.start_date.split("/")[1]!! let end_year: string | undefined = project_info?.start_date.split("/")[1]!! @@ -36,14 +36,14 @@ export default function ProjectCard( { project_info }: IProps) let img_id: string = project_info?.name.toLowerCase().replace(" ", "_")!! return <> -
+
{ /* Image container */}

{!project_info?.is_source_available ? : <>} <{project_info?.name}/>

-

{project_info?.company} @ {project_info?.location} - from {start_month} {start_year} {end_year ? <>{"to " + end_month + " " + end_year} : <>— ongoing}

+

{project_info?.company} @ {project_info?.location} - from {start_month} {start_year} {end_year ? <>{"to " + end_month + " " + end_year} : <>— ongoing}

{project_info?.description}

diff --git a/src/components/ContactCard.tsx b/src/components/SocialCard.tsx similarity index 58% rename from src/components/ContactCard.tsx rename to src/components/SocialCard.tsx index 7930461..bd5a085 100644 --- a/src/components/ContactCard.tsx +++ b/src/components/SocialCard.tsx @@ -1,13 +1,13 @@ -function ContactCard(id: number, tooltipText: string, link: string, size: any, path: string) +function SocialCard(id: number, tooltipText: string, link: string, size: any, path: string) { return <> - + - + viewBox="0 0 24 24" fill="var(--accent-color)"> + + } + checkedIcon={ +
+ +
+ }> + } diff --git a/src/components/icons/CarIco.tsx b/src/components/icons/CarIco.tsx new file mode 100644 index 0000000..63f74ca --- /dev/null +++ b/src/components/icons/CarIco.tsx @@ -0,0 +1,5 @@ +export default function CarIco() { + return + + +} \ No newline at end of file diff --git a/src/components/icons/FromMySelfIco.tsx b/src/components/icons/FromMySelfIco.tsx new file mode 100644 index 0000000..7a3d78b --- /dev/null +++ b/src/components/icons/FromMySelfIco.tsx @@ -0,0 +1,5 @@ +export default function FromMySelfIco() { + return + + +} \ No newline at end of file diff --git a/src/components/icons/FromSchoolIco.tsx b/src/components/icons/FromSchoolIco.tsx new file mode 100644 index 0000000..9af4b16 --- /dev/null +++ b/src/components/icons/FromSchoolIco.tsx @@ -0,0 +1,5 @@ +export default function FromSchoolIco() { + return + + +} \ No newline at end of file diff --git a/src/components/icons/LightOffIco.tsx b/src/components/icons/LightOffIco.tsx new file mode 100644 index 0000000..77701d2 --- /dev/null +++ b/src/components/icons/LightOffIco.tsx @@ -0,0 +1,45 @@ +export default function LightOffIco() { + return + + + + + + +} \ No newline at end of file diff --git a/src/components/icons/LightOnIco.tsx b/src/components/icons/LightOnIco.tsx new file mode 100644 index 0000000..432b075 --- /dev/null +++ b/src/components/icons/LightOnIco.tsx @@ -0,0 +1,59 @@ +export default function LightOnIco() { + return + + + + + + + + +} \ No newline at end of file diff --git a/src/components/icons/MediumBikeIco.tsx b/src/components/icons/MediumBikeIco.tsx new file mode 100644 index 0000000..f8f36c6 --- /dev/null +++ b/src/components/icons/MediumBikeIco.tsx @@ -0,0 +1,24 @@ +export default function MediumBikeIco() { + return + + +} \ No newline at end of file diff --git a/src/components/icons/SmallBikeIco.tsx b/src/components/icons/SmallBikeIco.tsx new file mode 100644 index 0000000..cd63e57 --- /dev/null +++ b/src/components/icons/SmallBikeIco.tsx @@ -0,0 +1,22 @@ +export default function SmallBikeIco() { + return + + +} \ No newline at end of file diff --git a/src/components/icons/light-off.svg b/src/components/icons/light-off.svg new file mode 100644 index 0000000..717032d --- /dev/null +++ b/src/components/icons/light-off.svg @@ -0,0 +1,43 @@ + + + + + + + diff --git a/src/components/icons/light-on.svg b/src/components/icons/light-on.svg new file mode 100644 index 0000000..60e6b75 --- /dev/null +++ b/src/components/icons/light-on.svg @@ -0,0 +1,57 @@ + + + + + + + + + diff --git a/src/index.css b/src/index.css index bd6213e..f0050fd 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,127 @@ @tailwind base; @tailwind components; -@tailwind utilities; \ No newline at end of file +@tailwind utilities; + +@font-face { + font-family: "Figtree"; + src: url("./assets/fonts/Figtree/static/Figtree-Regular.ttf"); +} + +@font-face { + font-family: "RubikDoodleShadow"; + src: url("./assets/fonts/RubikDoodleShadow/RubikDoodleShadow-Regular.ttf"); +} + +@font-face { + font-family: "AGaramondPro"; + src: url("./assets/fonts/AGaramondPro-Regular.otf"); +} + +[data-theme="dark"] { + --nav-bg: #212228; + --icon-fill: white; + --bg-color: #18181d; + --bg-pattern:#474747; + --primary-color: white; + --secondary-color: rgb(161, 161, 161); + --secondary-color-opaque: rgba(161, 161, 161, .3); + --accent-color: rgb(209, 0, 0); + --accent-color-darker: rgb(148, 6, 6); +} + +[data-theme="light"] { + --nav-bg: rgb(255, 255, 255); + --icon-fill: black; + --bg-color: rgb(245, 245, 245); + --bg-pattern:#c6c5c5; + --primary-color: black; + --secondary-color: rgb(128, 128, 128); + --secondary-color-opaque: rgba(128, 128, 128, .3); + --accent-color: rgb(209, 0, 0); + --accent-color-opaque: rgba(209, 0, 0, .5); + --accent-color-darker: rgb(148, 6, 6); +} + +:root { + --main-font-family: "PT Sans"; + --secondary-font-family: "RubikDoodleShadow"; +} + +.first-letter { + color: var(--accent-color); +} + +body { + background: var(--bg-color); + background-image: radial-gradient(var(--bg-pattern) 1px, transparent 0); + background-size: 40px 40px; + /* background-position: -19px -19px; */ +} + +nav, footer, input { + box-shadow: 0 0 0 1px var(--secondary-color-opaque) !important; +} + +html, +body { + height: 100%; +} + +progress::-moz-progress-bar { + background-color: var(--accent-color) !important; +} + +progress::-webkit-progress-value { + background: red; +} + +.text-primary { + color: var(--primary-color); +} + +.text-secondary { + color: var(--secondary-color); +} + +.accent-clr, +h1, +h2 { + color: var(--accent-color); +} + +a:not(.exclude) { + display: inline-block; + position: relative; + top: 0; +} + +a:not(.exclude)::after { + content: ''; + position: absolute; + width: 100%; + transform: scaleX(0); + height: 2px; + bottom: 0; + left: 0; + background-color: var(--accent-color); + transform-origin: bottom right; + transition: transform 0.25s ease-out; +} + +a:not(.exclude):hover::after { + transform: scaleX(1); + transform-origin: bottom left; +} + +*, +body { + font-family: var(--main-font-family); +} + +progress::-webkit-progress-bar { + background-color: rgba(209, 0, 0, .25); +} + +progress::-webkit-progress-value { + background-color: var(--accent-color); +} \ No newline at end of file diff --git a/src/model/Education.tsx b/src/model/Education.tsx index d1d47d5..80a40f4 100644 --- a/src/model/Education.tsx +++ b/src/model/Education.tsx @@ -8,4 +8,59 @@ export interface EducationTitle { withHonours: boolean } -export enum Expertise { Beginner, Intermediate, Excellent } \ No newline at end of file +interface Skill { + name: String, + expertise: ExpertiseLevel +} + +export enum ExpertiseLevel { + Beginner, + Intermediate, + Excellent +} + +export const skillsFromSchool: Skill[] = [ + {name: "C", expertise: ExpertiseLevel.Intermediate}, + {name: "C#", expertise: ExpertiseLevel.Intermediate}, + {name: "Blazor", expertise: ExpertiseLevel.Beginner}, + {name: "Java", expertise: ExpertiseLevel.Beginner}, + {name: "Bash", expertise: ExpertiseLevel.Intermediate}, + {name: "Design a WPF", expertise: ExpertiseLevel.Intermediate}, + {name: "JavaScript & JQuery", expertise: ExpertiseLevel.Intermediate}, + {name: "HTML", expertise: ExpertiseLevel.Excellent}, + {name: "CSS & Bootstrap", expertise: ExpertiseLevel.Excellent}, + {name: "SQL", expertise: ExpertiseLevel.Intermediate}, + {name: "Design in Figma", expertise: ExpertiseLevel.Intermediate}, + {name: "Design a network w/CISCO Packet Tracer", expertise: ExpertiseLevel.Beginner}, +] + +export const skillsSelfTaught: Skill[] = [ + { name: "Python", expertise: ExpertiseLevel.Beginner }, + { name: "Manim - python library", expertise: ExpertiseLevel.Intermediate }, + { name: "React", expertise: ExpertiseLevel.Beginner }, + { name: "Vue", expertise: ExpertiseLevel.Beginner }, + { name: "Tailwind CSS", expertise: ExpertiseLevel.Intermediate }, + { name: "Typescript", expertise: ExpertiseLevel.Beginner }, +] + +export const educationHistory: EducationTitle[] = [{ + start_year: 2018, + end_year: 2023, + title_description: "High School Diploma in Computer Science and Telecommunications", + school: "Istituto Tecnico Tecnologico 'B. Pascal' @ Cesena, IT", + grade: 100, + max_grade: 100, + withHonours: true + }, + { + start_year: 2023, + end_year: 2027, + title_description: "Bachelor Degree in Computer Science and Engineering", + school: "Alma Mater Studiorum, University of Bologna @ Cesena, IT", + grade: NaN, + max_grade: 110, + withHonours: false + } +] + +educationHistory.sort((a, b) => (a.start_year > b.start_year) ? -1 : 1) \ No newline at end of file diff --git a/src/pages/ContactMe.tsx b/src/pages/ContactMe.tsx index 31bcf82..5b3150f 100644 --- a/src/pages/ContactMe.tsx +++ b/src/pages/ContactMe.tsx @@ -1,37 +1,29 @@ -// import { useState } from "react" import Button from "../components/Button" import './ContactMe.module.css' -// const [mailData, setMailData] = useState({}) - -// function sendMail() -// { - -// } - function ContactMe() { return <>

Let's keep in touch!

-
-
+ +


- +


- +
- +
- +
diff --git a/src/pages/Education.tsx b/src/pages/Education.tsx index 19feb41..283ddf2 100644 --- a/src/pages/Education.tsx +++ b/src/pages/Education.tsx @@ -1,57 +1,12 @@ import EducationCard from "../components/EducationCard" -import { EducationTitle, Expertise } from "../model/Education" +import CarIco from "../components/icons/CarIco" +import FromMySelfIco from "../components/icons/FromMySelfIco" +import FromSchoolIco from "../components/icons/FromSchoolIco" +import MediumBikeIco from "../components/icons/MediumBikeIco" +import SmallBikeIco from "../components/icons/SmallBikeIco" +import { educationHistory, ExpertiseLevel, skillsFromSchool, skillsSelfTaught } from "../model/Education" import styles from './Education.module.css' -const from_school = [ - {name: "C", expertise: Expertise.Intermediate}, - {name: "C#", expertise: Expertise.Intermediate}, - {name: "Blazor", expertise: Expertise.Beginner}, - {name: "Java", expertise: Expertise.Beginner}, - {name: "Bash", expertise: Expertise.Beginner}, - {name: "Design a WPF", expertise: Expertise.Intermediate}, - {name: "JavaScript & JQuery", expertise: Expertise.Intermediate}, - {name: "HTML", expertise: Expertise.Excellent}, - {name: "CSS & Bootstrap", expertise: Expertise.Excellent}, - {name: "SQL", expertise: Expertise.Intermediate}, - {name: "Design in Figma", expertise: Expertise.Intermediate}, - {name: "Design a network w/CISCO Packet Tracer", expertise: Expertise.Beginner}, -] - -const self_taught = [ - {name: "Python", expertise: Expertise.Beginner}, - {name: "Manim - python library", expertise: Expertise.Intermediate}, - {name: "React", expertise: Expertise.Beginner}, - {name: "Vue", expertise: Expertise.Beginner}, - {name: "Tailwind CSS", expertise: Expertise.Intermediate}, - {name: "Typescript", expertise: Expertise.Beginner}, -] - -const expertise_strings: String[] = [] -expertise_strings[Expertise.Beginner] = "Beginner" -expertise_strings[Expertise.Intermediate] = "Intermediate" -expertise_strings[Expertise.Excellent] = "Excellent" - -const educationHistory: EducationTitle[] = [{ - start_year: 2018, - end_year: 2023, - title_description: "High School Diploma in Computer Science and Telecommunications", - school: "Istituto Tecnico Tecnologico 'B. Pascal' @ Cesena, IT", - grade: 100, - max_grade: 100, - withHonours: true - }, - { - start_year: 2023, - end_year: 2027, - title_description: "Bachelor Degree in Computer Science and Engineering", - school: "Alma Mater Studiorum, University of Bologna @ Cesena, IT", - grade: NaN, - max_grade: 110, - withHonours: false - }] - -educationHistory.sort((a, b) => (a.start_year > b.start_year) ? -1 : 1) - function Education() { return ( @@ -80,8 +35,8 @@ function Education()

Certifications & more

-
-
Issued on: 29/07/2023
+
+
Issued on: 29/07/2023
Cambridge Advanced English (CAE)
British School @ Rimini, IT
@@ -122,9 +77,9 @@ function Education()
-
+
-
Issued on: 26/11/2022
+
Issued on: 26/11/2022
"Pizzinelli" Foundation Scholarship
'Marco Pizzinelli' Foundation @ Cesena, IT
@@ -132,10 +87,10 @@ function Education()
{/* MMA */} -
+
-
Issued on: 05/05/2023
+
Issued on: 05/05/2023
3rd Place "Metodi Matematici per l'Animazione"
Alma Mater Studiorum, University of Bologna @ Department of Mathematics
@@ -143,71 +98,29 @@ function Education()
{/* WSC */} -
-
Issued on: 18/11/2021
+
+
Issued on: 18/11/2021
Workplace Safety Course
"Istituto Tecnico Tecnologico 'Blaise Pascal'" @ Cesena, IT
{/* Driving License */} -
-
Issued on: 22/05/2023
+
+
Issued on: 22/05/2023
Driving License B
Can drive:
- - - +
Car
- - - +
125cc
- - - +
50cc
@@ -217,36 +130,32 @@ function Education()
- - - +

Learnt from School


{ - from_school.map(item => + skillsFromSchool.map(skill => - - + + ) }
{item.name}{expertise_strings[item.expertise]}{skill.name}{ExpertiseLevel[skill.expertise]}
- - - +

Self-taught


{ - self_taught.map(item => + skillsSelfTaught.map(skill => - - + + ) }
{item.name}{expertise_strings[item.expertise]}{skill.name}{ExpertiseLevel[skill.expertise]}
diff --git a/src/pages/InitialScreen.tsx b/src/pages/InitialScreen.tsx index d7e8c4b..9b2b375 100644 --- a/src/pages/InitialScreen.tsx +++ b/src/pages/InitialScreen.tsx @@ -11,7 +11,7 @@ function InitialScreen() {
Hi! I'm

Nicholas Magi

Aspirant Web & Software Developer
-
Computer Science Undergraduate @ University of Bologna, IT
+
Computer Science Undergraduate @ University of Bologna, IT