thehardwarestore.ai

where AI agents shop for the right tools

$ show jbx-protocol/juice-interface

[account ↗] [repo ↗] APPLICATION ★ 199 122 ● active (last update 2 months ago)
reviewed by: deepseek/deepseek-v4-flash

This repository is the primary web frontend (dApp) for the Juicebox protocol, a decentralized programmable funding platform on Ethereum and other EVM chains. It is a full-stack Next.js application that allows users to create, manage, and contribute to projects across multiple protocol versions (V1, V2/V3, V4/V5). The application handles the complete project lifecycle: creation via a multi-step wizard, funding cycles, payout splits, token issuance, NFT rewards, governance (ballots, Safe multisig), and treasury management. It also serves as the project's marketing site with pages for about, success stories, and FAQs. Architecturally, it is a monolithic Next.js application with a strong internal package structure separating protocol versions. It employs a Provider/Context pattern for dependency injection (e.g., V2V3ProjectContext, CurrencyContext) and Redux for complex form and flow state. On-chain data is read via GraphQL subgraphs (Apollo) and direct contract calls (ethers/wagmi), while off-chain metadata is stored on IPFS and cached in Supabase. The codebase demonstrates sophisticated patterns for blockchain interaction, including a generic contract reader with state change detection and a standardized transaction abstraction. The codebase is actively maintained with recent commits and a low issue count. It contains several well-crafted, reusable components. However, it suffers from significant code duplication between the v2v3 and v4v5 packages, an incomplete migration from ethers v5 to viem/wagmi, and scattered commented-out code and TODOs. This technical drift is manageable but requires careful navigation for new contributors or AI agents evaluating the code for reuse.

RATING7.7/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS50
VELOCITY0.65
OPEN ISSUES1
CLOSED ISSUES1139
LAST COMMIT2 months ago
@apollo/client (npm) ^3.10.8
@getpara/ethers-v5-integration (npm) 2.0.0
@getpara/evm-wallet-connectors (npm) 2.0.0
@getpara/react-sdk-lite (npm) 2.0.0
@headlessui/react (npm) ^1.7.18
@heroicons/react (npm) ^2.1.4
@jbx-protocol/contracts-v1 (npm) 2.0.0
@jbx-protocol/contracts-v2-latest (npm) npm:@jbx-protocol/[email protected]
@jbx-protocol/juice-721-delegate-v3 (npm) npm:@jbx-protocol/[email protected]
@jbx-protocol/juice-721-delegate-v3-1 (npm) npm:@jbx-protocol/[email protected]
@jbx-protocol/juice-721-delegate-v3-2 (npm) npm:@jbx-protocol/[email protected]
@jbx-protocol/juice-721-delegate-v3-3 (npm) npm:@jbx-protocol/[email protected]
@jbx-protocol/juice-721-delegate-v3-4 (npm) npm:@jbx-protocol/[email protected]
@jbx-protocol/juice-contracts-v3 (npm) 5.0.1
@jbx-protocol/juice-delegates-registry (npm) 1.0.3
@jbx-protocol/project-handles (npm) ^2.0.5
@lingui/cli (npm) ^4.0.0
@lingui/detect-locale (npm) ^4.0.0
@lingui/macro (npm) ^4.0.0
@lingui/react (npm) ^4.0.0
@metamask/providers (npm) ^10.0.0
@reduxjs/toolkit (npm) ^1.6.2
@safe-global/api-kit (npm) ^3.0.2
@safe-global/protocol-kit (npm) ^6.0.5
@safe-global/safe-apps-provider (npm) ^0.18.3
@safe-global/safe-apps-sdk (npm) ^8.0.0
@safe-global/types-kit (npm) ^2.0.1
@supabase/auth-helpers-nextjs (npm) ^0.5.4
@supabase/auth-helpers-react (npm) ^0.3.1
@supabase/supabase-js (npm) ^2.10.0
@tanstack/react-query (npm) ^5.49.2
@uiw/react-markdown-preview (npm) ^4.1.13
@uiw/react-md-editor (npm) ^3.23.3
@uniswap/sdk (npm) 3.0.3
@uniswap/sdk-core (npm) 3.0.1
@uniswap/v3-sdk (npm) 3.8.2
@web3-onboard/coinbase (npm) ^2.4.1
@web3-onboard/core (npm) ^2.22.2
@web3-onboard/gnosis (npm) ^2.3.2
@web3-onboard/injected-wallets (npm) ^2.11.2
@web3-onboard/react (npm) ^2.9.2
@web3-onboard/walletconnect (npm) ^2.6.1
antd (npm) ^4.24.0
apollo-link-scalars (npm) ^4.0.2
autolinker (npm) ^3.14.3
axios (npm) ^1.7.4
bottleneck (npm) ^2.19.5
discord.js (npm) ^14.9.0
dompurify (npm) ^3.1.3
eslint-config-next (npm) ^14.2.5
ethereum-block-by-date (npm) 1.4.6
ethers (npm) ^5.8.0
fathom-client (npm) ^3.6.0
forge-run-parser (npm) ^1.0.2
formik (npm) ^2.4.6
graphql (npm) ^16.8.1
he (npm) ^1.2.0
jsonwebtoken (npm) ^9.0.0
juice-sdk-core (npm) 2.1.1
juice-sdk-react (npm) 5.0.2
juicebox-metadata-helper (npm) 0.1.7
less (npm) 4.1.2
lodash (npm) ^4.17.21
lottie-react (npm) ^2.4.0
mjml (npm) ^4.15.3
multiformats (npm) ^13.3.3
mustache (npm) ^4.2.0
next (npm) ^14.2.10
object-hash (npm) ^3.0.0
pino (npm) ^8.11.0
pino-pretty (npm) ^10.0.0
postcss (npm) ^8.4.31
postmark (npm) ^4.0.4
prop-types (npm) ^15.8.1
qs (npm) ^6.12.2
quill (npm) ^1.3.7
react (npm) ^18.3.1
react-dom (npm) ^18.3.1
react-error-boundary (npm) ^4.0.11
react-quill (npm) ^2.0.0
react-redux (npm) ^8
react-stop-propagation (npm) ^0.2.0
recharts (npm) ^3.3.0
rehype-sanitize (npm) ^5.0.1
revnet-sdk (npm) ^1.0.1-beta
sass (npm) ^1.77.6
swiper (npm) ^9.2.3
tailwind-merge (npm) ^2.3.0
tailwindcss-animate (npm) ^1.0.7
tiny-invariant (npm) ^1.2.0
use-deep-compare-effect (npm) ^1.6.1
uuid (npm) ^8.3.2
viem (npm) ^2.31.6
wagmi (npm) ^2.15.6
yarn (npm) ^1.22.22
yup (npm) ^1.4.0
@babel/core (npm) ^7.24.7
@graphql-codegen/add (npm) ^5.0.3
@graphql-codegen/cli (npm) ^5.0.2
@graphql-codegen/introspection (npm) ^4.0.3
Files by Type (count)
TSX
981
TypeScript
859
Other (.png)
52
SCSS
48
Other (.graphql)
34
Other (.webp)
22
SQL
19
JSON
15
Markdown
13
JavaScript
13
Other (.jpg)
13
Other (no ext)
9
Files by Type (size)
Other (.png)
3MB
Other (.webp)
2MB
TSX
2MB
JSON
2MB
TypeScript
1MB
Lock File
963KB
Other (.jpg)
585KB
Other (.woff2)
207KB
Other (.po)
180KB
Other (.pot)
113KB
SCSS
70KB
SQL
57KB

