diff --git a/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/BuilderProfile.tsx b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/BuilderProfile.tsx new file mode 100644 index 00000000..f7b998d5 --- /dev/null +++ b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/BuilderProfile.tsx @@ -0,0 +1,79 @@ +import Image from "next/image"; +import SkillBadge from "./SkillBadge"; +import SocialLinks from "./SocialLinks"; +import { Award, FileText, Heart } from "lucide-react"; +import { Address } from "~~/components/scaffold-eth/Address/Address"; + +interface BuilderProfileProps { + name: string; + avatarUrl: string; + bio: string; + ethAddress: string; + skills: Array<{ name: string; proficiency: number }>; + hobbies: string[]; +} + +const BuilderProfile = ({ name, avatarUrl, bio, ethAddress, skills, hobbies }: BuilderProfileProps) => { + return ( +
+
+
+ +
+
+
+ {name} +
+
+
+

{name}

+
+
+
+
+
+ +
+
+
+ +

Bio

+
+

{bio}

+
+ +
+
+ +

Skills

+
+
+ {skills.map(skill => ( + + ))} +
+
+ +
+
+ +

Hobbies & Interests

+
+
+ {hobbies.map(hobby => ( +
+ {hobby} +
+ ))} +
+
+ +
+ +
+
+
+ ); +}; + +export default BuilderProfile; diff --git a/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/SkillBadge.tsx b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/SkillBadge.tsx new file mode 100644 index 00000000..8c98c2c9 --- /dev/null +++ b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/SkillBadge.tsx @@ -0,0 +1,24 @@ +import React from "react"; + +interface SkillBadgeProps { + name: string; + proficiency: number; // 1-5 +} + +const SkillBadge = ({ name, proficiency }: SkillBadgeProps) => { + // Ensure proficiency is within bounds + const level = Math.min(Math.max(proficiency, 1), 5); + + return ( +
+ {name} +
+ {[...Array(5)].map((_, i) => ( +
+ ))} +
+
+ ); +}; + +export default SkillBadge; diff --git a/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/SocialLinks.tsx b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/SocialLinks.tsx new file mode 100644 index 00000000..e16e1298 --- /dev/null +++ b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/components/SocialLinks.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import { Github, Link, Linkedin, Twitter } from "lucide-react"; + +const socialIcons = [ + { name: "Twitter", url: "https://twitter.com/armolas_06", icon: Twitter }, + { name: "GitHub", url: "https://github.com/armolas", icon: Github }, + { name: "LinkedIn", url: "https://linkedin.com/in/arowolomuritadhor", icon: Linkedin }, + { name: "Website", url: "https://armolasportfolio.netlify.app", icon: Link }, +]; + +const SocialLinks = () => { + return ( +
+ {socialIcons.map( + social => + social.url && ( + + + {social.name} + + ), + )} +
+ ); +}; + +export default SocialLinks; diff --git a/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/page.tsx b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/page.tsx new file mode 100644 index 00000000..2d6c5a6b --- /dev/null +++ b/packages/nextjs/app/builders/0x74370B567f5c65bef0428B9c78df5C691B632Cf7/page.tsx @@ -0,0 +1,28 @@ +import React from "react"; +import BuilderProfile from "./components/BuilderProfile"; + +const Index = () => { + return ( +
+ +
+ ); +}; + +export default Index; diff --git a/packages/nextjs/next.config.ts b/packages/nextjs/next.config.ts index b81be1a0..99756af3 100644 --- a/packages/nextjs/next.config.ts +++ b/packages/nextjs/next.config.ts @@ -26,6 +26,10 @@ const nextConfig: NextConfig = { protocol: "https", hostname: "res.cloudinary.com", }, + { + protocol: "https", + hostname: "images.unsplash.com", + }, ], }, webpack: config => { diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index d094baa3..0b75d17b 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -25,7 +25,7 @@ "burner-connector": "0.0.12", "daisyui": "^5.0.9", "kubo-rpc-client": "^5.0.2", - "lucide-react": "^0.510.0", + "lucide-react": "^0.511.0", "next": "^15.2.3", "next-nprogress-bar": "^2.3.13", "next-themes": "^0.3.0", diff --git a/yarn.lock b/yarn.lock index e72bd027..0000c782 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4023,7 +4023,7 @@ __metadata: eslint-config-prettier: ^10.1.1 eslint-plugin-prettier: ^5.2.4 kubo-rpc-client: ^5.0.2 - lucide-react: ^0.510.0 + lucide-react: ^0.511.0 next: ^15.2.3 next-nprogress-bar: ^2.3.13 next-themes: ^0.3.0 @@ -13415,12 +13415,12 @@ __metadata: languageName: node linkType: hard -"lucide-react@npm:^0.510.0": - version: 0.510.0 - resolution: "lucide-react@npm:0.510.0" +"lucide-react@npm:^0.511.0": + version: 0.511.0 + resolution: "lucide-react@npm:0.511.0" peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: bc823d2a69255738558fe1ddff18fa9b1f602539928ff4c766a790b190bfc14140061df9cd4fab1680c523053e823668fdc4d726f82f4141f53ee9c58b6916a0 + checksum: b347d276c1a8cdc51f6ca44ef09d51a3a916bfb58ef0a0d55c729b1afb54877c1bbad981313984751ea13e4cc9903bfeae346f112184c94158a5a39274daea65 languageName: node linkType: hard