Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
01094cd
Update constants.ts
diterra-code Mar 31, 2025
49844b8
Merge branch 'bleu:main' into main
diterra-code Mar 31, 2025
677aa35
Merge branch 'bleu:main' into main
diterra-code Mar 31, 2025
730e64a
Update constants.ts
diterra-code Apr 1, 2025
0fcf995
Update constants.ts
diterra-code Apr 1, 2025
b814828
Update constants.ts
diterra-code Apr 1, 2025
1bd1600
Update constants.ts
diterra-code Apr 1, 2025
ae497c1
Update constants.ts
diterra-code Apr 1, 2025
ec90d92
Merge branch 'bleu:main' into main
diterra-code Apr 2, 2025
ca751e7
Update constants.ts
diterra-code Apr 2, 2025
ef5e983
Merge branch 'bleu:main' into main
diterra-code Apr 3, 2025
8e50f55
Update constants.ts
diterra-code Apr 4, 2025
4158940
Merge branch 'bleu:main' into main
diterra-code Apr 10, 2025
e5c5ead
Merge branch 'bleu:main' into main
diterra-code Apr 10, 2025
7e6a6a4
Merge branch 'bleu:main' into main
diterra-code Apr 22, 2025
2ef2fce
Merge branch 'bleu:main' into main
diterra-code May 8, 2025
0ea10e6
Update layout of projects
May 27, 2025
453a35e
WalletConnect project ID from env var
Jul 7, 2025
879b1b7
Merge pull request #5 from BreadchainCoop/sb-3
secbajor Jul 7, 2025
ac91649
change versions
Jul 9, 2025
25a9ca4
Merge pull request #6 from BreadchainCoop/sb-3
secbajor Jul 9, 2025
8bb71df
update versions, remove possible conflicting packages for walletconnect
Jul 9, 2025
e395fc3
Merge pull request #7 from BreadchainCoop/sb-3
secbajor Jul 9, 2025
940a055
Merge pull request #2 from BreadchainCoop/sb-1
secbajor Jul 14, 2025
825bdc0
Remove ConnectKit, add Rainbowkit
Jul 7, 2025
5f92fa8
Merge pull request #8 from BreadchainCoop/sb-3
secbajor Jul 14, 2025
7777d20
Rainbowkit modal dark mode
Jul 15, 2025
4a89c94
only display projects with fetched metadata
Jul 7, 2025
17e8067
showing no daata available
Jul 15, 2025
6451c1b
Loading states
Jul 15, 2025
aad360c
fixing loading
Jul 15, 2025
b2132f5
Merge pull request #10 from BreadchainCoop/sb-3
secbajor Jul 15, 2025
7c30e3b
add file
Jul 15, 2025
aea068c
Add preview file and metadata
Jul 31, 2025
c8344dd
Merge pull request #12 from BreadchainCoop/sb-11
secbajor Jul 31, 2025
00a3073
Add twitter to object for handling
Jul 31, 2025
7f160b3
Merge pull request #13 from BreadchainCoop/sb-11
secbajor Jul 31, 2025
dde19e2
Merge pull request #9 from BreadchainCoop/sb-4
secbajor Sep 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,22 @@
"@radix-ui/react-slot": "^1.1.2",
"@radix-ui/react-tabs": "^1.1.3",
"@radix-ui/react-tooltip": "^1.1.8",
"@rainbow-me/rainbowkit": "^2.2.8",
"@tailwindcss/postcss": "^4.0.6",
"@tanstack/react-query": "^5.66.0",
"@tanstack/react-query": "^5.66.7",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"connectkit": "^1.8.2",
"gql.tada": "^1.8.10",
"graphql-request": "^7.1.2",
"next": "15.1.7",
"phosphor-react": "^1.4.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"tailwind-merge": "^3.0.1",
"tailwindcss-animate": "^1.0.7",
"urql": "^4.2.1",
"viem": "^2.23.2",
"wagmi": "^2.14.11",
"viem": "^2.31.7",
"wagmi": "^2.15.6",
"zustand": "^5.0.3"
},
"devDependencies": {
Expand Down
4,084 changes: 2,600 additions & 1,484 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

Binary file added public/images/preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 7 additions & 3 deletions src/app/cohort-selection/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@ import { TopSection } from "@/components/cohort-page-components/top-section";

export default function CohortSelectionPage() {
return (
<div className="min-h-screen my-20 md:pt-20 pt-4 space-y-16 max-w-[760px] mx-auto px-4">
<TopSection />
<CohortSelectionTabs />
<div className="min-h-screen my-20 md:pt-20 pt-4 space-y-16">
<div className="max-w-[760px] mx-auto px-4">
<TopSection />
</div>
<div className="max-w-[1040px] mx-auto px-4">
<CohortSelectionTabs />
</div>
</div>
);
}
23 changes: 23 additions & 0 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
import type { Metadata } from "next";
import "./globals.css";
import "@rainbow-me/rainbowkit/styles.css";
import { Rubik } from "next/font/google";
import Content from "./Content";

export const metadata: Metadata = {
title: "OP Builders Dollar",
description: "Optimistic Builders Dollar",
openGraph: {
title: "OP Builders Dollar",
description: "Optimistic Builders Dollar",
url: "https://obdollar.xyz/",
siteName: "OP Builders Dollar",
images: [
{
url: "https://obdollar.xyz/images/preview.png",
width: 800,
height: 600,
alt: "Optimistic Builders Dollar",
},
],
locale: "en_US",
type: "website",
},
twitter: {
card: "summary_large_image",
title: "OP Builders Dollar",
description: "Optimistic Builders Dollar",
images: ["https://obdollar.xyz/images/preview.png"],
},
};

const rubik = Rubik({
Expand Down
14 changes: 7 additions & 7 deletions src/components/cohort-page-components/eligible-projects.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ import {
TooltipProvider,
TooltipTrigger,
} from "@radix-ui/react-tooltip";
import { useModal } from "connectkit";
import { useChainModal } from "@rainbow-me/rainbowkit";
import { CheckCircle, SmileySad, ThumbsUp } from "phosphor-react";
import { useState } from "react";
import { useAccount } from "wagmi";
import { AccountName } from "../account-name";
import { LoadingTxModal } from "../mint-page-components/loading-tx-modal";
import { ProjectCard } from "../project-card";
import { ProjectCardWithMetadata } from "../project-card-with-metadata";
import { Button } from "../ui/button";

export const EligibleProjects = () => {
Expand All @@ -35,10 +35,10 @@ export const EligibleProjects = () => {
with membership typically lasting eight months.
</span>
</div>
<div className="grid grid-cols-4 md:grid-cols-8 gap-y-4 gap-x-6">
<div className="grid grid-cols-4 md:grid-cols-12 gap-y-4 gap-x-6">
{projects.map((project) => (
<div key={project.id} className="col-span-4">
<ProjectCard
<ProjectCardWithMetadata
key={project.id}
project={project}
className="grid grid-cols-8 w-full gap-2"
Expand All @@ -48,7 +48,7 @@ export const EligibleProjects = () => {
projectUid={project.id as `0x${string}`}
projectName={project.name ?? ""}
/>
</ProjectCard>
</ProjectCardWithMetadata>
</div>
))}
</div>
Expand Down Expand Up @@ -143,7 +143,7 @@ const EndorseButton = ({
projectName,
}: EndorseButtonProps) => {
const [dialogOpen, setDialogOpen] = useState<boolean>(false);
const { setOpen } = useModal();
const { openChainModal } = useChainModal();
const { address } = useAccount();
const { isCitizen, fetching } = useCitizen();
const { trigger, reset, txHashes, loadingMessage, error } = useEndorse({
Expand Down Expand Up @@ -187,7 +187,7 @@ const EndorseButton = ({
<Button
className={buttonStyle}
variant="default"
onClick={() => setOpen(true)}
onClick={() => (openChainModal ? openChainModal() : () => {})}
>
SIGN IN TO ENDORSE
</Button>
Expand Down
180 changes: 101 additions & 79 deletions src/components/connect-wallet-button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button";
import { ChainIcon } from "@/components/ui/chain-icon";
import { useApy } from "@/hooks/use-apy";
import { useReadObusd } from "@/hooks/use-read-obusd";
import { ConnectKitButton, useModal } from "connectkit";
import { ConnectButton, useChainModal } from "@rainbow-me/rainbowkit";
import Image from "next/image";
import Link from "next/link";
import {
Expand Down Expand Up @@ -51,7 +51,7 @@ export const ConnectWalletButton = () => {
: "0.0";
const [open, setOpen] = useState(false);

const { openSwitchNetworks } = useModal();
const { openChainModal } = useChainModal();

const handleMouseEnter = () => {
if (isMobile) return;
Expand All @@ -64,85 +64,107 @@ export const ConnectWalletButton = () => {
};

return (
<ConnectKitButton.Custom>
{({ show, isConnected, isConnecting, truncatedAddress, chain }) => (
<>
{isConnected ? (
<div className="relative">
<Popover open={open} onOpenChange={setOpen}>
<div
className="relative"
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<PopoverTrigger
onClick={(e) => {
!isMobile && e.preventDefault();
}}
className="focus:outline-none"
<ConnectButton.Custom>
{({
account,
chain,
openConnectModal,
authenticationStatus,
mounted,
}) => {
const ready = mounted;
const truncatedAddress = account?.displayName;
return (
<>
{ready &&
account &&
chain &&
(!authenticationStatus ||
authenticationStatus === "authenticated") ? (
<div className="relative">
<Popover open={open} onOpenChange={setOpen}>
<div
className="relative"
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<div className="flex items-center justify-center gap-2 border border-card-border rounded-2xl md:pl-3">
<div className="hidden md:flex items-center gap-1.5">
<ChainIcon id={chain?.id} size={24} />
<span className="text-lg">{chain?.name}</span>
<PopoverTrigger
onClick={(e) => {
!isMobile && e.preventDefault();
}}
className="focus:outline-none"
>
<div className="flex items-center justify-center gap-2 border border-card-border rounded-2xl md:pl-3">
<div className="hidden md:flex items-center gap-1.5">
<ChainIcon id={chain?.id} size={24} />
<span className="text-lg">{chain?.name}</span>
</div>
<div className="flex items-center gap-1.5 md:bg-background text-foreground rounded-2xl py-2 px-2">
{avatar && (
<Image
loader={() => avatar}
src={avatar}
alt="avatar"
width={24}
height={24}
className="rounded-full"
/>
)}
<span>{ensName ?? truncatedAddress ?? ""}</span>
</div>
</div>
<div className="flex items-center gap-1.5 md:bg-background text-foreground rounded-2xl py-2 px-2">
{avatar && (
<Image
loader={() => avatar}
src={avatar}
alt="avatar"
width={24}
height={24}
className="rounded-full"
/>
)}
<span>{ensName ?? truncatedAddress ?? ""}</span>
</div>
</div>
</PopoverTrigger>
{/* Invisible connector between trigger and content to keep the hover functionallity working */}
{open && (
<div className="absolute w-full h-6 bottom-0 translate-y-full" />
)}
</div>
<PopoverContent
side="top"
sideOffset={20}
className="w-[400px] md:w-[400px] md:h-[318px] mx-5"
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<WalletAccountDetails
chainId={chain?.id}
chainName={chain?.name}
accountIdentifier={ensName ?? truncatedAddress ?? ""}
avatar={avatar ?? undefined}
balance={
balance?.value !== undefined
? balance.value.toString() === "0"
? "0.0"
: Number(formatEther(balance.value)).toFixed(4)
: ""
}
userYearlyYield={userYearlyYield}
openSwitchNetworks={openSwitchNetworks}
address={address}
/>
</PopoverContent>
</Popover>
</div>
) : (
<Button
onClick={isConnecting ? () => {} : show}
className="flex items-center gap-1.5 rounded-2xl py-2 px-6 text-lg font-normal"
>
<span>{isConnecting ? "Loading..." : "Sign in"}</span>
</Button>
)}
</>
)}
</ConnectKitButton.Custom>
</PopoverTrigger>
{/* Invisible connector between trigger and content to keep the hover functionallity working */}
{open && (
<div className="absolute w-full h-6 bottom-0 translate-y-full" />
)}
</div>
<PopoverContent
side="top"
sideOffset={20}
className="w-[400px] md:w-[400px] md:h-[318px] mx-5"
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<WalletAccountDetails
chainId={chain?.id}
chainName={chain?.name}
accountIdentifier={ensName ?? truncatedAddress ?? ""}
avatar={avatar ?? undefined}
balance={
balance?.value !== undefined
? balance.value.toString() === "0"
? "0.0"
: Number(formatEther(balance.value)).toFixed(4)
: ""
}
userYearlyYield={userYearlyYield}
openSwitchNetworks={openChainModal}
address={address}
/>
</PopoverContent>
</Popover>
</div>
) : (
<Button
onClick={
authenticationStatus === "loading"
? () => {}
: openConnectModal
}
className="flex items-center gap-1.5 rounded-2xl py-2 px-6 text-lg font-normal"
>
<span>
{authenticationStatus === "loading"
? "Loading..."
: "Sign in"}
</span>
</Button>
)}
</>
);
}}
</ConnectButton.Custom>
);
};

Expand Down
Loading