diff --git a/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_assets/photo_400x400.jpg b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_assets/photo_400x400.jpg new file mode 100644 index 0000000..7e16284 Binary files /dev/null and b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_assets/photo_400x400.jpg differ diff --git a/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/AboutMe.tsx b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/AboutMe.tsx new file mode 100644 index 0000000..e08ed81 --- /dev/null +++ b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/AboutMe.tsx @@ -0,0 +1,21 @@ +import React from "react"; +import Image from "next/image"; +import myPhoto from "../_assets/photo_400x400.jpg"; + +export const AboutMe = () => { + return ( +
+
+
+ My Photo +
+
+

About Me

+

{`I'm a full-stack engineer 🧑‍💻 and love a good game/puzzle 🧩.`}

+

{`My coding expertise spans everything from Front-End dev work (Angular, React, Vue, etc.) to C# to Big Data to Security to DevOps and (most recently) Web 3.`}

+

{`Current focus is on ZKsync, but I'm excited to learn anything/everything about the Ethereum ecosystem 🙌!`}

+
+
+
+ ); +}; diff --git a/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/CardHover.tsx b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/CardHover.tsx new file mode 100644 index 0000000..c20b5bc --- /dev/null +++ b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/CardHover.tsx @@ -0,0 +1,63 @@ +import { type IndraIconSkill } from "~~/app/builders/0x80Ad2861Ab5D4EeA61330A4bd7d6969357C463C3/_data/indra-skills"; + +type CardProps = { + Icon: IndraIconSkill; + name: string; + description: string; + time: string; +}; + +const CardContent = ({ Icon, description, name, time }: CardProps) => { + return ( +
+
+ +

{name}

+
+

{description}

+
+ {time} +
+
+ ); +}; + +export const CardHoverEffect1 = (props: CardProps) => { + return ( +
+ + +
+ ); +}; + +export const CardHoverEffect2 = (props: CardProps) => { + return ( +
+ + +
+ ); +}; + +export const CardHoverEffect3 = (props: CardProps) => { + return ( +
+ + + + +
+ ); +}; + +export const CardHoverEffect4 = (props: CardProps) => { + return ( +
+ + + + +
+ ); +}; diff --git a/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/SocialsSection.tsx b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/SocialsSection.tsx new file mode 100644 index 0000000..1dcc1a4 --- /dev/null +++ b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_components/SocialsSection.tsx @@ -0,0 +1,41 @@ +import Link from "next/link"; +import { IconSocials, socials } from "../_data/socials"; + +type HoverRevealButtonProps = { + Icon: IconSocials; + label: string; +}; + +const HoverRevealButton = ({ Icon, label }: HoverRevealButtonProps) => { + return ( +
+ + {label} +
+ ); +}; + +const SocialsSection = () => { + return ( +
+

Socials

+ +
+ ); +}; + +export default SocialsSection; diff --git a/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_data/socials.tsx b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_data/socials.tsx new file mode 100644 index 0000000..5299e4f --- /dev/null +++ b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/_data/socials.tsx @@ -0,0 +1,38 @@ +import { SiGithub, SiTwitter } from "react-icons/si"; +import { SlGlobe } from "react-icons/sl"; +import { BuidlGuidlLogo } from "~~/components/assets/BuidlGuidlLogo"; + +export const ETH_ADDRESS = "0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1"; + +export const socials = [ + { + icon: SlGlobe, + name: "Website", + label: "Website", + url: "https://nvillanueva.com", + username: "nvillanueva.com", + }, + { + icon: SiGithub, + label: "GitHub", + name: "GitHub", + url: "https://github.com/mexicanace", + username: "mexicanace", + }, + { + icon: SiTwitter, + label: "Twitter", + name: "Twitter", + url: "twitter.com/mexicanace", + username: "@mexicanace", + }, + { + name: "BuidlGuidl", + url: `https://app.buidlguidl.com/builders/${ETH_ADDRESS}`, + label: "BuidlGuidl", + icon: BuidlGuidlLogo, + username: "BuidlGuidl", + }, +] as const; + +export type IconSocials = (typeof socials)[number]["icon"]; diff --git a/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/page.tsx b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/page.tsx new file mode 100644 index 0000000..808ac86 --- /dev/null +++ b/packages/nextjs/app/builders/0xF25f95C59f4f1C4010527DAa26e7974cB37c2Ae1/page.tsx @@ -0,0 +1,22 @@ +import { AboutMe } from "./_components/AboutMe"; +import SocialsSection from "./_components/SocialsSection"; +import { ETH_ADDRESS } from "./_data/socials"; +import type { NextPage } from "next"; +import { Address } from "~~/components/scaffold-eth"; + +const BuilderPage: NextPage = () => { + return ( +
+
+

Nicolas Villanueva

+
+
+ + + + +
+ ); +}; + +export default BuilderPage; diff --git a/packages/nextjs/app/builders/0xd1B41bE30F980315b8A6b754754aAa299C7abea2/_assets/RolandTheFrank.jpg b/packages/nextjs/app/builders/0xd1B41bE30F980315b8A6b754754aAa299C7abea2/_assets/RolandTheFrank.jpg new file mode 100644 index 0000000..630e7ec Binary files /dev/null and b/packages/nextjs/app/builders/0xd1B41bE30F980315b8A6b754754aAa299C7abea2/_assets/RolandTheFrank.jpg differ diff --git a/packages/nextjs/app/builders/0xd1B41bE30F980315b8A6b754754aAa299C7abea2/page.tsx b/packages/nextjs/app/builders/0xd1B41bE30F980315b8A6b754754aAa299C7abea2/page.tsx index cb66c68..08a55d4 100644 --- a/packages/nextjs/app/builders/0xd1B41bE30F980315b8A6b754754aAa299C7abea2/page.tsx +++ b/packages/nextjs/app/builders/0xd1B41bE30F980315b8A6b754754aAa299C7abea2/page.tsx @@ -1,15 +1,17 @@ +import Image from "next/image"; +import profileUrl from "./_assets/RolandTheFrank.jpg"; import { GitHubIcon, LinkedInIcon, TwitterIcon, YouTubeIcon } from "./profileLinks"; import type { NextPage } from "next"; import { Address } from "~~/components/scaffold-eth"; -const profileUrl = "https://pbs.twimg.com/media/Ey8oK6gXMAUKrEX.jpg"; - const RolandTheFrank: NextPage = () => { return (
- author avatar +
+ author avatar +

diff --git a/packages/nextjs/app/builders/0xfb8b972b0D1cF9BB242A40F7AEA8E9a1bF89E0E3/page.tsx b/packages/nextjs/app/builders/0xfb8b972b0D1cF9BB242A40F7AEA8E9a1bF89E0E3/page.tsx index 2602907..8e157d0 100644 --- a/packages/nextjs/app/builders/0xfb8b972b0D1cF9BB242A40F7AEA8E9a1bF89E0E3/page.tsx +++ b/packages/nextjs/app/builders/0xfb8b972b0D1cF9BB242A40F7AEA8E9a1bF89E0E3/page.tsx @@ -1,8 +1,8 @@ import React from "react"; import Image from "next/image"; -import { NextPage } from "next"; +import { NextPage } from "next"; -const Zeze : NextPage = () => { +const Zeze: NextPage = () => { return ( <>
@@ -52,4 +52,4 @@ const Zeze : NextPage = () => { ); }; -export default Zeze +export default Zeze; diff --git a/packages/nextjs/app/page.tsx b/packages/nextjs/app/page.tsx index 96a9436..347c77c 100644 --- a/packages/nextjs/app/page.tsx +++ b/packages/nextjs/app/page.tsx @@ -1,6 +1,7 @@ "use client"; import Link from "next/link"; +import CheckedInCounter from "../components/CheckedInCounter"; import type { NextPage } from "next"; import { BugAntIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline"; @@ -15,8 +16,7 @@ const Home: NextPage = () => {

Get started by taking a look at your batch GitHub repository.

- Checked in builders count: - To Be Implemented +

diff --git a/packages/nextjs/components/CheckedInCounter.tsx b/packages/nextjs/components/CheckedInCounter.tsx new file mode 100644 index 0000000..dac0fe1 --- /dev/null +++ b/packages/nextjs/components/CheckedInCounter.tsx @@ -0,0 +1,34 @@ +import { useEffect, useState } from "react"; +import { useScaffoldReadContract } from "~~/hooks/scaffold-eth"; + +const CheckInCount = () => { + const [feedback, setFeedback] = useState(""); + const [result, setResult] = useState(); + + const { + data: checkedIn, + isLoading: checkInLoading, + error: checkInError, + } = useScaffoldReadContract({ + contractName: "BatchRegistry", + functionName: "checkedInCounter", + }); + + useEffect(() => { + if (checkInError) { + setFeedback("Something went wrong"); + console.error(checkInError); + } else { + setResult(checkInLoading ? "..." : String(Number(checkedIn))); + } + }, [checkInError, checkInLoading, checkedIn]); + + return ( + <> + Checked in builders count: {result} + {feedback &&

{feedback}

} + + ); +}; + +export default CheckInCount;