diff --git a/package.json b/package.json index 9f22cd3..04b3ef5 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "react-dom": "^18.3.1", "sharp": "^0.33.4", "tailwind-merge": "^2.3.0", - "tailwindcss-animate": "^1.0.7" + "tailwindcss-animate": "^1.0.7", + "zod": "^3.23.8" }, "devDependencies": { "@types/node": "^20.12.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21968fb..d05e24a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ dependencies: tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.3) + zod: + specifier: ^3.23.8 + version: 3.23.8 devDependencies: '@types/node': @@ -3639,3 +3642,7 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + dev: false diff --git a/public/projects.json b/public/projects.json new file mode 100644 index 0000000..ca7dc80 --- /dev/null +++ b/public/projects.json @@ -0,0 +1,1141 @@ +[ + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + + { + "name": "Project Alpha", + "description": "Description for Project Alpha", + "category": "Web", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Java", "TypeScript"], + "tags": ["Frontend", "Backend"] + }, + { + "name": "Project Beta", + "description": "Description for Project Beta", + "category": "Minecraft", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "Github": "https://github.com" }, + "languages": ["Rust", "Go"], + "tags": ["1.8", "Fullstack"] + }, + { + "name": "Project Gamma", + "description": "Description for Project Gamma", + "category": "Discord", + "imageUrl": "https://via.placeholder.com/150", + "socials": { "YouTube": "https://youtube.com" }, + "languages": ["TypeScript"], + "tags": ["Backend", "Archived"] + }, + { + "name": "Project Delta", + "description": "Description for Project Delta", + "category": "Unity", + "imageUrl": "https://via.placeholder.com/150", + "socials": {}, + "languages": ["Java"], + "tags": ["1.17", "Frontend"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + }, + { + "name": "Project Epsilon", + "description": "Description for Project Epsilon", + "category": "Misc", + "imageUrl": "https://via.placeholder.com/150", + "socials": { + "Github": "https://github.com", + "YouTube": "https://youtube.com" + }, + "languages": ["Go", "Rust"], + "tags": ["Fullstack", "Paper"] + } +] diff --git a/src/app/page.tsx b/src/app/page.tsx index b9f01ab..824df0a 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,85 +1,29 @@ 'use client' -import React, { useState } from 'react' -import { Project } from '@/typings/project' +import React, { useState, useEffect } from 'react' +import { Project, Tag, projectsSchema } from '@/typings/project' import { ProjectCard } from '@/components/ProjectCard' +import projectsData from '../../public/projects.json' const Page = () => { - const projects: Project[] = [ - { - name: 'Project Alpha', - description: 'Description for Project Alpha', - category: 'Web', - imageUrl: 'https://via.placeholder.com/150', - socials: { Github: 'https://github.com', YouTube: 'https://youtube.com' }, - languages: ['Java', 'TypeScript'], - tags: ['Frontend', 'Backend'], - }, - { - name: 'Project Beta', - description: 'Description for Project Beta', - category: 'Minecraft', - imageUrl: 'https://via.placeholder.com/150', - socials: { Github: 'https://github.com' }, - languages: ['Rust', 'Go'], - tags: ['1.8', 'Fullstack'], - }, - { - name: 'Project Gamma', - description: 'Description for Project Gamma', - category: 'Discord', - imageUrl: 'https://via.placeholder.com/150', - socials: { YouTube: 'https://youtube.com' }, - languages: ['TypeScript'], - tags: ['Backend', 'Archived'], - }, - { - name: 'Project Delta', - description: 'Description for Project Delta', - category: 'Unity', - imageUrl: 'https://via.placeholder.com/150', - socials: {}, - languages: ['Java'], - tags: ['1.17', 'Frontend'], - }, - { - name: 'Project Epsilon', - description: 'Description for Project Epsilon', - category: 'Misc', - imageUrl: 'https://via.placeholder.com/150', - socials: { Github: 'https://github.com', YouTube: 'https://youtube.com' }, - languages: ['Go', 'Rust'], - tags: ['Fullstack', 'Paper'], - }, - // Add more projects to test pagination - { - name: 'Project Zeta', - description: 'Description for Project Zeta', - category: 'Misc', - imageUrl: 'https://via.placeholder.com/150', - socials: { Github: 'https://github.com', YouTube: 'https://youtube.com' }, - languages: ['Go', 'Rust'], - tags: ['Fullstack', 'Paper'], - }, - { - name: 'Project Eta', - description: 'Description for Project Eta', - category: 'Misc', - imageUrl: 'https://via.placeholder.com/150', - socials: { Github: 'https://github.com', YouTube: 'https://youtube.com' }, - languages: ['Go', 'Rust'], - tags: ['Fullstack', 'Paper'], - }, - // Add as many projects as needed to test - ] + const parsedProjects = projectsSchema.safeParse(projectsData) + + if (!parsedProjects.success) { + console.error('Invalid project data', parsedProjects.error) + return