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) │─────────────────────────────▶
└─────────────────────────┘- Create: Curator deploys a strategy with weighted allocations
- Fund: Donors send tokens directly to the strategy address (or via ENS name)
- Distribute: Anyone triggers distribution — funds route to warehouse
- Claim: Recipients withdraw from warehouse at their convenience
Value Proposition
| Stakeholder | Value |
|---|---|
| Curators | Express allocation intent on-chain. Earn fees. Build verifiable reputation. |
| Donors | Fund strategies matching your values. Full transparency. No custody risk. |
| Recipients | Receive funds from curated strategies. Pull when ready. No action required to earn. |
| Ecosystem | Auditable 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 + TurborepoQuick Links
Concepts
Mental model — strategies, warehouse, yield, ENS
Architecture
System design, capital flows, security
Requirements
EARS requirements specification
Proof of Concept
This is a proof of concept implementation. See Status & Roadmap for production considerations.