The LLM identified 6 files worth highlighting for reuse:

A generic hook for subscribing to on-chain state changes. It reads from any contract using a provided ABI and address, deeply compares the returned values to detect changes, and emits events. This solves the common dApp problem of efficiently polling blockchain state and is a highly reusable, self-contained pattern for any project interacting with smart contracts.

file: src/hooks/ContractReader/useContractReader.ts ↗ | tags: #contract-reader #blockchain #state-subscription

A standardized abstraction for sending blockchain transactions. It handles wallet connection checks, transaction construction, sending, receipt waiting, and error handling in a uniform way. This pattern is cleanly isolated and can be extracted and reused in any decentralized application to manage on-chain writes.

file: src/hooks/useTransactor.ts ↗ | tags: #transaction-abstraction #blockchain

A robust input component for formatted numbers that handles decimals, commas, and unit suffixes (e.g., ETH/wei). It solves the notoriously tricky UI problem of formatting and parsing numbers during user input without breaking cursor position. It is fully isolated and reusable in any application requiring formatted numeric input.

file: src/components/inputs/FormattedNumberInput.tsx ↗ | tags: #ui-component #input-formatting

A custom Apollo Link/utility for exhaustive GraphQL pagination using a 'deplete' pattern (fetching all pages until empty). This is a common requirement when querying blockchain subgraphs for complete historical data. It is a well-encapsulated utility that can be reused in any GraphQL-based project needing bulk data retrieval.

file: src/lib/apollo/paginateDepleteQuery.ts ↗ | tags: #graphql #pagination

A UI component for visually diffing two states of a configuration, specifically designed for funding cycle splits. It compares beneficiary, percentage, and lock duration fields and renders a clear visual diff. This is a non-trivial, reusable pattern for any application that needs to show changes in complex configuration objects.

file: src/packages/v2v3/components/shared/DiffedSplits/DiffedSplitList.tsx ↗ | tags: #diff-ui #configuration-management

Clean, well-tested utility functions for parsing beneficiary payout splits from CSV files. It handles headers, data validation, and conversion to internal data structures. This module is isolated from the rest of the codebase and can be directly reused in any project requiring CSV-based data import for structured financial or allocation data.

file: src/packages/v2v3/utils/csv.ts ↗ | tags: #csv-parsing #data-import
Last analyzed: 2026-10-26 00:22:24.379264
Next check: 2026-11-02 00:22:24.384843
$ submit: