support.eth curator

Curator Studio

Permissionless, non-custodial capital allocation protocol for transparent public goods funding

Curator Studio

Curator Studio is a permissionless, non-custodial capital allocation protocol that enables curators to create and operate transparent funding strategies. Capital providers fund strategies matching their values while maintaining full visibility into allocation rules, capital flows, and curator fees.

How It Works

  Curator creates Strategy


  ┌─────────────────────────┐
  │       STRATEGY          │
  │  ┌──────────────────┐   │
  │  │ 40% → Project A  │   │         Donor funds Strategy
  │  │ 35% → Project B  │◀──────────────────────────────────
  │  │ 20% → Project C  │   │
  │  │  5% → Curator    │   │
  │  └──────────────────┘   │
  └───────────┬─────────────┘

         distribute()


  ┌─────────────────────────┐
  │      WAREHOUSE          │         Recipients withdraw
  │   (holds all funds)     │─────────────────────────────▶
  └─────────────────────────┘
  1. Create: Curator deploys a strategy with weighted allocations
  2. Fund: Donors send tokens directly to the strategy address (or via ENS name)
  3. Distribute: Anyone triggers distribution — funds route to warehouse
  4. Claim: Recipients withdraw from warehouse at their convenience

Value Proposition

StakeholderValue
CuratorsExpress allocation intent on-chain. Earn fees. Build verifiable reputation.
DonorsFund strategies matching your values. Full transparency. No custody risk.
RecipientsReceive funds from curated strategies. Pull when ready. No action required to earn.
EcosystemAuditable marketplace of funding destinations. Composable primitives.

Getting Started

SDK Setup

The SDK is tenant-scoped — it resolves the correct factory address and ENS domain from the tenant registry:

import { CuratorSDK } from "@curator-studio/sdk";

const sdk = new CuratorSDK(walletClient, { tenant: "support.eth" });

Supported chains: 31337 (Hardhat), 11155111 (Sepolia), 84532 (Base Sepolia), 1 (Mainnet — planned).

Create a Strategy

const { strategy } = await sdk.strategy.create({
  owner: "0x...",
  allocations: [
    { recipient: "0xProjectA...", weight: 40n, label: "Project A" },
    { recipient: "0xProjectB...", weight: 35n, label: "Project B" },
    { recipient: "0xProjectC...", weight: 20n, label: "Project C" },
    { recipient: "0xCurator...", weight: 5n, label: "Curator Fee" },
  ],
  metadataURI: "https://...",
  sourceStrategy: "0x0000...",
  ensLabel: "my-strategy", // optional — registers my-strategy.<tenant-ens-domain>
});

Fund and Distribute

// Anyone sends ERC-20 tokens to the strategy address
await tokenContract.transfer(strategyAddress, amount);

// Anyone triggers distribution
await sdk.strategy.distribute(strategyAddress, tokenAddress);

// Recipients withdraw from warehouse
await sdk.warehouse.withdraw(recipientAddress, tokenAddress);

React Hooks

Wrap your app with CuratorProvider, then use hooks. Available props: tenant, defaultChain, indexerUrl, uploadMetadata, and client (auto-wired from wagmi):

import { CuratorProvider, useStrategies, useCreateStrategy } from "@curator-studio/sdk";

function App() {
  return (
    <CuratorProvider
      tenant={process.env.NEXT_PUBLIC_TENANT || "support.eth"}
      indexerUrl={process.env.NEXT_PUBLIC_INDEXER_URL}
    >
      {/* ... */}
    </CuratorProvider>
  );
}

function StrategiesList() {
  const { data, isPending } = useStrategies({
    orderBy: "timesForked",
    orderDirection: "desc",
    limit: 10,
  });

  if (isPending) return <div>Loading...</div>;
  return data?.items.map(s => <div key={s.id}>{s.metadata?.title}</div>);
}

Monorepo Structure

curator/
├── apps/
│   ├── web/          # Next.js 16 frontend (@curator-studio/web)
│   └── docs/         # Fumadocs documentation site
├── packages/
│   ├── contracts/    # Solidity smart contracts — Hardhat (@curator-studio/contracts)
│   ├── indexer/      # Ponder event indexer (@curator-studio/indexer)
│   ├── sdk/          # TypeScript SDK + React hooks (@curator-studio/sdk)
│   └── ui/           # Shared Shadcn UI components (@curator-studio/ui)
└── package.json      # pnpm workspaces + Turborepo

Proof of Concept

This is a proof of concept implementation. See Status & Roadmap for production considerations.

On this page