diff --git a/src/App.tsx b/src/App.tsx
index 7297d05..8ea64e2 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -4,6 +4,7 @@ import Header from "@components/Header";
import About from "@components/About";
import SectionScroll from "@components/SectionScroll";
import Skills from "@components/Skills";
+import Projects from "@components/Projects";
import SectionLine from "@components/SectionLine";
export default function App() {
@@ -52,18 +53,11 @@ export default function App() {
-
+
-
Website under construction 🚧👷
);
diff --git a/src/components/Projects.tsx b/src/components/Projects.tsx
new file mode 100644
index 0000000..2a57577
--- /dev/null
+++ b/src/components/Projects.tsx
@@ -0,0 +1,102 @@
+import "@styles/Projects.scss";
+
+enum BadgeType {
+ DOCKER = "Docker",
+ TYPESCRIPT = "TypeScript",
+ EXPRESS = "ExpressJS",
+ GIT = "Git",
+ JAVASCRIPT = "JavaScript",
+ TYPEORM = "TypeORM",
+ FIREBASE = "Firebase",
+ HTML = "HTML",
+ REACT = "ReactJS",
+ NODEJS = "NodeJS",
+ CSS = "CSS",
+ NEXTJS = "NextJS",
+ POSTGRESQL = "PostgreSQL",
+ SASS = "SASS",
+ ANGULARJS = "AngularJS",
+ MYSQL = "MySQL",
+ JAVA = "Java",
+ UNITY = "Unity",
+ CSHARP = "Csharp",
+ CPP = "Cpp",
+ PYTHON = "Python",
+}
+
+function Badge({ type }: { type: BadgeType }) {
+ return {type}
;
+}
+
+function Project({
+ name,
+ description,
+ image,
+ link,
+}: {
+ name: string;
+ description: string;
+ image?: string;
+ link: string;
+}) {
+ const imageUrl =
+ image ||
+ "https://source.unsplash.com/random/500x400?javascript&sig=" +
+ Math.random() * 1000;
+
+ return (
+ {
+ window.open(link, "_blank");
+ }}
+ >
+

+ {!image ?
Placeholder image : null}
+
+
+ );
+}
+
+export default function Projects() {
+ return (
+
+
+
Projects
+ Public Projects
+
+
+
+
{" "}
+
{" "}
+
{" "}
+
+
+
+ );
+}
diff --git a/src/styles/App.scss b/src/styles/App.scss
index e114abd..d24d191 100644
--- a/src/styles/App.scss
+++ b/src/styles/App.scss
@@ -7,5 +7,12 @@
.section {
min-height: 100vh;
padding: 80px 0;
+
+ .title {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ }
}
}
diff --git a/src/styles/Projects.scss b/src/styles/Projects.scss
new file mode 100644
index 0000000..18ae5ce
--- /dev/null
+++ b/src/styles/Projects.scss
@@ -0,0 +1,191 @@
+.projects {
+ padding: 0 10rem;
+ .grid {
+ padding: 2rem 0;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-around;
+ align-items: center;
+ gap: 20px;
+
+ .project {
+ display: flex;
+ flex-direction: column;
+ background-color: var(--color-background-foreground);
+ border-radius: 5px;
+ padding: 5px;
+ border: 2px solid transparent;
+ transition: all 50ms ease-in-out;
+ cursor: pointer;
+ max-width: 500px;
+ min-width: 300px;
+
+ &:hover {
+ border-color: var(--color-accent-background);
+ }
+
+ img {
+ width: 100%;
+
+ &.blur {
+ filter: blur(5px);
+ }
+ }
+
+ small {
+ font-size: 0.8rem;
+ font-weight: bold;
+ color: var(--color-font-muted);
+ text-align: center;
+ }
+
+ .info {
+ padding: 1rem;
+
+ .badges {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 5px;
+ padding: 0.5rem 0;
+ border-bottom: 1px solid var(--color-border);
+
+ .badge {
+ padding: 0.2rem 0.5rem;
+ border-radius: 5px;
+ font-size: 0.8rem;
+ font-weight: 600;
+ border: 2px solid var(--color-accent-background);
+
+ &.docker {
+ background-color: #0db9ed11;
+ border-color: #0db9ed4f;
+ color: #60c6e6;
+ }
+
+ &.typescript {
+ background-color: #007acc11;
+ border-color: #007acc4f;
+ color: #007acc;
+ }
+
+ &.express {
+ background-color: #00000011;
+ border-color: #0000004f;
+ color: #000000;
+ }
+
+ &.git {
+ background-color: #f34f2999;
+ border-color: #f34f29;
+ color: #ffffff;
+ }
+
+ &.javascript {
+ background-color: #f0db4f11;
+ border-color: #f0db4f4f;
+ color: #f0db4f;
+ }
+
+ &.typeorm {
+ background-color: #42b88311;
+ border-color: #42b8834f;
+ color: #42b883;
+ }
+
+ &.firebase {
+ background-color: #ffca2811;
+ border-color: #ffca284f;
+ color: #ffca28;
+ }
+
+ &.html {
+ background-color: #e34f2611;
+ border-color: #e34f264f;
+ color: #e34f26;
+ }
+
+ &.reactjs {
+ background-color: #61dafb11;
+ border-color: #61dafb4f;
+ color: #61dafb;
+ }
+
+ &.nodejs {
+ background-color: #68a06311;
+ border-color: #68a0634f;
+ color: #68a063;
+ }
+
+ &.css {
+ background-color: #264de411;
+ border-color: #264de44f;
+ color: #264de4;
+ }
+
+ &.nextjs {
+ background-color: #00000011;
+ border-color: #0000004f;
+ color: #000000;
+ }
+
+ &.postgresql {
+ background-color: #33679111;
+ border-color: #3367914f;
+ color: #336791;
+ }
+
+ &.sass {
+ background-color: #cc669911;
+ border-color: #cc66994f;
+ color: #cc6699;
+ }
+
+ &.angularjs {
+ background-color: #e2323711;
+ border-color: #e232374f;
+ color: #e23237;
+ }
+
+ &.mysql {
+ background-color: #4479a111;
+ border-color: #4479a14f;
+ color: #4479a1;
+ }
+
+ &.java {
+ background-color: #00739611;
+ border-color: #0073964f;
+ color: #007396;
+ }
+
+ &.unity {
+ background-color: #00000011;
+ border-color: #0000004f;
+ color: #000000;
+ }
+ &.csharp {
+ background-color: #17860011;
+ border-color: #1786004f;
+ color: #178600;
+ }
+
+ &.cpp {
+ background-color: #f34b7d11;
+ border-color: #f34b7d4f;
+ color: #f34b7d;
+ }
+
+ &.python {
+ background-color: #3776ab11;
+ border-color: #3776ab4f;
+ color: #3776ab;
+ }
+ }
+ }
+ .description {
+ padding: 0.5rem 0;
+ }
+ }
+ }
+ }
+}
diff --git a/src/styles/Skills.scss b/src/styles/Skills.scss
index 5e78efa..72c713a 100644
--- a/src/styles/Skills.scss
+++ b/src/styles/Skills.scss
@@ -4,13 +4,6 @@
align-items: center;
gap: 30px;
- .title {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- }
-
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);