- {projects.map((project, index) => (
-
Projects
+
+ {isVisible && (
+
-
-
- {project.title}
-
-
{project.meta_description}
-
-
- ))}
-
+
+ {projects.map((project, index) => (
+
+
+
+ {project.title}
+
+
+ {project.meta_description}
+
+
+
+ ))}
+
+
+ )}
);
diff --git a/app/globals.css b/app/globals.css
index c2b3259..c59bd8e 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -196,4 +196,21 @@ body {
.animate-fade-out {
animation: fadeOut 3s forwards;
-}
\ No newline at end of file
+}
+
+.project-card {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ background: rgba(255, 255, 255, 0.45);
+ border-radius: 16px;
+ padding: 16px;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ transition: transform 0.3s ease;
+ width: 100%;
+ height: auto;
+}
+
+.project-card:hover {
+ transform: translateY(-5px);
+}
diff --git a/package-lock.json b/package-lock.json
index 59346b2..79c241a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,7 +18,8 @@
"node-fetch": "^3.3.2",
"nodemailer": "^6.10.0",
"react": "^19.0.0",
- "react-dom": "^19.0.0"
+ "react-dom": "^19.0.0",
+ "react-responsive-masonry": "^2.7.1"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
@@ -9249,6 +9250,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/react-responsive-masonry": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/react-responsive-masonry/-/react-responsive-masonry-2.7.1.tgz",
+ "integrity": "sha512-Q+u+nOH87PzjqGFd2PgTcmLpHPZnCmUPREHYoNBc8dwJv6fi51p9U6hqwG8g/T8MN86HrFjrU+uQU6yvETU7cA==",
+ "license": "MIT"
+ },
"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 e6b8cab..7ec56f7 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,8 @@
"node-fetch": "^3.3.2",
"nodemailer": "^6.10.0",
"react": "^19.0.0",
- "react-dom": "^19.0.0"
+ "react-dom": "^19.0.0",
+ "react-responsive-masonry": "^2.7.1"
},
"devDependencies": {
"@eslint/eslintrc": "^3",