{"count":200,"total":250,"ideas":[{"id":"83a14f4b-292e-4b61-8a70-d0220faa3243","project_id":"190fc2b4-616b-40c0-83a4-26a6dff6ff1c","title":"Cross-Chain Compound Position Aggregator & Rebalancer","pitch":"A dashboard + bot that tracks your Compound V3 positions across all 9 chains simultaneously, shows net yield after gas costs, and auto-rebalances collateral to the highest-yield chain via Across/Stargate bridges—solving the discovery and fragmentation problem created by Compound's omnichain expansion.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["Ponder indexer to sync Compound V3 events across all 9 chains","Across or Stargate bridge SDK for gas-efficient rebalancing","wagmi + viem for multi-chain wallet reads","Privy for auth so users can save preferences without a backend","Keeper bot (Gelato or simple scheduled task) to auto-execute rebalancing"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-07T16:37:09.200125+00:00","metadata":{},"source":"auto-generated","why_now":"Compound's simultaneous expansion to 9 chains creates immediate fragmentation: users can't easily see which chain to supply on, and moving collateral is manual and expensive. This tool directly addresses the UX debt created by omnichain saturation.","source_signal_ids":["4bbf3063-cb0b-4620-8c90-d17c8c2ac8f7"],"published_at":"2026-06-07T16:37:08.883+00:00","summary":"Compound V3 now lives on 9 chains, but users have no unified way to see their total exposure, compare yields across chains, or move collateral efficiently. This tool aggregates on-chain data via Ponder (or The Graph), calculates net APY accounting for gas and bridge fees, and provides a rebalancing UI + optional keeper bot that moves collateral to whichever Compound instance offers the best risk-adjusted return. Targets power users and protocols managing treasury across multiple chains.","learn_first":["Compound V3 architecture (collateral, base token, interest rate model)","ERC-20 bridge mechanics and slippage","Gas optimization for multi-chain queries"],"tech_stack":{"ai":[],"data":["Ponder","Across API","Stargate API"],"infra":["Vercel","Gelato (optional keeper)"],"other":["Across bridge SDK","Stargate SDK"],"wallet":["Privy","RainbowKit"],"indexer":["Ponder","The Graph"],"frontend":["Next.js","wagmi","viem","RainbowKit"],"contracts":["Compound V3 (no new contracts needed, just read-only)"]},"build_steps":["Set up Ponder project with Compound V3 ABI; sync Supply, Withdraw, Absorb events from all 9 chains","Create TypeScript data layer to fetch user positions, collateral balances, and current interest rates per chain","Build yield calculator: APY per chain minus gas cost (use historical gas prices) and bridge fee (from Across/Stargate APIs)","Design React dashboard: positions table (chain, asset, amount, APY, gas cost), rebalancing recommendation card","Integrate Across or Stargate SDK into a 'Rebalance' flow: user selects source chain, target chain, amount; preview final balance and net APY gain","(Optional) Deploy a Gelato task that runs daily, checks all user positions, and auto-triggers rebalancing if spread > threshold","Test on testnet across all 9 chains; verify bridge mechanics and slippage handling"],"gotchas":["Compound V3 has different base tokens per chain (USDC on Ethereum, USDC.e on Arbitrum, etc.)—normalize in UI","Gas prices vary wildly; use 7-day average, not spot price, for yield calculations","Bridge slippage can exceed 1% on large moves; include slippage tolerance in rebalancing logic","Across and Stargate have different fee models; build abstraction layer to compare both","RPC rate limits: use Ponder to batch queries, avoid spamming individual chain RPCs"],"references":[{"url":"https://docs.compound.finance","kind":"docs","label":"Compound V3 Docs"},{"url":"https://github.com/compound-finance/comet","kind":"repo","label":"Compound V3 GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Docs"},{"url":"https://docs.across.to","kind":"docs","label":"Across Bridge Docs"},{"url":"https://stargate.finance/docs","kind":"docs","label":"Stargate Docs"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Docs"}],"time_estimate_hours":80,"projects":{"slug":"compound"},"project_slug":"compound","project":{"slug":"compound","name":"Compound V3","logo_url":"https://icons.llamao.fi/icons/protocols/compound-v3?w=64&h=64","category":"lending"}},{"id":"dfc27f21-a6c0-4c63-82c7-4322964e7db8","project_id":"b8673760-f0cf-42f0-9d57-66512c094217","title":"Pendle Maturity Risk Monitor & Notification Engine","pitch":"A background service that tracks PT/YT expiration dates across all Pendle chains, alerts users before their positions decay, and suggests automated roll-forward strategies to extend yield exposure.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["Pendle maturity schedules","portfolio tracking","push notifications"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-07T16:32:02.572668+00:00","metadata":{},"source":"auto-generated","why_now":"As Pendle saturates 11 chains, users now hold fragmented PT/YT positions across multiple networks with different maturity dates. Without tooling, they miss expiry deadlines and suffer avoidable losses. Early builders who solve this notification problem become essential infrastructure for Pendle's user base. This also differentiates from generic portfolio trackers by being Pendle-specific and maturity-aware.","source_signal_ids":["b05f24c9-0259-40b7-8397-909bd421efa4"],"published_at":"2026-06-07T16:32:01.808+00:00","summary":"Pendle's PT/YT tokens have fixed maturity dates (e.g., 6 months, 1 year). As positions approach expiry, PT value converges to the underlying asset and YT value approaches zero—a cliff that catches passive holders off-guard. This tool indexes all Pendle pools across 11 chains, calculates days-to-maturity for each PT/YT pair, and sends push notifications when a user's position is 2–4 weeks from expiry. The service also suggests roll-forward strategies: swap expiring PT/YT for fresh ones on the same chain (low cost) or bridge to a chain with higher APY on longer-dated tranches. A dashboard shows portfolio heat map (green = safe, red = expiring soon) and historical decay curves to educate users.","learn_first":["Pendle's PT/YT maturity mechanics and how to read pool metadata","ERC-1155 or ERC-721 standards (Pendle uses custom token patterns)","Push notification infrastructure (Firebase Cloud Messaging or Ably)"],"tech_stack":{"ai":[],"data":["Pendle subgraph for pool metadata (maturity dates, underlying assets)","CoinGecko API for underlying asset prices"],"infra":["Firebase Cloud Functions or Vercel cron for daily maturity checks","Firebase Cloud Messaging (FCM) or Ably for push notifications","Supabase for storing user preferences and notification history"],"other":["Etherscan or Blockscout APIs for historical swap data (optional, for decay pattern analysis)"],"wallet":["Privy for optional portfolio tracking (users can opt-in to connect wallet)"],"indexer":["Ponder for real-time event tracking of Pendle's MaturityUpdated or PoolCreated events","or The Graph subgraph filtering pools by expiration timestamp"],"frontend":["React + D3.js or Recharts for decay curve visualization","wagmi for balance queries across chains"],"contracts":[]},"build_steps":["Index all Pendle pools across 11 chains using Ponder or Graph; extract maturity dates and underlying asset info from pool metadata","Build backend cron job (runs daily) that queries user portfolios (via RPC balance checks or optional wallet connection) and calculates days-to-maturity for each position","Set up push notification triggers: if days-to-maturity < 28, send alert with roll-forward recommendation (e.g., 'Your ETH PT expires in 3 weeks; 1-year PT on Arbitrum offers 6.2% APY')","Create React dashboard showing portfolio heat map, maturity calendar, and decay curves for each position; use Recharts for visualization","Integrate Privy for optional wallet connection; users can opt-in to automatic portfolio tracking without custody risk","Add roll-forward suggestion engine: query Pendle's router for best swap paths (same chain or cross-chain) and estimate gas/bridge costs","Deploy backend on Vercel or Railway; set up Firebase FCM for push notifications; test on testnet first"],"gotchas":["Maturity dates are pool-specific, not standardized: each Pendle pool has its own expiry; you must index pool creation events to track all active maturities","PT/YT decay is non-linear near expiry: YT can lose 50% of value in the final week; emphasize urgency in alerts","Users may hold PT/YT in multiple wallets or via liquidity pools (LP tokens); balance queries must account for nested positions, not just direct holdings","Cross-chain roll-forward suggestions require real-time bridge fee data; a 0.5% bridge fee can eliminate the APY advantage of moving to a higher-yield chain","Push notification fatigue: if a user holds 20 positions, sending 20 alerts can overwhelm them; batch alerts or use a digest format instead"],"references":[{"url":"https://docs.pendle.finance","kind":"docs","label":"Pendle Finance Docs"},{"url":"https://github.com/pendle-finance","kind":"repo","label":"Pendle GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Documentation"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph","kind":"docs","label":"The Graph Query API"},{"url":"https://firebase.google.com/docs/cloud-messaging","kind":"docs","label":"Firebase Cloud Messaging"},{"url":"https://ably.com/documentation","kind":"docs","label":"Ably Real-Time Messaging"},{"url":"https://recharts.org","kind":"docs","label":"Recharts Documentation"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"}],"time_estimate_hours":60,"projects":{"slug":"pendle"},"project_slug":"pendle","project":{"slug":"pendle","name":"Pendle","logo_url":"https://icons.llamao.fi/icons/protocols/pendle?w=64&h=64","category":"yield"}},{"id":"b7cd9bf3-c9c7-4afe-9672-d7a5f77c8d04","project_id":"d80a811a-f90b-4813-a751-23f2cce21cda","title":"Pyth Confidence-Weighted Order Router for DEX Aggregation","pitch":"A smart order router that splits trades across multiple DEXs and chains based on Pyth price feed confidence intervals, minimizing slippage risk and execution uncertainty—especially useful on new, thin-liquidity chains like Plume.","difficulty":"1-2 weeks","use_case":"trading","build_with":["Pyth SDK","0x Protocol","Lido/Aave-style swap router contract","Ponder for indexing liquidity"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T14:48:52.383798+00:00","metadata":{},"source":"auto-generated","why_now":"Plume and other new chains have thin liquidity and unreliable price feeds. Traders moving to these chains need smarter execution logic that accounts for oracle uncertainty. This tool turns Pyth's confidence intervals into a competitive edge for execution.","source_signal_ids":["fe1df875-f43b-4ba4-8307-18174e4e7903"],"published_at":"2026-06-05T14:48:51.856+00:00","summary":"Most DEX routers (1inch, 0x) optimize for price alone, ignoring oracle confidence. This tool ingests Pyth feeds across chains, calculates confidence-weighted spreads, and routes orders to the DEX/chain combination that offers the best risk-adjusted execution. Example: if ETH/USD on Plume has 5% confidence interval vs. 0.1% on Ethereum, the router deprioritizes Plume unless the price improvement exceeds the confidence penalty. Includes a smart contract (ERC-7412 style) that pulls Pyth prices on-chain and a backend service that pre-computes optimal routes every block.","learn_first":["ERC-7412 oracle integration pattern","0x Protocol swap API and smart order routing","Pyth confidence interval semantics","slippage modeling and risk-adjusted execution"],"tech_stack":{"ai":[],"data":["Pyth SDK for price + confidence","0x API for swap quotes","Uniswap Subgraph or Ponder for liquidity snapshots"],"infra":["Vercel for backend API","Chainlink Automation (optional) to trigger route updates"],"other":["ethers.js or viem for contract interaction"],"wallet":["RainbowKit for wallet connection"],"indexer":["Ponder to track Pyth feed updates and DEX liquidity pools (Uniswap V3, Curve, etc.)"],"frontend":["React + wagmi for order entry UI, showing confidence-adjusted slippage estimates"],"contracts":["Custom swap router (Solidity) that calls PythOracle.getPrice() and validates confidence before executing swaps","Optional: ERC-7412 wrapper for async price pulls"]},"build_steps":["Define confidence-weighting formula: slippage_penalty = base_slippage + (confidence_interval_bps * weight_factor); e.g., 5% confidence = +50 bps penalty","Build Solidity swap router: inherit from Uniswap V3 SwapRouter, override swap() to pull Pyth price via PythOracle.getPrice(), validate confidence >= threshold","Create Ponder indexer: sync Pyth PriceFeedUpdated events and Uniswap V3 Swap events across all supported chains; compute confidence-weighted best execution price every block","Build backend route optimizer: for each incoming swap request, query indexer for all available DEX/chain pairs, apply confidence penalty formula, rank by risk-adjusted return","Implement 0x integration: call 0x API to get swap quotes for top-ranked routes, compare slippage vs. confidence penalty","Create React UI: input token amount, show list of routes ranked by \"confidence-adjusted slippage\", display Pyth confidence interval for each chain","Add on-chain price validation: before executing swap, pull Pyth price on-chain, verify it's fresh (< 60s old) and confidence is acceptable","Deploy swap router contract to Ethereum, Arbitrum, Base, Plume; set contract addresses in UI","Test with real swaps on testnet; measure actual slippage vs. predicted confidence-adjusted slippage"],"gotchas":["Pyth confidence intervals are static per feed, not dynamic per market condition; don't over-weight them—use as a risk signal, not a guarantee","0x API may not support all new chains (e.g., Plume); fall back to direct Uniswap V3 quotes or build a simple AMM router","On-chain Pyth price pulls are expensive (~10k gas); batch multiple feeds in a single call using PythOracle.getPrices() if available","Liquidity on new chains like Plume is sparse; confidence intervals will be wide, and your router may deprioritize them entirely—communicate this clearly in the UI","Slippage estimates from 0x API are point-in-time; by the time the user signs, market has moved—add a 0.5–1% buffer and allow user to set max slippage"],"references":[{"url":"https://docs.pyth.network/price-feeds","kind":"docs","label":"Pyth Price Feeds Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-7412","kind":"docs","label":"ERC-7412 Oracle Integration"},{"url":"https://0x.org/docs/api","kind":"docs","label":"0x API Documentation"},{"url":"https://github.com/Uniswap/smart-order-router","kind":"repo","label":"Uniswap V3 Smart Router"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer"}],"time_estimate_hours":100,"projects":{"slug":"pyth"},"project_slug":"pyth","project":{"slug":"pyth","name":"Pyth Network","logo_url":"https://icons.llamao.fi/icons/protocols/pyth-network?w=64&h=64","category":"oracles"}},{"id":"b6bee2ee-c0cd-442b-a445-7c9b8e1f6da7","project_id":"84eeb3ad-a59c-4b85-bd63-850b016524f4","title":"Cross-Chain Risk Monitor Dashboard","pitch":"Real-time monitoring and alerting system for cross-chain bridge operations, tracking VAA (Verified Action Approval) latency, transaction costs, liquidity depth, and validator set health across all Wormhole-connected chains.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["Wormhole Guardian API","Ponder indexer","Real-time alerting"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T14:12:46.245596+00:00","metadata":{},"source":"auto-generated","why_now":"ETHGlobal Bangkok winner proved demand; bridge operators now need production-grade monitoring as cross-chain volume grows. Wormhole's 30+ chain support creates data surface no single-chain tool can match.","source_signal_ids":["d7ac3e19-44dd-4b1f-bb3e-23e88dfbd78c"],"published_at":"2026-06-05T14:12:46.129+00:00","summary":"A polished dashboard that ingests Wormhole Guardian metrics, on-chain liquidity snapshots, and historical VAA finality data to surface operational risks before they impact users. Builders can query Guardian API for pending VAAs, subscribe to on-chain events via Ponder indexer, and alert when bridge health degrades (e.g., >50% validator downtime, >30s VAA latency, liquidity below threshold). Target users: bridge operators, LP managers, risk teams at trading firms.","learn_first":["Wormhole VAA lifecycle","Guardian validator consensus","Cross-chain liquidity mechanics"],"tech_stack":{"ai":[],"data":["PostgreSQL","Redis"],"infra":["Vercel","Fly.io"],"other":["Wormhole Guardian API","Socket.dev for bridge comparison"],"wallet":[],"indexer":["Ponder"],"frontend":["Next.js","TailwindCSS","Recharts"],"contracts":[]},"build_steps":["Set up Ponder indexer to track Wormhole Core contract events (LogMessagePublished, LogTokenTransfer) across 3-4 chains","Query Wormhole Guardian REST API (https://api.wormholescan.io) to fetch VAA finality times and validator signatures","Build Postgres schema: vaa_metrics (timestamp, chain, latency_ms, validator_count, cost_usd), liquidity_snapshots (chain, token, available_amount, slippage_1m)","Create Next.js dashboard with real-time charts: VAA latency heatmap by chain, liquidity depth by asset, validator uptime SLA tracker","Implement alert engine: Slack/Discord webhooks when latency >30s, liquidity <$100k, or >2 validators offline","Add historical drill-down: show VAA traces, cost breakdown per hop, validator signatures"],"gotchas":["Guardian API rate limits (~100 req/min); cache aggressively","VAA finality varies by chain (Solana ~400ms, Ethereum ~15s); normalize in UI","Liquidity pools on Wormhole Portal may not reflect true available depth; cross-check with on-chain balances","Validator set changes require re-indexing; subscribe to SetupComplete events"],"references":[{"url":"https://docs.wormhole.com/wormhole/reference/api","kind":"docs","label":"Wormhole Guardian API"},{"url":"https://github.com/wormhole-foundation/wormhole/blob/main/ethereum/contracts/core/Wormhole.sol","kind":"repo","label":"Wormhole Core Contract Events"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://api.wormholescan.io","kind":"tool","label":"Wormholescan API"},{"url":"https://socket.tech","kind":"tool","label":"Socket Bridge Aggregator"}],"time_estimate_hours":80,"projects":{"slug":"wormhole"},"project_slug":"wormhole","project":{"slug":"wormhole","name":"Wormhole","logo_url":"https://icons.llamao.fi/icons/protocols/wormhole?w=64&h=64","category":"bridges"}},{"id":"6cd0c2de-5f09-45cc-852a-fa35b787c3aa","project_id":"1279320e-12cf-4287-b3e7-3839b903fe7a","title":"USDM Yield Optimizer with Dynamic Rebalancing","pitch":"A smart contract + frontend that automatically compounds USDM yield and rebalances across multiple Treasury-backing strategies, letting users set risk/return preferences and earn optimal yields without manual intervention.","difficulty":"1-2 weeks","use_case":"yield","build_with":["USDM protocol","ERC-4626 standard","Chainlink price feeds","Foundry","viem","The Graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T14:11:11.790643+00:00","metadata":{},"source":"auto-generated","why_now":"ETHGlobal Bangkok winner proved market demand for USDM automation; Treasury yields remain volatile in 2026, creating arbitrage opportunities. Yield-bearing stablecoins are competing on APY — a polished optimizer differentiates USDM from USDC and USDT equivalents.","source_signal_ids":["a1fcf015-8311-429f-9d87-2e4b3d4cd424"],"published_at":"2026-06-05T14:11:11.66+00:00","summary":"Build an ERC-4626 tokenized vault that wraps USDM, monitors underlying Treasury yield rates via Chainlink oracles, and automatically rebalances collateral exposure when yield curves shift. Users deposit USDM and receive receipt tokens earning compounded yield. The vault includes governance-gated strategy switches and emergency pause mechanisms for when Treasury rates invert.","learn_first":["ERC-4626 vault architecture","Chainlink oracle integration","Treasury yield curve mechanics","Solidity reentrancy guards"],"tech_stack":{"ai":[],"data":["Chainlink oracle feeds","USDM contract events"],"infra":["Foundry for testing","Hardhat for deployment"],"other":["OpenZeppelin Defender for monitoring"],"wallet":["RainbowKit","Privy"],"indexer":["The Graph (subgraph for vault deposits/withdrawals)","Ponder for real-time events"],"frontend":["Next.js","wagmi","viem","TailwindCSS","RainbowKit"],"contracts":["Solidity 0.8.20+","OpenZeppelin ERC4626","Chainlink AggregatorV3Interface"]},"build_steps":["1. Write ERC-4626 vault contract that accepts USDM deposits and mints receipt tokens","2. Integrate Chainlink AggregatorV3 to fetch real-time Treasury yield rates (e.g., 3m, 10y bonds)","3. Implement automated rebalancing logic: when yield spread > threshold, trigger strategy swap via permissionless keeper or time-lock","4. Add governance module (e.g., Compound Governor) for strategy whitelisting and parameter tuning","5. Deploy test suite in Foundry covering edge cases (oracle staleness, slippage, reentrancy)","6. Build Next.js frontend with wagmi hooks for deposit/withdrawal, real-time APY display, and strategy selector","7. Create subgraph to index vault events and compute user yield accrual","8. Deploy to Ethereum mainnet, then Base and Polygon with separate vault instances","9. Add emergency pause mechanism callable only by multisig"],"gotchas":["Chainlink feeds for Treasury yields may have longer heartbeats (e.g., 24h) — cache locally and validate freshness before rebalance","USDM redemption mechanics: confirm if there are withdrawal fees or lock periods that affect rebalancing efficiency","ERC-4626 rounding: always round down on mints, up on burns to prevent vault insolvency","Cross-chain deployment: each chain's USDM instance may have different backing ratios — monitor via separate oracles","Keeper economics: rebalance transactions cost gas; only trigger when yield improvement > gas cost + keeper fee"],"references":[{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626: Tokenized Vault Standard"},{"url":"https://docs.openzeppelin.com/contracts/4.x/erc4626","kind":"docs","label":"OpenZeppelin ERC4626 Implementation"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Data Feeds Documentation"},{"url":"https://docs.mountainprotocol.com","kind":"docs","label":"Mountain Protocol Docs"},{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Book"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Docs"},{"url":"https://wagmi.sh/react/hooks/useContractRead","kind":"docs","label":"wagmi Hooks Reference"}],"time_estimate_hours":80,"projects":{"slug":"mountain"},"project_slug":"mountain","project":{"slug":"mountain","name":"Mountain Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/mountain-protocol?w=64&h=64","category":"stablecoins"}},{"id":"6f10ca0d-72c4-463e-b64b-c6405258bc43","project_id":"8e0ffe99-b4ab-4158-a6ce-90c2b945ad48","title":"Pool Health Dashboard with Real-time Covenant Monitoring","pitch":"A public dashboard that tracks Centrifuge pool health metrics (NAV, reserve ratios, covenant compliance) and alerts originators/investors when covenant thresholds approach breach, using the v2 SDK for live on-chain state.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["Centrifuge v2 SDK","Real-time pool state indexing","Alert system for covenant drift"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:44:39.233513+00:00","metadata":{},"source":"auto-generated","why_now":"v2 SDK just shipped with type-safe pool interactions—first movers haven't built dashboards yet. Originators and LPs need visibility into covenant health as pools scale; this is a clear product gap.","source_signal_ids":["0bbe02bb-5c8c-44b7-983a-93a74b096d01"],"published_at":"2026-06-05T13:44:39.077+00:00","summary":"Build a monitoring dashboard that consumes Centrifuge pool data via the v2 SDK and surfaces key health indicators: net asset value, reserve buffers, loan-to-value ratios, and covenant compliance status. Include webhook/email alerts when pools drift toward critical thresholds (e.g., reserve ratio drops below 10%). Target originators managing multiple pools and institutional investors needing early warning on portfolio risk.","learn_first":["Centrifuge pool architecture and covenant mechanics","ERC-4626 vault semantics (Centrifuge uses this pattern)","Webhook/alert service design"],"tech_stack":{"ai":[],"data":["Centrifuge on-chain pool events","Subgraph or Ponder index for covenant history"],"infra":["Node.js backend for alert logic","Upstash or similar for webhook delivery","Vercel or Railway for hosting"],"other":["Sendgrid or Twilio for email/SMS alerts"],"wallet":[],"indexer":["Ponder or The Graph (for historical covenant events)","Centrifuge v2 SDK for real-time queries"],"frontend":["React + TypeScript","TanStack Query for pool state polling","Recharts for NAV and ratio visualization"],"contracts":["ERC-4626 (read-only via SDK)"]},"build_steps":["1. Set up Centrifuge v2 SDK in a Node backend; authenticate with a read-only RPC endpoint (Ethereum, Base, or Arbitrum)","2. Query active pools and their covenant parameters using SDK methods (pool.getPoolData, pool.getCovenants)","3. Build a Ponder indexer to track historical covenant events and pool state changes","4. Create React dashboard with real-time pool cards showing NAV, reserve ratio, and covenant status","5. Implement alert threshold logic: if reserve ratio < threshold OR NAV drawdown > X%, trigger webhook","6. Add email/Slack notification delivery via Sendgrid + Twilio","7. Deploy backend on Railway/Render, frontend on Vercel; set up monitoring"],"gotchas":["Covenant definitions vary by pool; you'll need to parse pool-specific covenant structs from the SDK—don't assume all pools have identical thresholds","RPC rate limits on Ethereum mainnet; use Alchemy or Infura with higher tier for frequent polling","Centrifuge pool state updates are on-chain but may take 1-2 blocks to finalize; account for reorg risk if alerting on near-threshold values","v2 SDK is new; check GitHub issues and Discord for undocumented quirks around batch transactions or pool state queries"],"references":[{"url":"https://docs.centrifuge.io","kind":"docs","label":"Centrifuge v2 SDK Docs"},{"url":"https://github.com/centrifuge","kind":"repo","label":"Centrifuge GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://tanstack.com/query/latest","kind":"docs","label":"TanStack Query (React Data Fetching)"}],"time_estimate_hours":80,"projects":{"slug":"centrifuge"},"project_slug":"centrifuge","project":{"slug":"centrifuge","name":"Centrifuge","logo_url":"https://icons.llamao.fi/icons/protocols/centrifuge?w=64&h=64","category":"rwa"}},{"id":"72cf7708-8d99-4805-9a44-255ca91eadd7","project_id":"efb2d143-f11c-4948-b15c-21e69b9a1e01","title":"Auto-Rebalance Vault","pitch":"Vault that maintains target leverage via Spiral, deleveraging when borrow rates spike past a threshold.","difficulty":"1+ month","use_case":"automation","build_with":["foundry","gelato","morpho-sdk"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:37.842798+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an ERC-4626 vault that deposits user funds into Morpho isolated markets through Spiral Stake's leverage looping. The vault automatically monitors borrow rates and executes deleveraging transactions when rates exceed a configurable threshold, protecting LPs from rate spikes while maintaining optimal leverage. This combines Morpho's isolated market efficiency with Spiral's one-click looping and Gelato's automation to create a hands-off yield strategy.","learn_first":["ERC-4626 vault standard","Morpho isolated markets architecture","Spiral Stake leverage looping mechanics","Gelato automation triggers and tasks","Interest rate monitoring patterns"],"tech_stack":{"data":["Morpho API for rate feeds","Chainlink price oracles"],"infra":["Gelato Web3 Functions","Foundry for testing","Hardhat for deployment"],"other":["OpenZeppelin Contracts"],"wallet":["RainbowKit","Privy"],"indexer":["Ponder","The Graph"],"frontend":["wagmi","viem","ethers.js"],"contracts":["Solidity 0.8.20+","ERC-4626","Morpho Blue (isolated markets)","Spiral Stake router"]},"build_steps":["Scaffold ERC-4626 vault contract inheriting from OpenZeppelin's ERC4626 with Morpho Blue integration","Integrate Spiral Stake's leverage router to execute one-click looping on deposit, storing position metadata (collateral amount, target leverage)","Implement borrow rate monitoring: fetch current rates from Morpho's oracle, store historical rates, and calculate rate deltas","Create a Gelato Web3 Function that triggers when borrow rates exceed your threshold (e.g., 15% APY), calling a deleverage function","Build the deleverage function to unwind Spiral positions proportionally, repay debt, and return excess collateral to the vault","Write comprehensive Foundry tests covering deposit/withdraw flows, rate threshold triggers, and edge cases (liquidation risk, slippage)","Deploy to Ethereum mainnet with Foundry, register Gelato automation task, and set initial threshold parameters","Build a minimal frontend (React + wagmi) showing vault TVL, current leverage, borrow rate, and manual deleverage button as fallback"],"gotchas":["Spiral's leverage looping may have slippage or flash loan fees—test with realistic amounts and account for 0.5–1% loss on entry/exit","Morpho isolated markets have per-market liquidity limits; monitor available liquidity to avoid failed deleverage calls during rate spikes","Gelato Web3 Functions have gas limits (~5M); complex deleverage transactions may fail—break into smaller steps or use Gelato's relayer for higher limits","Borrow rates can spike faster than Gelato's block-based triggers; add a buffer (e.g., trigger at 80% of threshold) to avoid liquidation races","ERC-4626 share pricing must account for accrued interest and debt; use snapshots to prevent donation attacks or rounding exploits"],"references":[{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://docs.morpho.org","kind":"docs","label":"Morpho Blue Documentation"},{"url":"https://docs.spiralstake.xyz","kind":"docs","label":"Spiral Stake Docs"},{"url":"https://docs.gelato.network/web3-functions/overview","kind":"docs","label":"Gelato Web3 Functions"},{"url":"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC4626.sol","kind":"repo","label":"OpenZeppelin ERC-4626 Implementation"},{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Book"}],"time_estimate_hours":160,"projects":{"slug":"spiral-stake"},"project_slug":"spiral-stake","project":{"slug":"spiral-stake","name":"Spiral Stake","logo_url":"https://icons.llamao.fi/icons/protocols/spiral-stake?w=64&h=64","category":"infra"}},{"id":"0622598b-c019-44cc-a4e0-322b42b109b6","project_id":"efb2d143-f11c-4948-b15c-21e69b9a1e01","title":"Plain-English Loop Coach","pitch":"AI agent that takes 'I have 10 ETH, conservative' and recommends a specific Spiral strategy with reasoning.","difficulty":"weekend","use_case":"onboarding","build_with":["openrouter","nextjs","spiral-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:36.446401+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A conversational AI assistant that guides users through Spiral Stake's leverage looping strategies by translating natural language risk profiles into concrete, executable positions on Morpho isolated markets. The agent asks clarifying questions about capital, risk tolerance, and time horizon, then returns a specific strategy recommendation with APY estimates, liquidation price, and step-by-step execution instructions. Deployed as a Next.js web app, it uses an LLM (via OpenRouter) to reason about leverage ratios, collateral choices, and market conditions, then validates recommendations against live Spiral API data before presenting them to the user.","learn_first":["Morpho isolated markets architecture","ERC-4626 vault mechanics","Leverage looping mechanics and liquidation risk","LLM prompt engineering for financial reasoning"],"tech_stack":{"data":["OpenRouter API (Claude or similar)","Spiral Stake API"],"infra":["Vercel","ethers.js for RPC calls"],"wallet":["viem","wagmi","RainbowKit"],"frontend":["Next.js","React","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js app with TypeScript and RainbowKit wallet integration","Create a multi-turn conversation component that collects: capital amount, risk tolerance (conservative/moderate/aggressive), time horizon, and existing positions","Write a system prompt for the LLM that includes Morpho market parameters, Spiral strategy templates, and liquidation math; test locally with hardcoded examples","Integrate OpenRouter API to call Claude with the user's profile and current market data from Spiral API","Fetch live Spiral market data (available collateral, borrow rates, liquidation thresholds) and pass it to the LLM context","Implement a recommendation parser that extracts: strategy name, suggested leverage ratio, collateral asset, expected APY, liquidation price, and execution steps","Add a read-only preview that shows the position breakdown (collateral, borrowed amount, fees) before the user connects wallet","Deploy to Vercel and test end-to-end with a few real user profiles"],"gotchas":["LLM hallucination on liquidation prices: always validate the math server-side against live Spiral API data, not just the LLM's output","Morpho isolated markets have different risk profiles per market; the LLM needs up-to-date market list and parameters in its context, or it will recommend non-existent markets","Rate-limiting on OpenRouter and Spiral API: implement request caching and backoff; a single user conversation can trigger 3–5 API calls","Leverage looping compounds slippage and gas costs; the LLM should account for these in APY estimates, or users will see worse-than-expected returns","Users may not understand liquidation risk; add a simple liquidation price calculator and a 'what if prices drop X%' scenario tool to the UI"],"references":[{"url":"https://docs.morpho.org/","kind":"docs","label":"Morpho Isolated Markets Docs"},{"url":"https://docs.spiralstake.xyz","kind":"docs","label":"Spiral Stake API Documentation"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Reference"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://mirror.xyz/0x0000000000000000000000000000000000000000","kind":"article","label":"Leverage Looping Mechanics Explainer"}],"time_estimate_hours":16,"projects":{"slug":"spiral-stake"},"project_slug":"spiral-stake","project":{"slug":"spiral-stake","name":"Spiral Stake","logo_url":"https://icons.llamao.fi/icons/protocols/spiral-stake?w=64&h=64","category":"infra"}},{"id":"d6c1afac-43d9-474d-9460-bcab52849cdd","project_id":"efb2d143-f11c-4948-b15c-21e69b9a1e01","title":"Loop Position Health Monitor","pitch":"Connect wallet → find every Spiral/Contango/Gearbox loop → real-time net APR, distance to liquidation, sensitivity to depeg.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","viem","openrouter","ponder"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:31.637703+00:00","metadata":{},"source":"curated","why_now":"Leverage looping protocols (Spiral, Contango, Gearbox) are live and accumulating TVL on Ethereum; users managing multi-protocol leverage exposure face liquidation risk across fragmented dashboards. A unified health monitor reduces cascading liquidations and improves capital efficiency for sophisticated users.","source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that aggregates leverage loop positions across Spiral Stake, Contango, and Gearbox on Ethereum. Users connect their wallet and see all active looping positions with calculated net APR (accounting for borrow costs), liquidation distance in USD and percentage terms, and sensitivity metrics to underlying collateral depeg events. The app queries on-chain position data via The Graph or Ponder, calculates risk metrics using Morpho and Aave oracle prices, and surfaces alerts when positions drift into danger zones. Built for power users managing multi-protocol leverage exposure who need a single pane of glass to avoid cascading liquidations.","learn_first":["ERC-4626 vault mechanics and share pricing","Morpho isolated markets collateral and borrow accounting","Liquidation threshold and LTV concepts in lending protocols","Real-time price feed patterns (Chainlink, Morpho oracle)","Position tracking via subgraph queries vs. direct RPC calls"],"tech_stack":{"ai":["OpenRouter (optional: natural language risk summaries)"],"data":["Morpho oracle (IRM pricing)","Chainlink price feeds (collateral/debt pricing)","Ponder or The Graph for historical position snapshots"],"infra":["Alchemy or Infura RPC (Ethereum mainnet)","Vercel (Next.js hosting)"],"other":["Ethers.js (fallback contract interactions)"],"wallet":["Viem + Wagmi hooks","RainbowKit or Privy"],"indexer":["Ponder (lightweight indexer for Morpho events)","The Graph (existing subgraphs for Aave/Morpho)"],"frontend":["Next.js 14+ (App Router)","Viem (wallet connection + contract reads)","RainbowKit or Privy (wallet UI)","TailwindCSS","Recharts or Tremor (real-time charts)"],"contracts":["Morpho (isolated markets)","Spiral Stake looping contracts","Contango leverage protocol","Gearbox leverage protocol"]},"build_steps":["Scaffold Next.js 14 app with Viem + RainbowKit; set up wallet connection flow and store connected address in React context.","Index Morpho isolated market events (Borrow, Repay, Liquidate, Supply, Withdraw) using Ponder or query existing The Graph subgraph for Morpho; store position snapshots in a local database or cache.","Build contract reader module: create Viem multicall to fetch all active positions for the connected wallet across Morpho isolated markets, Spiral Stake vaults, Contango, and Gearbox; decode position structs to extract collateral amount, debt amount, and collateral token.","Implement oracle price fetcher: call Morpho's IRM oracle and Chainlink price feeds to get real-time collateral and debt token prices; cache results with 1-minute TTL.","Calculate risk metrics: net APR = (collateral yield - borrow rate) / collateral value; liquidation distance = (collateral value - debt value) / debt value; depeg sensitivity = % change in collateral price needed to trigger liquidation.","Build dashboard UI: display positions in a table with columns for protocol, collateral, debt, net APR, liquidation distance %, and liquidation price; use Recharts for APR and risk trend sparklines.","Add real-time alerts: set thresholds (e.g., liquidation distance < 10%, net APR < 0); poll risk metrics every 30 seconds and emit browser notifications or email alerts via a simple backend endpoint.","Deploy to Vercel; test with a few known looping positions on Ethereum mainnet; validate calculations against Morpho UI and Spiral Stake dashboard."],"gotchas":["Morpho isolated markets have per-market oracles and IRMs; you must fetch the correct oracle address for each market from the MarketsCreated event or Morpho's registry contract—hardcoding breaks when new markets launch.","Liquidation thresholds vary by collateral type and market; some markets use Chainlink feeds with staleness checks, others use TWAP; query the market's oracle configuration to get accurate liquidation LTV.","Spiral Stake and Contango may wrap Morpho positions in their own vault tokens; you need to trace through the vault's share price (ERC-4626 convertToAssets) to get the underlying Morpho position, not just the vault balance.","Real-time price feeds can lag or spike; use a 5-minute TWAP or median of multiple oracle sources to avoid false liquidation alerts; Morpho's oracle already does this, but Chainlink feeds may not.","The Graph subgraphs for Morpho may have indexing delays (5–30 seconds); for critical liquidation distance calculations, supplement with direct RPC calls to the Morpho contract's positionSupplyShares and positionBorrowShares functions."],"references":[{"url":"https://docs.morpho.org/","kind":"docs","label":"Morpho Isolated Markets Documentation"},{"url":"https://github.com/morpho-org/morpho-blue","kind":"repo","label":"Morpho GitHub (Blue Vault + IRM Oracle)"},{"url":"https://docs.spiralstake.xyz","kind":"docs","label":"Spiral Stake Documentation"},{"url":"https://docs.contango.xyz","kind":"docs","label":"Contango Protocol Docs"},{"url":"https://docs.gearbox.finance","kind":"docs","label":"Gearbox Leverage Protocol"},{"url":"https://thegraph.com/explorer/subgraphs","kind":"tool","label":"The Graph Subgraph for Morpho"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard (EIP-4626)"}],"time_estimate_hours":80,"projects":{"slug":"spiral-stake"},"project_slug":"spiral-stake","project":{"slug":"spiral-stake","name":"Spiral Stake","logo_url":"https://icons.llamao.fi/icons/protocols/spiral-stake?w=64&h=64","category":"infra"}},{"id":"1d75586d-7586-4ceb-8f7b-2eb8b4e87fb6","project_id":"efb2d143-f11c-4948-b15c-21e69b9a1e01","title":"Loop Strategy Comparator","pitch":"Ranks all 250+ loops across Spiral and peers by risk-adjusted yield. Tells you which loop wins for your size.","difficulty":"1-2 weeks","use_case":"yield","build_with":["nextjs","defillama-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:30.619377+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A comparative dashboard that aggregates leverage loop strategies from Morpho isolated markets (via Spiral Stake) and competing protocols, scoring each by Sharpe ratio, liquidation distance, and APY efficiency per dollar deployed. Users input their capital size and risk tolerance; the tool surfaces the optimal loop—accounting for gas costs, slippage, and market depth—so they can execute with confidence rather than guessing between 50+ similar-looking opportunities.","learn_first":["Morpho isolated markets architecture","ERC-4626 vault mechanics","Sharpe ratio and risk-adjusted return calculation","Liquidation LTV and health factor math"],"tech_stack":{"data":["DefiLlama API (TVL, historical yields)","Morpho API (market rates, utilization)","Coingecko API (token prices)"],"infra":["Vercel (hosting)","Etherscan RPC or Alchemy for reads"],"other":["Zod for schema validation"],"wallet":["RainbowKit (optional, for user auth only)"],"indexer":["The Graph (Morpho subgraph)","Ponder for real-time loop state"],"frontend":["Next.js 15","TanStack Query for caching","Recharts for risk/yield scatter plots","wagmi + viem for on-chain reads"],"contracts":["Morpho IRM (Interest Rate Model) reading"]},"build_steps":["Scaffold Next.js 15 project with TypeScript; set up Tailwind and shadcn/ui for charts and tables.","Fetch Morpho market data (isolated markets list, borrow/supply rates, LTV) via Morpho API or The Graph subgraph; cache with TanStack Query.","Fetch Spiral Stake loop configurations (collateral, borrow token, leverage multiplier, fees) from their API or hardcode from docs; normalize into a common loop schema.","Fetch competitor loop data (Aave looping via flash loans, Compound looping, Lido staking loops) from DefiLlama and chain-specific indexers; deduplicate and align schemas.","Implement risk-adjusted scoring: for each loop, calculate (1) APY net of fees, (2) liquidation distance (health factor margin), (3) Sharpe ratio (yield / volatility proxy from 30d price history), (4) gas cost amortized over 1-year holding period.","Build the UI: input form (capital size, risk slider, chain filter), sortable table (APY, Sharpe, LTV, gas cost, protocol), and scatter plot (yield vs. liquidation distance) with hover tooltips showing loop details.","Add a 'Size Sensitivity' feature: for each loop, show how APY and gas efficiency change as user capital scales (e.g., 1 ETH vs. 10 ETH vs. 100 ETH).","Deploy to Vercel; set up environment variables for RPC endpoints and API keys; test with real Morpho market data on Ethereum mainnet."],"gotchas":["Morpho isolated markets have fragmented liquidity—a loop that looks good at $10k may have slippage at $100k; always fetch current market depth and simulate swaps via 0x or Uniswap V4 to estimate real execution cost.","Liquidation distance depends on collateral volatility; use 30-day realized volatility or Lyra/Deribit implied vol, not just static LTV—a 'safe' loop can blow up in a 20% flash crash.","DefiLlama and Morpho APIs may lag by 5–15 minutes; cache aggressively but refresh on user request to avoid stale yield data influencing decisions.","Gas costs vary wildly by network congestion; hardcode a conservative estimate (e.g., 200k gas for a loop entry) and let users override, or fetch live gasprice from Etherscan API and recalculate on page load.","Some loops (especially on Morpho) may be illiquid or have low TVL; filter out loops with <$100k TVL or >5% slippage at your target size to avoid recommending ghost strategies."],"references":[{"url":"https://morpho.org/docs","kind":"docs","label":"Morpho Isolated Markets Docs"},{"url":"https://thegraph.com/explorer/subgraphs/8Nf3Hb1ypDwSZnLjhXR3Qhvj7Jw9Kj3L2M4N5O6P7Q8","kind":"docs","label":"Morpho Subgraph (The Graph)"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API Docs"},{"url":"https://docs.spiralstake.xyz","kind":"docs","label":"Spiral Stake Docs"},{"url":"https://wagmi.sh/react/getting-started","kind":"docs","label":"wagmi + viem Integration Guide"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard (EIP-4626)"}],"time_estimate_hours":80,"projects":{"slug":"spiral-stake"},"project_slug":"spiral-stake","project":{"slug":"spiral-stake","name":"Spiral Stake","logo_url":"https://icons.llamao.fi/icons/protocols/spiral-stake?w=64&h=64","category":"infra"}},{"id":"393f0e17-505b-4a3b-abeb-aa2842cb44c3","project_id":"b6bdd6ae-a52d-42fb-ae31-9db051e2a54c","title":"Wash-Trade Flagger","pitch":"Flags collections with suspicious Blur volume patterns — circular trades, single-wallet pumps.","difficulty":"1-2 weeks","use_case":"security","build_with":["python","blur-api","postgres"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:27.379293+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A security tool that monitors Blur marketplace activity in real-time, detecting wash-trading patterns like circular trades between wallets, single-wallet volume concentration, and rapid buy-sell cycles on the same collection. The flagger ingests Blur API event streams, applies heuristic scoring (e.g., same-wallet round-trips within 24h, >80% volume from <5 wallets), and surfaces flagged collections via a dashboard or webhook alerts. Useful for risk-conscious traders, collection creators auditing their own integrity, and platforms building trust filters.","learn_first":["Blur Blend lending mechanics and how collateral affects trade incentives","Graph theory basics for detecting circular trade patterns","Time-series anomaly detection heuristics","Blur API rate limits and event ordering guarantees"],"tech_stack":{"ai":[],"data":["PostgreSQL for trade history","Redis for real-time event deduplication"],"infra":["Docker + GitHub Actions for scheduled analysis","Prometheus for monitoring flagging pipeline"],"other":["Python pandas/numpy for pattern detection"],"wallet":[],"indexer":["Blur API (REST + WebSocket)"],"frontend":["Streamlit or FastAPI + React for dashboard"],"contracts":[]},"build_steps":["Set up Blur API credentials and test collection/trade endpoints; confirm rate limits (typically 100 req/min) and event latency.","Design PostgreSQL schema: tables for collections, trades (buyer, seller, price, timestamp, tx_hash), and flags (collection_id, flag_type, score, detected_at).","Build async Python ingester using aiohttp to stream Blur API trade events; implement Redis deduplication by tx_hash to avoid double-counting.","Implement wash-trade heuristics: (a) circular-trade detector (buyer A → seller B → buyer A within 24h on same collection), (b) wallet concentration scorer (% volume from top-5 wallets), (c) rapid flip detector (same wallet buy+sell <1h apart).","Store raw trades and computed flags in PostgreSQL; batch-compute rolling 24h metrics per collection every 15 minutes.","Build lightweight FastAPI endpoint to serve flagged collections, flag scores, and historical trend data; add simple Streamlit dashboard for exploration.","Add webhook or email alerting for collections crossing a configurable risk threshold (e.g., flag_score > 0.7).","Deploy via Docker on a small VPS or AWS Lambda; set up GitHub Actions to run ingester continuously and backfill historical data from Blur API."],"gotchas":["Blur API trade events may not be strictly ordered by timestamp across shards; use tx_hash + block_number as canonical ordering to avoid false circular-trade detections.","Legitimate high-volume traders and collection creators can trigger false positives; calibrate heuristic thresholds on known-clean collections first, then tune.","Wash-trading can involve external price feeds (e.g., Uniswap) to justify floor movements; flagging NFT-only patterns will miss cross-venue manipulation.","Blur API may rate-limit or have downtime; implement exponential backoff and a local cache layer so dashboard remains queryable during outages."],"references":[{"url":"https://docs.blur.io","kind":"docs","label":"Blur API Documentation"},{"url":"https://github.com/blur-io","kind":"repo","label":"Blur GitHub Organization"},{"url":"https://eips.ethereum.org/EIPS/eip-721","kind":"docs","label":"ERC-721 Standard (NFT Basics)"},{"url":"https://pandas.pydata.org/docs/user_guide/timeseries.html","kind":"docs","label":"Pandas Time-Series Resampling Guide"},{"url":"https://fastapi.tiangolo.com/async-concurrency/","kind":"docs","label":"FastAPI Async Patterns"},{"url":"https://redis.io/docs/data-types/sets/","kind":"docs","label":"Redis Deduplication Patterns"}],"time_estimate_hours":80,"projects":{"slug":"blur"},"project_slug":"blur","project":{"slug":"blur","name":"Blur","logo_url":"https://icons.llamao.fi/icons/protocols/blur?w=64&h=64","category":"infra"}},{"id":"48658f94-a5a3-48a3-bbea-cee0ca271c86","project_id":"b6bdd6ae-a52d-42fb-ae31-9db051e2a54c","title":"Floor Sweep Aggregator","pitch":"Compares floor prices across Blur, OpenSea, Magic Eden and picks cheapest tx for a sweep.","difficulty":"weekend","use_case":"trading","build_with":["nextjs","reservoir-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:25.459536+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time NFT floor price aggregator that monitors multiple marketplaces (Blur, OpenSea, Magic Eden) and recommends the cheapest execution path for bulk NFT purchases. Traders input a collection and quantity, the tool fetches current floor prices and gas costs, calculates total cost-per-NFT including fees, and routes the sweep to the optimal marketplace. Useful for pro traders who need sub-second decision-making on large purchases across fragmented liquidity.","learn_first":["ERC-721 and ERC-1155 standards","Reservoir API price feeds and collection data","Gas estimation and MEV concepts","Marketplace fee structures (Blur vs OpenSea vs Magic Eden)"],"tech_stack":{"data":["Reservoir API (collections, floor prices, listings)","Blur API (if available) or RPC calls to Blur contract","OpenSea Seaport contract ABIs"],"infra":["Vercel or similar for hosting","Alchemy or Infura RPC for gas estimation"],"other":["Web3 wallet connector (RainbowKit or Privy)"],"frontend":["Next.js 14+","React Query or SWR for polling","Tailwind CSS","ethers.js or viem for tx simulation"]},"build_steps":["Scaffold Next.js 14 app with TypeScript and Tailwind; set up environment for Reservoir API key.","Create a search component that accepts NFT collection address or slug; fetch collection metadata and current floor price from Reservoir API.","Build a price comparison table that queries Reservoir for Blur floor, OpenSea floor (via Seaport listings), and Magic Eden floor; display side-by-side with marketplace icons.","Add a quantity input and gas estimator: use viem to simulate a bulk purchase tx on each marketplace, fetch current gas price from RPC, calculate total cost including marketplace fees.","Implement a recommendation engine that sorts by total cost-per-NFT (price + gas + fees); highlight the cheapest option in green.","Add wallet connection (RainbowKit) and a one-click sweep button that constructs and signs the optimal tx; use viem to send to the chosen marketplace.","Set up a polling interval (5–10 seconds) to refresh prices in real-time; show a 'last updated' timestamp.","Deploy to Vercel; test with a few popular collections (e.g., Pudgy Penguins, Doodles) on mainnet."],"gotchas":["Reservoir API rate limits: free tier is ~10 req/sec; consider caching or upgrading for production. Blur API access may require partnership approval.","Gas estimation varies wildly; use viem's estimateGas with actual tx data, not just static values. Factor in priority fees if sweeping during congestion.","Marketplace fees change: Blur is 0%, OpenSea is 2.5%, Magic Eden varies. Hard-code these for now but plan to fetch dynamically.","Liquidity fragmentation: a collection may have 100 NFTs on Blur but only 10 on OpenSea at floor; your sweep qty might not be available on the cheapest marketplace—show warnings.","Transaction ordering: if you're sweeping 10 NFTs and the cheapest marketplace only has 5 at floor, you'll need to split across marketplaces or fall back to higher-priced listings."],"references":[{"url":"https://docs.reservoir.tools/","kind":"docs","label":"Reservoir API Documentation"},{"url":"https://github.com/blur-io/blur-contracts","kind":"repo","label":"Blur Marketplace Contracts"},{"url":"https://github.com/ProjectOpenSea/seaport","kind":"repo","label":"OpenSea Seaport Contract"},{"url":"https://viem.sh/docs/actions/public/estimateGas","kind":"docs","label":"viem Gas Estimation Guide"},{"url":"https://eips.ethereum.org/EIPS/eip-721","kind":"docs","label":"ERC-721 Standard (NFTs)"},{"url":"https://www.rainbowkit.com/docs/introduction","kind":"docs","label":"RainbowKit Wallet Integration"}],"time_estimate_hours":12,"projects":{"slug":"blur"},"project_slug":"blur","project":{"slug":"blur","name":"Blur","logo_url":"https://icons.llamao.fi/icons/protocols/blur?w=64&h=64","category":"infra"}},{"id":"919baad3-ae3a-4729-b9d5-4c03cc18297f","project_id":"85cc7145-12ae-4e67-8cd9-d42d55275acd","title":"DAO Treasury Reporter","pitch":"Auto-generates monthly treasury reports for any Safe — inflows, outflows, runway, comparison vs previous months.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","safe-sdk","supabase","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:14.831575+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that connects to any Safe multisig wallet, fetches on-chain transaction history and token balances, and generates a monthly treasury report showing cash flow, token composition, runway estimates, and month-over-month trends. Users input a Safe address, select reporting period, and download a PDF or JSON export. Built for DAO treasurers and finance teams who need visibility into spending patterns without manual spreadsheet work.","learn_first":["Safe contract architecture and transaction history patterns","ERC-20 token transfer events and balance queries","Chainlink or Coingecko price feeds for USD valuation","PDF generation libraries (e.g. pdfkit or html2pdf)"],"tech_stack":{"data":["Supabase (store report metadata, user preferences)","Coingecko API or Chainlink for token prices"],"infra":["Vercel for hosting","node-cron or similar for scheduled report generation"],"other":["pdfkit or html2pdf for PDF export","ethers.js or viem for Safe balance queries"],"wallet":["viem for read-only calls"],"indexer":["The Graph (Safe subgraph for transaction history)","Ponder (optional, for custom indexing if needed)"],"frontend":["Next.js 14+","React","TailwindCSS","Recharts or Chart.js for visualizations"],"contracts":["Safe (read-only, no custom contracts needed)"]},"build_steps":["Set up Next.js project with TypeScript; scaffold pages for home, input Safe address, and report view.","Integrate Safe SDK to fetch Safe details (owners, threshold, nonce) and validate Safe address on multiple chains.","Query The Graph Safe subgraph to retrieve all transactions for a given Safe address within a date range; parse inflows (deposits, token transfers in) and outflows (transfers out, contract calls).","Fetch current token balances for the Safe using viem multicall; call Coingecko API to get USD prices for each token held.","Calculate metrics: total inflows/outflows per month, token composition, runway (monthly burn rate × months of runway), and month-over-month deltas.","Build React components to display report data as tables and charts; add filters for date range, token type, and transaction category.","Implement PDF export using pdfkit or html2pdf; include summary page, detailed transaction log, and charts.","Deploy to Vercel; set up Supabase to store report history and user preferences (favorite Safe addresses, report frequency)."],"gotchas":["Safe transactions may include internal contract calls (e.g. swaps, staking) that don't appear as simple token transfers; parse event logs carefully or use Safe transaction service API for decoded data.","Token prices are historical; Coingecko free tier may not have precise historical prices for every token. Consider caching or upgrading for accuracy.","Multi-chain Safe addresses have different contract instances; always filter transactions by chain and confirm Safe exists on that chain before querying.","Supabase row-level security (RLS) policies must be set correctly; test that users can only see reports they created, not other DAOs' reports.","PDF generation can be slow for large transaction histories (1000+ txns); consider pagination or async job queues (e.g. Bull) for heavy reports."],"references":[{"url":"https://docs.safe.global/sdk","kind":"docs","label":"Safe SDK Documentation"},{"url":"https://thegraph.com/explorer/subgraphs/0x3d2c0aac45d0e4d0f8e8e8e8e8e8e8e8e8e8e8e","kind":"docs","label":"Safe Subgraph (The Graph)"},{"url":"https://docs.safe.global/reference/transaction-service-api","kind":"docs","label":"Safe Transaction Service API"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://www.coingecko.com/en/api/documentation","kind":"docs","label":"Coingecko API"},{"url":"https://pdfkit.org","kind":"repo","label":"pdfkit NPM"}],"time_estimate_hours":80,"projects":{"slug":"safe"},"project_slug":"safe","project":{"slug":"safe","name":"Safe","logo_url":"https://icons.llamao.fi/icons/protocols/safe?w=64&h=64","category":"infra"}},{"id":"5ba041a1-1edd-4cf2-b842-c900b43bd0c4","project_id":"b6bdd6ae-a52d-42fb-ae31-9db051e2a54c","title":"NFT Loan Risk Dashboard","pitch":"For Blend lenders: shows your loan book, current liquidation risk per loan, and floor-price proximity per collection.","difficulty":"weekend","use_case":"security","build_with":["nextjs","blur-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:14.543967+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time monitoring dashboard for lenders on Blur's Blend protocol. Tracks active loans, calculates liquidation risk by comparing current NFT floor prices to loan LTV thresholds, and alerts when collateral approaches danger zones. Lenders can see portfolio health at a glance, identify which collections are most at-risk, and make informed decisions about new lending or position management. Built on Blend's API and on-chain data, with a clean Next.js frontend.","learn_first":["ERC-721 and ERC-1155 basics","Blend protocol loan mechanics (LTV, liquidation thresholds)","Floor price oracles and how they feed liquidation logic","Real-time data polling vs. event indexing trade-offs"],"tech_stack":{"ai":[],"data":["Blur API (loans, collections, floor prices)","Etherscan or Alchemy RPC for on-chain verification"],"infra":["Vercel or Railway for hosting","Redis or in-memory cache for floor-price polling"],"other":["Blend protocol ABI (for reference)","OpenSeaAPI or Blur's own floor-price feed"],"wallet":["viem for read-only RPC calls"],"indexer":[],"frontend":["Next.js 14+","TypeScript","Tailwind CSS","Recharts or Tremor for risk visualizations"],"contracts":[]},"build_steps":["Set up Next.js 14 project with TypeScript and Tailwind; scaffold pages for dashboard, loan detail, and collection risk view.","Authenticate with Blur API (get API key from docs.blur.io); write a utility module to fetch active loans for a given lender address.","Fetch floor prices for each NFT collection in the loan book using Blur's price feed or OpenSea API; store in a simple in-memory cache with TTL.","Calculate LTV for each loan: (loan amount) / (current floor price × collateral quantity). Flag loans where LTV > liquidation threshold (typically 80–90%).","Build a table component showing: loan ID, collection, collateral count, loan amount, current floor, LTV %, risk status (safe/warning/critical).","Add a collection-level summary: aggregate risk across all loans by collection, show total exposure and highest-risk collections.","Implement a simple alert system: highlight rows in red/yellow based on LTV proximity to liquidation; optionally add email/webhook stub for future notifications.","Deploy to Vercel; set up environment variables for Blur API key and RPC endpoint. Test with a live lender address."],"gotchas":["Blur API rate limits: cache aggressively and use exponential backoff. Floor prices update slowly; don't poll more than every 30–60 seconds or you'll hit limits.","Liquidation thresholds vary by collection and loan terms; Blend stores these on-chain. You may need to decode loan structs directly from the Blend contract, not just the API.","Floor price feeds can lag or spike during market volatility. Cross-check with multiple sources (Blur, OpenSea, Reservoir) if accuracy is critical.","Lender authentication: ensure you're only showing loans for the connected wallet. Use viem's useAccount hook or server-side verification to prevent data leaks."],"references":[{"url":"https://docs.blur.io/blend","kind":"docs","label":"Blur Docs – Blend Overview"},{"url":"https://docs.blur.io/api","kind":"docs","label":"Blur API Reference"},{"url":"https://github.com/blur-io/blend-contracts","kind":"repo","label":"Blend Protocol GitHub"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-721","kind":"docs","label":"ERC-721 Standard (NFT Collateral)"},{"url":"https://www.tremor.so","kind":"tool","label":"Tremor React Charts"}],"time_estimate_hours":12,"projects":{"slug":"blur"},"project_slug":"blur","project":{"slug":"blur","name":"Blur","logo_url":"https://icons.llamao.fi/icons/protocols/blur?w=64&h=64","category":"infra"}},{"id":"4881b632-7b7b-454a-8c02-a3bdf1aae093","project_id":"b6bdd6ae-a52d-42fb-ae31-9db051e2a54c","title":"Blur Bid Sniper","pitch":"Headless bot that places top-bid offers on Blur for selected collections within configured risk caps.","difficulty":"1-2 weeks","use_case":"trading","build_with":["node","blur-api","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:14.01305+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Node.js bot that monitors Blur collection floors and automatically places competitive bids on NFTs matching your criteria. The bot enforces risk limits (max bid per item, max portfolio exposure, max gas spend), tracks bid performance, and adapts bid amounts based on floor movement. Built for traders who want to accumulate specific collections without manual offer placement. Integrates directly with Blur's API and uses ethers.js for on-chain interaction.","learn_first":["Blur API authentication and collection endpoints","ERC-721 and ERC-1155 standards","Offer lifecycle on Blur (creation, expiry, acceptance)","Gas estimation and transaction mempool dynamics","Portfolio risk management patterns"],"tech_stack":{"ai":[],"data":["Blur API"],"infra":["Node.js","dotenv"],"other":["node-cron or similar for polling"],"wallet":["ethers.js","ethers Signer"],"indexer":[],"frontend":[],"contracts":["ERC-721","ERC-1155"]},"build_steps":["Set up Node.js project with ethers.js, dotenv, and axios for HTTP calls to Blur API","Authenticate with Blur API using your API key; test collection floor queries and bid history endpoints","Create config schema: collection addresses, bid strategy (percentage of floor, max bid cap), risk limits (max per-item bid, portfolio max, daily gas budget)","Implement floor-monitoring loop using node-cron or setInterval; fetch collection floor every 30–60 seconds via Blur API","Build bid-placement logic: calculate bid amount (e.g., 95% of floor), check against risk caps, construct offer via ethers.js","Integrate wallet signing: use ethers Signer (either private key in .env for testing or WalletConnect for production); sign and submit offers to Blur","Add state tracking: persist bid history (collection, item, bid amount, timestamp, status) to JSON or SQLite; log fills and rejections","Deploy locally first; test on Blur testnet or with small real bids; add error handling for failed transactions and API rate limits"],"gotchas":["Blur API rate limits are strict; implement exponential backoff and respect X-RateLimit headers to avoid IP bans","Offer expiry: Blur offers expire after a set period (check current docs); your bot must refresh or re-place bids or risk stale offers","Gas price volatility: estimate gas before placing bids; if network congestion spikes, your daily gas budget can be consumed by a few failed transactions","Bid rejection: if floor drops sharply after you place a bid, your offer may sit uncompetitive; implement a bid-refresh strategy or accept the risk","Private key management: never hardcode keys; use .env files locally and rotate keys in production; consider using Privy or similar for non-custodial signing in a future UI version"],"references":[{"url":"https://docs.blur.io","kind":"docs","label":"Blur API Documentation"},{"url":"https://docs.ethers.org/v6/","kind":"docs","label":"ethers.js v6 Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-721","kind":"docs","label":"ERC-721 Standard (NFT)"},{"url":"https://github.com/blur-io","kind":"repo","label":"Blur GitHub Organization"},{"url":"https://nodejs.org/en/docs/","kind":"docs","label":"Node.js Best Practices for Bots"}],"time_estimate_hours":80,"projects":{"slug":"blur"},"project_slug":"blur","project":{"slug":"blur","name":"Blur","logo_url":"https://icons.llamao.fi/icons/protocols/blur?w=64&h=64","category":"infra"}},{"id":"03431b58-7cc6-475d-bd58-9d50210470ee","project_id":"85cc7145-12ae-4e67-8cd9-d42d55275acd","title":"Safe Module Marketplace","pitch":"Directory of audited Safe modules (recovery, spending limits, auto-pay) with one-click install.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","safe-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:12.888115+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A curated marketplace for Safe modules—smart account extensions that add features like social recovery, spending limits, and automation. Users browse audited modules, verify their security status, and install them directly into their Safe accounts via a web interface. The marketplace indexes modules from developers, displays their audit reports, gas costs, and compatibility matrix across chains, then orchestrates the Safe SDK to execute module installation transactions. This becomes the canonical discovery layer for Safe's module ecosystem.","learn_first":["Safe module architecture and enableModule() flow","ERC-4337 account abstraction basics","Safe SDK initialization and transaction building","Module audit standards and verification","Multichain RPC handling with wagmi"],"tech_stack":{"data":["Safe SDK (@safe-global/protocol-kit)","Safe API (@safe-global/safe-service-client)"],"infra":["Vercel","Etherscan API for module verification","IPFS or Arweave for audit report storage"],"other":["Safe Module Registry (on-chain or off-chain JSON)","Audit report schema (JSON-LD or custom)","Module metadata standard (name, version, description, gas estimate)"],"wallet":["Safe{Wallet}","MetaMask","Coinbase Wallet"],"indexer":["The Graph (optional, for module event indexing)","Ponder (optional, for real-time module registry)"],"frontend":["Next.js 15","React 19","TailwindCSS","wagmi v2+","viem","RainbowKit or Privy for wallet connection","ethers.js v6 (for Safe SDK compatibility)"],"contracts":["Safe Core Contracts (v1.4.1+)"]},"build_steps":["Scaffold Next.js app with TypeScript, TailwindCSS, and wagmi provider setup; add RainbowKit for wallet connection.","Design and build the module directory UI: grid/list view, filters (chain, category, audit status), search, and detail pages for each module.","Create a module metadata schema (JSON) with fields: name, description, address per chain, audit status, audit link, gas cost estimate, category (recovery/spending-limit/automation), version, and developer contact.","Seed the marketplace with 5–10 real Safe modules (e.g., Zodiac modules, custom recovery modules) by fetching their metadata from a GitHub repo or JSON file; store in a Next.js API route or static JSON.","Integrate Safe SDK: on module detail page, show 'Install' button that calls safe-sdk's enableModule() to build the transaction; use wagmi to send it to the user's Safe.","Add chain selector (Ethereum, Arbitrum, Optimism, Base, Polygon, BSC) and resolve module addresses per chain; validate that the Safe exists on that chain via Safe API.","Implement audit verification: fetch audit reports from IPFS/Arweave links, display summary, and show a verified badge if the report is signed by a known auditor (optional: use EAS for on-chain attestations).","Deploy to Vercel; test end-to-end: connect Safe, select module, install, and verify transaction appears in Safe UI."],"gotchas":["Module addresses differ per chain—always resolve the correct address for the selected chain before calling enableModule(); test on testnet first.","Safe SDK requires the Safe to be initialized with the correct chainId; mismatches will cause transaction building to fail silently.","Gas cost estimates for module installation vary by Safe version and existing modules; show ranges, not fixed numbers, to set user expectations.","Audit report verification is optional but critical for trust; if you skip it, clearly label modules as 'unaudited' to avoid liability.","Some modules may have dependencies (e.g., a spending limit module may require a price oracle); document these in the module metadata and warn users during install."],"references":[{"url":"https://docs.safe.global/sdk","kind":"docs","label":"Safe SDK Documentation"},{"url":"https://docs.safe.global/advanced/smart-account-modules","kind":"docs","label":"Safe Module Architecture"},{"url":"https://github.com/safe-global/safe-contracts","kind":"repo","label":"Safe Core Contracts Repository"},{"url":"https://github.com/gnosis/zodiac","kind":"repo","label":"Zodiac Modules (reference implementations)"},{"url":"https://docs.safe.global/api","kind":"docs","label":"Safe API Reference"},{"url":"https://eips.ethereum.org/EIPS/eip-4337","kind":"docs","label":"ERC-4337 Account Abstraction Overview"}],"time_estimate_hours":80,"projects":{"slug":"safe"},"project_slug":"safe","project":{"slug":"safe","name":"Safe","logo_url":"https://icons.llamao.fi/icons/protocols/safe?w=64&h=64","category":"infra"}},{"id":"d9153d74-d2ea-4f8e-a717-a77bde48de19","project_id":"85cc7145-12ae-4e67-8cd9-d42d55275acd","title":"Multi-sig Activity Dashboard","pitch":"Beautiful all-in-one view of any Safe — assets, pending txs, recent history, signer activity. Cleaner than the official UI.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","safe-sdk","the-graph"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:02.969045+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time dashboard that aggregates Safe multisig wallet data across multiple chains. Display token balances, pending transactions awaiting signatures, execution history, and per-signer activity metrics. The official Safe UI is functional but cluttered; this dashboard prioritizes clarity and speed for power users managing multiple Safes. Fetch data via Safe API + The Graph, render with Next.js, and let users search by Safe address. Target teams running operational treasuries or DAOs that need quick visibility into wallet state without digging through block explorers.","learn_first":["Safe contract architecture (proxy pattern, module system)","Safe API endpoints and data structure","The Graph subgraph queries for transaction history","ERC-20 token balance queries via multicall"],"tech_stack":{"ai":[],"data":["Safe API (api.safe.global)","Multicall3 for batch balance reads"],"infra":["Vercel or similar"],"other":["ethers.js or viem for contract reads"],"wallet":["Safe SDK (@safe-global/protocol-kit)"],"indexer":["The Graph (Safe subgraph)"],"frontend":["Next.js 14+","React","TailwindCSS","wagmi","viem"],"contracts":[]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS","Install Safe SDK, wagmi, viem, and axios for HTTP calls","Create a search component that accepts Safe address + chain selector (Ethereum, Arbitrum, Optimism, Base, Polygon, BSC)","Query Safe API (GET /api/v1/safes/{address}) to fetch Safe details, owners, and threshold","Use The Graph Safe subgraph to fetch recent transactions and pending queue; fall back to Safe API if subgraph is unavailable","Implement token balance display using Multicall3 contract to batch-read ERC-20 balances for all assets held by the Safe","Build a pending transactions panel showing awaiting-signature txs with signer status (who has signed, who hasn't)","Add a recent activity feed (last 20 txs) with timestamps, initiators, and execution status; link to block explorer"],"gotchas":["Safe API rate limits (~10 req/sec per IP); cache responses in Redis or use SWR with long stale-while-revalidate windows","The Graph Safe subgraph may lag 1–2 blocks on high-traffic chains; always show 'last updated' timestamp and offer manual refresh","Multicall3 may not be deployed on all chains (check safe.global/docs/contracts); fall back to individual RPC calls or use Safe's token list API","Safe transactions can have multiple signatures from different signers; track approval state per signer, not just aggregate count","Some Safes use modules (e.g., Zodiac) that bypass the standard Safe logic; document this limitation in the UI"],"references":[{"url":"https://docs.safe.global/smart-accounts/overview","kind":"docs","label":"Safe Contracts Documentation"},{"url":"https://docs.safe.global/safe-api/overview","kind":"docs","label":"Safe API Reference"},{"url":"https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit","kind":"repo","label":"Safe Protocol Kit (SDK)"},{"url":"https://thegraph.com/hosted-service/subgraph/gnosis/safe-mainnet","kind":"tool","label":"The Graph Safe Subgraph"},{"url":"https://www.multicall3.com","kind":"docs","label":"Multicall3 Contract"},{"url":"https://github.com/safe-global/safe-transaction-service","kind":"repo","label":"Safe Transaction Service API"}],"time_estimate_hours":12,"projects":{"slug":"safe"},"project_slug":"safe","project":{"slug":"safe","name":"Safe","logo_url":"https://icons.llamao.fi/icons/protocols/safe?w=64&h=64","category":"infra"}},{"id":"7abbf163-3ba2-4ddb-b496-4504c1487d2d","project_id":"71fee51f-7c56-4c71-916c-cae33877e0af","title":"Oracle Comparison Widget","pitch":"Embeddable widget that shows any asset's price via API3 + Chainlink + Pyth side by side. Builds trust.","difficulty":"weekend","use_case":"security","build_with":["nextjs","viem","typescript"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:02.254591+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A React component that fetches the same asset price from three major oracle networks (API3 dAPI, Chainlink Data Feeds, Pyth Network) and displays them with timestamps, deviation percentages, and update frequency. The widget is designed to be embedded in DeFi frontends, dashboards, or educational sites. It surfaces real-time oracle health and helps users understand price discrepancies. The core value: transparency into oracle reliability without requiring users to understand the technical differences.","learn_first":["ERC-4626 vault patterns and price feed integration","API3 dAPI subscription model and contract calls","Chainlink AggregatorV3 interface","Pyth Network price feed mechanics and Hermes service"],"tech_stack":{"ai":[],"data":["API3 dAPI endpoints","Chainlink Data Feeds (mainnet + testnet)","Pyth Hermes HTTP API"],"infra":[],"other":["ethers.js alternative to viem if preferred"],"wallet":["viem (for contract reads, no signing needed)"],"indexer":[],"frontend":["Next.js","React","TypeScript","Tailwind CSS","shadcn/ui for components"],"contracts":["API3 dAPI (read-only calls)","Chainlink AggregatorV3Interface","Pyth PriceFeed contract"]},"build_steps":["Set up Next.js project with TypeScript and Tailwind; create a /components/OracleComparison.tsx component scaffold.","Wire viem PublicClient to read from Ethereum mainnet; add contract ABIs for API3 dAPI, Chainlink AggregatorV3, and Pyth PriceFeed.","Implement API3 dAPI reader: call the dAPI contract to fetch the latest price for a given asset (e.g., ETH/USD). Handle subscription checks and fallback logic.","Implement Chainlink reader: use AggregatorV3Interface to fetch latestRoundData() for the same asset. Parse roundId, answer, updatedAt.","Implement Pyth reader: fetch price via Hermes HTTP endpoint (https://hermes.pyth.network/api/latest_price_feeds) and decode the price update.","Create a comparison table component that displays: asset name, price from each oracle, timestamp, deviation % from median, and update frequency. Use color coding (green/yellow/red) for staleness.","Add a dropdown to select different assets (ETH/USD, BTC/USD, USDC/USD, etc.) and chain selector (Ethereum, Arbitrum, Optimism). Fetch prices on selection change.","Deploy as a standalone Next.js app on Vercel; test on mainnet and testnet. Optionally wrap as an npm package or iframe-embeddable widget using postMessage for configuration."],"gotchas":["API3 dAPI requires an active subscription on-chain; if the subscription is inactive or paused, calls will revert. Test with a known active dAPI first (e.g., ETH/USD on Ethereum mainnet).","Chainlink feeds have different update frequencies and heartbeats per asset; a 'stale' price on Chainlink may be intentional if no significant price movement occurred. Clearly label staleness vs. actual outage.","Pyth prices are off-chain and require a signed price update; the Hermes endpoint provides the latest, but on-chain Pyth contracts require you to submit the update. For a read-only widget, use Hermes; for on-chain validation, you need to handle the update submission separately.","Decimal precision differs across oracles (API3 and Chainlink use 8 decimals by default, Pyth uses variable precision). Normalize all prices to the same decimal place before displaying or calculating deviation.","Rate limiting: Hermes and public RPC endpoints have rate limits. Cache prices for 5–10 seconds client-side to avoid hammering endpoints during rapid re-renders or multi-user access."],"references":[{"url":"https://docs.api3.org/reference/dapis/","kind":"docs","label":"API3 dAPI Documentation"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Data Feeds Docs"},{"url":"https://docs.pyth.network/price-feeds","kind":"docs","label":"Pyth Network Price Feeds"},{"url":"https://docs.pyth.network/price-feeds/api-reference","kind":"docs","label":"Pyth Hermes API"},{"url":"https://viem.sh/docs/clients/public","kind":"docs","label":"viem PublicClient Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Vault Standard (for context)"}],"time_estimate_hours":6,"projects":{"slug":"api3"},"project_slug":"api3","project":{"slug":"api3","name":"API3","logo_url":"https://icons.llamao.fi/icons/protocols/api3?w=64&h=64","category":"oracles"}},{"id":"d1e1d1b1-7080-4275-b994-d6695f4fa362","project_id":"85cc7145-12ae-4e67-8cd9-d42d55275acd","title":"Transaction Simulation Reviewer","pitch":"Before any Safe sig, simulates the tx via Tenderly and explains the state changes in plain English. Direct extension of audit-buddy thesis.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","tenderly","openrouter","safe-apps-sdk"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:22:01.68818+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Safe app that intercepts transactions before signing, runs them through Tenderly's simulation API, and returns a human-readable breakdown of state changes, token transfers, and contract interactions. Integrates with Safe's transaction builder UI so signers see risk analysis inline. Reduces signing mistakes and phishing attacks by making tx intent explicit.","learn_first":["Safe transaction lifecycle and app integration","Tenderly simulation API and state diff parsing","ERC-20/ERC-721 transfer detection patterns","LLM prompt engineering for tx explanation"],"tech_stack":{"ai":["openrouter","claude-3.5-sonnet"],"data":["tenderly-api"],"infra":[],"other":["viem"],"wallet":["safe-apps-sdk","ethers.js"],"indexer":[],"frontend":["nextjs","react","typescript","rainbowkit"],"contracts":[]},"build_steps":["Set up Next.js project with Safe Apps SDK and authenticate with Safe transaction context","Create Tenderly API client wrapper to accept raw tx data and return simulation results with state diffs","Build LLM prompt pipeline: parse Tenderly state diffs (storage changes, logs, balance deltas) into structured JSON","Implement React component for Safe app iframe that displays simulation results: token transfers, contract calls, risk flags","Add plain-English explanation layer via OpenRouter (Claude) that translates state diffs into readable warnings","Integrate with Safe transaction review screen via Safe Apps SDK postMessage API so simulation runs before signing","Test end-to-end with sample Safe multisig: create a tx, trigger simulation, verify output accuracy","Deploy to Vercel and register app in Safe App Store with manifest.json"],"gotchas":["Tenderly free tier has rate limits (~100 reqs/day); production needs paid plan or self-hosted node for high-volume signers","State diffs from Tenderly are raw storage slots; you must decode ABI to show human-readable state (e.g., balanceOf slot → token balance)","Safe Apps SDK iframe context is sandboxed; cannot directly call window.ethereum; must use Safe's postMessage protocol for all chain interactions","LLM explanations can hallucinate or miss domain-specific risks (e.g., sandwich attacks); always show raw simulation data as fallback","Simulation accuracy depends on node state at simulation time; if mempool changes between sim and actual tx, results may diverge"],"references":[{"url":"https://docs.safe.global/build/safe-apps","kind":"docs","label":"Safe Apps SDK Documentation"},{"url":"https://docs.tenderly.co/reference/api","kind":"docs","label":"Tenderly Simulation API Reference"},{"url":"https://docs.safe.global/core-api/transaction-service-overview","kind":"docs","label":"Safe Transaction Service API"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Transfer Event Decoding"},{"url":"https://github.com/safe-global/safe-apps-sdk/tree/main/apps/demo","kind":"repo","label":"Safe Apps Example Repository"},{"url":"https://github.com/Tenderly/tenderly-sdk-js","kind":"repo","label":"Tenderly SDK for Node.js"}],"time_estimate_hours":80,"projects":{"slug":"safe"},"project_slug":"safe","project":{"slug":"safe","name":"Safe","logo_url":"https://icons.llamao.fi/icons/protocols/safe?w=64&h=64","category":"infra"}},{"id":"a7e91d78-e9cb-4fbc-86b5-cfefedc6eafe","project_id":"71fee51f-7c56-4c71-916c-cae33877e0af","title":"First-Party Data Feed Composer","pitch":"UI for data providers to launch first-party feeds via Airnode with monetization built in.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","airnode","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:59.102737+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web application that lets data providers (exchanges, pricing APIs, weather services) spin up first-party oracle feeds without touching deployment infrastructure. The UI walks through: connecting an Airnode instance, defining feed specifications (update frequency, deviation threshold, data source), setting subscription pricing, and deploying to multiple chains (Ethereum, Arbitrum, Optimism, Polygon, BSC). Providers see real-time feed performance, subscriber count, and revenue. Under the hood, it generates Airnode configs, manages dAPI subscriptions via API3's contracts, and handles OEV (Oracle Extractable Value) settlement. Target: mid-market data providers who want passive income from their data without hiring DevOps.","learn_first":["Airnode architecture and config structure","dAPI subscription model and contract patterns","OEV concepts and settlement flow","ERC-7412 oracle interface standard"],"tech_stack":{"data":["Airnode SDK for config generation","ethers.js or viem for ABI encoding"],"infra":["Vercel or Railway for hosting","PostgreSQL for subscription state (optional)","Redis for real-time feed status cache"],"other":["API3 DAO governance contracts for fee splits"],"wallet":["RainbowKit for multi-chain connect","Privy (optional, for non-custodial UX)"],"indexer":["The Graph (optional, for feed performance metrics)","Ponder (alternative, lighter indexing)"],"frontend":["Next.js 14+ with App Router","TypeScript","Tailwind CSS","wagmi v2 for contract reads/writes","viem for low-level calls and encoding"],"contracts":["API3 dAPI contracts (0x...DapiServer)","OEV settlement contracts"]},"build_steps":["Scaffold Next.js app with TypeScript, Tailwind, wagmi, and RainbowKit; set up multi-chain wallet connection for Ethereum, Arbitrum, Optimism, Polygon, BSC.","Build the Airnode config builder: a form-driven UI that captures API endpoint, update frequency (e.g., every 30s), deviation threshold (e.g., 0.5%), and chain targets. Generate valid Airnode config JSON on submit.","Integrate viem to read dAPI contract state (dAPI name registry, subscription counts, fee structures) from each chain. Display current feed pricing and subscriber metrics.","Create a subscription pricing UI: let providers set price per update, lock-in period, and max subscribers. Encode this into dAPI contract calls via wagmi's useContractWrite.","Implement a deployment flow: validate Airnode config, estimate gas costs per chain, batch-deploy dAPI feeds to all selected chains in one transaction flow.","Add a real-time feed dashboard showing: active subscribers, revenue accrued, last update timestamp, deviation triggers, and OEV settlement events (indexed from chain events or The Graph).","Wire up Airnode SDK to generate and validate configs server-side (Node.js API route). Store configs in PostgreSQL or return as downloadable JSON for manual Airnode deployment.","Deploy to Vercel, test end-to-end on testnet (Sepolia, Arbitrum Sepolia, etc.), then mainnet with a pilot data provider."],"gotchas":["Airnode config validation is strict—typos in API paths or parameter names cause silent failures. Pre-validate against the Airnode JSON schema and test with a mock API first.","dAPI subscription contracts differ slightly per chain (different DapiServer addresses, fee tokens). Maintain a chain config map and handle contract ABI differences.","OEV settlement is async and can take minutes; don't show settlement as instant. Use event listeners and cache to update UI without blocking.","Gas costs for multi-chain deployment can spike; estimate and display upfront, and allow providers to deploy to a subset of chains first.","Airnode requires the provider to run an off-chain node; the UI should clarify this dependency and link to Airnode hosting docs (e.g., AWS, Railway templates)."],"references":[{"url":"https://docs.api3.org/airnode/latest/","kind":"docs","label":"API3 Airnode Documentation"},{"url":"https://docs.api3.org/reference/dapis/understand/dapi-contracts.html","kind":"docs","label":"dAPI Subscription Contracts"},{"url":"https://docs.api3.org/reference/oev/understand/overview.html","kind":"docs","label":"OEV Specification"},{"url":"https://eips.ethereum.org/EIPS/eip-7412","kind":"docs","label":"ERC-7412 Oracle Interface"},{"url":"https://github.com/api3dao/airnode","kind":"repo","label":"API3 GitHub (Airnode + Contracts)"},{"url":"https://wagmi.sh/react/api/hooks/useContractWrite","kind":"docs","label":"wagmi Hooks for Contract Interaction"}],"time_estimate_hours":80,"projects":{"slug":"api3"},"project_slug":"api3","project":{"slug":"api3","name":"API3","logo_url":"https://icons.llamao.fi/icons/protocols/api3?w=64&h=64","category":"oracles"}},{"id":"9b5bf177-803a-4cbd-a611-a29df008291d","project_id":"71fee51f-7c56-4c71-916c-cae33877e0af","title":"dAPI Subscription Manager","pitch":"One screen to manage all your API3 dAPI subscriptions, top up gas, monitor latency.","difficulty":"weekend","use_case":"infrastructure","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:51.561771+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard for dAPI subscribers to view active subscriptions, check remaining balance, top up gas funds, monitor data feed latency, and adjust pricing parameters. Targets developers running production dApps on multiple chains who need a single pane of glass instead of managing subscriptions through scattered CLI tools or contract interactions. Integrates with API3's dAPI contract suite and on-chain subscription state.","learn_first":["dAPI subscription model and contract interface","API3 OEV (Ordered Extraction of Value) mechanism","ERC-4626 vault patterns for fund management","wagmi hooks for multi-chain wallet state"],"tech_stack":{"data":["The Graph (if available for API3 indexing)","Direct contract calls via viem"],"infra":["Vercel or similar for hosting","Alchemy or Infura for RPC endpoints"],"wallet":["RainbowKit","ethers.js or viem for signing"],"frontend":["Next.js 14+","wagmi","viem","RainbowKit","TailwindCSS"],"contracts":["API3 dAPI subscription contracts","API3 OEV Network contracts"]},"build_steps":["Set up Next.js 14 project with TypeScript, TailwindCSS, and wagmi scaffolding using create-wagmi or manual setup","Install and configure RainbowKit for multi-chain wallet connection (Ethereum, Arbitrum, Optimism, Polygon, BSC)","Fetch active dAPI subscriptions by querying API3's subscription manager contract on each chain using viem","Display subscription details: feed name, chain, current balance, gas remaining, latency metrics, and pricing parameters","Implement top-up flow: user selects subscription, enters amount, signs transaction via wagmi useContractWrite hook","Add latency monitoring by fetching historical update timestamps from dAPI contract events or The Graph","Build pricing adjustment UI to let users modify their subscription tier or update OEV parameters","Deploy to Vercel and test against testnet subscriptions (Sepolia, Arbitrum Sepolia, etc.)"],"gotchas":["dAPI subscription state lives on-chain per chain; you must query each chain separately and aggregate results in the UI—use wagmi's useContractRead in parallel or batch with multicall","Gas top-ups are chain-specific; ensure you're sending funds to the correct subscription contract address on the correct chain","Latency data may not be directly exposed; you may need to parse contract events or rely on API3's off-chain indexing—check current docs for available endpoints","RainbowKit's default chain list may not include all API3-supported chains; configure custom chains in wagmi config","OEV pricing updates may have cooldown periods or require governance; verify contract constraints before building update UI"],"references":[{"url":"https://docs.api3.org/dapis/","kind":"docs","label":"API3 dAPI Documentation"},{"url":"https://github.com/api3dao/contracts","kind":"repo","label":"API3 Contracts Repository"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup Guide"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"viem Contract Interaction Guide"},{"url":"https://docs.api3.org/oev/","kind":"docs","label":"API3 OEV Network Docs"}],"time_estimate_hours":16,"projects":{"slug":"api3"},"project_slug":"api3","project":{"slug":"api3","name":"API3","logo_url":"https://icons.llamao.fi/icons/protocols/api3?w=64&h=64","category":"oracles"}},{"id":"2dc0e730-60d5-4b88-bab6-1133d119e668","project_id":"71fee51f-7c56-4c71-916c-cae33877e0af","title":"OEV Auction Tracker","pitch":"Public board showing API3 OEV auctions in progress — bids, expected MEV captured, winners.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","api3-sdk","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:48.594979+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time analytics dashboard that surfaces API3's Ordered Extraction of Value (OEV) auction data. The tracker displays active auctions with current bids, estimated MEV to be captured, auction duration, and historical winner data. Users can filter by chain, dApp, or time range. This becomes a reference tool for the API3 ecosystem—helping searchers decide where to bid, helping dApps understand their OEV exposure, and giving the community transparency into value extraction patterns.","learn_first":["What OEV is and how API3's auction model works","dAPI subscriptions and price feeds","MEV extraction basics and searcher economics","Real-time data fetching patterns in React"],"tech_stack":{"data":["API3 SDK","Viem for RPC calls","Ethers.js or Viem for contract reads"],"infra":["Vercel or similar","API3 public RPC endpoints"],"other":["TypeScript"],"frontend":["Next.js 14+","React","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS.","Install api3-sdk and viem; authenticate with API3 dAPI endpoints.","Create a data fetching layer using API3's OEV auction endpoints (or query via smart contract reads if needed).","Build a React component to display live auctions in a table: auction ID, chain, dApp, current bid, MEV estimate, time remaining.","Add filtering UI: by chain (Ethereum, Arbitrum, Optimism, Polygon, BSC), by dApp, by status (active/closed).","Implement real-time updates using setInterval or WebSocket if API3 provides one; fallback to polling every 5–10 seconds.","Add a historical auction view with winner, final bid, and MEV captured; sort by chain or date.","Deploy to Vercel; set up environment variables for API3 SDK keys."],"gotchas":["API3's OEV auction data may not have a public REST endpoint; you may need to query the smart contract directly using Viem + RPC, which is slower than a dedicated API.","Auction state changes rapidly; polling too frequently will hit rate limits; too slowly and data feels stale. Start with 10s intervals and tune.","MEV estimates are often rough; clarify in the UI whether you're showing theoretical max or actual captured value.","Different chains have different block times and auction mechanics; ensure your time-remaining calculation accounts for chain-specific block heights.","API3 SDK authentication and rate limits vary by tier; test with a free tier first to understand quota."],"references":[{"url":"https://docs.api3.org","kind":"docs","label":"API3 Docs: OEV and dAPI"},{"url":"https://github.com/api3dao/api3-dao","kind":"repo","label":"API3 SDK GitHub"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://nextjs.org/docs/app","kind":"docs","label":"Next.js App Router Guide"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 and OEV context (Flashbots MEV-Share)"}],"time_estimate_hours":12,"projects":{"slug":"api3"},"project_slug":"api3","project":{"slug":"api3","name":"API3","logo_url":"https://icons.llamao.fi/icons/protocols/api3?w=64&h=64","category":"oracles"}},{"id":"b9f79696-a0f1-4b74-b5f8-a0fcde3b49e7","project_id":"101c91b1-35b3-4bb3-aa37-deeebf2ec0ef","title":"DeFi Integration Quickstart","pitch":"Boilerplate repos for common RedStone integrations (lending, perps, options) with one-command deploy.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["foundry","redstone-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:47.260059+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build production-ready smart contract templates that integrate RedStone's modular oracle for the three most common DeFi primitives: lending protocols (like Morpho), perpetual futures (like dYdX), and options markets (like Lyra). Each template includes price feed setup, fallback logic, and gas-optimized update patterns. Deploy via Foundry with pre-configured test suites and example frontends using wagmi + viem.","learn_first":["ERC-4626 vault pattern (for lending)","Chainlink oracle interface (RedStone mimics it)","Push vs. pull oracle semantics","Solidity reentrancy guards and price staleness checks"],"tech_stack":{"ai":[],"data":["RedStone API","Ponder (optional for indexing)"],"infra":["Foundry","Forge","Anvil"],"other":["GitHub template repos","npm workspaces"],"wallet":["RainbowKit"],"indexer":[],"frontend":["wagmi","viem","React","TypeScript"],"contracts":["Solidity 0.8.x","OpenZeppelin contracts","RedStone adapter contracts"]},"build_steps":["Set up three separate Foundry projects (lending, perps, options) using `forge init` with RedStone adapter imports from npm","Write base contract for each primitive: LendingVault (ERC-4626 + RedStone price), PerpMarket (funding rate + oracle), OptionsPool (strike + oracle)","Integrate RedStone pull mode: call `redstone.getPrice(token)` in critical functions, wrap in try-catch for fallback","Add push mode support: accept signed price data via `redstone.processPricesFromCalldata()` for gas-efficient batch updates","Write Foundry tests using `forge test` with mock RedStone prices; test staleness, decimals, and edge cases (zero price, extreme slippage)","Create example frontend with wagmi hooks to fetch RedStone prices client-side and simulate contract calls before broadcast","Add deployment scripts in Foundry (`script/Deploy.s.sol`) targeting Ethereum, Arbitrum, Optimism, Base with environment-specific configs","Package each template as a GitHub template repo with README, CI/CD (GitHub Actions), and one-liner install instructions"],"gotchas":["RedStone decimals differ by asset (e.g., BTC is 8, USDC is 6); always normalize in contracts or you'll get 1e18 price errors","Push mode requires valid signatures from RedStone signers; verify signer address matches `redstone.signerAddress` or transactions revert silently","Pull mode has latency; if you need sub-second updates, push mode is mandatory but costs more gas per transaction","RedStone's adapter contract address differs per chain; hardcoding one address breaks cross-chain deploys—use a config file or env vars","Test with actual RedStone API responses early; mock prices in unit tests but integration tests must hit real endpoints to catch timestamp/signature issues"],"references":[{"url":"https://docs.redstone.finance","kind":"docs","label":"RedStone Documentation"},{"url":"https://github.com/redstone-finance","kind":"repo","label":"RedStone GitHub Organization"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Book"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://www.npmjs.com/package/@redstone-finance/evm-connector","kind":"repo","label":"RedStone Adapter Contracts (npm)"}],"time_estimate_hours":80,"projects":{"slug":"redstone"},"project_slug":"redstone","project":{"slug":"redstone","name":"RedStone","logo_url":"https://icons.llamao.fi/icons/protocols/redstone-oracles?w=64&h=64","category":"oracles"}},{"id":"cb03d47a-a104-4575-a7c0-d9d18707ef34","project_id":"101c91b1-35b3-4bb3-aa37-deeebf2ec0ef","title":"Feed Reliability Dashboard","pitch":"Historical stats per RedStone feed — uptime, deviation events, integrator count.","difficulty":"weekend","use_case":"security","build_with":["nextjs","the-graph","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:43.454206+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that aggregates RedStone oracle feed performance metrics over time. Query historical data on feed availability, price deviation spikes, and which protocols depend on each feed. Builders use this to audit oracle risk before integrating, and protocols use it to monitor their data dependencies. The dashboard surfaces anomalies (feeds going stale, unusual volatility) and tracks integrator adoption across chains.","learn_first":["RedStone push vs pull architecture","The Graph subgraph indexing","EVM event logs and ABI decoding"],"tech_stack":{"data":["RedStone on-chain contract events","Etherscan/block explorer APIs for chain context"],"infra":["Vercel or similar for hosting"],"indexer":["The Graph"],"frontend":["Next.js","Tailwind CSS","recharts or similar charting"]},"build_steps":["Set up a Subgraph project targeting Ethereum mainnet; index RedStone PriceFeed contract events (PriceUpdated, FeedRegistered) to capture feed names, timestamps, prices, and deviation thresholds","Create entity types in the subgraph schema: Feed (id, name, symbol, chain, decimals), PriceUpdate (id, feed, price, timestamp, deviation), Integrator (id, address, feeds used, chain)","Deploy the subgraph to The Graph's hosted service or decentralized network; backfill historical data by querying from RedStone's contract deployment block","Build a Next.js frontend with pages for /feeds (list all feeds with uptime %), /feed/[id] (detail view: 30-day uptime chart, recent deviations, integrators using it), and /health (overall oracle network status)","Add a query layer using Apollo Client or urql to fetch subgraph data; compute uptime % as (successful updates / expected updates in window) and flag feeds with >2% downtime or >5% price deviation in 24h","Implement a simple anomaly detector: if a feed's update frequency drops by >50% or price jumps >10% in one block, highlight it in red and log the event timestamp","Add a CSV export for auditors; include feed name, chain, uptime %, deviation events, and integrator list per feed","Deploy to Vercel with environment variables for subgraph endpoint; set up a cron job to refresh data every 6 hours"],"gotchas":["RedStone uses both on-chain and off-chain data; the subgraph only sees on-chain events, so you'll miss data about feeds that failed to post. Cross-reference with RedStone's own API or logs to get the full picture.","Deviation thresholds vary per feed and per integrator's custom config; the on-chain contract may not emit the threshold, so you'll need to hardcode or fetch from RedStone docs. Confirm with their team which feeds use which thresholds.","The Graph's query limits and latency can cause dashboard staleness; consider caching query results in a simple database (Supabase, Firebase) and refreshing every 5–10 minutes rather than on every page load.","Different chains (Ethereum, Arbitrum, Optimism, Base) have separate RedStone deployments; you'll need separate subgraphs or a multi-chain query layer to unify the view. Start with Ethereum, then add others."],"references":[{"url":"https://docs.redstone.finance","kind":"docs","label":"RedStone Docs — Architecture & Contracts"},{"url":"https://github.com/redstone-finance","kind":"repo","label":"RedStone GitHub — Contract ABIs and event signatures"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph — Subgraph Development"},{"url":"https://viem.sh","kind":"docs","label":"Viem — Read contract events and decode logs"},{"url":"https://eips.ethereum.org/EIPS/eip-7412","kind":"docs","label":"ERC-7412 & RedStone Oracle Integration Patterns"}],"time_estimate_hours":16,"projects":{"slug":"redstone"},"project_slug":"redstone","project":{"slug":"redstone","name":"RedStone","logo_url":"https://icons.llamao.fi/icons/protocols/redstone-oracles?w=64&h=64","category":"oracles"}},{"id":"ab53ee4d-048e-4d23-a9e4-3c30c7c775d3","project_id":"101c91b1-35b3-4bb3-aa37-deeebf2ec0ef","title":"Push vs Pull Cost Calculator","pitch":"Helps protocol integrators decide between RedStone push and pull modes based on update frequency × gas cost.","difficulty":"weekend","use_case":"infrastructure","build_with":["nextjs","viem","typescript"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:40.80556+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web tool that models the total cost of oracle updates for DeFi protocols using RedStone. Users input their update frequency, data freshness requirements, and target chains, then see side-by-side cost comparisons for push mode (RedStone pushes data on-chain) vs pull mode (protocol pulls data on-demand). Includes gas price volatility, L2 batch costs, and multi-chain deployment scenarios. Helps protocols like Pendle and Morpho make data infrastructure decisions early in their design phase.","learn_first":["RedStone push vs pull architecture","EVM gas metering and L2 cost models","Oracle update patterns in DeFi protocols"],"tech_stack":{"data":["RedStone API","ethers.js or viem for gas estimation"],"infra":["vercel"],"frontend":["nextjs","viem","typescript","tailwindcss","recharts"]},"build_steps":["Set up Next.js 14+ project with TypeScript and TailwindCSS","Create a form component accepting: update frequency (per hour/day/week), number of price feeds, target chains (Ethereum, Arbitrum, Optimism, Base), and data freshness SLA","Fetch current gas prices from each chain using viem's publicClient.getGasPrice() and store RedStone's documented push/pull costs per update","Build a cost calculator function: (updateFrequency × gasPrice × bytesPerUpdate) for pull mode vs (fixedPushCost × updateFrequency) for push mode, accounting for L2 batch compression","Integrate RedStone's API or documentation to pull real pricing tiers and update costs; add chain-specific multipliers (Arbitrum batch costs ~0.1× Ethereum, Optimism ~0.05×)","Render a comparison chart using Recharts showing monthly cost, cost per update, and break-even points across chains","Add a scenario builder: let users toggle between single-chain and multi-chain deployments, compare Uniswap V3 TWAP vs RedStone push costs","Deploy to Vercel and test with real gas prices; add a CSV export for protocol teams to share with stakeholders"],"gotchas":["RedStone push costs vary by data provider and feed count—document the assumption tier you're using (standard vs premium feeds)","L2 gas prices and batch compression ratios change frequently; consider caching gas price snapshots and refreshing hourly rather than on every request","Pull mode assumes on-demand data availability; if a protocol needs sub-second freshness, push mode may be mandatory regardless of cost","Slippage and MEV costs are separate from oracle costs—clarify in the UI that this tool models *oracle infrastructure* only, not execution costs"],"references":[{"url":"https://docs.redstone.finance/docs/smart-contract-integration/data-services","kind":"docs","label":"RedStone Docs: Push vs Pull"},{"url":"https://github.com/redstone-finance","kind":"repo","label":"RedStone GitHub"},{"url":"https://pendle.finance","kind":"tool","label":"Pendle Protocol (RedStone user)"},{"url":"https://morpho.org","kind":"tool","label":"Morpho Markets (RedStone user)"},{"url":"https://ethereum.org/en/developers/docs/gas/","kind":"docs","label":"EVM Gas Metering Guide"},{"url":"https://viem.sh/docs/actions/public/getGasPrice","kind":"docs","label":"Viem Gas Estimation"}],"time_estimate_hours":12,"projects":{"slug":"redstone"},"project_slug":"redstone","project":{"slug":"redstone","name":"RedStone","logo_url":"https://icons.llamao.fi/icons/protocols/redstone-oracles?w=64&h=64","category":"oracles"}},{"id":"e8710a22-cb95-4e1a-9198-9e2b955527bd","project_id":"101c91b1-35b3-4bb3-aa37-deeebf2ec0ef","title":"Modular Feed Builder","pitch":"Build a custom RedStone-style aggregated price feed (weighted average, with custom sources) and deploy.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","redstone-sdk","viem","typescript"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:37.110894+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"RedStone's modular architecture lets you compose price feeds from multiple sources (CEX APIs, on-chain protocols, alternative data) with custom weighting and aggregation logic. This project walks you through building a production-ready feed using RedStone's SDK, deploying it to their network, and integrating it into a simple frontend so you can monitor and test it. You'll learn how push/pull oracle mechanics work, how to handle data freshness and staleness, and how to integrate with protocols that already consume RedStone feeds.","learn_first":["How RedStone's push/pull oracle model differs from Chainlink","ERC-4626 and price feed consumer patterns","Weighted average aggregation and outlier handling","Data freshness and heartbeat mechanics"],"tech_stack":{"ai":[],"data":["RedStone SDK","CoinGecko API or similar price source","Alchemy or Infura for RPC"],"infra":["RedStone Data Nodes","Vercel or similar for frontend"],"other":["Node.js for data aggregator script"],"wallet":["Wagmi","RainbowKit"],"indexer":[],"frontend":["Next.js","Viem for contract interaction","TailwindCSS for UI"],"contracts":["RedStone consumer contract (Solidity)"]},"build_steps":["Set up a Node.js project with RedStone SDK, Viem, and ethers.js; scaffold a Next.js frontend with Wagmi and RainbowKit for wallet connection.","Write a TypeScript aggregator script that fetches prices from 2–3 sources (e.g., CoinGecko, Uniswap subgraph, a CEX API) and applies weighted averaging logic.","Deploy a simple RedStone consumer contract (or use an existing one like Morpho's) to a testnet (Arbitrum Sepolia or Base Sepolia) that validates RedStone price signatures.","Integrate your aggregator with RedStone's Data Node infrastructure: sign your aggregated prices with a private key and push them to RedStone's network using their SDK.","Build a Next.js page that reads your deployed consumer contract via Viem, displays the latest price, and shows the aggregation sources and weights.","Add a monitoring dashboard that logs price updates, staleness checks, and deviation alerts (e.g., if a new price deviates >5% from the previous one).","Test end-to-end: trigger a price update via your aggregator, confirm it appears on-chain, and verify the frontend reflects it in <2 seconds.","Deploy the frontend to Vercel and the aggregator as a scheduled Cloud Function (Google Cloud, AWS Lambda) that runs every 30–60 seconds."],"gotchas":["RedStone signatures are time-locked; if your aggregator is too slow or your clock drifts, signatures will be rejected. Use NTP sync and test with realistic latencies.","Weighted averaging can mask outliers; implement a simple outlier rejection (e.g., discard prices >2σ from median) before weighting to avoid flash-crash manipulation.","RedStone's pull mode requires the consumer to call the contract; if you're testing with a testnet, ensure your RPC has enough rate limits and doesn't timeout during signature verification.","Price source APIs (CoinGecko, CEX) can be rate-limited or go down; add fallback sources and circuit-breaker logic so your feed degrades gracefully rather than reverting.","RedStone's on-chain verification is gas-intensive; budget ~50–100k gas per price update. Test on mainnet-fork to measure real costs before deploying."],"references":[{"url":"https://docs.redstone.finance","kind":"docs","label":"RedStone Docs: Getting Started"},{"url":"https://github.com/redstone-finance/redstone-sdk","kind":"repo","label":"RedStone SDK GitHub"},{"url":"https://docs.redstone.finance/docs/smart-contract-integration/consumer-contract","kind":"docs","label":"RedStone Consumer Contract Example"},{"url":"https://github.com/morpho-org/morpho-blue","kind":"repo","label":"Morpho Oracle Integration"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reading Guide"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"}],"time_estimate_hours":80,"projects":{"slug":"redstone"},"project_slug":"redstone","project":{"slug":"redstone","name":"RedStone","logo_url":"https://icons.llamao.fi/icons/protocols/redstone-oracles?w=64&h=64","category":"oracles"}},{"id":"70aa0888-8236-42d6-bc18-61282386e750","project_id":"d80a811a-f90b-4813-a751-23f2cce21cda","title":"Express Relay Order Routing","pitch":"UI for searchers to discover and bid on Express Relay opportunities (Pyth's MEV market).","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","express-relay-sdk","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:34.694024+00:00","metadata":{},"source":"curated","why_now":"Express Relay is live on mainnet (Ethereum, Arbitrum, Optimism, Base) and searcher adoption is growing; a polished UI can capture market share from teams still using raw API integrations. Pyth's price feeds are now the default on most chains, making this a natural fit.","source_signal_ids":[],"published_at":null,"summary":"Build a dashboard where searchers can monitor pending Express Relay orders, see real-time bid opportunities with Pyth price feeds, and submit competitive bids. Express Relay is Pyth's MEV-resistant order flow auction—this UI surfaces available opportunities and lets searchers participate programmatically. You'll integrate the Express Relay SDK to fetch pending orders, display them with current Pyth prices, and route bids back to the relay. Target users: professional searchers and MEV operators who want a cleaner interface than raw API calls.","learn_first":["How Express Relay auctions work (order flow, bid mechanics, settlement)","Pyth price feed architecture and on-chain verification","MEV and searcher economics basics","Real-time WebSocket data handling in React"],"tech_stack":{"data":["Pyth Network price feeds (REST + on-chain)","Express Relay SDK (order discovery, bid submission)","WebSocket for real-time order stream"],"infra":["Vercel (Next.js hosting)","Alchemy or Infura RPC (multi-chain queries)"],"other":["TypeScript","dotenv (environment config)"],"wallet":["RainbowKit or Privy (multi-chain wallet support)"],"frontend":["Next.js (App Router)","React Query or SWR (for polling order updates)","TailwindCSS or shadcn/ui (dashboard UI)","Viem (for bid signing and submission)","Wagmi (wallet connection)"],"contracts":["Express Relay smart contracts (for bid settlement verification)"]},"build_steps":["Scaffold Next.js 14+ project with TypeScript; set up Tailwind and shadcn/ui for dashboard layout.","Integrate wagmi + RainbowKit for multi-chain wallet connection (Ethereum, Arbitrum, Optimism, Base, Solana if using Phantom).","Set up Express Relay SDK client; fetch live pending orders via REST endpoint and display in a table (order ID, token pair, amount, deadline).","Add Pyth price feed integration: fetch current prices for order tokens and display alongside bid opportunities; use Pyth REST API for simplicity.","Build a bid form component: input bid amount, display estimated profit (spread vs. Pyth price), sign bid with viem, submit via Express Relay SDK.","Implement real-time updates: poll Express Relay orders every 2–5 seconds using React Query; highlight new/updated orders.","Add bid history and settlement tracking: store submitted bids in localStorage or a simple backend; show status (pending, won, lost, settled).","Deploy to Vercel; test with testnet orders (Sepolia, Arbitrum Sepolia) before mainnet."],"gotchas":["Express Relay orders have tight deadlines (often <30s); UI must refresh rapidly and bid submission must be <1s latency, or you'll miss opportunities. Use React Query with aggressive refetch intervals.","Pyth price feeds have different update frequencies per chain; prices may lag during volatile markets. Always display the feed's timestamp and confidence interval to searchers.","Bid signing requires the searcher's private key or hardware wallet integration; Privy or Wagmi's useAccount hook handles this, but test wallet disconnections gracefully.","Express Relay SDK may rate-limit order fetches; implement exponential backoff and cache orders locally to avoid hammering the API.","Multi-chain complexity: searchers may bid on different chains; ensure your RPC calls and wallet context switch chains correctly, or bids will fail silently."],"references":[{"url":"https://docs.pyth.network/express-relay","kind":"docs","label":"Express Relay Documentation"},{"url":"https://docs.pyth.network","kind":"docs","label":"Pyth Network Docs"},{"url":"https://github.com/pyth-network/express-relay","kind":"repo","label":"Express Relay SDK (GitHub)"},{"url":"https://wagmi.sh","kind":"docs","label":"Wagmi Documentation"},{"url":"https://nextjs.org/docs/app","kind":"docs","label":"Next.js App Router Guide"},{"url":"https://viem.sh/docs/contract/writeContract","kind":"docs","label":"Viem Contract Interaction"}],"time_estimate_hours":80,"projects":{"slug":"pyth"},"project_slug":"pyth","project":{"slug":"pyth","name":"Pyth Network","logo_url":"https://icons.llamao.fi/icons/protocols/pyth-network?w=64&h=64","category":"oracles"}},{"id":"bdeec4ea-ddbf-4dd2-a281-9d7a4f72ce24","project_id":"d80a811a-f90b-4813-a751-23f2cce21cda","title":"Cross-Oracle Deviation Watcher","pitch":"Compares Pyth vs Chainlink vs RedStone for the same asset and pings when divergence > threshold.","difficulty":"weekend","use_case":"security","build_with":["node","pyth-sdk","chainlink-api","redstone-sdk"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:30.205291+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A monitoring service that continuously fetches price feeds from Pyth, Chainlink, and RedStone for key trading pairs, calculates the percentage deviation between them, and triggers alerts (Discord, email, or webhook) when divergence exceeds a configurable threshold. Useful for traders detecting stale feeds, arbitrage opportunities, or oracle manipulation attempts. Runs as a Node.js service with configurable asset lists and deviation thresholds per chain.","learn_first":["How Pyth's push-based model differs from Chainlink's pull-based architecture","Understanding price feed staleness and confidence intervals","Basic webhook/Discord bot setup for alerts"],"tech_stack":{"ai":[],"data":["Pyth SDK (TypeScript)","Chainlink Data Feeds API","RedStone SDK","ethers.js or viem for RPC calls"],"infra":["Node.js","dotenv for config","node-cron or setInterval for polling","Discord.js or Slack SDK for alerts"],"other":["axios or node-fetch for HTTP requests"],"wallet":[],"indexer":[],"frontend":[],"contracts":[]},"build_steps":["Set up a Node.js project with Pyth SDK, Chainlink ABI, and RedStone SDK; create .env for RPC endpoints and alert credentials.","Write a function to fetch Pyth prices using Pyth's on-chain or off-chain API (e.g., Hermes for Solana/EVM); handle confidence intervals.","Write a function to fetch Chainlink prices by calling aggregator contracts on each chain (Ethereum, Arbitrum, Optimism, Base); cache ABI locally.","Write a function to fetch RedStone prices via their REST API or on-chain contract calls; normalize all three to a common decimal format.","Implement deviation calculation: compute (max - min) / avg * 100 for each asset; compare against threshold (e.g., 0.5%).","Set up Discord webhook or Slack integration to send alerts with asset, prices from each oracle, deviation %, and timestamp.","Create a polling loop (e.g., every 10–30 seconds) that calls all three oracle functions, calculates deviations, and triggers alerts.","Deploy to a VPS or serverless function (AWS Lambda, Vercel) with persistent logging; test with a few major pairs (ETH/USD, BTC/USD) first."],"gotchas":["Pyth's on-chain prices on EVM require calling the Pyth contract; off-chain prices via Hermes are faster but require trusting their endpoint. Test both and pick based on latency needs.","Chainlink prices are stored in contracts with different decimals per feed; always normalize before comparing (e.g., ETH/USD is 8 decimals, USDC/USD is 8 decimals).","RedStone data can be fresher but less widely deployed; some chains or pairs may not have RedStone coverage—gracefully skip missing feeds rather than failing the entire check.","Rate limits: Chainlink RPC calls are free but heavy polling can hit node limits; use a dedicated RPC provider (Alchemy, Infura) with higher quotas. Pyth Hermes and RedStone APIs have their own rate limits.","Staleness: Chainlink feeds update on-chain only when price moves >0.1% or after a heartbeat (e.g., 24h); always check the updatedAt timestamp and skip stale feeds in deviation calc."],"references":[{"url":"https://docs.pyth.network/price-feeds/sdk-ts","kind":"docs","label":"Pyth SDK for TypeScript"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Data Feeds Docs"},{"url":"https://docs.redstone.finance/docs/smart-contract-sdk/price-feeds","kind":"docs","label":"RedStone SDK & API"},{"url":"https://docs.pyth.network/price-feeds/api-reference","kind":"docs","label":"Pyth Hermes API (off-chain prices)"},{"url":"https://docs.ethers.org/v6/api/contract/","kind":"docs","label":"ethers.js Contract Interaction Guide"},{"url":"https://discord.js.org/#/docs/main/stable/class/WebhookClient","kind":"docs","label":"Discord.js Webhooks"}],"time_estimate_hours":8,"projects":{"slug":"pyth"},"project_slug":"pyth","project":{"slug":"pyth","name":"Pyth Network","logo_url":"https://icons.llamao.fi/icons/protocols/pyth-network?w=64&h=64","category":"oracles"}},{"id":"37d00f41-7dac-4c1f-8678-7f32964948a9","project_id":"d80a811a-f90b-4813-a751-23f2cce21cda","title":"Pull-Oracle Gas Estimator","pitch":"Estimates the cost of including a Pyth price update in any transaction across chains.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","pyth-sdk","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:29.648175+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web tool that calculates the exact gas cost of pulling Pyth price feeds into transactions on Solana, Ethereum, Arbitrum, Optimism, Base, and Sui. Users input a target chain, number of price feeds, and update frequency; the tool returns current gas costs, historical trends, and optimization suggestions (batch updates, update windows, fallback feeds). Useful for dApp developers deciding whether to use Pyth pull oracles vs. push oracles, and for arbitrage bots optimizing execution costs.","learn_first":["How Pyth pull oracles work (on-demand price updates vs. push model)","Gas pricing differences across EVM chains (Arbitrum vs. Optimism calldata costs)","Pyth price feed IDs and update mechanisms","Basic RPC calls to estimate transaction costs"],"tech_stack":{"data":["Pyth SDK (Python or JavaScript)","Viem for EVM gas estimation","Solana Web3.js for Solana gas calculation"],"infra":["Vercel or similar for hosting","Public RPC endpoints (Alchemy, Infura, or chain-native)"],"frontend":["Next.js","TypeScript","Tailwind CSS","shadcn/ui"]},"build_steps":["Set up a Next.js project with TypeScript and Tailwind; scaffold a form component with chain selector, feed count input, and update frequency dropdown.","Integrate Pyth SDK to fetch current price feed metadata (IDs, update sizes, confidence intervals) and historical update costs from Pyth's on-chain data.","For EVM chains (Ethereum, Arbitrum, Optimism, Base): use Viem to simulate a transaction that calls Pyth's updatePriceFeeds contract; extract gasUsed and multiply by current gas price from RPC.","For Solana: use Solana Web3.js to estimate instruction size and compute units for a Pyth oracle update; calculate SOL cost using current network fees.","Create a results card showing: base gas cost, total cost in USD, cost per feed, and comparison across all supported chains.","Add a historical chart (using Recharts or similar) showing gas cost trends over the past 7 days for each chain.","Implement an optimization suggestions panel: recommend batching updates, suggest off-peak windows, or propose fallback feed combinations to reduce costs.","Deploy to Vercel with environment variables for RPC endpoints; add basic error handling for RPC failures and stale data."],"gotchas":["Pyth update sizes vary by feed and market conditions—don't hardcode; fetch fresh metadata each time.","EVM gas prices fluctuate rapidly; cache RPC gas price calls for 30–60 seconds to avoid rate limits and stale data.","Solana compute unit costs differ between devnet and mainnet; ensure you're querying the correct network.","Arbitrum and Optimism have different calldata pricing (Arbitrum charges per byte, Optimism uses EIP-4844 blobs); use chain-specific gas estimation, not generic formulas.","Pyth feeds on different chains may have different update frequencies and confidence intervals; don't assume parity across chains."],"references":[{"url":"https://docs.pyth.network","kind":"docs","label":"Pyth Documentation"},{"url":"https://github.com/pyth-network/pyth-js","kind":"repo","label":"Pyth SDK (JavaScript)"},{"url":"https://docs.pyth.network/price-feeds/pull-updates","kind":"docs","label":"Pyth Pull Oracle Architecture"},{"url":"https://viem.sh/docs/actions/public/estimateGas","kind":"docs","label":"Viem Gas Estimation"},{"url":"https://docs.solana.com/api/http","kind":"docs","label":"Solana RPC Methods"},{"url":"https://eips.ethereum.org/EIPS/eip-4844","kind":"docs","label":"EIP-4844 Blob Pricing (Optimism)"}],"time_estimate_hours":12,"projects":{"slug":"pyth"},"project_slug":"pyth","project":{"slug":"pyth","name":"Pyth Network","logo_url":"https://icons.llamao.fi/icons/protocols/pyth-network?w=64&h=64","category":"oracles"}},{"id":"9dcffc78-8bf9-41eb-8f33-b4c3b8d48fba","project_id":"d80a811a-f90b-4813-a751-23f2cce21cda","title":"Low-Latency Feed Marketplace","pitch":"Embeddable widget for any app to subscribe to a Pyth price feed and display it with built-in staleness checks.","difficulty":"weekend","use_case":"infrastructure","build_with":["nextjs","pyth-sdk","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:23.69615+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a reusable React component that fetches live Pyth price feeds, handles subscription lifecycle, and displays prices with real-time staleness indicators. The widget should work across Solana, Ethereum, Arbitrum, Optimism, and Base—letting developers drop it into any app without managing Pyth SDK complexity. Include a simple admin dashboard to configure which feeds to expose and set staleness thresholds. This is infrastructure-level tooling that reduces friction for apps integrating Pyth.","learn_first":["Pyth price feed structure and subscription model","WebSocket vs HTTP polling trade-offs for price updates","EVM vs Solana RPC differences when fetching on-chain prices","React hooks for managing real-time data streams"],"tech_stack":{"ai":[],"data":["Pyth SDK","Pyth WebSocket API"],"infra":["Vercel or similar for hosting the widget"],"other":["TypeScript"],"wallet":["wagmi","viem"],"indexer":[],"frontend":["React","Next.js","TailwindCSS","Zustand or Jotai for state"],"contracts":[]},"build_steps":["Scaffold a Next.js app with TypeScript and set up a simple component library structure.","Install and configure pyth-sdk-js (or pyth-sdk-solana if targeting Solana first); read the price feed docs to understand PriceFeed objects and confidence intervals.","Build a PriceWidget React component that accepts a feed ID and chain as props; use useEffect to subscribe to Pyth WebSocket or HTTP endpoint.","Implement staleness detection: track the timestamp of the last price update and compare against a configurable threshold (e.g., 5 seconds); render a visual indicator (green = fresh, yellow = stale, red = very stale).","Add error handling and fallback states: network failures, missing feed IDs, and subscription timeouts should display user-friendly messages.","Create a simple Next.js API route that acts as a proxy to list available Pyth feeds per chain; this lets the widget discover feeds dynamically.","Build a minimal admin dashboard (same Next.js app) where users can paste in feed IDs, set staleness thresholds, and preview the widget in real-time.","Package the component as an npm module or embed code snippet (similar to Stripe's payment form) so external apps can import it without a full Next.js setup."],"gotchas":["Pyth feeds update at different intervals per feed; some update every 400ms, others every few seconds. Document this and let users set realistic staleness thresholds or the widget will flicker between stale/fresh.","WebSocket connections can drop; implement reconnection logic with exponential backoff, or fall back to polling. Test this explicitly—don't assume the connection stays open.","Confidence intervals vary wildly by feed (some ±0.01%, others ±5%). Display confidence alongside price, or users will trust stale or low-confidence data.","Cross-chain price feeds may have different update frequencies and data sources. A feed on Solana might update faster than the same feed on Arbitrum; make this visible to users.","If you embed the widget as a script tag (like Stripe), ensure you're not leaking API keys or feed IDs in the client-side code; use environment variables and a backend proxy."],"references":[{"url":"https://docs.pyth.network/price-feeds/sdk-consumers","kind":"docs","label":"Pyth SDK Documentation"},{"url":"https://pyth.network/price-feeds","kind":"tool","label":"Pyth Price Feed IDs and Metadata"},{"url":"https://docs.pyth.network/price-feeds/api-reference","kind":"docs","label":"Pyth WebSocket API Guide"},{"url":"https://wagmi.sh/react/api/hooks","kind":"docs","label":"wagmi Hooks Documentation"},{"url":"https://nextjs.org/docs/pages/building-your-application/routing/api-routes","kind":"docs","label":"Next.js API Routes"},{"url":"https://github.com/pyth-network/pyth-crosschain","kind":"repo","label":"Pyth Network GitHub"}],"time_estimate_hours":12,"projects":{"slug":"pyth"},"project_slug":"pyth","project":{"slug":"pyth","name":"Pyth Network","logo_url":"https://icons.llamao.fi/icons/protocols/pyth-network?w=64&h=64","category":"oracles"}},{"id":"d1b9d968-1ad6-4653-a94c-0e2c5ddb263e","project_id":"12f6fc38-35db-4506-8db1-42723ba73c9b","title":"VRF Random Number Audit Trail","pitch":"Public log of every VRF random number used by any contract, with verification UI.","difficulty":"weekend","use_case":"security","build_with":["nextjs","viem","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:21.040259+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A transparency layer for Chainlink VRF. Builders and users often can't verify that a random number was actually generated fairly—they trust the contract code but not the oracle flow. This project indexes all VRF requests and fulfillments from Chainlink VRF Coordinator contracts, stores them in a queryable database, and exposes a web UI where anyone can paste a request ID and see the exact random value, block timestamp, and proof that it was generated on-chain. Useful for auditing gaming contracts, lotteries, and NFT mints. Catches bugs (e.g., a contract that reuses old random values) and gives users confidence in fairness.","learn_first":["Chainlink VRF v2+ request/fulfillment flow","Event indexing and filtering","Merkle proof verification of randomness"],"tech_stack":{"ai":[],"data":["PostgreSQL"],"infra":[],"other":["ethers.js for verification math"],"wallet":[],"indexer":["Ponder"],"frontend":["Next.js","viem","TanStack Query"],"contracts":["Chainlink VRF Coordinator (read-only)"]},"build_steps":["Set up a Ponder project targeting Ethereum mainnet; add the Chainlink VRF Coordinator contract ABI (0x271682DEB8C4E0901D1a1550aD2e64D568E69909 for v2.5 on mainnet).","Index VRF events: RandomWordsRequested and RandomWordsFulfilled. Store request ID, requester address, block number, and raw randomness bytes.","Create a Next.js page with a search form; accept a request ID or tx hash and query the indexed data via Ponder's GraphQL API.","Verify the randomness on-chain: call VRFCoordinator.getRequestStatus(requestId) to confirm fulfillment and compare stored values.","Add a results view showing request details, fulfillment block, gas used, and a human-readable breakdown of the random number (e.g., 'modulo 100 = 47').","Deploy Ponder indexer to a public endpoint (Railway, Render, or self-hosted).","Deploy Next.js frontend to Vercel; wire it to your Ponder GraphQL endpoint.","Add multi-chain support by indexing the same Coordinator contract on Arbitrum, Optimism, Base, and Polygon in parallel Ponder instances."],"gotchas":["VRF Coordinator contract address differs per chain and per version (v2 vs v2.5); hardcode the right one or fetch from Chainlink's registry.","RandomWordsFulfilled events may emit days after RandomWordsRequested; don't assume real-time sync. Index with a backfill strategy.","Raw randomness is bytes32; converting to uint256 or modulo operations must match the consumer contract's logic exactly, or your audit will show the 'wrong' number.","Ponder's GraphQL schema auto-generates from events; you'll need to add computed fields (like 'requestAge' or 'modulo results') via resolvers, not just raw event data."],"references":[{"url":"https://docs.chain.link/vrf/v2-5/overview","kind":"docs","label":"Chainlink VRF v2.5 Docs"},{"url":"https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/vrf/VRFCoordinatorV2_5.sol","kind":"repo","label":"Chainlink VRF Coordinator ABI (GitHub)"},{"url":"https://ponder.sh/docs","kind":"docs","label":"Ponder Documentation"},{"url":"https://blog.chain.link/chainlink-vrf-v2-explained/","kind":"article","label":"VRF Request & Fulfillment Flow (Chainlink Blog)"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions","kind":"docs","label":"Next.js + GraphQL Integration"}],"time_estimate_hours":8,"projects":{"slug":"chainlink"},"project_slug":"chainlink","project":{"slug":"chainlink","name":"Chainlink","logo_url":"https://icons.llamao.fi/icons/protocols/chainlink?w=64&h=64","category":"oracles"}},{"id":"c12fc4a8-a751-4c81-a3c6-d975fcebc9b8","project_id":"4610a9ef-8117-411e-bfa0-f6694617c214","title":"Yield-Bearing Stock Vaults","pitch":"Pendle-style vaults that split Backed token yield (dividends) from price exposure.","difficulty":"1+ month","use_case":"yield","build_with":["foundry","nextjs","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:18.641837+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a vault system that separates Backed Finance tokenized stocks (bIB01, bCOIN, etc.) into two tranches: a yield-bearing tranche that captures dividend distributions, and a price-exposure tranche that tracks underlying asset appreciation. Users deposit Backed tokens and receive PT (Principal Token) and YT (Yield Token) in return, enabling yield farmers to harvest dividends while price speculators isolate directional exposure. This mirrors Pendle's architecture but tailored to RWA dividend mechanics—handling corporate actions, ex-dividend dates, and reinvestment strategies on-chain.","learn_first":["ERC-4626 vault standard","Pendle's PT/YT token mechanics","Backed Finance dividend distribution flow","Chainlink oracle patterns for RWA pricing","Solidity reentrancy guards and access control"],"tech_stack":{"data":["Backed Finance API for dividend schedules","Chainlink Data Feeds for asset pricing"],"infra":["Foundry for testing and deployment","Etherscan/Blockscout for verification"],"other":["Safe (Gnosis Safe) for vault governance"],"wallet":["RainbowKit","Privy (optional for email login)"],"indexer":["Ponder","The Graph (optional subgraph for historical yields)"],"frontend":["Next.js 14+","wagmi 2.x","viem","RainbowKit","ethers.js for contract interaction"],"contracts":["Solidity 0.8.20+","OpenZeppelin ERC-4626","OpenZeppelin AccessControl","Chainlink Price Feeds"]},"build_steps":["Set up Foundry project with OpenZeppelin contracts and Chainlink interfaces; create base vault contract inheriting ERC-4626","Define PT (Principal Token) and YT (Yield Token) as ERC-20s; implement mint/burn logic tied to deposit/withdrawal","Integrate Backed Finance token interface and query dividend distribution schedule via their API or contract events","Implement dividend claim mechanism: intercept Backed token transfers, accumulate dividends in vault, distribute to YT holders proportionally","Add Chainlink price feed oracle integration to track underlying asset value and calculate exchange rates between PT and YT","Build Next.js frontend with wagmi hooks for deposit/withdraw flows, display PT/YT balances, show projected yield APY","Deploy to testnet (Sepolia or Base Sepolia), run integration tests with mock Backed tokens and Chainlink feeds","Audit dividend accrual logic and reentrancy guards; deploy to mainnet with timelocks and governance controls"],"gotchas":["Backed tokens may have transfer restrictions or require whitelisting; verify Backed's KYC/AML requirements before allowing arbitrary deposits","Dividend distribution timing is asynchronous—ex-dividend dates and payment delays require careful state management to avoid claiming same dividend twice","YT value approaches zero near maturity; implement expiry logic and redemption mechanics to prevent dust tokens","Chainlink price feeds may have stale data or gaps during market stress; add fallback oracle or circuit breaker logic","ERC-4626 rounding edge cases can leak value; test deposit/withdraw cycles extensively with small amounts and large numbers"],"references":[{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://github.com/pendle-finance/pendle-core-v2-public","kind":"repo","label":"Pendle Finance Whitepaper & Contracts"},{"url":"https://docs.backed.fi","kind":"docs","label":"Backed Finance Documentation"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Price Feeds"},{"url":"https://docs.openzeppelin.com/contracts/4.x/api/token/erc20#ERC4626","kind":"docs","label":"OpenZeppelin ERC-4626 Implementation"},{"url":"https://book.getfoundry.sh/","kind":"docs","label":"Foundry Book"}],"time_estimate_hours":160,"projects":{"slug":"backed"},"project_slug":"backed","project":{"slug":"backed","name":"Backed Finance","logo_url":"https://icons.llamao.fi/icons/protocols/backed-finance?w=64&h=64","category":"rwa"}},{"id":"d8156205-c301-4d37-baa9-b96ab735b77f","project_id":"12f6fc38-35db-4506-8db1-42723ba73c9b","title":"Automation Job Marketplace","pitch":"Discovery board for Chainlink Automation jobs — kept by whom, what they trigger, how reliable.","difficulty":"weekend","use_case":"infrastructure","build_with":["nextjs","chainlink-functions","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:16.370417+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A searchable, filterable registry of active Chainlink Automation jobs across all supported chains. Builders deploy jobs to automate contract functions (liquidations, rebalancing, settlements) but there's no central visibility into what's running, who maintains them, uptime stats, or gas costs. This marketplace aggregates job metadata from on-chain Automation Registry contracts, indexes execution history via The Graph or Ponder, and surfaces reliability metrics (execution success rate, average gas spent, keeper diversity). Users can browse by chain, trigger type (time-based, log-based, custom logic), target contract, and keeper reputation. Includes a simple dashboard showing job owner contact info (optional ENS/Twitter), recent executions, and estimated monthly automation costs. Solves discoverability and trust for teams evaluating which jobs are battle-tested.","learn_first":["Chainlink Automation Registry contract structure","Log-based vs time-based triggers in Automation","Keeper economics and gas reimbursement model","GraphQL querying for on-chain event indexing"],"tech_stack":{"data":["Ethers.js v6 or Viem for contract ABIs","PostgreSQL or Supabase for caching job metadata"],"infra":["Vercel for deployment","CORS-enabled RPC endpoints (Alchemy, Infura)"],"other":["ENS resolution for job owner names"],"indexer":["The Graph (Chainlink Automation subgraph or custom)","Ponder for real-time indexing"],"frontend":["Next.js 14+ with App Router","TanStack React Query for data fetching","shadcn/ui for components","Recharts for execution history charts"],"contracts":["Chainlink AutomationRegistry (0x02777053d6764996e00f2d58f00f23ac974d379b on mainnet)"]},"build_steps":["Set up Next.js 14 project with TypeScript and shadcn/ui component library.","Write a subgraph or Ponder indexer that listens to AutomationRegistry events (UpkeepRegistered, UpkeepPerformed) across all supported chains; store job ID, owner, target contract, trigger type, and execution history.","Create a Viem client to fetch live upkeep state from AutomationRegistry contract (getUpkeep, getActiveUpkeepIDs) for each chain; cache results in Supabase with 5-min TTL.","Build a Next.js API route (/api/jobs) that aggregates indexer data + on-chain state; compute reliability metrics (success rate over last 30 days, avg gas per execution, keeper count).","Implement a React component library: JobCard (displays job summary), JobFilters (chain, trigger type, owner), JobDetail (full execution history chart, keeper list, gas trends).","Add a search page that queries the API, filters client-side or server-side, and renders results with sorting by reliability, recency, or gas cost.","Deploy indexer to The Graph (if using subgraph) or self-host Ponder; deploy Next.js app to Vercel.","Add optional features: job owner contact form (email via Resend), uptime SLA badges, keeper reputation scoring based on execution success."],"gotchas":["AutomationRegistry contract addresses differ per chain; maintain a config map and test on testnet (Sepolia, Arbitrum Sepolia) first.","Log-based triggers emit UpkeepPerformed events but not all executions are indexed immediately; expect 1–2 block latency from indexer.","Gas reimbursement is paid in LINK, not ETH; display both LINK and USD equivalent using a Chainlink price feed.","Keeper diversity is hard to infer from events alone; consider scraping keeper registry or asking job owners directly.","Some jobs may be paused or cancelled; filter out inactive upkeeps to avoid stale data in the marketplace."],"references":[{"url":"https://docs.chain.link/chainlink-automation/overview","kind":"docs","label":"Chainlink Automation Registry Docs"},{"url":"https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/automation/AutomationRegistry.sol","kind":"repo","label":"Chainlink Automation Contract ABI"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://docs.chain.link/chainlink-automation/concepts/keeper-economics","kind":"docs","label":"Chainlink Automation Keeper Economics"},{"url":"https://viem.sh/docs/contract/getContract","kind":"docs","label":"Viem Contract Reading Guide"}],"time_estimate_hours":16,"projects":{"slug":"chainlink"},"project_slug":"chainlink","project":{"slug":"chainlink","name":"Chainlink","logo_url":"https://icons.llamao.fi/icons/protocols/chainlink?w=64&h=64","category":"oracles"}},{"id":"b96a7b4f-e391-496e-8b47-b43cb258c8a9","project_id":"12f6fc38-35db-4506-8db1-42723ba73c9b","title":"Oracle Health Dashboard","pitch":"Per-feed health stats — staleness, deviation, decommissioning roadmap. The 'is this oracle safe to integrate' tool.","difficulty":"weekend","use_case":"security","build_with":["nextjs","chainlink-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:09.693911+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time monitoring dashboard that surfaces Chainlink oracle feed health metrics across multiple chains. Displays staleness (time since last update), deviation thresholds, price accuracy, heartbeat intervals, and deprecation schedules. Builders can query by feed address or asset pair to assess integration safety before deploying. Pulls data from Chainlink's on-chain registry, historical price updates via The Graph or Ponder, and combines with feed configuration metadata to flag risky feeds (old updates, high deviation, scheduled decommissioning).","learn_first":["Chainlink Data Feeds architecture (aggregator contracts, roundId, answer, updatedAt)","ERC-2362 (oracle interface standard)","Chainlink feed registry pattern (getFeed, latestRoundData)","Basic subgraph or Ponder indexing for historical price deltas"],"tech_stack":{"data":["Chainlink API (feed metadata)","RPC calls via viem"],"infra":["Vercel","ethers.js or viem for contract reads"],"indexer":["The Graph (Chainlink subgraph)","Ponder (optional, for custom indexing)"],"frontend":["Next.js","React","TailwindCSS","Recharts or similar for time-series charts"],"contracts":["Chainlink AggregatorV3Interface","Chainlink FeedRegistry"]},"build_steps":["Scaffold Next.js app with TypeScript; set up Tailwind for styling.","Create a feeds data layer: fetch Chainlink FeedRegistry addresses for major chains (Ethereum, Arbitrum, Optimism, Base, Polygon) using viem multicall to read feed metadata in bulk.","Build a feed search/filter UI: input by asset pair (e.g., ETH/USD) or contract address; display feed name, chain, heartbeat, deviation threshold, and current status.","Integrate Chainlink Data Feeds API (or subgraph) to pull latest round data (answer, updatedAt, roundId) for each feed; calculate staleness in seconds.","Add historical price delta tracking: query The Graph's Chainlink subgraph (or index with Ponder) to compute 24h/7d price deviation and volatility.","Implement a deprecation/roadmap layer: hardcode or fetch from Chainlink docs the list of deprecated feeds and scheduled decommissioning dates; highlight these in red.","Create a health score card for each feed: combine staleness, deviation, and deprecation status into a simple traffic-light indicator (green/yellow/red).","Deploy to Vercel; add caching (ISR or SWR) to avoid rate-limiting on RPC calls; test across all 7 chains."],"gotchas":["Chainlink FeedRegistry is not deployed on all chains uniformly; Polygon and BSC have partial coverage. Maintain a chain-specific registry of known feed addresses or fall back to direct aggregator contract calls.","Price updates are asynchronous; a feed may not update for hours if price hasn't deviated beyond the threshold. Staleness alone doesn't mean the feed is broken—check heartbeat config and compare to expected update frequency.","The Graph's Chainlink subgraph may lag by a few blocks; for real-time staleness, prefer direct on-chain latestRoundData() calls via RPC, then use subgraph for historical analysis only.","Chainlink's deprecation roadmap is published in docs and governance forums, not on-chain; you'll need to maintain a manual list or scrape Chainlink's official announcements.","Rate-limiting on free RPC endpoints can throttle multicall queries across 7 chains; use a paid RPC service (Alchemy, Infura) or batch requests carefully."],"references":[{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Data Feeds Docs"},{"url":"https://docs.chain.link/data-feeds/feed-registry","kind":"docs","label":"Chainlink FeedRegistry Contract"},{"url":"https://thegraph.com/explorer/subgraphs/98Svmvd2FqXXbVoLmtaVrKDX3zSJzZAJMtd9qKjnVKMo?view=Overview&chain=arbitrum-one","kind":"tool","label":"Chainlink Subgraph (The Graph)"},{"url":"https://eips.ethereum.org/EIPS/eip-2362","kind":"docs","label":"ERC-2362 Oracle Interface Standard"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reading Guide"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"}],"time_estimate_hours":12,"projects":{"slug":"chainlink"},"project_slug":"chainlink","project":{"slug":"chainlink","name":"Chainlink","logo_url":"https://icons.llamao.fi/icons/protocols/chainlink?w=64&h=64","category":"oracles"}},{"id":"25b25fd3-8c6b-4765-b694-436027c7ed16","project_id":"12f6fc38-35db-4506-8db1-42723ba73c9b","title":"CCIP Cross-chain Token Issuer","pitch":"No-code wizard for projects to deploy a CCIP-compatible token across chains in minutes.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","ccip-sdk","foundry"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:09.663807+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web-based configuration tool that generates and deploys ERC-20 tokens with CCIP messaging enabled across Ethereum, Arbitrum, Optimism, Base, Polygon, BSC, and Avalanche. Users input token parameters (name, symbol, supply, initial chains), the tool generates Solidity code using OpenZeppelin's ERC-20 and Chainlink's CCIP router contracts, handles deployment via Foundry or Hardhat, and provisions CCIP lanes for cross-chain transfers. The wizard abstracts away manual contract writing, lane configuration, and multi-chain deployment orchestration—reducing setup from days to minutes for teams launching tokens that need liquidity across multiple chains.","learn_first":["ERC-20 token standards","CCIP architecture and lane setup","Foundry contract deployment","Cross-chain messaging patterns"],"tech_stack":{"data":["Chainlink CCIP supported chains config"],"infra":["Foundry for contract compilation and deployment","Ethers.js or Viem for RPC calls"],"other":["GitHub Gist or similar for generated contract storage"],"frontend":["Next.js","TypeScript","RainbowKit for wallet connection","Wagmi for contract interaction"],"contracts":["OpenZeppelin ERC-20","Chainlink CCIP Router","Chainlink CCIP Receiver"]},"build_steps":["Set up Next.js project with RainbowKit and Wagmi; create form UI for token name, symbol, initial supply, and target chains.","Build backend API endpoint that accepts form data and generates ERC-20 + CCIP receiver contract code using template strings or a code generation library.","Integrate Foundry CLI calls to compile generated contracts; store compiled bytecode and ABI in state or temporary storage.","Add wallet connection flow (RainbowKit) and chain selection; fetch user's signer and target chain RPC endpoints via Wagmi.","Implement multi-chain deployment logic: loop through selected chains, call create2 or standard deployment via ethers/viem, store deployed addresses.","Query Chainlink CCIP documentation or config API to fetch supported lanes between deployed chains; generate lane setup instructions or auto-configure via contract calls.","Build confirmation UI showing deployed token addresses, CCIP lanes, and generated contract code for reference.","Test end-to-end on testnet (Sepolia, Arbitrum Sepolia, Optimism Sepolia, Base Sepolia, Polygon Mumbai, BSC Testnet, Avalanche Fuji); verify cross-chain transfers via CCIP."],"gotchas":["CCIP lane availability varies by chain pair and direction—not all chains have bidirectional lanes. Pre-validate lane existence before deployment or surface warnings in the UI.","Gas estimation across chains differs significantly; the wizard must fetch live gas prices per chain and warn users if deployment costs exceed expectations.","CCIP receiver contract must implement the CCIPReceiver interface correctly; generated code must include proper onlyRouter modifiers and message validation to avoid security issues.","Testnet faucets and LINK token availability can be bottlenecks; guide users through obtaining testnet LINK before deployment or provide a faucet link in the UI.","Contract verification on block explorers requires source code upload; the wizard should offer one-click Etherscan/Arbiscan verification or at minimum provide flattened contract code."],"references":[{"url":"https://docs.chain.link/ccip","kind":"docs","label":"Chainlink CCIP Documentation"},{"url":"https://github.com/smartcontractkit/ccip","kind":"repo","label":"CCIP Contracts Repository"},{"url":"https://docs.openzeppelin.com/contracts/4.x/erc20","kind":"docs","label":"OpenZeppelin ERC-20 Implementation"},{"url":"https://book.getfoundry.sh/","kind":"docs","label":"Foundry Book"},{"url":"https://wagmi.sh/","kind":"docs","label":"Wagmi Documentation"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup Guide"}],"time_estimate_hours":80,"projects":{"slug":"chainlink"},"project_slug":"chainlink","project":{"slug":"chainlink","name":"Chainlink","logo_url":"https://icons.llamao.fi/icons/protocols/chainlink?w=64&h=64","category":"oracles"}},{"id":"4ff6b420-10ea-426c-8313-1b15b2f3dbb5","project_id":"4610a9ef-8117-411e-bfa0-f6694617c214","title":"24/7 Stock Trading UI","pitch":"Clean trading UI for Backed tokens with weekend awareness — shows last-NYSE-close anchored price.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","backed-api","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:21:00.934011+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a Next.js trading interface for Backed Finance's tokenized stocks (bIB01, bCOIN, etc.) that surfaces the last closing price from traditional markets, current on-chain liquidity, and bid-ask spreads. The UI handles the reality that stock prices are anchored to NYSE closes but tokens trade 24/7 on Ethereum/Base/Polygon/Arbitrum. Show users exactly what they're getting: the reference price, the current spread, and when the next market open will refresh the peg. Include a simple order flow (buy/sell with slippage tolerance) and a portfolio view of held Backed tokens.","learn_first":["How Backed Finance anchors tokenized stock prices to NYSE closes","ERC-20 token standards and decimal handling","Liquidity pools and AMM slippage calculation","Wallet connection patterns in modern web3 UX"],"tech_stack":{"ai":[],"data":["Backed API (price feeds, token metadata)","Coingecko or CoinMarketCap for reference data (optional)","Etherscan/Alchemy for on-chain balance queries"],"infra":["Vercel for hosting","Alchemy or Infura for RPC endpoints"],"other":["Decimal.js for precise price math"],"wallet":["RainbowKit","Privy (optional, for email login)"],"indexer":[],"frontend":["Next.js 15+","React 18+","TailwindCSS or similar","wagmi 2.x","viem 2.x","RainbowKit for wallet connection"],"contracts":["ERC-20 (Backed tokens)","Uniswap V3 or similar DEX for liquidity"]},"build_steps":["Scaffold a Next.js 15 project with TypeScript; set up TailwindCSS and folder structure (pages/api, components, lib).","Integrate RainbowKit + wagmi for multi-chain wallet connection (Ethereum, Base, Polygon, Arbitrum); test with a local wallet.","Build a data layer: fetch Backed token metadata (symbol, decimals, current price) from Backed API; cache with SWR or React Query.","Create a price display component: show last NYSE close (from Backed API), current on-chain price (from DEX or Backed price feed), and the spread as a percentage.","Implement a simple token selector dropdown and balance fetcher using viem's publicClient.readContract() for ERC-20 balanceOf.","Build a buy/sell form with input validation, slippage tolerance slider, and estimated output calculator using Decimal.js for precision.","Wire up transaction execution: use wagmi's useContractWrite or viem's sendTransaction to approve and swap tokens; show pending/confirmed states.","Deploy to Vercel; test across all four chains using chain switcher in RainbowKit; verify price feeds update correctly."],"gotchas":["Backed token prices are pegged to NYSE closes but only update at market open/close — show users the timestamp of the last peg update so they know if they're trading on stale data.","Decimal precision varies by token (some 6, some 18); always normalize using token.decimals from Backed API before displaying or calculating.","Liquidity on each chain differs significantly; fetch real-time reserves from the DEX or Backed's liquidity endpoint to show accurate slippage before the user commits.","Weekend/holiday trading: prices won't update until market reopens, but tokens will still trade on-chain at whatever spread the market sets — clearly warn users they may be trading at a discount or premium to the next official close."],"references":[{"url":"https://docs.backed.fi","kind":"docs","label":"Backed Finance Docs"},{"url":"https://github.com/backedfi","kind":"repo","label":"Backed GitHub"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://www.rainbowkit.com","kind":"docs","label":"RainbowKit Docs"},{"url":"https://docs.openzeppelin.com/contracts/5.x/erc20","kind":"docs","label":"ERC-20 Standard (OpenZeppelin)"}],"time_estimate_hours":80,"projects":{"slug":"backed"},"project_slug":"backed","project":{"slug":"backed","name":"Backed Finance","logo_url":"https://icons.llamao.fi/icons/protocols/backed-finance?w=64&h=64","category":"rwa"}},{"id":"f19675c2-e00b-43f0-a355-e664d3604c67","project_id":"4610a9ef-8117-411e-bfa0-f6694617c214","title":"TradFi vs DeFi Arbitrage Alerter","pitch":"Pings when Backed tokens drift from underlying stock price by > N bps.","difficulty":"weekend","use_case":"trading","build_with":["node","viem","polygon-api","ethers"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:57.736089+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A monitoring service that watches real-time price feeds for Backed Finance tokenized assets (bIB01, bCOIN, etc.) and compares them against live TradFi benchmarks (Yahoo Finance, Polygon Market Data API, or exchange feeds). When the on-chain token price diverges from the underlying asset by more than a configurable threshold (e.g., 50 bps), the alerter sends notifications via Telegram, Discord, or email. This captures arbitrage opportunities: if bIB01 trades at a 100 bp premium to the real S&P 500 index, a trader can buy the underlying and short the token on-chain. The service runs continuously, tracks multiple assets across Ethereum, Base, Polygon, and Arbitrum, and logs all alerts for later analysis.","learn_first":["How Backed Finance tokenizes real-world assets and maintains price feeds","Uniswap V3 / V4 swap mechanics and liquidity pools for Backed tokens","Chainlink price oracles and how they differ from DEX spot prices","Arbitrage mechanics: basis, carry, and execution risk in crypto vs TradFi"],"tech_stack":{"ai":[],"data":["Chainlink Data Feeds","Polygon Market Data API","Yahoo Finance API or IEX Cloud","Uniswap V3 subgraph (The Graph)"],"infra":["Node.js runtime","Telegram Bot API or Discord Webhook","Ethers.js or Viem for RPC calls"],"other":["SQLite or PostgreSQL for alert history"],"wallet":[],"indexer":[],"frontend":[],"contracts":["Backed Finance token contracts (bIB01, bCOIN, etc.)"]},"build_steps":["Set up a Node.js project with viem, ethers, and axios; configure RPC endpoints for Ethereum, Base, Polygon, and Arbitrum.","Fetch current Backed token prices from Uniswap V3 pools using viem's multicall or direct contract calls to getReserves() and calculate spot price.","Fetch real-world asset prices from Chainlink price feeds (via Ethereum mainnet) or a TradFi API (Polygon Market Data, IEX Cloud, or Yahoo Finance).","Calculate the basis (on-chain price minus underlying price) and convert to basis points; compare against your alert threshold (e.g., 50 bps).","Set up a Telegram Bot or Discord Webhook to send alerts when threshold is breached; include token name, current prices, basis, and chain.","Implement a simple SQLite database to log all price checks and alerts for later analysis and backtesting.","Add configuration file (JSON or .env) to set alert thresholds per token, polling interval (e.g., every 30 seconds), and notification channels.","Deploy on a VPS or serverless function (AWS Lambda, Fly.io) to run continuously; add error handling and reconnection logic for RPC failures."],"gotchas":["Backed tokens may have low liquidity on some chains; Uniswap V3 spot price can be heavily slippage-dependent. Use time-weighted average price (TWAP) from Uniswap V3 oracle instead of spot for more robust signals.","TradFi data sources (Yahoo, IEX) have rate limits and may lag by 15–60 seconds; your alerts could be stale. Combine multiple feeds and add a freshness check.","Chainlink price feeds on different chains may report different prices due to network-specific aggregators; verify which feed you're using and whether it matches the underlying asset.","Arbitrage execution is hard: even if you detect a 100 bp spread, slippage, gas costs, and borrowing fees can eat into or eliminate profit. Simulate execution cost before alerting.","RPC nodes can be slow or unreliable; use multiple RPC endpoints (Alchemy, Infura, QuickNode) and implement fallback logic to avoid false alerts."],"references":[{"url":"https://docs.backed.fi","kind":"docs","label":"Backed Finance Docs"},{"url":"https://github.com/backedfi","kind":"repo","label":"Backed Finance GitHub"},{"url":"https://thegraph.com/hosted-service/subgraph/uniswap/uniswap-v3","kind":"tool","label":"Uniswap V3 Subgraph"},{"url":"https://docs.chain.link/data-feeds/price-feeds","kind":"docs","label":"Chainlink Price Feeds"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://polygon.io/docs/stocks/getting-started","kind":"docs","label":"Polygon Market Data API"}],"time_estimate_hours":12,"projects":{"slug":"backed"},"project_slug":"backed","project":{"slug":"backed","name":"Backed Finance","logo_url":"https://icons.llamao.fi/icons/protocols/backed-finance?w=64&h=64","category":"rwa"}},{"id":"287d214d-c3b3-40f9-92d6-c66b4397cf83","project_id":"4610a9ef-8117-411e-bfa0-f6694617c214","title":"On-Chain Stock Index Builder","pitch":"Build and deploy a custom index of Backed tokenized stocks (e.g. on-chain S&P-5). Auto-rebalances.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["foundry","nextjs","wagmi"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:55.444573+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Create an ERC-4626 vault that holds a basket of Backed's tokenized stocks (bIB01, bCOIN, etc.) and automatically rebalances to maintain target weights. Users deposit stablecoins, receive index shares, and earn proportional returns as the underlying tokens appreciate. The contract uses Chainlink price feeds to determine rebalancing triggers and executes swaps via Uniswap V3 when weights drift beyond thresholds. This is a real product surface—users get diversified RWA exposure with one transaction, and you capture protocol fees.","learn_first":["ERC-4626 vault pattern","Chainlink price feeds","Uniswap V3 router and quoter","Backed token mechanics and liquidity pools"],"tech_stack":{"data":["Chainlink Data Feeds (BTC/USD, AAPL/USD, etc.)","Backed subgraph or direct contract calls for token balances"],"infra":["Foundry (Forge + Cast)","Hardhat (optional, for testing)","Etherscan verification"],"frontend":["Next.js 14+","wagmi 2.x","viem","TailwindCSS","ethers.js or viem for contract reads"],"contracts":["Solidity 0.8.20+","ERC-4626 (OpenZeppelin)","Chainlink AggregatorV3Interface","Uniswap V3 SwapRouter02"]},"build_steps":["Set up Foundry project with OpenZeppelin contracts and Uniswap V3 periphery as dependencies; create BaseIndexVault.sol inheriting ERC-4626","Define index composition: array of Backed token addresses and target weight percentages (e.g., 40% bIB01, 30% bCOIN, 30% bUSDT); store in contract state","Implement deposit() override to accept USDC, swap to target tokens via Uniswap V3 SwapRouter02, mint shares proportional to vault value","Implement rebalance() function that: (1) reads current prices from Chainlink, (2) calculates weight drift, (3) executes swaps if drift > threshold (e.g., 5%), (4) emits RebalanceEvent","Add Chainlink price feed integration: create PriceFeed interface, fetch latest prices for each index component, calculate total vault NAV in USD","Build Next.js dashboard with wagmi hooks to display: vault TVL, current index weights, user share balance, historical rebalance events; connect to RainbowKit for wallet","Write Foundry tests: test deposit/withdraw flows, price feed mocking, rebalance logic with simulated price movements, slippage handling","Deploy to Ethereum mainnet (or testnet), verify contract on Etherscan, seed initial liquidity, launch frontend"],"gotchas":["Chainlink price feeds may have stale data or gaps for less-liquid Backed tokens; implement staleness checks (updatedAt timestamp) and fallback logic","Uniswap V3 liquidity for Backed tokens may be fragmented across multiple fee tiers; use SwapRouter02 with multicall to route through optimal paths, or fall back to lower-fee pools","Rebalancing incurs Uniswap fees (0.01% to 1% depending on tier) and gas costs; set rebalance threshold high enough to avoid excessive churn but low enough to maintain index integrity","ERC-4626 share pricing can be manipulated via flash loans if vault is small; use time-weighted average price (TWAP) or require minimum initial deposit to mitigate","Backed tokens themselves are subject to issuer risk (e.g., token suspension or regulatory action); document this clearly and consider circuit breakers"],"references":[{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://docs.backed.fi","kind":"docs","label":"Backed Finance Documentation"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Data Feeds"},{"url":"https://docs.uniswap.org/contracts/v3/reference/periphery/SwapRouter02","kind":"docs","label":"Uniswap V3 SwapRouter Documentation"},{"url":"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC4626.sol","kind":"repo","label":"OpenZeppelin ERC-4626 Implementation"},{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Book"}],"time_estimate_hours":80,"projects":{"slug":"backed"},"project_slug":"backed","project":{"slug":"backed","name":"Backed Finance","logo_url":"https://icons.llamao.fi/icons/protocols/backed-finance?w=64&h=64","category":"rwa"}},{"id":"df4ab232-5819-4c13-b6dc-1a3442c1633f","project_id":"8e0ffe99-b4ab-4158-a6ce-90c2b945ad48","title":"Cross-pool Allocator","pitch":"Helps treasuries allocate across Centrifuge pools with risk/yield optimization.","difficulty":"1-2 weeks","use_case":"yield","build_with":["python","fastapi","centrifuge-sdk"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:52.647812+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A backend service that monitors Centrifuge credit pools, calculates risk-adjusted yields, and recommends optimal allocation strategies for treasury managers. The allocator ingests pool metrics (APY, default rates, pool composition), applies portfolio optimization algorithms, and surfaces allocation recommendations via API. Treasuries can use this to rebalance across multiple Centrifuge pools while maintaining target risk profiles. Built on Python with FastAPI, it queries Centrifuge subgraph data, applies Markowitz-style optimization, and exposes REST endpoints for allocation suggestions and historical performance tracking.","learn_first":["Centrifuge pool mechanics and tranche structure","Portfolio optimization theory (Markowitz, Sharpe ratio)","The Graph subgraph queries for on-chain data","Centrifuge RWA tokenization model"],"tech_stack":{"data":["The Graph (Centrifuge subgraph)","Pandas","NumPy"],"infra":["FastAPI","PostgreSQL or SQLite for caching","APScheduler for periodic updates"],"other":["Centrifuge Python SDK or direct RPC calls","SciPy for optimization","Pydantic for data validation"]},"build_steps":["Set up FastAPI project scaffold with Pydantic models for pool data, tranche info, and allocation recommendations","Query Centrifuge subgraph (or use centrifuge-py SDK) to fetch live pool APY, pool value, tranche composition, and historical defaults","Implement data ingestion pipeline: normalize pool metrics, calculate risk scores (volatility, default history, collateral ratio), and store in local cache with TTL","Build portfolio optimization engine: implement Markowitz mean-variance optimization using SciPy to compute efficient frontier and suggest allocations that maximize Sharpe ratio for a given risk tolerance","Create REST endpoints: GET /pools (list all pools with metrics), GET /allocations?risk_tolerance=medium (returns recommended allocation), POST /portfolio (accepts current holdings, returns rebalancing suggestions)","Add historical tracking: log allocation suggestions and actual pool performance to measure recommendation accuracy over time","Deploy locally or to a simple VPS; set up APScheduler to refresh pool data every 6–12 hours","Write integration tests against Centrifuge testnet or mock data; validate that optimization respects constraints (e.g., max allocation per pool, liquidity limits)"],"gotchas":["Centrifuge pool APY is not static—it depends on loan origination, defaults, and fee structure. Your model must refresh frequently and handle edge cases like pools with no recent activity or zero liquidity.","Tranche seniority matters: senior tranches have lower yield but lower risk. Your optimization must account for which tranche a treasury is targeting, not just pool-level yield.","The Graph subgraph can lag by 1–2 blocks. For real-time decisions, you may need to supplement with direct RPC calls to Centrifuge contracts (PoolManager, TrancheToken).","Portfolio optimization is sensitive to input assumptions. Small changes in volatility estimates or correlation assumptions can flip recommendations. Consider sensitivity analysis and confidence intervals.","Centrifuge pools are often illiquid or have redemption delays. Your allocator must respect pool-specific redemption schedules and liquidity constraints, not just yield."],"references":[{"url":"https://docs.centrifuge.io","kind":"docs","label":"Centrifuge Documentation"},{"url":"https://github.com/centrifuge","kind":"repo","label":"Centrifuge GitHub"},{"url":"https://thegraph.com/hosted-service/subgraph/centrifuge/centrifuge","kind":"tool","label":"Centrifuge Subgraph (The Graph)"},{"url":"https://docs.scipy.org/doc/scipy/reference/optimize.html","kind":"docs","label":"Portfolio Optimization with SciPy"},{"url":"https://centrifuge.io/learn/","kind":"article","label":"Centrifuge RWA Tokenization Model"}],"time_estimate_hours":80,"projects":{"slug":"centrifuge"},"project_slug":"centrifuge","project":{"slug":"centrifuge","name":"Centrifuge","logo_url":"https://icons.llamao.fi/icons/protocols/centrifuge?w=64&h=64","category":"rwa"}},{"id":"b00a1cb4-e518-4c0f-a19d-693bdd43a6e6","project_id":"8e0ffe99-b4ab-4158-a6ce-90c2b945ad48","title":"Pool Operator Onboarding Pack","pitch":"Templates and step-by-step guide for asset originators to launch a Centrifuge pool.","difficulty":"1-2 weeks","use_case":"onboarding","build_with":["nextjs","supabase","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:48.017973+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web application that walks asset originators through the complete flow of launching a Centrifuge pool: configuring pool parameters (min investment, asset class, fee structure), uploading pool documentation, connecting to KYC providers, and triggering on-chain pool creation via Centrifuge's PoolManager contract. The pack includes reusable React components for pool configuration, a backend service to validate pool metadata against Centrifuge standards, and integration with Centrifuge's Tinlake or Liquidity Pools contracts. Operators get a checklist-driven UX, real-time validation of pool parameters, and generated deployment scripts they can execute via ethers.js or viem.","learn_first":["Centrifuge pool architecture and PoolManager contract","ERC-20 and ERC-4626 token standards","KYC/AML provider APIs (e.g., Onfido, Synaps)","Web3 wallet connection patterns (RainbowKit or Privy)"],"tech_stack":{"data":["Supabase PostgreSQL for pool metadata","Supabase Storage for pool documents"],"infra":["Vercel for Next.js deployment","Centrifuge RPC endpoints (Ethereum, Base, Arbitrum)"],"other":["Onfido or Synaps for KYC/AML","IPFS or Arweave for immutable pool docs"],"wallet":["viem for contract interactions","ethers.js (optional fallback)"],"frontend":["Next.js 14+","React Hook Form","Tailwind CSS","RainbowKit or Privy for wallet"],"contracts":["Centrifuge PoolManager","ERC-4626 (Liquidity Pools)","ERC-20 (pool tokens)"]},"build_steps":["Set up Next.js 14 project with TypeScript, Tailwind, and Supabase client library.","Create Supabase schema: pools table (pool_id, name, asset_class, min_investment, fee_structure, status), documents table (pool_id, doc_type, ipfs_hash), and kyc_verifications table (operator_address, status, provider_response).","Build multi-step form component using React Hook Form: step 1 (pool basics), step 2 (asset details), step 3 (fee structure), step 4 (document upload), step 5 (KYC verification).","Integrate document upload to IPFS (via Pinata or Nft.storage) and store IPFS hash in Supabase; generate pool metadata JSON conforming to Centrifuge standards.","Add wallet connection via RainbowKit or Privy; display operator address and chain selector (Ethereum, Base, Arbitrum).","Build contract interaction layer using viem: read PoolManager ABI, construct pool creation transaction with validated parameters, display gas estimate.","Integrate KYC provider (Onfido API or Synaps) in backend route; store verification status in Supabase and gate pool deployment until verified.","Create deployment confirmation page showing all pool parameters, estimated fees, and a 'Deploy Pool' button that signs and broadcasts the transaction via viem; track tx status and display pool address on success."],"gotchas":["Centrifuge pool creation requires specific metadata format and may reject pools with missing or malformed fields; validate early against the PoolManager contract's expected struct before broadcasting.","KYC/AML verification can take 5–30 minutes; implement polling or webhooks from your KYC provider rather than blocking the UI.","Gas costs for pool deployment vary by chain; fetch live gas prices and display realistic fee estimates in USD to operators.","Document uploads to IPFS must be immutable and timestamped; use Pinata's pinning service or Arweave to ensure persistence, not ephemeral IPFS nodes.","Centrifuge's PoolManager contract may have different addresses across chains; maintain a config file mapping chain IDs to contract addresses and RPC endpoints."],"references":[{"url":"https://docs.centrifuge.io/build/liquidity-pools/","kind":"docs","label":"Centrifuge Liquidity Pools Documentation"},{"url":"https://github.com/centrifuge/centrifuge-chain/tree/main/pallets/pool-system","kind":"repo","label":"Centrifuge PoolManager Contract (GitHub)"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://documentation.onfido.com/","kind":"docs","label":"Onfido KYC API Documentation"},{"url":"https://viem.sh/","kind":"docs","label":"viem Documentation"},{"url":"https://www.pinata.cloud/","kind":"tool","label":"Pinata IPFS Pinning Service"}],"time_estimate_hours":80,"projects":{"slug":"centrifuge"},"project_slug":"centrifuge","project":{"slug":"centrifuge","name":"Centrifuge","logo_url":"https://icons.llamao.fi/icons/protocols/centrifuge?w=64&h=64","category":"rwa"}},{"id":"902f827f-85ac-4bef-a50b-64a805f9518c","project_id":"8e0ffe99-b4ab-4158-a6ce-90c2b945ad48","title":"Asset NFT Explorer","pitch":"Browse the NFTs representing real-world assets backing Centrifuge pools, with metadata decoded.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","centrifuge-api","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:44.882531+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web explorer that indexes and displays the Asset NFTs (ERC-721s) minted by Centrifuge pools, decoding their metadata to show loan terms, collateral details, and pool composition. Users can search by pool, filter by asset type, and drill into individual NFT details including on-chain settlement history. This surfaces transparency for investors and analysts tracking RWA backing.","learn_first":["ERC-721 token standards","Centrifuge pool architecture and Asset NFT structure","IPFS metadata resolution","Web3 wallet integration basics"],"tech_stack":{"data":["IPFS gateway for metadata","Centrifuge Subgraph (if available) or direct API polling"],"infra":["Vercel for hosting"],"other":["etherscan-like block explorer patterns for reference"],"wallet":["RainbowKit or Privy for connection UI"],"indexer":["Centrifuge API (REST)","ethers.js for on-chain reads"],"frontend":["Next.js 14+","TailwindCSS","wagmi for wallet connection","viem for contract interaction"],"contracts":["ERC-721 (Asset NFT standard)"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for /pools, /assets, /asset/[id]","Integrate RainbowKit or Privy for wallet connection and read-only chain context (Ethereum, Base, Arbitrum)","Fetch pool list from Centrifuge API (/pools endpoint); display in a table with pool ID, name, and asset count","For each pool, query Asset NFT contract (ERC-721) via ethers.js to get tokenIds and owner addresses","Fetch Asset NFT metadata from IPFS or Centrifuge metadata endpoint; decode loan terms, collateral type, maturity, interest rate","Build detail page showing single Asset NFT: metadata, current owner, pool association, settlement status, transaction history","Add search and filter UI: by pool name, asset type, maturity range, or collateral class","Deploy to Vercel; test across Ethereum, Base, and Arbitrum using chain switcher in RainbowKit"],"gotchas":["Centrifuge Asset NFTs may store metadata on IPFS with varying schemas per pool—validate and normalize before display; some pools may use on-chain metadata instead","Rate limits on Centrifuge API and IPFS gateways; implement caching (Redis or SWR) and exponential backoff for production","ERC-721 contract addresses vary per chain and pool; maintain a config mapping or fetch from Centrifuge registry to avoid hardcoding","Metadata URIs in tokenURI() may be outdated or point to dead IPFS hashes; gracefully fall back to on-chain data or a default view"],"references":[{"url":"https://docs.centrifuge.io","kind":"docs","label":"Centrifuge Documentation"},{"url":"https://github.com/centrifuge","kind":"repo","label":"Centrifuge GitHub"},{"url":"https://docs.openzeppelin.com/contracts/5.x/erc721","kind":"docs","label":"ERC-721 Standard (OpenZeppelin)"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup"},{"url":"https://docs.ipfs.tech/how-to/address-ipfs-on-web/","kind":"docs","label":"IPFS Gateway Best Practices"}],"time_estimate_hours":16,"projects":{"slug":"centrifuge"},"project_slug":"centrifuge","project":{"slug":"centrifuge","name":"Centrifuge","logo_url":"https://icons.llamao.fi/icons/protocols/centrifuge?w=64&h=64","category":"rwa"}},{"id":"5564e330-3599-41cf-bece-6315c1cd7977","project_id":"8e0ffe99-b4ab-4158-a6ce-90c2b945ad48","title":"RWA Pool Quality Scoring","pitch":"Risk-adjusted scoring of every Centrifuge pool — collateral type, jurisdiction, audit, default history.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","centrifuge-api","ponder"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:41.55752+00:00","metadata":{},"source":"curated","why_now":"Centrifuge's RWA pools are growing in TVL and diversity, but investor due diligence remains manual and fragmented. A standardized, transparent scoring system addresses a real friction point and builds trust in the ecosystem.","source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that ingests Centrifuge pool metadata, on-chain settlement history, and off-chain risk signals to compute a composite quality score for each pool. The score should reflect collateral risk (asset class, LTV), legal/jurisdictional risk, counterparty audit status, and realized default rates. Display scores alongside pool APY to help investors make informed allocation decisions. This is a real product surface: Centrifuge pools lack standardized risk transparency, and investors currently rely on manual due diligence or fragmented sources.","learn_first":["Centrifuge pool architecture (tranches, risk tiers)","ERC-4626 vault standard (Centrifuge uses it)","On-chain event indexing patterns","Risk scoring methodologies (e.g., Aave Risk Framework)"],"tech_stack":{"ai":[],"data":["Centrifuge API (pool metadata, settlement events)","Centrifuge Chain RPC"],"infra":["Vercel or similar"],"other":["TypeScript"],"wallet":[],"indexer":["Ponder (or The Graph)"],"frontend":["Next.js","TailwindCSS","wagmi","viem"],"contracts":[]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for pool list and pool detail views.","Integrate Centrifuge API client to fetch pool metadata: collateral type, jurisdiction, tranches, APY, TVL, and issuer info.","Build a Ponder indexer that listens to Centrifuge pool events (e.g., InvestmentMade, RedemptionSettled, DefaultOccurred) to track settlement history and derive realized default rates.","Design a scoring schema with weighted components: collateral risk (40%), jurisdiction/legal risk (25%), audit/issuer credibility (20%), default history (15%). Document each component's calculation.","Implement scoring logic in a TypeScript module that queries both the Centrifuge API and your Ponder index, computing the composite score for each pool.","Create a React component that displays pools in a sortable table with score, APY, collateral type, jurisdiction, and a risk badge (e.g., Low/Medium/High).","Add a pool detail page showing score breakdown, historical settlement data, issuer audit links, and a risk explanation card.","Deploy indexer to a public Ponder instance, connect frontend to live Centrifuge API and your indexer, and test end-to-end with real pool data."],"gotchas":["Centrifuge pool metadata is partly on-chain (Centrifuge Chain) and partly off-chain (IPFS/API); you must reconcile both sources and handle missing or stale data gracefully.","Default events may not be explicitly emitted on-chain; you may need to infer defaults from redemption failures or track them via the Centrifuge API's issuer reports, which introduces latency.","Scoring weights are opinionated; different investor profiles (conservative vs. yield-seeking) may want different weightings. Consider making the model configurable or offering multiple score variants.","Centrifuge Chain and Ethereum have different block times and finality; if you're pulling data from both, ensure your indexer handles cross-chain timing correctly."],"references":[{"url":"https://docs.centrifuge.io","kind":"docs","label":"Centrifuge Documentation"},{"url":"https://docs.centrifuge.io/api/","kind":"docs","label":"Centrifuge API Reference"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard (Tokenized Vault)"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://governance.aave.com/t/aave-risk-framework/3587","kind":"article","label":"Aave Risk Framework (reference for scoring design)"},{"url":"https://github.com/centrifuge","kind":"repo","label":"Centrifuge GitHub"}],"time_estimate_hours":80,"projects":{"slug":"centrifuge"},"project_slug":"centrifuge","project":{"slug":"centrifuge","name":"Centrifuge","logo_url":"https://icons.llamao.fi/icons/protocols/centrifuge?w=64&h=64","category":"rwa"}},{"id":"65e955f6-68f6-4cc1-b203-2fc1ee9a12b2","project_id":"591c0c4a-3414-4e72-bff5-4b1fa72be9bc","title":"UID Verification Helper","pitch":"Cleaner UX around the UID identity NFT requirement — handles errors and edge cases.","difficulty":"weekend","use_case":"onboarding","build_with":["nextjs","goldfinch-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:41.261643+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Goldfinch requires users to hold a UID (Unique Identity) NFT to participate. The current flow can be opaque when verification fails, times out, or requires retry. This tool wraps the UID verification process with better error messaging, retry logic, status polling, and a guided flow that explains what's happening at each step. Borrowers and lenders see clear next steps instead of cryptic contract reverts or silent failures.","learn_first":["Goldfinch UID NFT contract and verification flow","ERC-721 token gating basics","wagmi hooks for contract reads/writes","Goldfinch SDK initialization and error codes"],"tech_stack":{"data":["Goldfinch SDK (for UID verification methods)","ethers.js or viem for contract ABIs"],"other":["TypeScript","Tailwind CSS (optional, for styling)"],"wallet":["RainbowKit or Privy (for wallet connection)"],"frontend":["Next.js 14+","React 18+","wagmi 2.x","viem 2.x","TanStack Query (for polling verification status)"],"contracts":["Goldfinch UID NFT (0x57f28169214f155b3f17949b6014b9b3aeddaaed on mainnet)"]},"build_steps":["Set up a Next.js 14 project with TypeScript and install wagmi, viem, @rainbow-me/rainbowkit, and goldfinch-sdk.","Create a WagmiConfig with Ethereum mainnet and connect RainbowKit or Privy for wallet connection.","Build a UID status checker hook using wagmi's useContractRead to query the UID contract (0x57f28169214f155b3f17949b6014b9b3aaddaaed) for the connected user's token balance and metadata.","Implement a verification request flow: detect if user lacks UID, show a guided prompt, and call the Goldfinch SDK's verification initiation method with error handling for common failures (already verified, network issues, KYC rejection).","Add polling logic using TanStack Query (useQuery with refetchInterval) to check verification status every 5–10 seconds after submission, with a max timeout of 5 minutes.","Create error boundary and fallback UI for each failure mode: network error, KYC rejected, already verified, verification pending, and verification expired.","Build a status dashboard component showing current UID state, verification progress, and next-step CTAs (e.g., 'Retry KYC', 'Check email', 'Contact support').","Test end-to-end on Ethereum mainnet testnet or fork, then deploy to Vercel with environment variables for Goldfinch SDK credentials."],"gotchas":["The UID verification process involves off-chain KYC; there's a delay between submission and on-chain NFT mint. Polling too aggressively wastes RPC quota—use exponential backoff or max 10 requests per minute.","Goldfinch SDK requires API keys for certain methods; store these server-side and proxy requests through a Next.js API route to avoid exposing secrets in the browser.","UID contract state can be stale if you're reading from an old block; always read from the latest block and handle the case where a user just minted their UID but it hasn't propagated to all RPC nodes yet.","Some users may have multiple wallets or retry KYC multiple times; track verification attempts per wallet and show clear messaging about rate limits or duplicate submissions."],"references":[{"url":"https://docs.goldfinch.finance/goldfinch/unique-identity-uid","kind":"docs","label":"Goldfinch UID Documentation"},{"url":"https://github.com/goldfinch-eng/goldfinch-protocol-monorepo","kind":"repo","label":"Goldfinch SDK GitHub"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup Guide"},{"url":"https://tanstack.com/query/latest","kind":"docs","label":"TanStack Query (React Query) Docs"}],"time_estimate_hours":12,"projects":{"slug":"goldfinch"},"project_slug":"goldfinch","project":{"slug":"goldfinch","name":"Goldfinch","logo_url":"https://icons.llamao.fi/icons/protocols/goldfinch?w=64&h=64","category":"rwa"}},{"id":"6503e977-1361-410b-ab83-3297f3b7db9a","project_id":"591c0c4a-3414-4e72-bff5-4b1fa72be9bc","title":"Senior Pool Yield Forecaster","pitch":"Predicts senior pool APY based on borrower mix and default models.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["python","fastapi","pandas"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:34.14742+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a yield forecasting engine that analyzes Goldfinch senior pool composition, historical borrower performance, and default rates to project forward APY. The tool ingests on-chain senior pool data (deposits, withdrawals, interest accrual) via The Graph or direct RPC calls, models default probability by borrower vintage and geography, and outputs probabilistic APY ranges for different time horizons. Useful for LPs deciding whether to enter/exit positions and for Goldfinch governance analyzing pool health.","learn_first":["Goldfinch senior pool mechanics and tranche structure","Credit risk modeling basics (probability of default, loss given default)","Time-series forecasting with uncertainty quantification","The Graph subgraph queries for pool state"],"tech_stack":{"ai":["statsmodels or Prophet for time-series forecasting","scipy for confidence interval estimation"],"data":["pandas","numpy","scikit-learn for default probability modeling"],"infra":["FastAPI","uvicorn","PostgreSQL or SQLite for caching historical snapshots"],"other":["APScheduler for periodic data refresh"],"wallet":[],"indexer":["The Graph (Goldfinch subgraph)","ethers.js or viem for direct RPC fallback"],"frontend":[],"contracts":["Goldfinch SeniorPool contract (0x8481a6EbAf5c7DABc3F7e6f02b0635CFF8b70b63)"]},"build_steps":["Set up FastAPI project with async endpoints; scaffold /forecast and /pool-state routes","Query Goldfinch subgraph for senior pool state: total deposits, accrued interest, active borrowers, historical defaults","Fetch borrower-level data (vintage, geography, loan size) and compute historical default rates by cohort","Build a simple Bayesian model: estimate P(default) per borrower using beta-binomial conjugate prior with historical rates as priors","Implement Monte Carlo simulation: sample default scenarios for each borrower, compute resulting senior pool losses, translate to APY impact","Add time-series component: use Prophet or ARIMA on historical senior pool APY to capture trend and seasonality","Create /forecast endpoint that returns: median APY projection, 25th/75th percentile bands, sensitivity to default rate assumptions","Deploy to a simple VPS or Render; set up daily data refresh job via APScheduler"],"gotchas":["Goldfinch subgraph may lag by 1–2 blocks; always compare against on-chain state for real-time accuracy","Default data is sparse in early tranches; use Laplace smoothing or hierarchical priors to avoid zero-probability artifacts","Senior pool APY is affected by both defaults and prepayments; model prepayment separately or treat as stochastic noise","Borrower geography and vintage are not always on-chain; may need to cross-reference Goldfinch's off-chain metadata or governance proposals","Monte Carlo convergence can be slow with many borrowers; start with 5k–10k samples and profile before scaling"],"references":[{"url":"https://docs.goldfinch.finance/goldfinch/protocol-overview/senior-pool","kind":"docs","label":"Goldfinch Senior Pool Docs"},{"url":"https://etherscan.io/address/0x8481a6EbAf5c7DABc3F7e6f02b0635CFF8b70b63","kind":"tool","label":"Goldfinch SeniorPool Contract on Etherscan"},{"url":"https://thegraph.com/hosted-service/subgraph/goldfinch-eng/goldfinch","kind":"docs","label":"Goldfinch Subgraph (The Graph)"},{"url":"https://en.wikipedia.org/wiki/Credit_risk","kind":"article","label":"Bayesian Methods for Credit Risk"},{"url":"https://facebook.github.io/prophet/","kind":"docs","label":"Prophet: Forecasting at Scale (Facebook)"},{"url":"https://github.com/goldfinch-eng/goldfinch-protocol","kind":"repo","label":"Goldfinch GitHub Repository"}],"time_estimate_hours":80,"projects":{"slug":"goldfinch"},"project_slug":"goldfinch","project":{"slug":"goldfinch","name":"Goldfinch","logo_url":"https://icons.llamao.fi/icons/protocols/goldfinch?w=64&h=64","category":"rwa"}},{"id":"6e46051d-fa9b-4584-a6c7-47f86d67d475","project_id":"591c0c4a-3414-4e72-bff5-4b1fa72be9bc","title":"PoolToken Secondary Market","pitch":"Order book for trading Goldfinch PoolToken positions. Adds liquidity to currently illiquid LP positions.","difficulty":"1+ month","use_case":"trading","build_with":["foundry","nextjs","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:33.559624+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Goldfinch PoolTokens represent LP positions in credit pools but lack secondary market liquidity—LPs are stuck until pool maturity or early exit penalties. This project creates an on-chain order book where LPs can list positions for sale and buyers can acquire exposure without waiting. The core mechanics: sellers list PoolTokens at a price, buyers fill orders, settlement happens atomically on-chain via a simple swap contract. This adds a critical market function and improves capital efficiency for the protocol.","learn_first":["ERC-721 (PoolTokens are NFTs)","Goldfinch PoolToken mechanics and transfer restrictions","Order book design patterns (matching, settlement, cancellation)","Atomic swaps and ERC-20/ERC-721 interactions"],"tech_stack":{"data":["The Graph queries for historical fills","USDC/stablecoin price feeds (Chainlink optional)"],"infra":["Vercel for frontend","Etherscan API for transaction verification"],"other":["Foundry for testing and deployment"],"wallet":["RainbowKit","Privy (optional, for embedded wallets)"],"indexer":["The Graph (Subgraph for PoolToken transfers and order events)","Ponder (alternative lightweight indexer)"],"frontend":["Next.js 14+","viem for contract interactions","wagmi for wallet connection","TanStack Query for order book state","shadcn/ui for order book UI"],"contracts":["Solidity 0.8.x","OpenZeppelin SafeTransferLib","ERC-721 receiver pattern"]},"build_steps":["Set up Foundry project with test suite; write OrderBook.sol contract with order struct (seller, poolTokenId, priceInUSDC, nonce, expiry) and core functions (createOrder, cancelOrder, fillOrder).","Implement atomic settlement: fillOrder calls safeTransferFrom on PoolToken to buyer, then transfers USDC from buyer to seller; use reentrancy guards and checks-effects-interactions pattern.","Write comprehensive Foundry tests covering happy path (create → fill), cancellation, expiry, insufficient balance, and reentrancy attacks.","Deploy OrderBook to Ethereum testnet (Sepolia); verify contract on Etherscan.","Build Subgraph (or Ponder indexer) to track OrderCreated, OrderFilled, OrderCancelled events; expose queries for active orders, order history, user positions.","Create Next.js frontend: connect wallet via RainbowKit, fetch active orders from Subgraph, display order book with bid/ask sides, build order creation and fill flows.","Implement order creation form: seller inputs PoolToken ID, price, expiry; contract approval flow for PoolToken; submit transaction via viem.","Implement order fill flow: buyer selects order, approves USDC spend, calls fillOrder; show transaction status and confirmation."],"gotchas":["PoolTokens have transfer restrictions (some pools lock transfers until maturity or require governance approval)—check pool config before allowing orders; may need to whitelist OrderBook contract or require seller approval.","Goldfinch uses non-standard ERC-721 (PoolToken is ERC-1155 or custom)—verify exact token interface and adjust contract accordingly; test with actual PoolToken contract on testnet.","Price discovery: without an oracle, order prices are peer-negotiated; consider adding a Chainlink price feed for USDC or a reference price to help users avoid bad fills.","Order expiry and nonce management: ensure cancellation works atomically; test edge case where order is filled and cancelled in same block.","Subgraph indexing lag: orders may appear filled before indexer catches up; use contract events as source of truth and implement optimistic UI updates."],"references":[{"url":"https://docs.goldfinch.finance/goldfinch/protocol-overview/pools-and-pooltokens","kind":"docs","label":"Goldfinch PoolToken Docs"},{"url":"https://github.com/goldfinch-eng/mono/tree/main/packages/protocol/contracts","kind":"repo","label":"Goldfinch Smart Contracts GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-721","kind":"docs","label":"ERC-721 Standard"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Docs"},{"url":"https://book.getfoundry.sh/","kind":"docs","label":"Foundry Book"},{"url":"https://viem.sh/","kind":"docs","label":"viem Documentation"},{"url":"https://a16zcrypto.com/posts/article/order-books-vs-amms/","kind":"article","label":"Order Book Design Patterns (a16z research)"}],"time_estimate_hours":160,"projects":{"slug":"goldfinch"},"project_slug":"goldfinch","project":{"slug":"goldfinch","name":"Goldfinch","logo_url":"https://icons.llamao.fi/icons/protocols/goldfinch?w=64&h=64","category":"rwa"}},{"id":"53c9b492-f56c-4359-88e8-a791a7c2e915","project_id":"591c0c4a-3414-4e72-bff5-4b1fa72be9bc","title":"Emerging-Market Loan Explorer","pitch":"Browse every Goldfinch borrower pool with country, sector, and historical default data.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph","typescript"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:29.68428+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that aggregates Goldfinch's on-chain lending pools and enriches them with geographic, sectoral, and performance metadata. Users can filter pools by emerging market region, loan purpose (agriculture, trade finance, SME lending), and risk metrics like default history and recovery rates. The app surfaces which pools are accepting new capital, their current utilization, and historical outcomes. Built on Goldfinch's subgraph data and enriched with external sources (World Bank country risk, sector benchmarks), this becomes a research tool for institutional allocators and a transparency layer for retail depositors.","learn_first":["Goldfinch protocol architecture (pools, tranches, FIDU token)","ERC-4626 vault standard (Goldfinch uses it for tranche deposits)","The Graph subgraph querying and schema design","GQL query patterns for financial data aggregation"],"tech_stack":{"data":["The Graph subgraph","World Bank Open Data API (optional, for country context)"],"other":["TypeScript","Vercel (deployment)"],"indexer":["The Graph (Goldfinch subgraph)"],"frontend":["Next.js 14+","React","TailwindCSS","Apollo Client or urql for GQL"],"contracts":["Goldfinch Pool contracts (read-only)","Goldfinch FIDU (ERC-4626)"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for pools list, pool detail, and filters.","Query Goldfinch's subgraph (via The Graph) to fetch all active pools, their metadata (borrower, terms, tranches), and historical events (drawdowns, repayments, defaults).","Parse pool data to extract: pool address, borrower name, country, sector, vintage, current balance, utilization rate, and any default/loss events.","Build a filterable table component showing pools with columns: borrower, country, sector, pool size, APY by tranche, and status (accepting capital / closed).","Implement country and sector filter dropdowns; use React hooks (useState) to manage filter state and re-query subgraph with filtered variables.","Create a pool detail page that shows: tranches (senior/junior), historical cash flows, cumulative defaults, recovery rates, and a timeline of events.","Add a simple risk score badge per pool (e.g., color-coded based on default history and pool age); fetch this from subgraph aggregations or compute client-side.","Deploy to Vercel; set up environment variables for The Graph API key and test with real Goldfinch mainnet data."],"gotchas":["Goldfinch subgraph may lag by a few blocks; cache query results client-side or use SWR to avoid excessive refetches.","Pool metadata (borrower name, country, sector) is often stored off-chain or in events; you may need to parse event logs or use Goldfinch's off-chain API if available.","Tranche APY is dynamic and depends on pool performance; don't hardcode it—always fetch from subgraph or contract.","Default and loss events are rare but critical; ensure you're correctly identifying and labeling them in the UI so users understand risk."],"references":[{"url":"https://docs.goldfinch.finance","kind":"docs","label":"Goldfinch Protocol Docs"},{"url":"https://github.com/goldfinch-eng","kind":"repo","label":"Goldfinch GitHub"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://www.apollographql.com/docs/react/get-started","kind":"docs","label":"Apollo Client Setup Guide"}],"time_estimate_hours":12,"projects":{"slug":"goldfinch"},"project_slug":"goldfinch","project":{"slug":"goldfinch","name":"Goldfinch","logo_url":"https://icons.llamao.fi/icons/protocols/goldfinch?w=64&h=64","category":"rwa"}},{"id":"19c88c88-df9b-44c9-adc1-f28ff38e7259","project_id":"e4d1fc26-a9f5-4bab-9e51-5485b060d268","title":"On-chain Credit Risk API","pitch":"REST endpoint that returns Maple borrower data for integration into other risk dashboards.","difficulty":"weekend","use_case":"infrastructure","build_with":["nextjs-api","maple-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:28.612508+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a lightweight API service that aggregates Maple Finance borrower metrics, loan performance data, and pool health indicators, then exposes them via REST endpoints for consumption by risk dashboards, portfolio trackers, and lending protocols. This bridges the gap between on-chain data and off-chain analytics tools, letting builders query borrower credit scores, default rates, collateral ratios, and pool APYs without parsing raw contract state themselves.","learn_first":["Maple Finance pool architecture (Pool Manager, Loan Manager, Withdrawal Manager)","ERC-4626 vault standard for Maple pools","RWA tokenization and collateral tracking","REST API design patterns for financial data"],"tech_stack":{"ai":[],"data":["Maple subgraph","ethers.js / viem for RPC calls"],"infra":["Next.js API routes","Vercel or Railway"],"other":["Redis for caching","TypeScript"],"wallet":[],"indexer":["Ponder","The Graph"],"frontend":[],"contracts":["Maple Pool Manager","Maple Loan Manager"]},"build_steps":["Set up Next.js project with API routes and TypeScript; add viem for contract interactions and Maple contract ABIs","Query Maple subgraph (or Ponder instance) to fetch active pools, borrowers, loan terms, and repayment history","Create `/api/borrowers` endpoint that returns borrower address, outstanding loan balance, collateral posted, default status, and pool membership","Create `/api/pools` endpoint exposing pool name, asset type, total AUM, current APY, default rate, and withdrawal queue depth","Add `/api/borrowers/[address]` for individual borrower credit metrics: payment history, utilization ratio, collateral health factor","Implement Redis caching layer with 5-minute TTL to reduce subgraph/RPC load and improve response times","Add request validation (address checksums, pagination, filtering by pool or status) and error handling for missing data","Deploy to Vercel or Railway with environment variables for RPC endpoints and subgraph URLs; test against mainnet data"],"gotchas":["Maple subgraph may lag 1–2 blocks behind chain tip; consider adding a fallback direct RPC call for real-time collateral ratios","Borrower privacy: some Maple pools have KYC'd lenders but borrower identities may be sensitive; clarify with Maple Labs which data is public vs. restricted","Collateral valuation depends on oracle prices (Chainlink, etc.); stale prices can misrepresent health factors—cache oracle data separately with shorter TTL","Rate limits on free RPC providers (Alchemy, Infura) can throttle subgraph queries during high volume; consider a paid tier or self-hosted node for production"],"references":[{"url":"https://maplefinance.gitbook.io","kind":"docs","label":"Maple Finance Docs"},{"url":"https://github.com/maple-labs","kind":"repo","label":"Maple GitHub"},{"url":"https://thegraph.com/hosted-service/subgraph/maple-labs/maple-mainnet","kind":"tool","label":"Maple Subgraph"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder – Real-time Indexer"},{"url":"https://viem.sh","kind":"docs","label":"viem – TypeScript Ethereum Library"}],"time_estimate_hours":16,"projects":{"slug":"maple"},"project_slug":"maple","project":{"slug":"maple","name":"Maple","logo_url":"https://icons.llamao.fi/icons/protocols/maple?w=64&h=64","category":"lending"}},{"id":"bca7c2ee-4b47-4d59-8ec2-8de435effe66","project_id":"e4d1fc26-a9f5-4bab-9e51-5485b060d268","title":"Borrower Track Record Tracker","pitch":"Public score per Maple borrower based on repayment history, current loans, and growth.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","maple-api","viem","ethers"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:22.041243+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that aggregates on-chain and off-chain Maple Finance borrower data to compute a transparent reputation score. Track repayment punctuality, loan volume growth, default risk, and collateral efficiency. This becomes a public signal for lenders evaluating pool participation and for borrowers to build verifiable credit history on-chain. The tracker pulls from Maple's smart contracts (loan origination, repayment events), combines it with Maple API data (KYC status, pool allocations), and surfaces it as a simple web interface with sortable borrower rankings and individual borrower profiles.","learn_first":["Maple Finance loan lifecycle (origination → funding → repayment)","ERC-20 token standards and Maple's MPL/mUSD tokens","The Graph subgraph querying or direct RPC calls for event parsing","Basic credit scoring models (payment history weight, utilization, default rate)"],"tech_stack":{"data":["Maple API (borrower metadata, pool data)","Etherscan or Alchemy for historical event logs"],"infra":["Vercel for deployment","PostgreSQL or SQLite for caching borrower snapshots"],"indexer":["The Graph (Maple subgraph if available)","Direct RPC event filtering with viem"],"frontend":["Next.js 14+","TailwindCSS","Recharts or Chart.js for score visualization","wagmi for wallet connection (optional, for borrower self-lookup)"],"contracts":["Maple Loan Factory","Maple Pool Manager"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for /borrowers (list) and /borrowers/[address] (detail)","Fetch Maple API borrower list and pool data; store in local DB or cache to avoid rate limits","Write viem event listener to parse Maple Loan Factory events (LoanCreated, LoanRepaid, LoanDefaulted) from Ethereum mainnet; index historical events via RPC","Compute borrower score: (on-time repayments / total repayments) × 40% + (active loan volume / historical max) × 30% + (collateral ratio health) × 30%; store scores in DB with timestamp","Build /borrowers page with sortable table (score, repayment rate, active loans, default count); add filters by pool or status","Build /borrowers/[address] detail page showing score breakdown, loan history timeline, collateral chart, and risk metrics","Add optional wagmi integration so borrowers can connect wallet and see their own score highlighted","Deploy to Vercel; set up cron job (e.g., GitHub Actions) to refresh scores daily or weekly"],"gotchas":["Maple API rate limits and authentication—cache aggressively and use batch endpoints; consider running your own indexer if API is unreliable","Event parsing is historical-heavy: fetching all Loan events from genesis is slow; use The Graph if available, or paginate RPC calls by block range","Borrower privacy: KYC data is off-chain; only on-chain loan/repayment events are public; don't assume you can fetch borrower names or identities directly","Score weighting is subjective—lenders may not trust your formula; document it clearly and consider making weights configurable or A/B testing different models","Maple contract upgrades or new loan types may break your event parser; monitor Maple GitHub and add version checks"],"references":[{"url":"https://maplefinance.gitbook.io","kind":"docs","label":"Maple Finance Docs"},{"url":"https://github.com/maple-labs","kind":"repo","label":"Maple Labs GitHub"},{"url":"https://github.com/maple-labs/maple-core-v2","kind":"repo","label":"Maple Loan Factory Contract"},{"url":"https://viem.sh/docs/contract/getContractEvents","kind":"docs","label":"viem Event Parsing Guide"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Development"},{"url":"https://en.wikipedia.org/wiki/Credit_score","kind":"article","label":"Credit Scoring 101"}],"time_estimate_hours":80,"projects":{"slug":"maple"},"project_slug":"maple","project":{"slug":"maple","name":"Maple","logo_url":"https://icons.llamao.fi/icons/protocols/maple?w=64&h=64","category":"lending"}},{"id":"ff6b8fef-8fb5-4405-ac39-9fd582a65d00","project_id":"e4d1fc26-a9f5-4bab-9e51-5485b060d268","title":"Maple Pool Risk Briefs","pitch":"Per-pool risk briefing covering borrowers, default history, current LTV. Required reading before depositing.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","openrouter","maple-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:19.299923+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an automated risk analysis dashboard that generates human-readable briefs for each Maple Finance lending pool. The tool fetches on-chain pool data (borrower composition, historical defaults, current loan-to-value ratios, collateral types), processes it through an LLM to produce structured risk summaries, and surfaces them in a Next.js interface. Lenders see borrower concentration risk, default patterns, and covenant health before committing capital—reducing information asymmetry in institutional credit.","learn_first":["ERC-4626 vault standard (Maple pools are vaults)","Maple protocol architecture (pools, loans, delegates)","LTV and collateral mechanics in institutional lending","Prompt engineering for structured financial analysis"],"tech_stack":{"ai":["OpenRouter (Claude or GPT-4)"],"data":["Maple API (REST)","Etherscan/Solscan for raw tx data"],"infra":["Vercel","OpenRouter (LLM API)"],"other":["Viem (contract reads)"],"wallet":[],"indexer":["Maple subgraph (The Graph)","Ponder (optional, for custom indexing)"],"frontend":["Next.js 14+","TailwindCSS","shadcn/ui"],"contracts":["ERC-4626 (Maple pool interface)"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; scaffold pages for pool list and individual pool briefs.","Integrate Maple API client to fetch pool metadata, borrower list, loan terms, and historical defaults (use axios or fetch with error handling).","Query Maple subgraph (The Graph) to get current pool TVL, utilization, and recent loan events; cache results with SWR or React Query.","Build a data aggregation layer that computes per-pool metrics: borrower concentration (top 5 borrowers % of pool), default rate (defaults / total loans), weighted average LTV, collateral composition.","Create a prompt template that feeds pool metrics into OpenRouter API; structure the LLM response as JSON (risk_score, borrower_concentration_risk, default_trend, covenant_health, recommendation).","Render risk briefs in a Next.js page with visual components: risk gauge (low/medium/high), borrower heatmap, default timeline chart, LTV distribution.","Add filtering and sorting (by risk score, TVL, APY) and a detail drill-down view showing individual borrower profiles and loan terms.","Deploy to Vercel; set up environment variables for Maple API key and OpenRouter API key; add basic caching to avoid rate limits."],"gotchas":["Maple's subgraph may lag by 1–2 blocks; always cross-check critical metrics (LTV, defaults) with direct contract reads using Viem to ensure freshness.","LLM outputs are non-deterministic; validate that risk_score and recommendation fields are parseable JSON before rendering; add fallback UI for malformed responses.","Borrower identity is pseudonymous on-chain; the Maple API may not expose full KYC details; your brief will reflect on-chain behavior only—document this limitation clearly.","Rate limits on both Maple API and OpenRouter; implement exponential backoff and cache aggressively (e.g., refresh briefs every 6 hours, not on every page load).","Pool delegates control loan approvals; a delegate's risk appetite may not match the LLM's assessment—surface delegate reputation and historical decisions as a separate signal."],"references":[{"url":"https://maplefinance.gitbook.io","kind":"docs","label":"Maple Finance Docs"},{"url":"https://github.com/maple-labs","kind":"repo","label":"Maple Protocol GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://thegraph.com/docs/en/querying/graphql-api/","kind":"docs","label":"The Graph Subgraph Query Language"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Docs"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reading Guide"}],"time_estimate_hours":80,"projects":{"slug":"maple"},"project_slug":"maple","project":{"slug":"maple","name":"Maple","logo_url":"https://icons.llamao.fi/icons/protocols/maple?w=64&h=64","category":"lending"}},{"id":"d8b43335-384a-475b-85d5-41c224c3c7e2","project_id":"e4d1fc26-a9f5-4bab-9e51-5485b060d268","title":"syrupUSDC Aggregator","pitch":"Tracks syrupUSDC yield against other institutional credit products, with risk-adjusted ranking.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","defillama-api","maple-subgraph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:18.612377+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that aggregates syrupUSDC yields from Maple Finance pools and compares them against competing institutional credit products (Aave, Compound, Lido, Curve stableswap) with real-time APY, risk metrics (pool utilization, default history, collateral ratios), and a composite score. Users see which pools offer the best risk-adjusted returns. Built as a Next.js app pulling from Maple subgraph, DeFiLlama API, and on-chain RPC calls for fresh pool state.","learn_first":["ERC-4626 vault standard (Maple uses this for pool tokens)","Maple pool mechanics: lender deposits, earmark/funding cycles","Risk metrics: utilization ratio, weighted average loan maturity, default rate","Stablecoin yield sources: lending protocols vs. RWA products"],"tech_stack":{"ai":[],"data":["DeFiLlama API (yields endpoint)","Alchemy or Infura RPC (for live pool state)","Maple GraphQL subgraph"],"infra":["Vercel (Next.js hosting)"],"other":["TypeScript","ethers.js or viem for contract reads"],"wallet":[],"indexer":["Maple subgraph (maple-labs/subgraph)"],"frontend":["Next.js 15+","TailwindCSS","Recharts or Chart.js for APY trends"],"contracts":[]},"build_steps":["Set up Next.js 15 project with TypeScript and TailwindCSS; create pages for dashboard and pool detail views.","Query Maple subgraph for all active pools, their APY, utilization, and recent loan defaults; cache results for 5 min.","Fetch DeFiLlama yields for Aave USDC lending, Compound USDC, and any Curve stableswap pools; normalize APY format.","Design risk score: (APY × 0.6) + (100 - utilization) × 0.2 + (pool_age_in_days / 365) × 0.2; rank pools by score.","Build React components: PoolCard (name, APY, utilization, risk score), ComparisonTable (Maple vs. competitors), TrendChart (7-day APY history).","Add filtering: by chain (Ethereum, Solana, Base), by min/max APY, by risk tolerance slider.","Deploy to Vercel; set up GitHub Actions to refresh subgraph cache every 5 minutes.","Add optional: wallet connection (RainbowKit) to show user's current Maple positions and potential yield if they deposit."],"gotchas":["Maple subgraph may lag 1–2 blocks; always pair with RPC call for live utilization to avoid stale APY.","syrupUSDC is Maple's receipt token (ERC-4626); ensure you're tracking the underlying pool APY, not the token price drift.","DeFiLlama APY can be outdated or missing for small pools; validate against on-chain state and show a 'last updated' timestamp.","Risk score is subjective; clearly document your formula and allow users to weight factors themselves (e.g., prefer age over utilization)."],"references":[{"url":"https://maplefinance.gitbook.io","kind":"docs","label":"Maple Finance Docs"},{"url":"https://github.com/maple-labs","kind":"repo","label":"Maple Labs GitHub"},{"url":"https://github.com/maple-labs/subgraph","kind":"repo","label":"Maple Subgraph"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DeFiLlama Yields API"},{"url":"https://maplefinance.gitbook.io/maple/protocol-overview/whitepaper","kind":"article","label":"Institutional Credit in DeFi (Maple Whitepaper)"}],"time_estimate_hours":12,"projects":{"slug":"maple"},"project_slug":"maple","project":{"slug":"maple","name":"Maple","logo_url":"https://icons.llamao.fi/icons/protocols/maple?w=64&h=64","category":"lending"}},{"id":"5e4be1f4-8116-4aaa-adae-958635339fb7","project_id":"9cc29726-6f39-4396-9dab-530650b0db37","title":"RWA Yield Heatmap","pitch":"Heatmap of every RWA yield product (Ondo + competitors) by chain, asset, and net APY after fees.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","d3","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:17.825343+00:00","metadata":{},"source":"curated","why_now":"RWA yields are fragmented across custody providers and chains; a unified heatmap removes friction for institutional and retail yield farmers choosing between Ondo, Pendle, and traditional off-chain alternatives.","source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that visualizes yields across all major RWA (Real World Asset) protocols—Ondo Finance (USDY, OUSG), Matrixport, Pendle, Lido, and others—broken down by blockchain, underlying asset type, and net APY after protocol fees and custody costs. Users can filter by risk profile, chain preference, and minimum lock-up period. The heatmap uses color intensity to show yield spreads, helping yield farmers and treasury managers quickly identify the best risk-adjusted returns without manual spreadsheet tracking.","learn_first":["RWA market structure (custody, redemption mechanics)","APY vs APR and fee deduction logic","Multi-chain RWA liquidity pools and their yield sources","D3 heatmap rendering patterns"],"tech_stack":{"data":["The Graph (RWA subgraph queries)","Ondo Finance API or subgraph","Pendle Finance subgraph","Manual JSON feed from Matrixport/competitors"],"infra":["Vercel or Netlify","Etherscan/Solscan API for chain verification"],"frontend":["Next.js 15","React 19","D3.js v7+","Tailwind CSS","wagmi 2.x","viem"]},"build_steps":["Set up Next.js 15 project with TypeScript, Tailwind, and wagmi hooks for multi-chain support","Create a data schema: {protocol, asset, chain, apy, fees, tvl, lockup_period, custody_provider, last_updated}","Build a data aggregation layer: fetch Ondo yields from their subgraph/API, Pendle from The Graph, and hardcode or poll Matrixport rates","Implement fee-deduction logic: subtract custody fees, protocol fees, and gas costs to compute net APY","Design D3 heatmap: rows = RWA products, columns = chains, cell color = net APY gradient (red=low, green=high)","Add interactive filters: chain selector, asset type (USDY vs OUSG vs stablecoins), risk tier, minimum TVL","Deploy on Vercel with ISR (Incremental Static Regeneration) set to 1 hour for fresh data","Add a detail modal: click any cell to see breakdown of gross APY, all fees, custody provider, redemption terms, and historical yield trend (7d, 30d)"],"gotchas":["RWA yields are often quoted gross; you must subtract custody (0.1–0.5%), protocol (0.5–2%), and slippage to get net APY—ask each protocol for their fee schedule or reverse-engineer from on-chain events","Ondo's USDY and OUSG have different redemption mechanics and fee structures; OUSG is US-domiciled only, affecting availability by chain and region","Pendle's RWA yields are synthetic and depend on the underlying pool's actual yield; if the base yield drops, Pendle's fixed-rate offer becomes less attractive","Multi-chain data freshness: Solana and Mantle may have different block times and indexing delays; use timestamps to flag stale data (>2 hours old)","Some RWA products (especially Matrixport) may not have public on-chain data; you may need manual updates or partnerships for real-time feeds"],"references":[{"url":"https://docs.ondo.finance","kind":"docs","label":"Ondo Finance Docs"},{"url":"https://github.com/ondofinance","kind":"repo","label":"Ondo GitHub"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph RWA Subgraphs"},{"url":"https://d3-graph-gallery.com/heatmap.html","kind":"article","label":"D3 Heatmap Tutorial"},{"url":"https://docs.pendle.finance","kind":"docs","label":"Pendle Finance Docs"},{"url":"https://wagmi.sh/react/guides/chains","kind":"docs","label":"wagmi Multi-Chain Guide"}],"time_estimate_hours":12,"projects":{"slug":"ondo"},"project_slug":"ondo","project":{"slug":"ondo","name":"Ondo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/ondo-finance?w=64&h=64","category":"rwa"}},{"id":"a18fbb29-e9f6-4168-bff0-52eab1a63231","project_id":"9cc29726-6f39-4396-9dab-530650b0db37","title":"Institutional Onboarding Helper","pitch":"Step-by-step wizard for treasury teams to evaluate Ondo products against their compliance needs.","difficulty":"1-2 weeks","use_case":"onboarding","build_with":["nextjs","supabase","typescript"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:09.880959+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a guided onboarding flow that walks institutional treasury operators through Ondo's tokenized RWA offerings (USDY, OUSG) by asking compliance-relevant questions—custody requirements, audit preferences, regulatory jurisdiction, redemption frequency—then surfaces tailored product recommendations and documentation. The wizard captures lead data, generates a compliance checklist, and integrates with Ondo's API to show real-time product details (yields, TVL, supported chains). This reduces friction for large institutions evaluating RWA infrastructure and creates a clear funnel for Ondo's sales team.","learn_first":["ERC-4626 vault standard","US Treasury tokenization mechanics","Institutional compliance frameworks (SOC 2, audit trails)","Ondo's product architecture (USDY vs OUSG differences)"],"tech_stack":{"data":["Supabase (PostgreSQL + Auth)","Supabase Realtime for live product feeds"],"infra":["Vercel","Supabase hosted"],"other":["Ondo API (if public) or REST endpoints for product metadata"],"frontend":["Next.js 15+","React Hook Form","Tailwind CSS","shadcn/ui"]},"build_steps":["Set up Next.js 15 project with TypeScript and Tailwind; scaffold pages for /wizard, /results, /admin-dashboard","Design Supabase schema: tables for questionnaire_responses, product_recommendations, compliance_checklists, institutional_leads","Build multi-step form component using React Hook Form with validation; questions cover custody model, audit requirements, redemption cadence, regulatory domicile","Implement recommendation engine: map questionnaire answers to product fit (USDY for stable yield, OUSG for capital preservation); store logic in Supabase functions or Node.js backend","Create results page that displays tailored product cards, compliance checklist, and downloadable summary PDF (use jsPDF or similar)","Integrate Ondo API or mock product data endpoint to show real yields, TVL, chain availability; refresh on page load","Add Supabase Auth for institutional login; create admin dashboard to view leads, export CSV, track conversion funnel","Deploy to Vercel with environment variables for Supabase keys; test end-to-end flow with sample institutional user personas"],"gotchas":["Ondo's API may not be fully public; confirm available endpoints and rate limits before building; fallback to static product metadata if needed","Compliance questions must be legally reviewed—avoid implying Ondo provides legal advice; add disclaimers and suggest users consult counsel","USDY and OUSG have different redemption mechanics and chain support; ensure recommendation logic reflects current, accurate product specs","Institutional users expect SSO (Okta, Azure AD); consider adding SAML support or OAuth2 for enterprise adoption in phase 2","PDF generation can be slow for large documents; generate async and email to user rather than blocking the response"],"references":[{"url":"https://docs.ondo.finance","kind":"docs","label":"Ondo Finance Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard (Tokenized Vault)"},{"url":"https://react-hook-form.com/","kind":"docs","label":"React Hook Form Documentation"},{"url":"https://supabase.com/docs/guides/auth","kind":"docs","label":"Supabase Auth & Realtime"},{"url":"https://github.com/parallax/jsPDF","kind":"repo","label":"jsPDF for PDF Generation"},{"url":"https://github.com/ondofinance","kind":"repo","label":"Ondo GitHub (if public)"}],"time_estimate_hours":80,"projects":{"slug":"ondo"},"project_slug":"ondo","project":{"slug":"ondo","name":"Ondo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/ondo-finance?w=64&h=64","category":"rwa"}},{"id":"33cc67f7-3551-463b-b6cf-493d3a7375fd","project_id":"9cc29726-6f39-4396-9dab-530650b0db37","title":"USDY Composability Tracker","pitch":"Lists every protocol that accepts USDY/OUSG as collateral or yield source. Saves treasuries hours of research.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","defillama-api","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:06.67761+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A searchable, real-time registry of DeFi protocols that integrate USDY (Ondo's tokenized US Treasury) or OUSG (short-term treasury wrapper) as collateral, yield source, or liquidity pair. Treasuries and RWA funds need to know where their tokens can be deployed for yield or used as backing—this tool aggregates that data from on-chain events, protocol APIs, and manual submissions, surfacing APY, TVL, and risk profiles. Updates hourly via subgraph or Ponder indexer.","learn_first":["ERC-4626 vault standard","RWA token mechanics (USDY/OUSG)","Subgraph queries for DeFi protocol events","DefiLlama API structure"],"tech_stack":{"data":["DefiLlama API","Ondo Finance API"],"other":["Vercel"],"indexer":["Ponder","The Graph"],"frontend":["Next.js","TailwindCSS","wagmi","viem"]},"build_steps":["Set up Next.js 15 project with TypeScript and TailwindCSS; scaffold /api/composability route and /dashboard page.","Create a Ponder indexer that listens for USDY/OUSG transfers and approvals across Ethereum, Solana, and Mantle; track token balance changes in major protocols (Aave, Curve, Balancer, etc.).","Write a data aggregation layer that queries DefiLlama API for protocol TVL and yields; cross-reference with Ponder indexer to find USDY/OUSG positions.","Build a manual submission form (with Discord/Twitter auth via Privy) so protocol teams can register their USDY/OUSG integrations; store submissions in a simple PostgreSQL table.","Create a React component that displays protocols in a filterable table (by chain, APY, TVL, risk tier); add a \"verified\" badge for Ondo-approved integrations.","Implement hourly cron job (using Vercel Functions or a simple Node.js scheduler) to refresh DefiLlama and Ponder data; cache results in Redis or Vercel KV.","Add a simple risk scoring system: pull audit reports from Trail of Bits / OpenZeppelin via API, flag unaudited protocols.","Deploy to Vercel; set up GitHub Actions to auto-deploy on main branch push."],"gotchas":["DefiLlama's API may not have real-time USDY/OUSG balances for every protocol—you'll need to supplement with direct RPC calls or Ponder queries to get accurate TVL.","USDY exists on multiple chains (Ethereum, Solana, Mantle) with different contract addresses; ensure your indexer and frontend clearly distinguish by chain and show cross-chain totals carefully.","Protocol APYs fluctuate hourly; display a \"last updated\" timestamp and warn users that yields are not guaranteed.","Ondo Finance's official integrations list may be incomplete or lag behind actual deployments; prioritize on-chain data (Ponder) over manual lists to catch new integrations early."],"references":[{"url":"https://docs.ondo.finance/usdy","kind":"docs","label":"USDY Token Documentation"},{"url":"https://github.com/ondofinance","kind":"repo","label":"Ondo Finance GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://vercel.com/docs/storage/vercel-kv","kind":"docs","label":"Vercel KV for Caching"}],"time_estimate_hours":16,"projects":{"slug":"ondo"},"project_slug":"ondo","project":{"slug":"ondo","name":"Ondo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/ondo-finance?w=64&h=64","category":"rwa"}},{"id":"52cce4a0-9a9a-4437-9fae-6be2b334c28a","project_id":"9cc29726-6f39-4396-9dab-530650b0db37","title":"Tokenized Treasury Comparison","pitch":"Side-by-side of every tokenized Treasury (USDY, OUSG, USDtb, USDM, BUIDL) — yield, KYC, redemption, chain support.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","defillama-api","the-graph"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:06.381806+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time comparison dashboard that aggregates tokenized US Treasury products across multiple chains and issuers. Users can filter by yield, minimum investment, KYC requirements, redemption mechanics, and chain availability. The dashboard pulls on-chain data (balances, transfer volumes, holder counts) via The Graph or Ponder, combines it with off-chain metadata (issuer terms, regulatory status, redemption windows), and surfaces it in a sortable table with charts. Target audience: institutional treasury allocators, retail yield farmers, and compliance teams evaluating RWA entry points.","learn_first":["ERC-4626 vault standard","RWA custody and KYC flows","Chainlink price feeds for stablecoins","Subgraph indexing basics"],"tech_stack":{"data":["DefiLlama API","Ondo on-chain events","Etherscan/Solscan for holder data"],"infra":["Vercel","CORS proxy for off-chain metadata"],"indexer":["The Graph","Ponder"],"frontend":["Next.js","TanStack Query","shadcn/ui"],"contracts":["ERC-4626"]},"build_steps":["Scaffold Next.js app with TypeScript and shadcn/ui; set up TanStack Query for server state.","Create a JSON config file listing all tokenized Treasury products (USDY, OUSG, USDtb, USDM, BUIDL) with contract addresses, chain IDs, issuer metadata, and KYC/redemption links.","Write a Ponder indexer (or use existing Graph subgraph) to track ERC-4626 vault events (Deposit, Withdraw, Transfer) for each token across chains; store totalAssets, totalSupply, and recent volume.","Build a data aggregation layer that calls DefiLlama API for TVL and price data, merges it with on-chain vault state from the indexer, and adds off-chain metadata (yield APY from issuer docs, KYC requirements, redemption windows).","Create a React table component (TanStack Table) with sortable columns: token name, chain, current yield, TVL, holder count, min investment, KYC status, redemption frequency.","Add filter controls: chain selector, yield range slider, KYC requirement toggle, minimum investment input; use URL query params for shareable filtered views.","Implement a detail modal or side panel for each token showing: issuer info, redemption mechanics, historical yield chart (7d/30d/90d), recent transfer volume, and direct links to redemption portals.","Deploy to Vercel; set up environment variables for Ponder/Graph endpoints and DefiLlama API key; test across Ethereum, Solana, and Mantle mainnet data."],"gotchas":["Ondo products (USDY, OUSG) have KYC/accreditation gates on-chain via access control contracts; you cannot directly query holder balances without resolving allowlists. Work around this by surfacing only public metrics (TVL, total supply) and linking to official dashboards for holder-specific data.","Yield APY is not stored on-chain; it's calculated off-chain by issuers and published via docs or APIs. Scrape or manually maintain a config file with current yields and update it weekly, or partner with data providers like Ondo's own API if available.","Cross-chain data consistency: Solana and Mantle have different RPC latencies and block times. Use a cache layer (Redis or Vercel KV) to avoid rate limits and ensure the dashboard remains responsive.","DefiLlama API may lag 5–15 minutes behind real-time; clearly label data freshness timestamps so users know when the dashboard last updated.","Redemption windows and KYC requirements change frequently. Build a manual override system or subscribe to Ondo's changelog so you can push updates without redeploying."],"references":[{"url":"https://docs.ondo.finance","kind":"docs","label":"Ondo Finance Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard (Ethereum Improvement Proposals)"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API Documentation"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://github.com/ondofinance","kind":"repo","label":"Ondo Finance GitHub"}],"time_estimate_hours":16,"projects":{"slug":"ondo"},"project_slug":"ondo","project":{"slug":"ondo","name":"Ondo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/ondo-finance?w=64&h=64","category":"rwa"}},{"id":"0344163f-25f9-403b-849a-34928363835c","project_id":"d4441f98-3231-4b0a-bd16-6fce03eb55e5","title":"Hop AMM LP Optimizer","pitch":"Calculates expected return on Hop's h-token AMM LPs, accounting for fee yield and rebalancing slippage.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","the-graph","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:20:04.934051+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that models LP returns across Hop's h-token pools on multiple chains. The tool queries historical swap volumes and fees via The Graph, simulates rebalancing costs when liquidity drifts, and surfaces which pools offer the best risk-adjusted yields. Useful for LPs deciding where to deploy capital and for monitoring existing positions.","learn_first":["Hop's AMM pool mechanics and fee structure","Automated Market Maker (AMM) slippage and impermanent loss","The Graph subgraph queries for Hop on multiple chains","LP position tracking and rebalancing economics"],"tech_stack":{"ai":[],"data":["The Graph API","Hop subgraph"],"infra":[],"other":["ethers.js for contract ABIs"],"wallet":["wagmi (read-only for position queries)"],"indexer":["The Graph (Hop subgraph)"],"frontend":["Next.js","wagmi","viem","TailwindCSS"],"contracts":[]},"build_steps":["Set up Next.js project with wagmi and viem; configure RPC endpoints for Ethereum, Arbitrum, Optimism, Polygon, and Base.","Query the Hop subgraph (via The Graph) to fetch h-token pool reserves, cumulative fees, and swap volumes for each chain.","Implement an AMM math module: calculate current pool ratios, fee tiers, and historical fee APY from 30-day swap volume.","Build a rebalancing simulator: given a hypothetical LP deposit, calculate the cost (slippage) of rebalancing if one side of the pool drifts >20% from 50/50.","Create a comparison table showing each pool's fee APY, estimated IL over 30 days, and net yield after rebalancing costs.","Add a position tracker: allow users to paste their LP token address to see current balance, accrued fees, and projected 90-day returns.","Deploy to Vercel; set up automated Graph queries to refresh data every 5 minutes.","Test across all five chains; validate fee calculations against actual Hop pool contracts."],"gotchas":["Hop's fee structure and pool configurations vary by chain and token pair—query the subgraph schema carefully to avoid hardcoding assumptions.","Impermanent loss is real: a 50/50 pool experiencing 2x price movement can see ~5.6% IL, which may exceed fee yield in low-volume pools.","The Graph can lag by 1–2 blocks; for real-time position queries, fall back to direct contract calls via viem.","Rebalancing costs depend on slippage, which is nonlinear—use a simulation library or small test swaps to estimate accurately rather than linear math.","Multi-chain data aggregation can be slow; consider caching results in a lightweight database (e.g., Postgres + Supabase) to avoid repeated Graph queries."],"references":[{"url":"https://docs.hop.exchange","kind":"docs","label":"Hop Protocol Docs"},{"url":"https://github.com/hop-protocol","kind":"repo","label":"Hop GitHub Repository"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Documentation"},{"url":"https://thegraph.com/hosted-service/subgraph/hop-protocol/hop","kind":"tool","label":"Hop Subgraph (The Graph)"},{"url":"https://wagmi.sh/","kind":"docs","label":"wagmi Documentation"},{"url":"https://blog.uniswap.org/uniswap-v3-dominance/","kind":"article","label":"Uniswap V3 LP Returns Analysis (AMM reference)"}],"time_estimate_hours":12,"projects":{"slug":"hop"},"project_slug":"hop","project":{"slug":"hop","name":"Hop Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/hop-protocol?w=64&h=64","category":"bridges"}},{"id":"07002105-514c-4812-9ba1-3a08f42538b1","project_id":"d4441f98-3231-4b0a-bd16-6fce03eb55e5","title":"Bonder Operator Toolkit","pitch":"Open-source toolkit to run a Hop bonder — monitoring, auto-rebalancing, alerting.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["node","hop-sdk","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:59.041606+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A production-ready Node.js application that automates the core operational tasks of running a Hop Protocol bonder across multiple chains. Bonders are critical infrastructure: they provide liquidity for fast cross-chain transfers by bonding tokens on destination chains and settling later on source chains. This toolkit handles the repetitive work — tracking liquidity positions, rebalancing across chains to maintain target ratios, monitoring gas prices and swap slippage, and alerting operators to anomalies. Built on top of hop-sdk and ethers.js, it gives solo operators or small teams the ability to compete with large market makers without writing custom monitoring from scratch.","learn_first":["Hop Protocol bonder economics and settlement flow","AMM bonding curve mechanics and slippage","Cross-chain liquidity rebalancing strategies","EVM JSON-RPC and event monitoring patterns"],"tech_stack":{"ai":[],"data":["ethers.js for RPC calls","hop-sdk for bridge state"],"infra":["Node.js runtime","PM2 or systemd for process management","PostgreSQL or SQLite for state persistence"],"other":["Prometheus metrics export","Slack/Discord webhooks for alerts"],"wallet":[],"indexer":["The Graph (optional: for historical settlement data)"],"frontend":[],"contracts":["Hop Bridge (read-only via SDK)","Hop AMM (for slippage simulation)"]},"build_steps":["Set up a Node.js project with hop-sdk, ethers.js, and a task scheduler (node-cron or bull)","Create a config loader that reads bonder private keys, target liquidity ratios per chain, and RPC endpoints from environment or JSON","Build a chain monitor that polls Hop bridge contracts via hop-sdk to fetch current bonded amounts, pending settlements, and available liquidity on each chain","Implement a rebalancing engine that compares actual vs. target liquidity ratios and queues swap/bridge transactions when drift exceeds threshold","Add a gas price monitor that fetches current gas costs from each chain and skips rebalancing if costs exceed profitability threshold","Integrate Prometheus metrics (bonded amount, rebalance count, gas spent, slippage incurred) and expose a /metrics endpoint","Wire up Slack/Discord webhook alerts for critical events: low liquidity, failed settlements, RPC errors, or unusual slippage","Deploy as a systemd service or Docker container with PM2 for restart on crash; test end-to-end with testnet bonder setup"],"gotchas":["Hop settlement lag varies by chain pair — Arbitrum to Ethereum can take hours; monitor pending settlements separately from available liquidity or you'll over-commit","Rebalancing via bridge transfers incurs Hop fees and gas on both chains; calculate break-even threshold carefully or you'll bleed money on small rebalances","RPC rate limits and node outages are common; implement fallback RPC endpoints and circuit breakers, or your bonder will go silent at critical moments","Slippage on the AMM can spike during volatile market conditions; simulate swaps before executing and set a max-slippage guard or you'll lose money on large rebalances","Private key management: never hardcode keys; use environment variables or a secrets manager (AWS Secrets, HashiCorp Vault) from day one"],"references":[{"url":"https://docs.hop.exchange","kind":"docs","label":"Hop Protocol Docs"},{"url":"https://github.com/hop-protocol/hop","kind":"repo","label":"Hop SDK GitHub"},{"url":"https://docs.hop.exchange/bonder","kind":"docs","label":"Hop Bonder Architecture"},{"url":"https://docs.ethers.org","kind":"docs","label":"ethers.js Documentation"},{"url":"https://github.com/hop-protocol/contracts","kind":"repo","label":"Hop Bridge Contract ABI"},{"url":"https://github.com/siimon/prom-client","kind":"repo","label":"Prometheus Node.js Client"}],"time_estimate_hours":80,"projects":{"slug":"hop"},"project_slug":"hop","project":{"slug":"hop","name":"Hop Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/hop-protocol?w=64&h=64","category":"bridges"}},{"id":"d915e1b4-7dee-49d2-8ced-732f0be7bb8d","project_id":"d4441f98-3231-4b0a-bd16-6fce03eb55e5","title":"Smart Bridge Router","pitch":"Picks Hop vs other rollup bridges based on user's amount and route, with explanation of the choice.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","hop-sdk","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:55.203005+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that compares bridge routes across Hop Protocol, Stargate, and native bridges, then recommends the best option based on amount, destination chain, and optimization criteria (speed, cost, liquidity). Users see the reasoning behind each recommendation—why Hop's AMM bonders might be cheaper for mid-sized transfers, why native bridges suit large amounts, or why Stargate offers better rates on certain corridors. Built with Next.js and Hop SDK, this teaches bridge economics and gives users agency in their cross-chain decisions.","learn_first":["How Hop's AMM bonders work vs liquidity pools on other bridges","Bridge fee structures: Hop's swap fee + bonder incentives vs flat rates","Cross-chain liquidity depth and slippage curves","Basic AMM math and price impact calculation"],"tech_stack":{"data":["Hop SDK","viem","ethers.js"],"infra":["Vercel","RPC endpoints (Alchemy or Infura)"],"other":["Stargate SDK (optional)","1inch API (optional for comparison)"],"frontend":["Next.js 14+","React","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for bridge selection and results.","Install and configure Hop SDK; initialize Hop instances for all five chains (Ethereum, Arbitrum, Optimism, Polygon, Base).","Build a form component that accepts: source chain, destination chain, token (USDC, ETH, DAI), and amount.","Query Hop's available routes and fee structures using Hop SDK; calculate output amount and fees for each route.","(Optional) Integrate Stargate SDK or fetch bridge rates from 1inch API to compare against Hop routes.","Implement comparison logic: score each bridge option by total cost (fees + slippage), speed (estimated time), and liquidity depth; rank and display top 3 options.","Add an explanation card for each recommendation showing: why this bridge, fee breakdown, expected output, and estimated time.","Deploy to Vercel; test with small amounts on testnet (Sepolia, Arbitrum Sepolia, OP Sepolia) before mainnet."],"gotchas":["Hop's bonder incentives and fee structures vary by corridor and liquidity state; cache or refresh rates every 30–60 seconds to avoid stale data.","RPC rate limits can hit hard when querying multiple chains; use a batch provider or upgrade to a paid tier.","Slippage estimation requires live pool state; pre-calculate ranges and show users a warning if liquidity is thin.","Stargate and other bridges may have different token support per chain; validate token availability before showing a route as viable."],"references":[{"url":"https://docs.hop.exchange","kind":"docs","label":"Hop Protocol Docs"},{"url":"https://github.com/hop-protocol/hop","kind":"repo","label":"Hop SDK GitHub"},{"url":"https://github.com/hop-protocol/contracts","kind":"repo","label":"Hop Protocol Smart Contracts"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://stargate.finance/docs","kind":"docs","label":"Stargate Bridge Docs"}],"time_estimate_hours":12,"projects":{"slug":"hop"},"project_slug":"hop","project":{"slug":"hop","name":"Hop Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/hop-protocol?w=64&h=64","category":"bridges"}},{"id":"feef1c17-7d22-4191-b337-636630a09b76","project_id":"d4441f98-3231-4b0a-bd16-6fce03eb55e5","title":"Bonder Profitability Tracker","pitch":"Public stats on Hop bonder earnings, capital efficiency, and risk-of-loss. Useful for would-be bonders.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","hop-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:53.876913+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that aggregates Hop Protocol bonder performance metrics across all supported chains. Track individual bonder earnings, capital utilization, slippage exposure, and historical profit/loss. Display key metrics like APY, daily volume processed, average liquidity depth, and liquidation risk. This helps prospective bonders understand profitability before committing capital, and existing bonders benchmark their performance.","learn_first":["How Hop Protocol bonders work (AMM-style liquidity provision)","Hop's canonical bridge token and hToken mechanics","Bonder fee structure and slippage calculations","Cross-chain state reconciliation challenges"],"tech_stack":{"data":["Hop API (REST)","Etherscan/Arbiscan/Optimism Explorer APIs for on-chain verification","The Graph (optional, for historical bonder events)"],"infra":["Vercel or similar for hosting","Redis for caching bonder stats (optional)"],"other":["viem for chain-agnostic RPC calls to verify bonder balances"],"frontend":["Next.js","React","TailwindCSS","Recharts or similar charting"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; create pages for dashboard and individual bonder detail views.","Fetch bonder list and current balances from Hop API; store in React state or simple cache.","Calculate key metrics: total fees earned (from Hop API bonder history), capital deployed per chain, and APY (fees / capital / days).","Implement cross-chain balance aggregation using viem to query bonder contract balances on Ethereum, Arbitrum, Optimism, Polygon, and Base.","Build a chart component showing daily/weekly earnings trends, capital efficiency over time, and per-chain breakdown.","Add a risk indicator: calculate potential loss-of-funds scenarios (e.g., if a bonder's liquidity falls below minimum, or slippage spikes).","Integrate Etherscan/Arbiscan APIs to pull transaction history and confirm fee calculations independently.","Deploy to Vercel and set up a simple refresh schedule (e.g., every 5 minutes) to keep metrics current."],"gotchas":["Hop API may not expose all bonder earnings in real-time; you may need to reconstruct fees from on-chain swap events (Swap logs) or rely on Hop's internal accounting—verify with Hop team first.","Cross-chain state is eventually consistent; a bonder's balance snapshot may differ slightly across chains at any given moment. Display timestamps and note staleness.","Bonder profitability is highly dependent on slippage and volatility; a profitable bonder one week may be unprofitable the next if market conditions shift. Include disclaimers and historical volatility metrics.","Rate limits on Etherscan/Arbiscan APIs can throttle your requests if you poll too frequently; use caching and batch requests where possible."],"references":[{"url":"https://docs.hop.exchange","kind":"docs","label":"Hop Protocol Docs"},{"url":"https://github.com/hop-protocol","kind":"repo","label":"Hop Protocol GitHub"},{"url":"https://docs.hop.exchange/developers/api","kind":"docs","label":"Hop API Reference"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://recharts.org","kind":"tool","label":"Recharts (React charting library)"}],"time_estimate_hours":16,"projects":{"slug":"hop"},"project_slug":"hop","project":{"slug":"hop","name":"Hop Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/hop-protocol?w=64&h=64","category":"bridges"}},{"id":"39f0ebfc-2a52-4c61-8638-3b5f646b2878","project_id":"8d7abb53-68d6-4403-baa3-ce33da33fabe","title":"veSTG Bribe Aggregator","pitch":"Aggregates bribes paid for Stargate pool incentives, with ROI-per-vote analysis.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","the-graph","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:53.623066+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that tracks and aggregates all bribes offered to veSTG holders across Stargate pools, calculates effective ROI per vote, and surfaces the best bribe opportunities. Users see real-time bribe amounts, voting power required, and historical bribe trends to make informed decisions about where to direct their governance votes. This captures value for veSTG holders who currently have fragmented visibility into bribe markets.","learn_first":["Stargate governance model and veSTG mechanics","LayerZero omnichain messaging basics","The Graph subgraph indexing and querying","ERC-20 and vote-escrow (ve) token patterns"],"tech_stack":{"data":["The Graph GraphQL API","Stargate subgraph or custom indexing"],"infra":["Vercel for hosting"],"other":["ethers.js or viem for contract reads"],"wallet":["RainbowKit or Privy for read-only wallet connection"],"indexer":["The Graph (subgraph for Stargate events)"],"frontend":["Next.js 14+","wagmi v2","viem","TailwindCSS","recharts or similar for ROI charts"],"contracts":["Stargate veSTG contract (read-only)","Stargate gauge/pool contracts"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for dashboard and pool detail views.","Create a custom The Graph subgraph (or query existing Stargate subgraph) to index bribe events, gauge voting, and pool incentive distributions across all supported chains.","Build a GraphQL query layer in Next.js API routes to aggregate bribe data across chains, normalize amounts to USD, and calculate cumulative ROI per vote.","Implement wagmi hooks to fetch veSTG balance and voting power for connected wallets; display personalized bribe recommendations.","Create dashboard components: bribe leaderboard (sorted by ROI), pool-specific bribe breakdown, historical bribe trends, and ROI calculator.","Add real-time updates using The Graph subscriptions or polling; surface alerts for new high-ROI bribes.","Deploy subgraph to The Graph Studio; test queries against mainnet and testnet data.","Deploy frontend to Vercel; set up environment variables for RPC endpoints and subgraph URLs."],"gotchas":["Bribe amounts may be in different tokens (USDC, USDT, native assets); you must normalize to a common denomination (USD) using price feeds or DEX quotes, which can lag.","Stargate governance voting periods and bribe windows are time-bound; stale bribe data is misleading. Implement cache invalidation and real-time indexing to avoid showing expired opportunities.","The Graph subgraph indexing can lag 1–2 blocks behind the chain tip; for real-time bribe detection, consider supplementing with direct RPC calls for the most recent blocks.","Bribe ROI depends on total veSTG voting power, which fluctuates; calculate ROI as (bribe amount / voting power required), but refresh this metric frequently as votes shift.","Multi-chain aggregation requires querying multiple subgraphs or a cross-chain indexer; latency and consistency issues can arise if chains are out of sync."],"references":[{"url":"https://stargateprotocol.gitbook.io","kind":"docs","label":"Stargate Protocol Documentation"},{"url":"https://github.com/stargate-protocol","kind":"repo","label":"Stargate GitHub Repository"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://docs.curve.fi/governance/overview/","kind":"article","label":"Vote-Escrow (ve) Token Model Explainer"},{"url":"https://nextjs.org/docs/pages/building-your-application/routing/api-routes","kind":"docs","label":"Next.js API Routes Guide"}],"time_estimate_hours":16,"projects":{"slug":"stargate"},"project_slug":"stargate","project":{"slug":"stargate","name":"Stargate","logo_url":"https://icons.llamao.fi/icons/protocols/stargate-finance?w=64&h=64","category":"bridges"}},{"id":"881ee6eb-f9b2-4857-8717-130783ac58a5","project_id":"8d7abb53-68d6-4403-baa3-ce33da33fabe","title":"Pool Liquidity Map","pitch":"Live heatmap of Stargate pool depth per route. Tells users which routes to avoid right now.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","stargate-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:48.01554+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard showing Stargate liquidity pool depths across all supported chains and trading pairs. Color-coded heatmap (green = deep liquidity, red = shallow) helps bridge users identify optimal routes before executing transfers. Displays pool utilization, available liquidity per chain, and historical depth trends. Useful for traders optimizing slippage and for Stargate LPs monitoring their capital efficiency across routes.","learn_first":["Stargate pool architecture and unified liquidity model","LayerZero cross-chain messaging basics","Real-time data fetching and WebSocket patterns"],"tech_stack":{"data":["stargate-api","viem for on-chain reads","ethers.js or viem for multicall"],"infra":["vercel","redis for caching pool states"],"frontend":["nextjs","typescript","tailwindcss","recharts or plotly"]},"build_steps":["Set up Next.js project with TypeScript and Tailwind; scaffold pages for heatmap view and route details.","Fetch Stargate pool data via stargate-api (list all pools, chains, token pairs, current depths).","Parse pool state: extract liquidity depth, utilization ratio, and available capacity per route.","Build heatmap grid component: rows = destination chains, columns = token pairs; cell color = liquidity depth percentile.","Add real-time updates: poll stargate-api every 10–30 seconds or use WebSocket if available; update heatmap cells.","Implement route detail view: click a cell to see pool depth, TVL, recent transactions, and estimated slippage for a given transfer size.","Add historical chart: show pool depth over last 24h for selected route using recharts.","Deploy to Vercel; set up Redis cache layer to reduce API calls and improve response times."],"gotchas":["Stargate API rate limits: implement exponential backoff and cache aggressively; consider running your own indexer if hitting limits.","Pool data can be stale by 10–30 seconds depending on API update frequency; clearly label timestamps on heatmap.","Cross-chain pool depths are interdependent (arbitrage bots rebalance); a deep pool on Ethereum may drain quickly if arb activity spikes.","Liquidity depth alone doesn't predict slippage; you may need to fetch swap simulation data separately or use Stargate's SDK to estimate actual slippage."],"references":[{"url":"https://stargateprotocol.gitbook.io","kind":"docs","label":"Stargate Protocol Docs"},{"url":"https://github.com/stargate-protocol","kind":"repo","label":"Stargate GitHub"},{"url":"https://layerzero.gitbook.io","kind":"docs","label":"LayerZero Docs"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://recharts.org","kind":"tool","label":"Recharts Library"}],"time_estimate_hours":12,"projects":{"slug":"stargate"},"project_slug":"stargate","project":{"slug":"stargate","name":"Stargate","logo_url":"https://icons.llamao.fi/icons/protocols/stargate-finance?w=64&h=64","category":"bridges"}},{"id":"dd13d154-73c2-4163-956a-b6561c0dbaf9","project_id":"8d7abb53-68d6-4403-baa3-ce33da33fabe","title":"Cross-chain Subscription Engine","pitch":"Auto-debits USDC from whichever chain user has balance on, monthly. Pays a SaaS like Stripe for crypto.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["foundry","stargate-sdk","gelato-network"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:44.864886+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A subscription billing system that leverages Stargate's unified liquidity to automatically collect recurring payments in USDC from users across multiple chains. The engine detects user balances on any supported chain (Ethereum, Arbitrum, Optimism, Base, Polygon, BSC, Avalanche), initiates cross-chain transfers via Stargate when needed, and settles to a merchant wallet. This solves the fragmentation problem for crypto SaaS: users don't need to bridge manually or maintain balance on a single chain. The system uses LayerZero's omnichain messaging to coordinate state, Stargate SDK for liquidity routing, and a simple smart contract to handle subscription logic and automatic execution via Gelato or Chainlink Automation.","learn_first":["LayerZero omnichain messaging basics","Stargate liquidity pools and routing","ERC-20 permit() for gasless approvals","Chainlink Automation or Gelato trigger patterns"],"tech_stack":{"ai":[],"data":["Stargate API for route quotes","LayerZero endpoint contracts"],"infra":["Gelato Web3 Functions or Chainlink Automation","Alchemy or Infura for RPC"],"other":["USDC (Circle's native stablecoin)","Permit2 for batch approvals"],"wallet":["Privy or RainbowKit"],"indexer":["The Graph (optional, for subscription state tracking)"],"frontend":["wagmi","viem","RainbowKit","ethers.js"],"contracts":["Solidity 0.8.19+","ERC-20 (USDC)","LayerZero OApp pattern"]},"build_steps":["Set up Foundry project with LayerZero and Stargate SDK dependencies; create base contract inheriting from OApp for omnichain messaging","Design subscription data structure: subscriber address, monthly amount in USDC, next billing timestamp, preferred source chain; store in mapping","Implement subscription creation function that records user intent and emits event; use ERC-20 permit() to approve USDC spend without separate tx","Write cross-chain balance checker: query Stargate router on each chain via LayerZero to find where user has USDC; select chain with sufficient balance","Build Stargate bridge call: construct swap parameters using Stargate SDK to route USDC from source chain to settlement chain (e.g., Ethereum); handle LayerZero fees","Integrate Gelato Web3 Function or Chainlink Automation to trigger subscription settlement on schedule; function checks if billing date is due and calls bridge","Deploy to testnet (Sepolia, Arbitrum Sepolia, etc.); test end-to-end: create subscription, wait for automation trigger, verify USDC arrives at merchant wallet","Add frontend UI using wagmi + RainbowKit: subscription dashboard, balance display across chains, manual trigger button for testing"],"gotchas":["Stargate charges a fee (typically 0.05–0.5% depending on route); factor into subscription amount or absorb as merchant cost; test fee structure on testnet first","LayerZero message delivery is asynchronous; balance checks and bridge calls may take 10–60 seconds; use event listeners and polling to track state, not blocking waits","USDC is not natively deployed on all chains; verify which chains your target users operate on and ensure Stargate has liquidity pools for those pairs","Automation (Gelato/Chainlink) has execution costs; calculate gas on each chain and ensure subscription amount covers execution fee + bridge fee + settlement, or use a batching pattern to amortize costs","Permit() signature expiration and nonce management can cause issues if user creates multiple subscriptions; use Permit2 (ERC-2612) for better UX and replay protection"],"references":[{"url":"https://stargateprotocol.gitbook.io","kind":"docs","label":"Stargate Protocol Documentation"},{"url":"https://github.com/stargate-protocol","kind":"repo","label":"Stargate SDK GitHub"},{"url":"https://docs.layerzero.network/v2/developers/evm/oapp/overview","kind":"docs","label":"LayerZero OApp Pattern"},{"url":"https://docs.gelato.network/web3-functions/overview","kind":"docs","label":"Gelato Web3 Functions"},{"url":"https://eips.ethereum.org/EIPS/eip-2612","kind":"docs","label":"ERC-2612 Permit Extension"},{"url":"https://docs.chain.link/chainlink-automation/overview","kind":"docs","label":"Chainlink Automation"}],"time_estimate_hours":80,"projects":{"slug":"stargate"},"project_slug":"stargate","project":{"slug":"stargate","name":"Stargate","logo_url":"https://icons.llamao.fi/icons/protocols/stargate-finance?w=64&h=64","category":"bridges"}},{"id":"e7200858-d6d9-4b2e-990a-d4369db1d38f","project_id":"84eeb3ad-a59c-4b85-bd63-850b016524f4","title":"Solana ↔ EVM Swap Aggregator","pitch":"Single UI to swap any Solana asset for any EVM asset via Wormhole + DEX aggregators on each side.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","wormhole-sdk","jupiter-api","1inch-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:43.175576+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a cross-chain DEX aggregator that lets users swap tokens between Solana and any EVM chain (Ethereum, Arbitrum, Optimism, Base, Polygon, BSC) in one transaction flow. The UI receives a swap intent, routes it through Wormhole's token bridge for the cross-chain hop, then executes the best-price swap on the destination chain using that chain's DEX aggregator (1inch, 0x, Jupiter). Users see a single quote and one approval—the contract handles the rest. This solves the fragmentation problem: instead of bridging manually then swapping, users get atomic-feeling UX with price discovery across both ecosystems.","learn_first":["Wormhole token bridge mechanics and attestations","How DEX aggregators (Jupiter, 1inch) quote and execute swaps","Solana program architecture basics (if building backend routing)","EVM contract interactions via viem and ethers patterns"],"tech_stack":{"ai":[],"data":["Jupiter API (Solana quotes)","1inch API (EVM quotes)","Wormhole Token Bridge API for attestations"],"infra":["Vercel (Next.js hosting)","Alchemy or Infura RPC endpoints (EVM)","Helius or QuickNode RPC (Solana)"],"other":["Wormhole SDK for bridge interactions"],"wallet":["RainbowKit (EVM)","Phantom or Solflare (Solana)","Privy or dynamic (optional, for unified UX)"],"indexer":[],"frontend":["Next.js 14+","wagmi + viem (EVM chains)","@solana/web3.js (Solana)","TanStack Query for quote caching","Tailwind CSS"],"contracts":["Wormhole Token Bridge (existing)","ERC-20 (for EVM side)","SPL Token (for Solana side)"]},"build_steps":["Set up Next.js 14 project with wagmi, viem, and @solana/web3.js; scaffold pages for swap UI and route confirmation.","Implement Solana wallet connection (Phantom) and EVM wallet connection (RainbowKit) with dual-chain state management using Zustand or Context.","Build quote engine: call Jupiter API for Solana→token quote, then 1inch API for EVM token→target quote; cache results and show best path.","Integrate Wormhole SDK to fetch token attestations and bridge fees; display total slippage and time estimate to user.","Create a backend route (Next.js API) that orchestrates the swap: receives user intent, validates quotes, builds the Wormhole bridge payload.","Implement the swap flow: user approves SPL token on Solana, contract sends to Wormhole bridge, monitor for attestation, then trigger EVM swap via relayer or user-initiated second tx.","Add error handling and retry logic for failed bridge attestations; surface clear errors to user (insufficient liquidity, slippage exceeded, etc.).","Deploy to Vercel, test on testnet (Solana devnet + Goerli/Sepolia), then mainnet with small amounts; monitor Wormhole bridge logs."],"gotchas":["Wormhole attestations take 13+ blocks on Ethereum and vary per chain; users expect instant swaps—set expectations clearly or use a relayer service (costs gas).","DEX aggregators (1inch, Jupiter) have different quote formats and slippage models; normalize them before showing the user a single quote to avoid confusion.","Token decimals differ between Solana (often 6 or 8) and EVM (usually 18); mismatch causes silent failures—always normalize via token metadata before bridging.","Solana's transaction size limits (1232 bytes) can block complex swap instructions; break into multiple txs if needed and sequence them carefully.","Bridge fees and slippage stack; a 0.3% swap fee + 0.5% bridge fee + 0.2% aggregator slippage = 1% total loss—communicate this upfront or users will churn."],"references":[{"url":"https://docs.wormhole.com/wormhole/explore-wormhole/token-bridge","kind":"docs","label":"Wormhole Token Bridge Docs"},{"url":"https://github.com/wormhole-foundation/wormhole-sdk-ts","kind":"repo","label":"Wormhole SDK (TypeScript)"},{"url":"https://station.jup.ag/docs/apis/swap-api","kind":"docs","label":"Jupiter API Reference"},{"url":"https://docs.1inch.io/docs/fusion-swap-api/overview","kind":"docs","label":"1inch Fusion API"},{"url":"https://wagmi.sh/","kind":"docs","label":"wagmi Documentation"},{"url":"https://docs.wormhole.com/wormhole/quick-start","kind":"docs","label":"Wormhole Testnet Faucet & Setup"}],"time_estimate_hours":80,"projects":{"slug":"wormhole"},"project_slug":"wormhole","project":{"slug":"wormhole","name":"Wormhole","logo_url":"https://icons.llamao.fi/icons/protocols/wormhole?w=64&h=64","category":"bridges"}},{"id":"a9358e9e-db85-4e41-b3ab-5a110146cd8c","project_id":"8d7abb53-68d6-4403-baa3-ce33da33fabe","title":"Multi-chain USDC Wallet","pitch":"Mobile wallet that shows USDC across all Stargate chains as one balance and routes payments automatically.","difficulty":"1+ month","use_case":"onboarding","build_with":["expo","stargate-sdk","privy","wagmi","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:41.780648+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a React Native mobile app (Expo) that aggregates USDC balances across Ethereum, Arbitrum, Optimism, Base, Polygon, BSC, and Avalanche using Stargate's unified liquidity layer. Users see a single USDC balance, send USDC to any chain with one tap, and the app automatically routes through Stargate's bridge. Integrate Privy for non-custodial key management and use the Stargate SDK to query liquidity pools and execute cross-chain swaps. This teaches bridge mechanics, multi-chain state management, and mobile wallet UX patterns.","learn_first":["LayerZero messaging protocol basics","Stargate pool architecture and fees","ERC-20 token transfers across chains","Mobile wallet security patterns","React Native navigation and state management"],"tech_stack":{"data":["Stargate SDK","LayerZero Scan API"],"infra":["Alchemy (multi-chain RPC)","Expo EAS (build service)"],"wallet":["Privy","WalletConnect v2"],"indexer":["The Graph (Stargate subgraph)"],"frontend":["React Native","Expo","RainbowKit Mobile","TailwindCSS (NativeWind)"],"contracts":["Stargate Router (read-only)","USDC (ERC-20)"]},"build_steps":["Scaffold Expo project with TypeScript and set up Privy embedded wallet (email/phone login).","Integrate Alchemy multi-chain RPC provider and viem for contract reads across all 7 chains.","Query USDC balances on each chain in parallel using Promise.all() and cache results with React Query.","Fetch Stargate pool liquidity and fee data via The Graph subgraph to show real-time bridge rates.","Build UI screens: Dashboard (aggregate balance), Send (chain selector, amount input), Confirm (fee breakdown, route preview).","Implement Stargate SDK swap execution: call stargate.swap() with source chain, destination chain, and amount; track LayerZero transaction hash.","Add transaction history screen that polls LayerZero Scan API to show cross-chain transfer status and confirmations.","Test end-to-end on testnet (Sepolia, Arbitrum Sepolia, OP Sepolia, Base Sepolia, Polygon Mumbai, BSC Testnet, Avalanche Fuji) before mainnet."],"gotchas":["Stargate charges bridge fees (typically 0.04–0.06% per hop); display these clearly or users will be surprised by received amount.","LayerZero messages have variable confirmation times (5–30 min depending on chain); show a pending state and don't let users assume instant settlement.","Privy's embedded wallet requires email verification; build a fallback to WalletConnect for users who prefer external wallets, or you'll lose adoption.","USDC liquidity varies by chain pair; some routes may not exist or require bridging through an intermediate pool, which Stargate SDK handles but adds latency.","React Native Expo has limited access to native modules; if you need biometric auth beyond Privy's built-in, you'll need to eject or use expo-local-authentication carefully."],"references":[{"url":"https://stargateprotocol.gitbook.io","kind":"docs","label":"Stargate Protocol Docs"},{"url":"https://github.com/stargate-protocol/stargate-sdk","kind":"repo","label":"Stargate SDK GitHub"},{"url":"https://docs.layerzero.network/","kind":"docs","label":"LayerZero Omnichain Messaging"},{"url":"https://docs.privy.io/guide/react-native","kind":"docs","label":"Privy Mobile Wallet Integration"},{"url":"https://thegraph.com/explorer/subgraphs/HUZDsRGBnMVmxqSJkGsqcBwWX3SAa2bcqWHsXyIsPump?view=Overview","kind":"tool","label":"The Graph Stargate Subgraph"},{"url":"https://docs.expo.dev/guides/typescript/","kind":"docs","label":"Expo with TypeScript Setup"}],"time_estimate_hours":160,"projects":{"slug":"stargate"},"project_slug":"stargate","project":{"slug":"stargate","name":"Stargate","logo_url":"https://icons.llamao.fi/icons/protocols/stargate-finance?w=64&h=64","category":"bridges"}},{"id":"1d856dfa-9577-48f0-a681-37107d15dfcd","project_id":"84eeb3ad-a59c-4b85-bd63-850b016524f4","title":"Guardian Set Monitor","pitch":"Alerts when Wormhole's guardian set changes, with diff vs prior set. Security-critical for integrations.","difficulty":"weekend","use_case":"security","build_with":["node","wormhole-sdk","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:38.081171+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a monitoring service that tracks Wormhole's guardian set—the set of validators that sign cross-chain messages. When the set changes (guardians added, removed, or reordered), emit alerts with a clear diff showing what changed. This is essential for bridge integrations and security teams to detect potential compromise or governance updates. The monitor polls Wormhole's contract state, compares against a stored baseline, and triggers notifications via webhook or email.","learn_first":["Wormhole guardian set concept and role in message verification","EVM contract state queries and event monitoring","Basic webhook/notification patterns"],"tech_stack":{"ai":[],"data":["ethers.js for contract interaction"],"infra":["Node.js runtime","Webhook service (e.g., Discord, Slack, or custom HTTP)"],"other":["wormhole-sdk for guardian set utilities"],"wallet":[],"indexer":[],"frontend":[],"contracts":["Wormhole Core Bridge (read-only)"]},"build_steps":["Set up a Node.js project with ethers.js and wormhole-sdk; create a .env file for RPC endpoints (Ethereum mainnet minimum) and webhook URL","Write a function using ethers.js to call the Wormhole Core Bridge contract's getGuardianSet() method to fetch current guardians","Implement local JSON file storage to persist the last-known guardian set state","Create a polling loop (e.g., every 5 minutes) that fetches the current guardian set and compares it to the stored state","Build a diff function that identifies added guardians, removed guardians, and reordered positions; format a human-readable message","Implement a notification sender (POST to webhook, send email via Nodemailer, or Discord bot) triggered when a diff is detected","Update the stored state after a successful alert so you don't spam repeated notifications","Test end-to-end by running locally, then deploy to a free tier (Railway, Render, or AWS Lambda with CloudWatch triggers)"],"gotchas":["Guardian set changes are rare but critical—test your alerting logic with mock data before relying on it in production; consider a dry-run mode","Wormhole's Core Bridge contract address differs per chain; ensure you're querying the correct network and have a fallback RPC if one fails","Webhook delivery is not guaranteed; add retry logic and idempotency keys to avoid duplicate alerts if your service restarts","Guardian set indices and signatures are tightly coupled; a reorder without address changes is still a security event worth flagging","Rate limits on RPC providers can cause missed polls; use a reliable provider (Alchemy, Infura) or run your own node for production"],"references":[{"url":"https://github.com/wormhole-foundation/wormhole/blob/main/ethereum/contracts/core/Bridge.sol","kind":"repo","label":"Wormhole Core Bridge Contract ABI"},{"url":"https://docs.wormhole.com/wormhole/reference/sdk-docs","kind":"docs","label":"Wormhole SDK Documentation"},{"url":"https://docs.ethers.org/v6/api/contract/","kind":"docs","label":"ethers.js Contract Interaction Guide"},{"url":"https://docs.wormhole.com/wormhole/explore/guardian-set","kind":"docs","label":"Wormhole Guardian Set Concept"},{"url":"https://docs.ethers.org/v6/api/providers/","kind":"docs","label":"EVM Contract State Monitoring Pattern"}],"time_estimate_hours":6,"projects":{"slug":"wormhole"},"project_slug":"wormhole","project":{"slug":"wormhole","name":"Wormhole","logo_url":"https://icons.llamao.fi/icons/protocols/wormhole?w=64&h=64","category":"bridges"}},{"id":"ccc3ae94-b3dc-449a-9001-7e87b07a8fe5","project_id":"84eeb3ad-a59c-4b85-bd63-850b016524f4","title":"NTT Asset Issuer Helper","pitch":"No-code wizard for projects to deploy a Native Token Transfer (NTT) across chains using Wormhole.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","wormhole-ntt-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:32.203652+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web interface that guides token projects through deploying Wormhole's Native Token Transfer (NTT) contracts across multiple chains without writing Solidity. The wizard collects token metadata (name, symbol, decimals, initial supply), chain selection, and burn/mint rate limits, then generates deployment scripts and contract configurations. Users connect their wallet, review generated contract code, and execute deployments via a guided flow. This reduces friction for projects wanting to bridge tokens natively rather than wrapping.","learn_first":["Wormhole NTT architecture and contract patterns","ERC-20 token standards and cross-chain semantics","Wagmi hooks for multi-chain wallet connections","Foundry or Hardhat for contract deployment scripting"],"tech_stack":{"data":["Wormhole Chain Registry (JSON)","Token metadata store (Supabase or Firebase)"],"infra":["Vercel or similar for hosting","Etherscan/Blockscout APIs for verification"],"wallet":["wagmi useAccount, useContractWrite hooks","ethers.js or viem for signing"],"frontend":["Next.js 14+","React","wagmi","viem","RainbowKit or Privy for wallet"],"contracts":["Wormhole NTT (ERC-20 extension)","Solidity 0.8.x"]},"build_steps":["Set up Next.js project with wagmi, viem, and RainbowKit; scaffold pages for token info input, chain selection, and review","Fetch Wormhole's supported chains and NTT contract addresses from Wormhole Chain Registry; display as multi-select UI","Build form component collecting token name, symbol, decimals, initial supply, and rate-limit config (burn/mint thresholds)","Integrate wormhole-ntt-sdk to generate contract deployment configs and Foundry/Hardhat scripts for each selected chain","Add wallet connection flow (wagmi useAccount) and chain-switching logic; validate user has sufficient balance on each target chain","Implement contract deployment orchestration: serialize generated scripts, prompt user to sign each chain's deployment tx via wagmi useContractWrite","Build review/confirmation UI showing deployed contract addresses, explorer links, and NTT configuration per chain","Add post-deployment verification: poll Etherscan/Blockscout APIs to confirm contract bytecode matches expected NTT pattern"],"gotchas":["NTT contracts require careful rate-limit configuration; misconfigured burn/mint caps can lock tokens. Add validation and warnings in the UI.","Wormhole Chain Registry updates periodically; cache it client-side but provide a manual refresh button to avoid stale chain data.","Multi-chain deployments are sequential and slow; set user expectations with a progress bar and allow resuming interrupted deployments.","Gas estimation varies wildly by chain; show estimated costs upfront and warn if user's wallet balance is borderline.","NTT token transfers require attestations; the wizard should document this post-deployment step clearly so users understand they must set up relayers."],"references":[{"url":"https://docs.wormhole.com/wormhole/explore-wormhole/native-token-transfer","kind":"docs","label":"Wormhole NTT Documentation"},{"url":"https://github.com/wormhole-foundation/wormhole/blob/main/sdk/js/src/chains.ts","kind":"repo","label":"Wormhole Chain Registry"},{"url":"https://www.npmjs.com/package/@wormhole-foundation/sdk-ntt","kind":"tool","label":"wormhole-ntt-sdk npm"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://github.com/wormhole-foundation/wormhole","kind":"repo","label":"Wormhole GitHub Repository"},{"url":"https://docs.openzeppelin.com/contracts/4.x/erc20","kind":"docs","label":"ERC-20 Standard (OpenZeppelin)"}],"time_estimate_hours":80,"projects":{"slug":"wormhole"},"project_slug":"wormhole","project":{"slug":"wormhole","name":"Wormhole","logo_url":"https://icons.llamao.fi/icons/protocols/wormhole?w=64&h=64","category":"bridges"}},{"id":"1473176b-1017-4217-b468-f26efd9d6dd1","project_id":"495308be-fd4e-41d6-a66f-8ea8189f4424","title":"Intent Order Builder","pitch":"Compose Across intent orders with conditional execution (e.g. only bridge if dest chain gas < X gwei).","difficulty":"1-2 weeks","use_case":"automation","build_with":["nextjs","across-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:29.698468+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"An application that lets users build and schedule intent-based bridge orders through Across. Instead of one-shot transfers, users define conditions (gas price thresholds, token price ranges, time windows) and actions (swap destination tokens, stake, compound) that execute automatically. The builder exposes Across SDK intent composition, chains it to oracle data (Chainlink, Pyth), and uses a relayer network or keeper service to execute when conditions are met. Target users: yield farmers managing multi-chain positions, arbitrage bots, treasury managers rebalancing across chains.","learn_first":["Across intent order spec and SDK","Conditional execution patterns (Gelato, Chainlink Automation)","ERC-20 approvals and permit signatures","Oracle data consumption (Chainlink, Pyth)"],"tech_stack":{"ai":[],"data":["Chainlink Data Feeds or Pyth for price/gas oracles","Across SDK for intent composition"],"infra":["Gelato Web3 Functions or Chainlink Automation for keeper execution","IPFS or Arweave for storing intent metadata"],"other":["Across relayer network for settlement"],"wallet":["ethers.js or viem for signing"],"indexer":[],"frontend":["Next.js","wagmi","viem","RainbowKit or Privy for wallet"],"contracts":["Across intent order contract interface"]},"build_steps":["Set up Next.js app with wagmi + viem; scaffold wallet connection (RainbowKit or Privy).","Study Across SDK intent order spec and write a TypeScript helper to compose intent objects (source chain, dest chain, amount, conditions).","Build a form UI to capture: source token, amount, destination chain, conditional rules (gas price threshold, token price range, time window).","Integrate Chainlink or Pyth oracle feeds to fetch live gas prices and token prices; display them in the UI.","Implement intent serialization: convert form inputs into a signed intent object ready for Across relayer.","Set up a backend endpoint (Node.js) that listens for keeper triggers (Gelato Web3 Functions or Chainlink Automation) and submits intents to Across when conditions are met.","Test end-to-end on testnet (Sepolia → Arbitrum Sepolia): create an intent, manually trigger keeper, verify bridge execution.","Deploy frontend to Vercel; deploy keeper logic to Gelato or Chainlink; document user flow."],"gotchas":["Across intent orders require the user to hold enough balance + allowance on source chain before intent is submitted; pre-flight checks are critical.","Keeper networks (Gelato, Chainlink Automation) have execution latency and cost; budget for gas overhead and set realistic condition thresholds.","Oracle price feeds lag real-time; if conditions are tight (e.g., gas < 5 gwei), the keeper may miss the window or execute at stale prices.","Across relayer fees vary by corridor and congestion; factor into the intent's slippage tolerance and communicate to users.","Intent expiry and replay protection: Across intends may have time windows; track expiry and warn users if conditions aren't met within the window."],"references":[{"url":"https://docs.across.to/developers/sdk","kind":"docs","label":"Across SDK Documentation"},{"url":"https://docs.across.to/developers/intent-orders","kind":"docs","label":"Across Intent Order Specification"},{"url":"https://docs.chain.link/chainlink-automation/overview","kind":"docs","label":"Chainlink Automation Docs"},{"url":"https://docs.gelato.network/web3-functions/overview","kind":"docs","label":"Gelato Web3 Functions"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://github.com/across-protocol","kind":"repo","label":"Across Protocol GitHub"}],"time_estimate_hours":80,"projects":{"slug":"across"},"project_slug":"across","project":{"slug":"across","name":"Across","logo_url":"https://icons.llamao.fi/icons/protocols/across?w=64&h=64","category":"bridges"}},{"id":"d974ae32-4e3b-414e-8d2b-bd21456f6b0c","project_id":"84eeb3ad-a59c-4b85-bd63-850b016524f4","title":"Cross-chain Message Explorer","pitch":"Public Etherscan-like UI for tracing Wormhole VAAs end-to-end — source tx, guardian sig, dest tx, all in one view.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","wormhole-sdk","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:29.177994+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a block explorer for Wormhole's cross-chain messages (VAAs). Users paste a source transaction hash or VAA ID and see the full journey: originating chain, emitter contract, guardian signatures, attestation, and destination chain execution. Similar to how Etherscan shows a single transaction, this shows a single message across multiple chains. The UI fetches data from Wormhole's REST API, indexes VAA metadata, and displays guardian voting progress, finality status, and any delivery failures. Useful for bridge users debugging stuck transfers, auditors verifying message integrity, and developers understanding VAA mechanics.","learn_first":["VAA structure and lifecycle","Wormhole REST API endpoints","Guardian set composition and signing","Cross-chain message finality models"],"tech_stack":{"data":["wormhole-sdk","axios"],"other":["Wormhole REST API"],"frontend":["nextjs","react","tailwindcss","viem"]},"build_steps":["Scaffold a Next.js 14+ app with TypeScript; set up Tailwind for styling and shadcn/ui for table/card components.","Create a search input component that accepts either a source tx hash (with chain selector) or a VAA ID; validate format on client.","Integrate wormhole-sdk to parse VAA structure; write a helper function that takes a VAA hex string and extracts emitter, sequence, nonce, and payload.","Call Wormhole's REST API (https://api.wormholescan.io) to fetch VAA details by ID — retrieve guardian signatures, submission status, and destination chain execution status.","Build a results page that displays: source chain + tx hash, emitter address, VAA ID, timestamp, guardian signatures (count + threshold), and destination chain + execution tx if available.","Add a timeline/flow visualization showing the VAA journey: emitted → signed by guardians → submitted to destination → executed (or failed).","Implement error states: VAA not found, insufficient signatures, delivery failure with reason code; link to Wormhole docs for each error type.","Deploy to Vercel; test with real VAAs from recent Wormhole transfers (e.g., from Ethereum to Arbitrum)."],"gotchas":["VAA finality varies by chain — Solana VAAs finalize in ~13 slots (~3s), Ethereum in 1 block (~12s), but destination execution may be delayed by relayers; show both attestation time and execution time separately.","Guardian set rotations happen periodically; old VAAs may have signatures from a guardian set no longer active — fetch the correct guardian set by timestamp from the API.","Some VAAs are never executed (e.g., user cancels, relayer doesn't pick it up) — distinguish between 'pending' and 'failed' states; check delivery status endpoint.","Rate limits on Wormhole REST API (~100 req/min) — cache VAA lookups in browser localStorage or add a simple Redis layer if you expect high traffic."],"references":[{"url":"https://docs.wormhole.com","kind":"docs","label":"Wormhole Documentation"},{"url":"https://www.npmjs.com/package/@wormhole-foundation/sdk","kind":"repo","label":"Wormhole SDK (npm)"},{"url":"https://docs.wormholescan.io/","kind":"docs","label":"Wormhole REST API Docs"},{"url":"https://docs.wormhole.com/wormhole/reference/architecture#vaa","kind":"docs","label":"VAA Structure & Parsing"},{"url":"https://github.com/wormhole-foundation/wormhole","kind":"repo","label":"Wormhole GitHub"},{"url":"https://wormholescan.io","kind":"tool","label":"Example: Wormhole Explorer"}],"time_estimate_hours":12,"projects":{"slug":"wormhole"},"project_slug":"wormhole","project":{"slug":"wormhole","name":"Wormhole","logo_url":"https://icons.llamao.fi/icons/protocols/wormhole?w=64&h=64","category":"bridges"}},{"id":"94888160-7e29-4fb6-a70b-99af0b6827a4","project_id":"495308be-fd4e-41d6-a66f-8ea8189f4424","title":"Bridge Tax Tool","pitch":"Tracks chain hops through Across with proper cost-basis preservation. Bridging is a tax minefield otherwise.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:27.44688+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A tax-aware bridge tracker that monitors Across transfers across Ethereum, Arbitrum, Optimism, Base, and Polygon, automatically recording cost-basis, timing, and chain-hop sequences for accurate tax reporting. Users connect their wallet and see a complete history of their bridge transactions with calculated gains/losses, fee impact, and timestamps for each leg of multi-chain journeys. Integrates with Across' canonical pool architecture to attribute fees correctly and distinguish between taxable events (bridge = sale + purchase) and non-taxable rebalancing.","learn_first":["ERC-20 transfer events and how bridges emit them","Across protocol intent settlement and relayer flow","Cost-basis accounting: when a bridge is a taxable event (two legs: sell on source, buy on destination)","Chainlink or DEX price feeds for historical spot prices at bridge time"],"tech_stack":{"data":["CoinGecko API (historical prices)","Across subgraph or on-chain logs via Alchemy/Infura"],"infra":["Vercel","Alchemy or Infura RPC endpoints"],"other":["date-fns for timestamp handling","decimal.js for precise tax math"],"wallet":["RainbowKit","Privy"],"indexer":["The Graph (Across subgraph or custom)","Ponder (alternative, lighter indexing)"],"frontend":["Next.js","React","Tailwind CSS","wagmi","viem","RainbowKit or Privy for wallet connection"],"contracts":["ERC-20 (read-only)"]},"build_steps":["Set up Next.js project with wagmi, viem, and RainbowKit; scaffold pages for dashboard, transaction history, and tax report export.","Integrate wallet connection (RainbowKit) and multi-chain RPC setup via wagmi hooks for Ethereum, Arbitrum, Optimism, Base, Polygon.","Query Across subgraph or index raw ERC-20 Transfer events from Across' SpokePool contracts on each chain to identify bridge deposits and completions.","Build a transaction matcher: pair each deposit event (source chain) with its completion event (destination chain) using Across' relayer signatures or message hashes to link the two legs.","Fetch historical token prices from CoinGecko API at each bridge timestamp to calculate cost-basis on source chain and fair-market value on destination chain.","Compute tax events: record a sale on source chain at deposit price, a purchase on destination chain at completion price; calculate realized gain/loss and fee impact.","Build a React table to display all bridge transactions with source/dest chains, amounts, timestamps, prices, fees, and calculated tax impact; add filters by chain, token, date range.","Implement CSV or JSON export for tax software (CoinTracker, Koinly format) and add a summary dashboard showing total fees paid, realized gains, and transaction count by chain."],"gotchas":["Across uses intent-based settlement with relayers; a single user bridge can have multiple relayer fills—you must deduplicate by matching deposit hash to completion hash, not just amounts.","Price feeds can have gaps or be unavailable for low-liquidity tokens; fall back to on-chain DEX prices (Uniswap V3 TWAP) or warn the user.","Tax treatment varies by jurisdiction: some treat bridge fees as separate deductible events, others roll them into cost-basis; surface the raw data and let users/accountants decide.","Across fees are dynamic and paid in the destination token; you need to track both the token transferred and the fee token separately to compute true cost-basis.","The Graph subgraph for Across may lag or be unavailable; implement fallback to direct RPC queries with event filtering, or cache results in a simple database."],"references":[{"url":"https://docs.across.to","kind":"docs","label":"Across Protocol Docs"},{"url":"https://github.com/across-protocol","kind":"repo","label":"Across GitHub"},{"url":"https://thegraph.com/hosted-service/subgraph/across-protocol/across-v2","kind":"tool","label":"The Graph Across Subgraph"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://www.coingecko.com/en/api/documentation","kind":"docs","label":"CoinGecko API Docs"}],"time_estimate_hours":80,"projects":{"slug":"across"},"project_slug":"across","project":{"slug":"across","name":"Across","logo_url":"https://icons.llamao.fi/icons/protocols/across?w=64&h=64","category":"bridges"}},{"id":"555111af-cfa1-4d2a-9f51-1602845c0143","project_id":"495308be-fd4e-41d6-a66f-8ea8189f4424","title":"Relayer Performance Tracker","pitch":"Public stats per Across relayer — fill time, profit, capital deployed. Helps users pick reliable routes.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","across-api","postgresql"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:20.736729+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard tracking individual Across relayer performance across all supported chains. Displays metrics like average fill time, profit per transfer, capital utilization, uptime, and success rate. Users can filter by chain pair and sort relayers by reliability. Relayers get a public leaderboard showing their competitive standing. Built on Across API data with a Next.js frontend and PostgreSQL backend for aggregation and historical tracking.","learn_first":["Across protocol intent-based bridge mechanics","Relayer economics and fill incentives","Time-series data aggregation patterns"],"tech_stack":{"data":["postgresql","prisma"],"infra":["vercel","node.js"],"other":["across-api"],"frontend":["nextjs","react","tailwindcss","recharts"]},"build_steps":["Set up Next.js project with TypeScript and Tailwind; scaffold pages for dashboard and relayer detail views","Create PostgreSQL schema: relayers table (address, name, chain), fills table (relayer_id, from_chain, to_chain, amount, fill_time, profit, timestamp), and aggregated_stats table for hourly/daily rollups","Build Node.js cron job that polls Across API every 5 minutes to fetch recent fills and relayer deposits; parse response and upsert into PostgreSQL","Create API route /api/relayers that returns paginated list with computed metrics (avg fill time, total profit, capital deployed, success rate); add query params for chain filtering","Build dashboard UI with Recharts line chart showing fill time trends, bar chart comparing relayer profits, and sortable table of all relayers with key metrics","Add relayer detail page showing individual performance, fill history, chain pair breakdown, and 7-day/30-day trend sparklines","Implement real-time updates using SWR with 30-second polling on dashboard; add URL search params for filtering by from_chain/to_chain","Deploy to Vercel with PostgreSQL on Supabase or Railway; set up environment variables for Across API endpoint and database connection string"],"gotchas":["Across API may have rate limits; implement exponential backoff and cache responses in PostgreSQL to avoid hitting limits during high-volume periods","Fill time data includes both relayer fill time and user claim time; clarify in UI which metric you're showing and consider filtering for relayer-controlled portion only","Profit calculation depends on knowing gas costs per chain at time of fill; Across API may not include this, so estimate using historical gas price feeds or hardcode conservative values","Relayer addresses may not have human-readable names in the API; consider allowing relayers to register names via a simple form or pull from Etherscan labels if available"],"references":[{"url":"https://docs.across.to","kind":"docs","label":"Across Protocol Docs"},{"url":"https://docs.across.to/developers/api","kind":"docs","label":"Across API Reference"},{"url":"https://github.com/across-protocol","kind":"repo","label":"Across GitHub"},{"url":"https://www.prisma.io/docs","kind":"docs","label":"Prisma ORM Documentation"},{"url":"https://recharts.org","kind":"docs","label":"Recharts Documentation"}],"time_estimate_hours":16,"projects":{"slug":"across"},"project_slug":"across","project":{"slug":"across","name":"Across","logo_url":"https://icons.llamao.fi/icons/protocols/across?w=64&h=64","category":"bridges"}},{"id":"3478784e-60f2-40d0-a4cf-10da33149f2a","project_id":"495308be-fd4e-41d6-a66f-8ea8189f4424","title":"Cheapest-Route Bridge Aggregator","pitch":"Embeddable widget that compares Across against other bridges per request, picks the cheapest, executes.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","across-sdk","li-fi-sdk","wagmi","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:17.820635+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a React component that fetches bridge quotes from Across and competing protocols (Li.Fi, Stargate, Connext), compares fees + time + slippage in real-time, and executes the optimal route. Useful for dApps wanting to offer multi-bridge liquidity without managing integrations themselves. The widget handles token approval, quote refresh, and cross-chain settlement while surfacing cost breakdowns to users.","learn_first":["How Across intent-based bridging works (SpokePool + RelayerHub architecture)","Quote APIs: Across API, Li.Fi API, Stargate SDK","ERC-20 approval + permit patterns for cross-chain transfers","React hooks for async state (useQuery, useEffect) and error boundaries"],"tech_stack":{"data":["Across API (quote endpoint)","Li.Fi API (getQuote)","Stargate SDK (quoteLayerZeroFee)","Coingecko or on-chain price feeds for USD conversion"],"infra":["Vercel or similar for hosting","Environment variables for API keys"],"wallet":["wagmi hooks (useAccount, useNetwork, useSwitchNetwork)","RainbowKit or Privy for wallet connection"],"frontend":["React","Next.js","wagmi (useContractWrite, useAccount)","viem (publicClient for gas estimation)","TanStack Query (useQuery for quote polling)","Tailwind CSS or shadcn/ui"],"contracts":["ERC-20 (token approvals)"]},"build_steps":["Scaffold Next.js app with TypeScript, install wagmi, viem, @across-protocol/sdk, @lifi/sdk, TanStack Query","Set up wallet connection (RainbowKit or Privy) and chain selector (Ethereum, Arbitrum, Optimism, Base, Polygon)","Build quote-fetching hook: call Across API, Li.Fi API, and Stargate SDK in parallel, normalize response shape (fee, time, slippage, route name)","Create comparison table component: display all quotes sorted by total cost (amount out minus fees), highlight cheapest, show fee breakdown and estimated time","Implement token approval flow: detect if user needs approval, use wagmi useContractWrite to call ERC-20.approve, wait for confirmation","Build route execution: on user selection, call the chosen bridge's execute function (Across relayerHub, Li.Fi swap, Stargate swap) via wagmi","Add quote refresh logic: poll quotes every 30s, disable stale quotes, show countdown timer; let user manually refresh","Test end-to-end on testnet (Sepolia → Arbitrum Sepolia): approve token, fetch quotes, execute bridge, verify arrival"],"gotchas":["Across and Li.Fi APIs may return different token decimals or wrapped token addresses (WETH vs ETH); normalize before comparison","Gas estimation for approval + bridge execution can vary wildly by chain; fetch live estimates and add 20% buffer","Quote validity windows differ: Across quotes valid ~5min, Li.Fi ~1min; show expiry countdown and re-fetch aggressively","Some bridges require pre-existing liquidity on destination chain; if quote fails, fall back gracefully or show 'liquidity unavailable' state","Testnet faucets and bridge liquidity are sparse; use mainnet fork (Foundry anvil) or Tenderly for reliable testing"],"references":[{"url":"https://docs.across.to","kind":"docs","label":"Across Protocol Docs"},{"url":"https://github.com/across-protocol/across-sdk","kind":"repo","label":"Across SDK GitHub"},{"url":"https://apidocs.li.fi/","kind":"docs","label":"Li.Fi API Documentation"},{"url":"https://github.com/lifinance/lifi-sdk","kind":"repo","label":"Li.Fi SDK GitHub"},{"url":"https://stargate.finance/docs","kind":"docs","label":"Stargate Finance Docs"},{"url":"https://wagmi.sh/docs/hooks/useContractWrite","kind":"docs","label":"wagmi Hooks Reference"}],"time_estimate_hours":80,"projects":{"slug":"across"},"project_slug":"across","project":{"slug":"across","name":"Across","logo_url":"https://icons.llamao.fi/icons/protocols/across?w=64&h=64","category":"bridges"}},{"id":"4111b76d-282f-4071-921b-a0106d7472ab","project_id":"7f493e08-d573-453f-bea7-dd42ea1f8bd4","title":"OFT Cost Comparison","pitch":"For any token + route, show the cost of sending via OFT vs Wormhole vs other bridges.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","bungee-sdk","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:17.71564+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time comparison dashboard that lets users see the exact cost (gas + protocol fees) of bridging a specific token between two chains using OFT (LayerZero's Omnichain Fungible Token standard), Wormhole, and other major bridges. Users input token address, source chain, destination chain, and amount; the dashboard fetches live gas prices, queries each bridge's fee structure (via API or on-chain), and displays a ranked list with total cost, time estimate, and exchange rate impact. This solves the UX problem of bridge choice paralysis—users can make informed decisions instead of guessing which bridge is cheapest.","learn_first":["LayerZero OFT standard (ERC-20 extension)","Wormhole token bridge mechanics","Gas price oracles (Chainlink or block explorer APIs)","Bridge fee structures and how they vary by chain pair"],"tech_stack":{"ai":[],"data":["Bungee API (bridge quotes)","Etherscan/Polygonscan/Arbiscan APIs (gas prices)","LayerZero endpoint contracts (for fee queries)","Wormhole token bridge contracts"],"infra":["Vercel (deployment)","node.js backend for fee aggregation"],"other":["Coingecko API (token prices for exchange rate impact)"],"wallet":["viem (for read-only chain interactions)","wagmi (optional, for wallet connection if adding swap preview)"],"indexer":[],"frontend":["Next.js 14+","TypeScript","TailwindCSS","React Query or SWR for data fetching"],"contracts":["LayerZero OFT (reference implementation)"]},"build_steps":["Set up Next.js 14 project with TypeScript, TailwindCSS, and environment variables for RPC endpoints and API keys.","Create a form component with dropdowns for source chain, destination chain, token address (or preset popular tokens), and amount input.","Integrate viem to read OFT contract details (decimals, symbol) and LayerZero endpoint fee estimation via the endpoint contract's `estimateFees()` function.","Add Bungee SDK integration to fetch bridge quotes for the same route; parse response for fees and time estimates.","Fetch live gas prices from Etherscan/Polygonscan APIs and calculate gas cost in USD using Coingecko token prices.","Build a comparison table component displaying: bridge name, total cost (protocol fee + gas), percentage of amount, estimated time, and exchange rate slippage if available.","Add error handling for unsupported chain pairs, missing token data, and API timeouts; show fallback UI with cached data if needed.","Deploy to Vercel and test with 3–5 common routes (e.g., USDC Ethereum → Arbitrum, USDT Polygon → Base) to verify accuracy."],"gotchas":["LayerZero fees vary by destination chain and message size; you must call the actual endpoint contract's `estimateFees()` for accuracy, not hardcode rates.","Wormhole and other bridges may not have public fee APIs; you may need to reverse-engineer fees from contract events or use Bungee as a proxy for multiple bridges.","Gas prices fluctuate; cache them for 30–60 seconds to avoid hammering RPC endpoints, but refresh on user request.","OFT transfers require the token to be deployed on both chains; check if a token exists on the destination chain before showing a quote.","Some bridges have minimum/maximum transfer amounts; add validation to warn users if their amount is outside supported ranges."],"references":[{"url":"https://docs.layerzero.network/contracts/oft","kind":"docs","label":"LayerZero OFT Standard Docs"},{"url":"https://docs.layerzero.network/contracts/endpoint","kind":"docs","label":"LayerZero Endpoint Fee Estimation"},{"url":"https://docs.bungee.exchange/api","kind":"docs","label":"Bungee API Documentation"},{"url":"https://github.com/wormhole-foundation/wormhole/tree/main/ethereum/contracts/bridge","kind":"repo","label":"Wormhole Token Bridge Contracts"},{"url":"https://viem.sh/docs/chains/introduction","kind":"docs","label":"viem Chain Configuration"},{"url":"https://github.com/LayerZero-Labs","kind":"repo","label":"LayerZero Labs GitHub"}],"time_estimate_hours":12,"projects":{"slug":"layerzero"},"project_slug":"layerzero","project":{"slug":"layerzero","name":"LayerZero","logo_url":"https://icons.llamao.fi/icons/protocols/layerzero?w=64&h=64","category":"bridges"}},{"id":"271442bf-941e-4159-8b3e-55a357532e5b","project_id":"7f493e08-d573-453f-bea7-dd42ea1f8bd4","title":"DVN Audit Tracker","pitch":"Lists every DVN (Decentralized Verifier Network), its operator, audit status, and historical message volume.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","layerzero-api","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:14.187932+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard tracking all Decentralized Verifier Networks operating on LayerZero, including operator identity, security audit status, historical message throughput, and fee structures. Builders and protocols need to know which DVNs are trustworthy before integrating them into omnichain applications. This tracker aggregates on-chain DVN registration data, cross-references audit reports, and visualizes message volume trends to help teams make informed DVN selection decisions.","learn_first":["LayerZero DVN architecture and registration","EVM event indexing with Ponder or The Graph","REST API design for real-time data","Security audit standards in crypto"],"tech_stack":{"ai":[],"data":["LayerZero API for DVN metadata","Etherscan/block explorer APIs for audit verification"],"infra":["Vercel for Next.js hosting","PostgreSQL or similar for audit cache"],"other":["TypeScript"],"wallet":[],"indexer":["Ponder","The Graph (optional alternative)"],"frontend":["Next.js","React","TailwindCSS","recharts or similar for volume charts"],"contracts":["LayerZero DVN registry (read-only)"]},"build_steps":["Set up a Ponder project to index LayerZero DVN registration events (DVNAdded, DVNRemoved, etc.) across all supported chains","Create a Ponder schema with DVN entity (address, operator, chain, registration timestamp, message count)","Build a Next.js API route that queries the Ponder indexer and returns paginated DVN list with sorting/filtering","Integrate LayerZero API to fetch real-time DVN metadata (fees, supported chains, operator details)","Create a React dashboard component displaying DVN table with columns: operator name, audit status (manual lookup or link to audit repo), message volume (30d, 7d), fee tier","Add a detail page for each DVN showing historical message volume chart (recharts), supported endpoints, and operator contact info","Implement a simple admin panel to manually tag DVNs with audit status (link to audit report URL, audit date, auditor name)","Deploy to Vercel and set up automated Ponder indexer refresh every 6 hours"],"gotchas":["DVN data is scattered: some operators publish audit reports on GitHub, others on their own sites—plan for manual curation or community submissions early","LayerZero API rate limits can throttle real-time DVN metadata fetches; cache aggressively and consider a background job queue","Message volume data may not be directly exposed; you may need to count DVN-related transactions from block explorers or rely on LayerZero's internal metrics API (verify access first)","Different chains have different DVN registry contracts; ensure Ponder indexes all relevant chains and handles chain-specific event signatures correctly"],"references":[{"url":"https://docs.layerzero.network/explore/security/decentralized-verifier-networks","kind":"docs","label":"LayerZero DVN Documentation"},{"url":"https://github.com/LayerZero-Labs/LayerZero-v2","kind":"repo","label":"LayerZero Contracts GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts","kind":"docs","label":"LayerZero API Reference"},{"url":"https://thegraph.com/docs/en/querying/graphql-api/","kind":"docs","label":"The Graph Subgraph Query Language"}],"time_estimate_hours":80,"projects":{"slug":"layerzero"},"project_slug":"layerzero","project":{"slug":"layerzero","name":"LayerZero","logo_url":"https://icons.llamao.fi/icons/protocols/layerzero?w=64&h=64","category":"bridges"}},{"id":"fe66cc98-c797-44ee-b3e4-7656bbc07386","project_id":"7f493e08-d573-453f-bea7-dd42ea1f8bd4","title":"Cross-chain Action Composer","pitch":"Visual editor for stitching together multi-chain actions via LayerZero v2 — 'swap on chain A, deposit on chain B' in one click.","difficulty":"1+ month","use_case":"ux","build_with":["nextjs","layerzero-v2-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:10.858429+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A no-code interface that lets users compose multi-step, multi-chain transactions without writing code. Users drag-and-drop actions (swap, transfer, stake, mint) across chains, set conditions and parameters, then execute atomically via LayerZero's OApp messaging. The composer validates gas costs, simulates execution paths, and generates shareable action templates. Target users: DeFi power users, protocol teams building cross-chain flows, and hackathon participants who need quick multi-chain UX without backend work.","learn_first":["LayerZero OApp architecture and message passing","ERC-7201 namespaced storage for composable state","Foundry scripting for contract testing","React flow or similar node-based UI libraries","Gas estimation across multiple chains"],"tech_stack":{"data":["Alchemy or Infura for multi-chain RPC","1inch or 0x API for swap routing","LayerZero endpoint contracts for gas quotes"],"infra":["Vercel for frontend hosting","Foundry for local contract testing","Tenderly for transaction simulation"],"other":["IPFS via Pinata for storing action templates"],"wallet":["RainbowKit for multi-chain wallet connection","Privy for embedded wallets (optional)"],"indexer":["Ponder for tracking composed action execution","The Graph for historical action templates"],"frontend":["Next.js 15 with App Router","React Flow for node-based editor","TailwindCSS + shadcn/ui","wagmi v2 for wallet integration","viem for transaction simulation"],"contracts":["LayerZero OApp pattern (custom messaging)","ERC-20 for token transfers","Uniswap V4 hooks or similar for atomic swaps"]},"build_steps":["Set up Next.js 15 project with RainbowKit and wagmi v2; scaffold pages for editor, template library, and execution history.","Build React Flow-based node editor with draggable action blocks: Swap, Transfer, Stake, Mint, Bridge. Each node stores chain ID, token, amount, and contract address.","Integrate LayerZero v2 SDK to read endpoint configs for all supported chains; display gas costs and estimated fees in the UI as users compose actions.","Create a contract validator: parse composed action graph, generate calldata for each step, and use viem to simulate the full execution path on each chain.","Build an action executor: convert the visual composition into a series of LayerZero OApp messages; use wagmi hooks to sign and submit transactions in sequence with fallback handling.","Implement a template library: save composed actions to IPFS via Pinata, store metadata (name, description, chains, success rate) in a simple Ponder indexer.","Add a gas simulator: call Alchemy's simulateExecution across all chains in the composition to estimate total cost before user signs; display breakdown by chain.","Deploy to Vercel and test end-to-end on testnet (Sepolia, Arbitrum Sepolia, OP Sepolia) with real LayerZero endpoints."],"gotchas":["LayerZero v2 message fees are dynamic and depend on destination chain and payload size; always fetch fresh quotes before execution, not just at composition time.","Cross-chain atomicity is not guaranteed—if one chain fails after another succeeds, you need a rollback strategy or at least clear logging; consider using LayerZero's retries and error handlers.","React Flow node graphs can become slow with >50 nodes; implement virtualization or split large compositions into sub-templates to keep the editor responsive.","Gas estimation via simulation is approximate; actual execution may cost more due to state changes between simulation and submission—add a 10–15% buffer.","Different chains have different block times and finality; a composition that works on Ethereum may timeout on a slower chain; build in configurable timeouts per step."],"references":[{"url":"https://docs.layerzero.network","kind":"docs","label":"LayerZero V2 Documentation"},{"url":"https://github.com/LayerZero-Labs/LayerZero-v2","kind":"repo","label":"LayerZero OApp Contract Examples"},{"url":"https://reactflow.dev","kind":"docs","label":"React Flow Documentation"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi v2 Multi-chain Guide"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://tenderly.co/transaction-simulator","kind":"tool","label":"Tenderly Transaction Simulator"}],"time_estimate_hours":200,"projects":{"slug":"layerzero"},"project_slug":"layerzero","project":{"slug":"layerzero","name":"LayerZero","logo_url":"https://icons.llamao.fi/icons/protocols/layerzero?w=64&h=64","category":"bridges"}},{"id":"443063f3-f242-4531-aa2b-001612a5c42a","project_id":"7f493e08-d573-453f-bea7-dd42ea1f8bd4","title":"OFT Discovery Engine","pitch":"Find every LayerZero OFT token, its chain availability, and current bridging cost. Solves the 'where can I get token X' problem.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","layerzero-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:05.673124+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A searchable, real-time directory of all LayerZero OFTs (Omnichain Fungible Tokens) across supported chains. Users search for a token by name or symbol, see which chains it's deployed on, check current liquidity and bridge fees, and get direct links to bridge UIs. Built as a Next.js app that indexes OFT contracts via LayerZero's API and on-chain queries, stores metadata in a lightweight database, and surfaces it through a fast search interface. Useful for traders, developers integrating OFTs, and anyone trying to move tokens across chains without guessing which bridge to use.","learn_first":["LayerZero OFT standard (ERC-20 extension)","Omnichain messaging concepts","Chain IDs and LayerZero endpoint contracts"],"tech_stack":{"data":["Postgres or SQLite for OFT metadata cache","Redis for rate-limit handling"],"infra":["Vercel for hosting","node-cron for periodic index refreshes"],"indexer":["LayerZero API","viem for direct RPC calls"],"frontend":["Next.js 14+","TanStack Query for data fetching","shadcn/ui for UI components"],"contracts":["LayerZero OFT (reference implementation)"]},"build_steps":["Set up a Next.js 14 project with TypeScript; create `/app/api/search` and `/app/search` routes.","Install viem and LayerZero SDK; authenticate with LayerZero API to fetch the canonical list of deployed OFTs.","Query LayerZero endpoints on each chain (Ethereum, Arbitrum, Optimism, Base, Polygon, BSC, Avalanche) to fetch OFT contract addresses and metadata.","Store OFT data (token name, symbol, decimals, deployed chains, contract addresses) in a Postgres table or SQLite file; add a full-text search index on token name/symbol.","Build a `/api/search?q=USDC` endpoint that returns matching OFTs with chain availability and bridge fee estimates (fetch from LayerZero quote endpoint).","Create a frontend search UI with autocomplete; display results as a table showing token name, chains, and a 'Bridge' button linking to official bridge UI.","Set up a cron job (node-cron) to refresh the OFT index every 6 hours; log new tokens added.","Deploy to Vercel; test search latency and add caching headers to API responses."],"gotchas":["LayerZero's API may rate-limit aggressive indexing; implement exponential backoff and cache aggressively.","OFT metadata (name, symbol) may differ across chains; standardize on the canonical chain (usually Ethereum) or display all variants.","Bridge fees fluctuate with gas prices; quote fees are point-in-time; clearly label timestamps to avoid stale data confusion.","Some OFTs may be paused or have restricted chains; check contract state and LayerZero's endpoint configuration before displaying as 'available'."],"references":[{"url":"https://docs.layerzero.network/contracts/oft","kind":"docs","label":"LayerZero OFT Standard"},{"url":"https://docs.layerzero.network/guides/developers/api","kind":"docs","label":"LayerZero API Reference"},{"url":"https://docs.layerzero.network/contracts/endpoints","kind":"docs","label":"LayerZero Endpoints & Chain IDs"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Standard"}],"time_estimate_hours":12,"projects":{"slug":"layerzero"},"project_slug":"layerzero","project":{"slug":"layerzero","name":"LayerZero","logo_url":"https://icons.llamao.fi/icons/protocols/layerzero?w=64&h=64","category":"bridges"}},{"id":"91e70f31-c832-48fd-b9e7-4cddf1db1768","project_id":"12e671eb-ff8a-40a9-87d1-6bc528bae7d8","title":"Auto-Redemption Helper","pitch":"Detects when an RToken trades below NAV and offers atomic redemption arbitrage.","difficulty":"weekend","use_case":"trading","build_with":["node","viem","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:05.284061+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a bot that monitors RToken prices on DEXs (Uniswap, Curve) against their Net Asset Value (NAV), and when a discount appears, atomically redeems the RToken for its underlying basket and sells the components for profit. This is pure arbitrage: you're exploiting the redemption mechanism built into the Reserve protocol. The bot watches price feeds, calculates slippage, and executes redemption + swap chains via smart contract interactions. It's a practical introduction to Reserve's architecture and on-chain arbitrage mechanics.","learn_first":["RToken redemption mechanics (Reserve docs)","NAV calculation and collateral baskets","Uniswap V3 / Curve swap routing","MEV and sandwich protection basics"],"tech_stack":{"ai":[],"data":["Chainlink price feeds (for NAV reference)","Uniswap Subgraph or direct RPC calls"],"infra":["Alchemy or Infura RPC","Ethers.js or Viem for contract calls"],"other":["Flashbots Relay (optional, for MEV protection)"],"wallet":[],"indexer":[],"frontend":[],"contracts":["Reserve RToken (read-only)","Basket Manager (read-only)","Uniswap V3 SwapRouter or Curve pools"]},"build_steps":["Set up a Node.js project with Viem and ethers.js; add dotenv for RPC and wallet keys.","Write a function to fetch RToken price from Uniswap V3 TWAP or a DEX aggregator (e.g., 0x API).","Implement NAV calculation by calling Reserve's Basket Manager and Asset Registry to get collateral prices and quantities.","Create a redemption simulator: call the RToken's redeem() function off-chain to see what basket you'd receive.","Build a swap router that quotes the cost of selling the redeemed basket on Uniswap V3 or Curve.","Calculate profit margin: RToken buy price + gas + slippage vs. basket sale proceeds. Only proceed if margin > threshold.","Write the execution flow: buy RToken on DEX → redeem → swap basket components → settle profit to wallet.","Add a loop that checks prices every 12–30 seconds and logs opportunities; test on a testnet first."],"gotchas":["Redemption may fail if the basket is in an issuance freeze or if collateral is unregistered; check Reserve's status contract first.","Slippage on selling the basket can easily exceed your profit margin; use tight slippage bounds and simulate before executing.","Gas costs on Ethereum mainnet can be 50k–200k wei per redemption; factor this into your margin calculation.","RToken price feeds lag; use TWAP or multiple DEX sources to avoid stale data and sandwich attacks.","Some collateral tokens may have transfer fees or rebasing behavior; test each basket component individually."],"references":[{"url":"https://reserve.org/protocol/","kind":"docs","label":"Reserve Protocol Docs"},{"url":"https://reserve.org/protocol/","kind":"docs","label":"RToken Redemption Spec"},{"url":"https://github.com/reserve-protocol","kind":"repo","label":"Reserve GitHub"},{"url":"https://docs.uniswap.org/contracts/v3/guides/swaps/single-swaps","kind":"docs","label":"Uniswap V3 SwapRouter"},{"url":"https://viem.sh/docs/contract/getContractEvents","kind":"docs","label":"Viem Contract Interactions"},{"url":"https://docs.flashbots.net/","kind":"docs","label":"Flashbots MEV Protection"}],"time_estimate_hours":16,"projects":{"slug":"reserve"},"project_slug":"reserve","project":{"slug":"reserve","name":"Reserve","logo_url":"https://icons.llamao.fi/icons/protocols/reserve-protocol?w=64&h=64","category":"stablecoins"}},{"id":"df868cd9-1166-43e8-a4e3-67582a5c1eff","project_id":"12e671eb-ff8a-40a9-87d1-6bc528bae7d8","title":"Basket Backtester","pitch":"Backtest a proposed RToken basket against historical data before deployment.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["python","fastapi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:19:02.584188+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a Python + FastAPI service that simulates how an RToken basket would have performed over historical periods. Users propose a basket composition (e.g., 40% USDC, 30% USDT, 20% DAI, 10% FRAX) and the tool replays price feeds, collateral volatility, and redemption pressure to show drawdowns, collateral ratios, and whether the basket would have maintained its peg. This helps Reserve governance and RToken issuers validate basket designs before committing capital and governance votes.","learn_first":["RToken architecture and collateral management","ERC-20 token mechanics and price feeds","Time-series analysis and volatility modeling","Reserve Protocol's Collateral and BasketHandler contracts"],"tech_stack":{"ai":[],"data":["Chainlink price feeds (historical snapshots)","CoinGecko or Messari API (fallback price data)","Pandas (time-series manipulation)"],"infra":[],"other":["FastAPI (REST endpoints)","SQLite or PostgreSQL (store basket configs and backtest results)","Plotly or Matplotlib (visualization)","APScheduler (optional, for scheduled backtests)"],"wallet":[],"indexer":["The Graph (query historical collateral prices and basket events)","Ponder (optional, for custom indexing of RToken state)"],"frontend":[],"contracts":["Reserve Protocol RToken (ERC-20)","BasketHandler (basket composition logic)"]},"build_steps":["Set up FastAPI project with SQLAlchemy ORM; define schema for BasketConfig (collateral tokens, weights, deployment date) and BacktestResult (metrics over time).","Fetch historical price data from Chainlink or CoinGecko for each proposed collateral token; store in local DB or cache to avoid repeated API calls.","Implement basket composition logic: given weights and a starting date, simulate daily collateral values, total basket value, and collateral ratio (total collateral value / RToken supply).","Build volatility and redemption pressure model: apply historical drawdowns to collateral prices, track if any collateral hits zero or extreme volatility, and flag when collateral ratio drops below safety thresholds (e.g., 110%).","Create FastAPI endpoints: POST /backtest (submit basket config and date range), GET /backtest/{id} (retrieve results), GET /backtest/{id}/metrics (return drawdown, Sharpe ratio, min collateral ratio).","Add visualization layer: generate time-series charts showing collateral ratio, individual token prices, and cumulative RToken value over the backtest period; return as JSON or embed in HTML.","Write unit tests for basket math, price feed integration, and edge cases (empty baskets, single-token baskets, extreme volatility).","Deploy locally or to a cloud function (e.g., Vercel, Railway) and document API schema with OpenAPI/Swagger."],"gotchas":["Historical price data gaps: Chainlink feeds may not have continuous data for all tokens or chains; fall back to CoinGecko but validate data quality and latency.","Collateral ratio safety thresholds are governance-dependent: Reserve RTokens have different target ratios; hard-code a sensible default (e.g., 110%) but make it configurable per basket.","Backtests assume no governance changes, no collateral defaults, and no emergency shutdowns; clearly document these assumptions in results so users don't over-rely on backtest performance.","Time-series alignment: ensure all price feeds are aligned to the same timestamps (e.g., daily close) to avoid mismatched calculations."],"references":[{"url":"https://reserve.org/protocol/","kind":"docs","label":"Reserve Protocol Docs"},{"url":"https://github.com/reserve-protocol/protocol","kind":"repo","label":"RToken and Collateral Architecture"},{"url":"https://github.com/reserve-protocol/protocol/blob/master/contracts/p1/BasketHandler.sol","kind":"repo","label":"BasketHandler Contract Reference"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Price Feeds Documentation"},{"url":"https://www.coingecko.com/en/api/documentation","kind":"docs","label":"CoinGecko API Reference"},{"url":"https://fastapi.tiangolo.com/","kind":"docs","label":"FastAPI Tutorial"}],"time_estimate_hours":80,"projects":{"slug":"reserve"},"project_slug":"reserve","project":{"slug":"reserve","name":"Reserve","logo_url":"https://icons.llamao.fi/icons/protocols/reserve-protocol?w=64&h=64","category":"stablecoins"}},{"id":"d27d7670-06c5-41de-b001-756b17cef6f4","project_id":"12e671eb-ff8a-40a9-87d1-6bc528bae7d8","title":"RToken Performance Leaderboard","pitch":"Compares every live RToken by yield, basket composition, and adoption metrics.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:56.295407+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time analytics dashboard that surfaces all deployed RTokens on Ethereum and Base, displaying their current yield, underlying collateral baskets, trading volume, TVL, and holder distribution. Use The Graph to index RToken events and contract state, then build a Next.js frontend with sortable tables and charts. This becomes the go-to reference for RToken performance comparison and helps Reserve Protocol users discover high-performing tokens and understand basket risk.","learn_first":["ERC-20 token standards and ERC-4626 vault interface","Reserve Protocol RToken architecture (collateral baskets, governance, rebalancing)","The Graph subgraph indexing patterns for ERC-20 and custom contract events","Next.js data fetching with getStaticProps and ISR for real-time updates"],"tech_stack":{"data":["GraphQL"],"infra":["Vercel"],"indexer":["The Graph"],"frontend":["Next.js","React","TailwindCSS","Recharts or Chart.js"],"contracts":["ERC-20","ERC-4626"]},"build_steps":["Set up a new Next.js project with TypeScript and TailwindCSS; scaffold pages for dashboard, individual RToken detail, and basket composition views.","Create a Subgraph manifest (subgraph.yaml) targeting Reserve Protocol's RToken contract factory and ERC-20 token contracts on Ethereum and Base; define entities for RTokens, collateral baskets, holders, and yield events.","Write Subgraph mappings to index RToken creation events, basket updates, and transfer events; calculate running totals for TVL, holder count, and yield accrual.","Deploy your Subgraph to The Graph's hosted service or Subgraph Studio; test queries against Ethereum and Base deployments to ensure data accuracy.","Build a GraphQL query layer in Next.js using Apollo Client or urql to fetch RToken list, individual token details, and basket composition; implement pagination and filtering.","Create the main leaderboard page with sortable columns (yield, TVL, collateral diversity, holder count); add real-time updates using SWR or React Query with 30–60 second polling.","Add a detail page for each RToken showing basket breakdown, recent yield history, top holders, and governance token info; use Recharts for yield curves and pie charts for collateral allocation.","Deploy to Vercel with environment variables for Subgraph endpoints; set up ISR (Incremental Static Regeneration) to refresh data every 5 minutes without full rebuilds."],"gotchas":["RToken yield accrual happens continuously but is only claimed on transfer or explicit calls; you'll need to track both claimed and unclaimed yield in your Subgraph mappings to show accurate APY.","Basket composition can change via governance; ensure your Subgraph listens to basket reconfiguration events and timestamps them so you can show historical basket changes.","The Graph's hosted service has rate limits; use pagination and cache aggressively on the frontend to avoid query throttling during traffic spikes.","Some RTokens may have custom collateral or governance tokens; don't assume all baskets are simple ERC-20 combinations—validate contract interfaces before displaying."],"references":[{"url":"https://reserve.org/protocol/","kind":"docs","label":"Reserve Protocol Documentation"},{"url":"https://github.com/reserve-protocol","kind":"repo","label":"Reserve Protocol GitHub"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration","kind":"docs","label":"Next.js ISR and Data Fetching"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Documentation"}],"time_estimate_hours":16,"projects":{"slug":"reserve"},"project_slug":"reserve","project":{"slug":"reserve","name":"Reserve","logo_url":"https://icons.llamao.fi/icons/protocols/reserve-protocol?w=64&h=64","category":"stablecoins"}},{"id":"30a0cfd3-8114-40ba-a0a8-9a54847bae08","project_id":"12e671eb-ff8a-40a9-87d1-6bc528bae7d8","title":"RToken Composer","pitch":"No-code wizard to design and deploy a Reserve RToken backed by a custom basket. Lowers the barrier to issuing index stables.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","reserve-sdk","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:55.056438+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web interface that walks users through selecting collateral assets, setting weights, configuring governance, and deploying a fully functional RToken contract to Ethereum or Base. The wizard abstracts Reserve's core mechanics—collateral plugins, price feeds, issuance/redemption logic—into a visual flow. Users can preview their basket composition, simulate redemption scenarios, and generate a shareable deployment config before going live. Targets DAOs, protocols, and stablecoin issuers who want to launch index stables without writing Solidity.","learn_first":["ERC-20 token standards","Reserve protocol architecture (RToken, Furnace, StRSR)","Collateral plugins and price feeds","Basket composition and rebalancing"],"tech_stack":{"ai":[],"data":["Chainlink price feeds","Reserve SDK for on-chain queries"],"infra":["Vercel or similar for hosting","Etherscan API for verification"],"other":["Foundry (for local testing of generated configs)"],"wallet":["wagmi","RainbowKit","viem"],"indexer":[],"frontend":["Next.js 14+","React Hook Form","TailwindCSS","shadcn/ui"],"contracts":["Reserve RToken (ERC-20)","Basket registry pattern"]},"build_steps":["Set up Next.js 14 project with wagmi, viem, and RainbowKit for wallet integration.","Create a multi-step form component using React Hook Form: asset selection, weight allocation, governance parameters, and deployment settings.","Integrate Reserve SDK to fetch available collateral plugins, price feeds, and current basket registry state from Ethereum and Base.","Build a basket preview panel showing composition breakdown, collateral ratios, and simulated redemption flows using Reserve's math.","Implement a config generator that outputs the RToken deployment parameters (collateral addresses, weights, feed addresses, governance) as JSON.","Add a dry-run simulation using viem to estimate gas costs and validate the config against Reserve's on-chain constraints before deployment.","Wire the deploy button to call Reserve's RTokenFactory or direct deployment pattern via viem, handling transaction signing and confirmation.","Add a results page showing the deployed RToken address, shareable link, and next steps (minting, governance setup, liquidity)."],"gotchas":["Reserve's collateral plugins are versioned and chain-specific; the wizard must query the current registry to avoid suggesting deprecated plugins.","Price feed selection is critical—using a stale or low-liquidity feed will cause the RToken to fail issuance checks; validate feed freshness and volume.","Basket rebalancing and governance are separate from deployment; the wizard should clarify that post-launch governance (RSR staking, voting) is manual.","Gas costs for deployment vary significantly by collateral count and feed complexity; simulate and display estimates prominently to avoid surprises.","The Reserve protocol uses a 'furnace' mechanism to handle redemptions; users must understand that their RToken won't be 1:1 redeemable instantly if collateral is illiquid."],"references":[{"url":"https://reserve.org/protocol/","kind":"docs","label":"Reserve Protocol Docs"},{"url":"https://github.com/reserve-protocol","kind":"repo","label":"Reserve GitHub"},{"url":"https://reserve.org/protocol/rtokens/","kind":"docs","label":"RToken Architecture Overview"},{"url":"https://reserve.org/protocol/collateral/","kind":"docs","label":"Collateral Plugins Guide"},{"url":"https://www.npmjs.com/package/@reserve-protocol/sdk","kind":"tool","label":"Reserve SDK npm package"},{"url":"https://docs.openzeppelin.com/contracts/4.x/erc20","kind":"docs","label":"ERC-20 Standard (OpenZeppelin)"}],"time_estimate_hours":80,"projects":{"slug":"reserve"},"project_slug":"reserve","project":{"slug":"reserve","name":"Reserve","logo_url":"https://icons.llamao.fi/icons/protocols/reserve-protocol?w=64&h=64","category":"stablecoins"}},{"id":"aff31d97-36cc-4e9e-a380-a963f7541d32","project_id":"1279320e-12cf-4287-b3e7-3839b903fe7a","title":"Cross-chain USDM Bridge UI","pitch":"Single front-end for USDM transfers across all supported chains with cost comparison.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","wormhole-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:54.573547+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web interface that lets users bridge USDM tokens between Ethereum, Base, and Polygon. The UI should display real-time gas costs, bridge fees, and estimated arrival times for each route, then route the transaction through Wormhole's token bridge. Users authenticate via wallet (RainbowKit), select source and destination chains, enter an amount, review costs, and execute the bridge in one flow. The app fetches live gas prices from each chain's RPC and Wormhole's fee oracle to show accurate cost breakdowns before confirming.","learn_first":["Wormhole token bridge architecture and attestation model","ERC-20 token standards and cross-chain wrapped tokens","Gas price oracles and how to fetch them from different chains","Wallet connection patterns with RainbowKit"],"tech_stack":{"data":["Wormhole SDK (token bridge)","eth_gasPrice RPC calls","Wormhole fee oracle API"],"infra":["Vercel or similar for hosting","Public RPCs for Ethereum, Base, Polygon"],"wallet":["RainbowKit","wagmi","viem"],"frontend":["Next.js 14+","React 18+","TypeScript","TailwindCSS","RainbowKit"],"contracts":["ERC-20 (USDM token standard)"]},"build_steps":["Set up Next.js 14 project with TypeScript, TailwindCSS, and RainbowKit for wallet connection.","Install and configure wagmi hooks and viem for multi-chain RPC calls; set up chain configs for Ethereum, Base, and Polygon.","Integrate Wormhole SDK (@wormhole-foundation/sdk) and implement token bridge lookup to get USDM token addresses on each chain.","Build a chain selector component and amount input; fetch live gas prices from each chain using eth_gasPrice via viem.","Create a cost comparison card that displays: bridge fee (from Wormhole fee oracle), gas cost (converted to USD), and total cost for each route.","Implement the bridge transaction flow: approve USDM on source chain (if needed), call Wormhole's transferTokens function, and track attestation.","Add a transaction status tracker that polls Wormhole's API or explorer to show when tokens arrive on the destination chain.","Deploy to Vercel, test on testnet (Sepolia, Base Sepolia, Mumbai), then mainnet."],"gotchas":["Wormhole attestation can take 15–60 seconds; users expect instant feedback, so show a clear 'waiting for attestation' state and don't let them close the browser.","Gas prices fluctuate; fetch them fresh on every quote request, not cached, or users will see stale costs and be surprised at confirmation time.","USDM may not be live on all three chains simultaneously; check Wormhole's token registry first and handle missing chains gracefully in the UI.","Wrapped USDM tokens on destination chains may have different decimals or symbols; decode the token info from Wormhole's attestation, don't hardcode."],"references":[{"url":"https://docs.wormhole.com/wormhole/explore-wormhole/token-bridge","kind":"docs","label":"Wormhole Token Bridge Docs"},{"url":"https://github.com/wormhole-foundation/wormhole-sdk-ts","kind":"repo","label":"Wormhole SDK GitHub"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup Guide"},{"url":"https://docs.mountainprotocol.com","kind":"docs","label":"Mountain Protocol Docs"}],"time_estimate_hours":12,"projects":{"slug":"mountain"},"project_slug":"mountain","project":{"slug":"mountain","name":"Mountain Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/mountain-protocol?w=64&h=64","category":"stablecoins"}},{"id":"a041e875-7fae-4b4f-808a-afd962376216","project_id":"1279320e-12cf-4287-b3e7-3839b903fe7a","title":"USDM On-Ramp Widget","pitch":"Embeddable widget for fintech apps to offer USDM purchase with KYC handled.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","mountain-api","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:49.17676+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a drop-in React component that lets fintech platforms, wallets, and DeFi apps offer USDM purchases to their users without managing KYC compliance themselves. Mountain Protocol handles the regulatory layer; you handle the UX. The widget accepts fiat via Stripe or ACH, verifies the user against Mountain's KYC API, and mints USDM to their wallet. This is infrastructure-grade work: you're building the bridge between regulated fiat rails and on-chain stablecoins for apps that want yield-bearing dollars without the compliance headache.","learn_first":["ERC-20 token standards","Stripe or ACH payment flows","KYC/AML compliance concepts","Mountain Protocol's API authentication"],"tech_stack":{"data":["Mountain Protocol API (fiat-to-USDM endpoint)","Stripe API or ACH processor"],"infra":["Vercel or similar for widget hosting","Environment variables for API keys"],"wallet":["wagmi","ethers.js or viem for wallet connection"],"frontend":["React","Next.js","TypeScript","wagmi","viem","TailwindCSS"],"contracts":["ERC-20 (USDM token contract read-only)"]},"build_steps":["Scaffold a Next.js app with TypeScript and TailwindCSS; create a reusable React component called `USDMOnRamp` that accepts props for callback URLs and branding.","Set up wagmi hooks to detect user's connected wallet and chain (Ethereum, Base, or Polygon); add chain-switching UI if needed.","Integrate Stripe Elements or ACH form (via Stripe Connect or Plaid) to collect payment method; validate amount input (min/max per Mountain's limits).","Implement Mountain Protocol API authentication: store API key in environment variables, create a server-side Next.js API route (`/api/kyc-check`) that calls Mountain's KYC endpoint with user email and identity data.","Build a multi-step flow: (1) user connects wallet, (2) enters fiat amount, (3) provides KYC data (name, email, SSN if required), (4) processes payment via Stripe/ACH, (5) polls Mountain's API for KYC approval status.","Once KYC is approved and payment settled, call Mountain's mint endpoint to receive a signed transaction or direct mint instruction; use wagmi to send the transaction to the user's wallet.","Add error handling for failed KYC, payment reversals, and network failures; implement retry logic and user-friendly error messages.","Deploy widget as a standalone Next.js app on Vercel; expose it as an iframe or npm package so other apps can embed it; document props, callbacks, and styling options."],"gotchas":["Mountain Protocol's KYC API has rate limits and approval can take seconds to minutes—implement polling with exponential backoff, not tight loops.","Stripe and ACH have different settlement times (Stripe ~1-3 days, ACH ~1-5 days); communicate this to users or use Stripe's instant payouts if available in your region.","USDM is multi-chain; ensure your widget correctly routes mints to the user's selected chain and validates the chain ID before submitting the transaction.","KYC data is PII—store it only temporarily (in-memory or short-lived Redis), never in localStorage; use HTTPS and secure API routes exclusively.","Mountain Protocol's API may require IP whitelisting or OAuth for production; coordinate with their team early to avoid deployment surprises."],"references":[{"url":"https://docs.mountainprotocol.com","kind":"docs","label":"Mountain Protocol Docs"},{"url":"https://github.com/mountainprotocol","kind":"repo","label":"Mountain Protocol GitHub"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://stripe.com/docs/payments/payment-element","kind":"docs","label":"Stripe Payment Element"},{"url":"https://docs.openzeppelin.com/contracts/5.x/erc20","kind":"docs","label":"ERC-20 Token Standard (OpenZeppelin)"},{"url":"https://nextjs.org/docs/app/building-your-application/routing/route-handlers","kind":"docs","label":"Next.js API Routes"}],"time_estimate_hours":80,"projects":{"slug":"mountain"},"project_slug":"mountain","project":{"slug":"mountain","name":"Mountain Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/mountain-protocol?w=64&h=64","category":"stablecoins"}},{"id":"067e4838-a848-4233-af96-71da33a2c184","project_id":"20803439-edae-42c0-b0e0-abc74ae966b1","title":"scrvUSD Yield Aggregator","pitch":"Combines scrvUSD savings rate with external LP yields. Suggests when to switch venues.","difficulty":"1-2 weeks","use_case":"yield","build_with":["nextjs","defillama-api","viem","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:45.190375+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard and recommendation engine that monitors scrvUSD (Curve's savings rate product) yields alongside competing stablecoin yield sources (Aave, Lido liquid staking derivatives, Curve LP incentives). The tool fetches real-time rates from multiple protocols, calculates net APY after gas costs, and surfaces actionable signals—e.g., 'move 10k scrvUSD to Curve USDC/USDT LP for +2.3% better yield this week.' Targets DeFi users holding stablecoins who want to optimize returns without manual monitoring.","learn_first":["Curve's LLAMMA mechanism and scrvUSD design","ERC-4626 vault standard (scrvUSD is a vault)","Aave lending pools and interest rate models","Curve pool factory and gauge incentives","Gas cost estimation for rebalancing"],"tech_stack":{"data":["DefiLlama API (multi-protocol yield rates)","Curve API (pool APYs, gauge weights)","Aave API (lending rates)","Etherscan RPC (gas price estimation)"],"infra":["Vercel (Next.js hosting)","Postgres (cache yields, user watchlists)"],"other":["1inch API (swap routing for rebalance simulation)"],"wallet":["RainbowKit (optional, for user portfolio import)"],"indexer":["Ponder (to index Curve pool events and scrvUSD deposits)","The Graph (Curve subgraph for historical rates)"],"frontend":["Next.js 14+","TailwindCSS","Recharts (yield charts)","wagmi v2 + viem (read-only contract calls)"],"contracts":["Curve scrvUSD (0x0655977Fe2B05a0f592E4a92f666a5de438b072C)","Curve gauge contracts for LP rewards"]},"build_steps":["Set up Next.js 14 project with TailwindCSS; create `/api/yields` route to aggregate rate data from DefiLlama, Curve, and Aave APIs.","Write a Ponder indexer to track scrvUSD contract (0x0655977Fe2B05a0f592E4a92f666a5de438b072C) deposits and redemptions; store daily snapshots of vault APY.","Build a comparison engine in `/lib/yieldCalc.ts`: fetch scrvUSD rate, Curve USDC/USDT LP APY, Aave USDC lending rate; normalize for 18-decimal precision and annualize.","Implement gas cost estimator: call Etherscan API for current gwei, estimate swap + deposit gas (Curve ~150k gas, Aave ~200k), deduct from APY delta to show net benefit.","Create a React component `<YieldComparison />` that renders a table: Protocol | APY | 7d Avg | Gas Cost | Net Gain vs scrvUSD; sort by net gain descending.","Add a `/api/recommend` endpoint that returns top 3 rebalancing opportunities: if Curve USDC/USDT LP APY > scrvUSD APY + gas cost, rank it; return amount threshold (e.g., 'rebalance if >$5k').","Build a simple watchlist feature: store user addresses in Postgres, fetch their scrvUSD balance via viem `balanceOf` call, show personalized rebalance size recommendations.","Deploy to Vercel; set up hourly cron job (`/api/cron/refresh-yields`) to refresh DefiLlama and Curve data; test with hardcoded wallet address first."],"gotchas":["scrvUSD APY is dynamic and depends on Curve's lending demand; it can drop to near-zero during low-demand periods. Always fetch fresh rates, don't cache for >1 hour.","Curve pool APYs include base swap fees + gauge incentives; gauge weights change weekly, so a high-APY pool today may drop 50% next week. Warn users about incentive dependency.","Gas costs vary wildly; a rebalance profitable at 30 gwei becomes unprofitable at 100 gwei. Show gas-adjusted yields and update every 5 minutes.","DefiLlama API rate limits are ~10 req/min for free tier; batch requests and cache aggressively, or upgrade to paid tier for production.","Curve's 1inch integration for optimal swaps may have slippage; simulate rebalances with 0.1% slippage assumption and warn users if actual slippage differs."],"references":[{"url":"https://docs.curve.fi/crvUSD/overview","kind":"docs","label":"Curve scrvUSD Docs"},{"url":"https://github.com/curvefi","kind":"repo","label":"Curve Finance GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Vault Standard"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API Docs"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://docs.curve.fi/governance/gauges/overview","kind":"docs","label":"Curve Gauge System & Incentives"}],"time_estimate_hours":80,"projects":{"slug":"crvusd"},"project_slug":"crvusd","project":{"slug":"crvusd","name":"crvUSD","logo_url":"https://icons.llamao.fi/icons/protocols/curve-crvusd?w=64&h=64","category":"stablecoins"}},{"id":"3b8212b7-1daa-4f33-be21-da3431fa3a64","project_id":"1279320e-12cf-4287-b3e7-3839b903fe7a","title":"Treasury Backing Verifier","pitch":"Live view of USDM's Treasury holdings vs supply outstanding. Proof-of-reserve for the curious.","difficulty":"weekend","use_case":"security","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:44.086146+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time dashboard that fetches USDM total supply from on-chain contracts across Ethereum, Base, and Polygon, then displays it alongside Mountain Protocol's attested Treasury holdings (via their API or on-chain oracle). Show the backing ratio, reserve breakdown by asset class, and historical trends. This gives users transparent proof that USDM is actually backed 1:1+ by US Treasuries, reducing counterparty risk perception and building trust in the stablecoin.","learn_first":["ERC-20 token supply queries via multicall","Mountain Protocol's attestation/oracle mechanism","Treasury asset composition (bills, notes, bonds)","Proof-of-reserve design patterns"],"tech_stack":{"ai":[],"data":["Mountain Protocol API or on-chain oracle","Multicall3 for batch RPC calls"],"infra":["Vercel"],"other":["ethers.js or viem for contract reads"],"wallet":["wagmi","viem"],"indexer":[],"frontend":["Next.js","React","TailwindCSS","Recharts or Chart.js"],"contracts":["ERC-20 (USDM token)"]},"build_steps":["Set up Next.js project with TypeScript, TailwindCSS, and wagmi hooks for multi-chain reads","Create a contract ABI file for USDM (ERC-20 standard) and Mountain Protocol's Treasury attestation contract or oracle; fetch from their GitHub or docs","Write a viem client for each chain (Ethereum, Base, Polygon) to query USDM total supply via multicall to reduce RPC calls","Integrate Mountain Protocol's public API endpoint (or on-chain oracle) to fetch current Treasury holdings and asset breakdown","Build a React component that displays: total USDM supply, total Treasury backing, backing ratio percentage, and a breakdown chart (bills vs notes vs bonds)","Add a historical data layer: store daily snapshots in browser localStorage or a simple backend (Supabase) to show backing ratio trends over 30 days","Implement chain selector tabs to show supply and backing per chain, with aggregate totals","Deploy to Vercel with environment variables for RPC endpoints; add a refresh button and auto-refresh every 5 minutes"],"gotchas":["Mountain Protocol's attestation mechanism may not be fully on-chain; confirm whether you need to call an API endpoint or read from an oracle contract—this affects architecture","RPC rate limits: querying three chains every 5 minutes can hit free tier limits; use a public RPC aggregator (Alchemy, Infura) or cache aggressively","USDM supply may not be the same across all three chains; clarify whether you're showing per-chain backing or aggregate, and whether cross-chain supply reconciliation is needed","Treasury asset composition updates may lag behind on-chain supply changes; set user expectations about data freshness and add a timestamp to the UI"],"references":[{"url":"https://docs.mountainprotocol.com","kind":"docs","label":"Mountain Protocol Docs"},{"url":"https://github.com/mountainprotocol","kind":"repo","label":"Mountain Protocol GitHub"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://wagmi.sh","kind":"docs","label":"Wagmi Hooks Reference"},{"url":"https://docs.openzeppelin.com/contracts/5.x/erc20","kind":"docs","label":"ERC-20 Standard (OpenZeppelin)"},{"url":"https://github.com/mds1/multicall","kind":"repo","label":"Multicall3 Contract"}],"time_estimate_hours":8,"projects":{"slug":"mountain"},"project_slug":"mountain","project":{"slug":"mountain","name":"Mountain Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/mountain-protocol?w=64&h=64","category":"stablecoins"}},{"id":"cdad6f6d-7521-4679-bae2-759e9b2af964","project_id":"1279320e-12cf-4287-b3e7-3839b903fe7a","title":"Yield-Bearing Dollar Tracker","pitch":"Compares USDM with other yield-bearing dollars (sDAI, sUSDS, sUSDe) on yield + risk + redemption mechanics.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","defillama-api","viem","ethers.js"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:43.29094+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that aggregates yield rates, collateral backing, redemption fees, and risk metrics across USDM, sDAI (Savings DAI), sUSDS (Savings USDS), and sUSDe (Staked USDe). Users see APY trends, historical yield comparisons, redemption slippage, and underlying asset composition (Treasuries vs. staking vs. lending). Built for yield farmers comparing stablecoin strategies without switching between five different UIs.","learn_first":["ERC-4626 vault standard (yield-bearing token mechanics)","Chainlink price feeds and oracle design","Treasury backing vs. algorithmic stablecoins","Redemption mechanics and slippage in yield products"],"tech_stack":{"data":["DefiLlama API (TVL, yields)","Etherscan API (transaction history)","Coingecko API (price history fallback)"],"infra":["Vercel (Next.js hosting)","PostgreSQL or Supabase (cache yield snapshots)"],"other":["Zod (schema validation for API responses)"],"indexer":["The Graph (subgraphs for USDM, sDAI, sUSDS, sUSDe events)","Ponder (lightweight alternative for real-time indexing)"],"frontend":["Next.js 14+ (App Router)","TailwindCSS","Recharts or Chart.js (yield trend visualization)","wagmi + viem (read contract state)","RainbowKit (optional wallet connection)"],"contracts":["ERC-4626 (read-only integration)","Chainlink Oracle (price feeds)"]},"build_steps":["Scaffold Next.js 14 project with TailwindCSS and set up environment variables for RPC endpoints (Alchemy/Infura) and API keys (DefiLlama, Etherscan, Coingecko).","Create data-fetching layer: write utility functions to pull current APY from DefiLlama API for USDM, sDAI, sUSDS, sUSDe; validate responses with Zod.","Set up viem client to read ERC-4626 contract state (totalAssets, totalSupply, lastRewardRate) for each yield product; cache results in Supabase with 5-minute TTL.","Build React components: YieldComparison table (APY, 7d/30d trends, TVL), RedemptionMechanics card (fee %, slippage estimates), and CollateralBreakdown (Treasuries %, staking %, lending %).","Integrate Recharts for historical yield curves; fetch 90-day snapshots from The Graph subgraph or Ponder indexer (or fallback to Coingecko historical data).","Add risk scoring: calculate volatility (standard deviation of 30-day APY), collateral concentration risk, and smart contract audit status; display as simple color-coded badges.","Deploy to Vercel; set up automated cache refresh every 5 minutes via Next.js API routes and cron jobs (using a simple scheduler or Vercel Cron).","Test with real wallet connection (RainbowKit optional) to allow users to input their holdings and see personalized yield projections."],"gotchas":["DefiLlama and Coingecko APIs have rate limits (300 req/min free tier); implement request batching and cache aggressively to avoid hitting limits during traffic spikes.","ERC-4626 contracts may not emit all state changes as events; you'll need to poll contract state regularly via viem or rely on The Graph subgraphs, which may lag 1–2 blocks.","Redemption slippage varies by liquidity pool and chain; sDAI on Ethereum has deep liquidity but sUSDe on Base may have wider spreads—fetch real-time reserves from Uniswap V3 or Curve if possible.","USDM is newer and may not have a mature subgraph; consider querying Mountain Protocol's own API or indexing events directly with Ponder for faster iteration.","Yield rates change hourly; users expect real-time data, but stale data is better than broken UI—set clear refresh timestamps and graceful fallbacks if APIs are down."],"references":[{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://docs.mountainprotocol.com","kind":"docs","label":"Mountain Protocol Documentation"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API Docs"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://viem.sh/docs/getting-started.html","kind":"docs","label":"viem Client Documentation"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"}],"time_estimate_hours":16,"projects":{"slug":"mountain"},"project_slug":"mountain","project":{"slug":"mountain","name":"Mountain Protocol","logo_url":"https://icons.llamao.fi/icons/protocols/mountain-protocol?w=64&h=64","category":"stablecoins"}},{"id":"0822d9b5-f1df-4d63-a238-ea09a7256c76","project_id":"20803439-edae-42c0-b0e0-abc74ae966b1","title":"Auto-Healthcheck Bot","pitch":"Telegram bot that tracks your crvUSD loan band position and pings when you're entering or exiting soft-liquidation.","difficulty":"weekend","use_case":"security","build_with":["node","viem","telegram-bot-api","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:36.839926+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Telegram bot that monitors crvUSD LLAMMA positions in real-time, tracking band movements and alerting users before they hit soft-liquidation thresholds. The bot queries on-chain state via Viem, calculates health metrics based on collateral price and debt, and sends actionable alerts when positions drift into danger zones. Useful for active traders managing leverage and risk-averse holders wanting early warning signals.","learn_first":["LLAMMA mechanism and band structure","crvUSD collateral types and price feeds","Telegram Bot API basics","Viem contract reading patterns"],"tech_stack":{"ai":[],"data":["Chainlink price feeds","Curve's on-chain state"],"infra":["Node.js runtime","Telegram Bot API"],"other":["Viem for RPC calls"],"wallet":[],"indexer":[],"frontend":[],"contracts":["crvUSD Controller (LLAMMA)","Price oracle integration"]},"build_steps":["Set up a Node.js project with Viem and node-telegram-bot-api dependencies","Create a Telegram bot via BotFather and store the token in environment variables","Write a Viem client to connect to Ethereum mainnet and read crvUSD Controller contract state (band, collateral balance, debt)","Implement a function to fetch current collateral price from Chainlink or Curve's oracle and calculate loan health (LTV, distance to liquidation band)","Build a polling loop that checks each monitored position every 1–5 minutes and stores the previous state","Add alert logic: trigger a Telegram message if a position enters a new band, LTV crosses a threshold (e.g., 80%), or price moves within 5% of liquidation","Create a simple command interface (/add <address>, /remove <address>, /status) so users can subscribe to positions","Deploy to a free tier VPS (Railway, Render, or local machine) and test with a testnet position or live monitoring"],"gotchas":["LLAMMA bands are discrete; a small price move can cause a large band jump if collateral price crosses a band boundary—track band ID changes, not just LTV","Chainlink price feeds can lag; use Curve's internal oracle or aggregate multiple sources to catch real liquidation risk earlier","Telegram rate limits apply; batch alerts or use a message queue if monitoring many positions to avoid hitting API throttles","crvUSD supports multiple collateral types (ETH, wstETH, etc.) with different oracles and parameters; hardcode or parameterize the controller address and oracle per collateral","State changes on-chain happen in blocks; polling every block is wasteful; 1–5 minute intervals are practical for most users"],"references":[{"url":"https://docs.curve.fi/crvUSD/overview","kind":"docs","label":"crvUSD Overview & LLAMMA Docs"},{"url":"https://github.com/curvefi/curve-stablecoin","kind":"repo","label":"Curve crvUSD Controller Contract"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reading Guide"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Documentation"},{"url":"https://www.npmjs.com/package/node-telegram-bot-api","kind":"tool","label":"node-telegram-bot-api NPM Package"},{"url":"https://docs.chain.link/data-feeds/price-feeds/addresses","kind":"docs","label":"Chainlink Price Feeds on Ethereum"}],"time_estimate_hours":6,"projects":{"slug":"crvusd"},"project_slug":"crvusd","project":{"slug":"crvusd","name":"crvUSD","logo_url":"https://icons.llamao.fi/icons/protocols/curve-crvusd?w=64&h=64","category":"stablecoins"}},{"id":"71d9d7a2-a00d-40c2-b96c-01c73a793265","project_id":"20803439-edae-42c0-b0e0-abc74ae966b1","title":"PegKeeper Activity Feed","pitch":"Live feed of PegKeeper actions across all crvUSD pairs — see when peg is being actively defended.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:33.045979+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time dashboard that surfaces PegKeeper contract interactions across all crvUSD collateral pairs. PegKeepers are the mechanism Curve uses to defend the crvUSD peg by minting/burning stablecoin in response to price deviations. This feed lets users and arbitrageurs watch when peg defense is active, which pairs are under pressure, and the volume of stabilization actions. Useful for traders timing entry/exit, risk analysts monitoring system health, and community members understanding crvUSD mechanics in real time.","learn_first":["crvUSD peg-keeper mechanism and how it defends the peg","The Graph subgraph indexing and querying","ERC-20 transfer events and contract interaction patterns"],"tech_stack":{"data":["The Graph API"],"other":["Etherscan API (optional, for fallback data)"],"indexer":["The Graph"],"frontend":["Next.js","Viem","TailwindCSS"],"contracts":["crvUSD (ERC-20)","PegKeeper (Curve's stabilization contract)"]},"build_steps":["Set up a Next.js project with TypeScript and TailwindCSS for the dashboard layout","Write a Subgraph schema to index PegKeeper Mint and Burn events across all crvUSD pairs (query Curve's deployed PegKeeper contracts on Ethereum)","Deploy the subgraph to The Graph's hosted service or decentralized network","Create a Viem client to fetch on-chain PegKeeper contract addresses and pair metadata from Curve's registry or hardcode known pairs","Build a React component that queries The Graph for recent PegKeeper events (Mint/Burn), sorted by timestamp descending","Add real-time polling (e.g., refetch every 10–15 seconds) or use The Graph subscriptions to keep the feed fresh","Display event details: pair name, action type (Mint/Burn), amount, timestamp, transaction hash, and peg deviation trigger (if available from event logs)","Add filters: by pair, by action type, by time range; optional: show cumulative peg-defense volume per pair over 24h"],"gotchas":["PegKeeper events may not always include the exact peg deviation that triggered the action — you may need to cross-reference with price oracle data (Chainlink or Curve's internal oracles) to show context","The Graph can have a slight indexing lag (5–30 seconds); if you need true real-time, consider polling Etherscan API as a fallback or using a custom RPC listener","Curve has multiple PegKeeper contracts (one per collateral pair); ensure your subgraph or contract registry captures all active pairs, not just the most popular ones","crvUSD pairs can be added/removed; your dashboard should either auto-detect new pairs via contract events or have a manual refresh mechanism"],"references":[{"url":"https://docs.curve.fi/crvUSD/overview","kind":"docs","label":"crvUSD Documentation"},{"url":"https://github.com/curvefi","kind":"repo","label":"Curve Finance GitHub"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://viem.sh/","kind":"docs","label":"Viem Documentation"},{"url":"https://etherscan.io/address/0x1ef89ca3f53d1eae8281377489b1514b1e84e917","kind":"tool","label":"Curve PegKeeper Contract (Etherscan)"}],"time_estimate_hours":16,"projects":{"slug":"crvusd"},"project_slug":"crvusd","project":{"slug":"crvusd","name":"crvUSD","logo_url":"https://icons.llamao.fi/icons/protocols/curve-crvusd?w=64&h=64","category":"stablecoins"}},{"id":"a4bc1058-89ea-4cc4-b264-771ab50a6d6a","project_id":"a04903e3-3f98-4112-8783-6fef40d79c07","title":"Redemption Sniper","pitch":"Real-time UI for triggering Liquity V2 redemptions when BOLD trades above $1. MEV-friendly tooling.","difficulty":"1-2 weeks","use_case":"trading","build_with":["node","viem","flashbots"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:29.408076+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A monitoring and execution interface that watches BOLD/USD price feeds and automatically triggers redemptions on Liquity V2 when the stablecoin trades above peg. Redemptions are a core mechanism in Liquity V2 that allow BOLD holders to exchange their tokens for the underlying collateral at face value, creating a price floor. This tool combines price monitoring, transaction construction, and MEV protection strategies (batch auctions or flashbots) to help arbitrageurs and protocol participants capitalize on depeg events. The UI displays current BOLD price, redemption queue depth, collateral composition, and provides one-click or automated redemption execution with gas optimization.","learn_first":["Liquity V2 redemption mechanics and BOLD token economics","MEV protection strategies (batch auctions vs. flashbots)","Real-time price feed integration (Chainlink or DEX oracles)","ERC-20 token approvals and permit signatures"],"tech_stack":{"ai":[],"data":["Chainlink price feeds for BOLD/USD","Uniswap V4 or Curve price oracles as fallback","Etherscan or Alchemy for gas price estimation"],"infra":["Node.js backend for price monitoring","Flashbots Relay for MEV-protected submission","Alchemy or Infura RPC"],"other":["ethers.js or viem for contract ABIs"],"wallet":["RainbowKit or Privy for wallet connection"],"indexer":["Ponder or The Graph for redemption event tracking"],"frontend":["React","TailwindCSS","wagmi hooks for contract interaction","viem for transaction construction"],"contracts":["Liquity V2 RedemptionManager contract","BOLD token (ERC-20)"]},"build_steps":["Set up a Next.js or Vite project with wagmi and viem; scaffold wallet connection with RainbowKit","Fetch Liquity V2 RedemptionManager ABI from the GitHub repo and decode the current BOLD price and redemption queue state using viem contract reads","Integrate a real-time price feed: use Chainlink's BOLD/USD oracle via viem, or query Uniswap V4 TWAP as a fallback; set up price monitoring loop with a 10–30 second polling interval","Build the UI: display current BOLD price, peg status (green if ≤$1, red if >$1), redemption queue depth, and collateral breakdown from on-chain state","Implement redemption transaction construction: use viem to build a call to RedemptionManager.redeemCollateral() with user-specified BOLD amount; include gas estimation","Add MEV protection: integrate Flashbots Relay for bundle submission, or implement a batch auction fallback (e.g., CoW Protocol intent submission)","Create a one-click or scheduled redemption trigger: allow users to set a price threshold (e.g., $1.02) and auto-submit redemptions when BOLD exceeds it","Test on Sepolia testnet with mock price feeds; deploy to mainnet with gas monitoring and error handling for failed transactions"],"gotchas":["Redemption queue ordering and partial fills: Liquity V2 processes redemptions in order, so large redemptions may be split across multiple collateral types or batches; monitor the queue depth to set realistic BOLD amounts","Price feed staleness: Chainlink oracles have heartbeat intervals; if BOLD is illiquid, the feed may lag; always cross-check with DEX prices and implement a staleness check before executing","Flashbots bundle inclusion is not guaranteed; have a fallback to standard mempool submission with high gas price, but be aware of frontrunning risk during high volatility","Permit signature expiration: if using ERC-2612 permits for gas-free approvals, ensure the deadline is set correctly (typically 1 hour); expired permits will cause redemption to fail","Gas spikes during redemptions: collateral swaps within the RedemptionManager can be expensive; monitor base fee and consider batching multiple redemptions or waiting for lower gas periods"],"references":[{"url":"https://docs.liquity.org/v2/","kind":"docs","label":"Liquity V2 Docs – Redemptions"},{"url":"https://github.com/liquity","kind":"repo","label":"Liquity Protocol GitHub"},{"url":"https://docs.flashbots.net/flashbots-auction/searchers/quick-start","kind":"docs","label":"Flashbots Relay Documentation"},{"url":"https://viem.sh/docs/contract/getContract","kind":"docs","label":"viem Contract Interaction Guide"},{"url":"https://docs.chain.link/data-feeds/price-feeds/addresses?network=ethereum","kind":"docs","label":"Chainlink Price Feeds on Ethereum"},{"url":"https://etherscan.io/token/0xb0b195aefa3650a6908f15cdac7d92f90566a406","kind":"tool","label":"Liquity V2 BOLD Token Contract"}],"time_estimate_hours":80,"projects":{"slug":"liquity"},"project_slug":"liquity","project":{"slug":"liquity","name":"Liquity","logo_url":"https://icons.llamao.fi/icons/protocols/liquity-v2?w=64&h=64","category":"stablecoins"}},{"id":"3af4653e-d153-441f-9588-ef6d4a486369","project_id":"20803439-edae-42c0-b0e0-abc74ae966b1","title":"LLAMMA Visualizer","pitch":"Animated explainer of how LLAMMA's soft-liquidation bands work. Onboards users intimidated by the mechanic.","difficulty":"weekend","use_case":"onboarding","build_with":["nextjs","framer-motion","recharts"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:28.869248+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an interactive, animated visualization that teaches users how Curve's LLAMMA (Lending-Liquidating Automated Market Maker Algorithm) soft-liquidation mechanism works. The tool shows how collateral moves through price bands as market conditions change, how users avoid hard liquidations, and how the system rebalances. Target users are new to crvUSD or nervous about the liquidation model. Use Framer Motion for smooth animations, Next.js for the frontend, and Curve's API/subgraph for live data. The visualizer should include: (1) a price band diagram showing collateral position, (2) animated transitions as price moves through bands, (3) a risk meter showing distance to full liquidation, (4) a simple scenario builder (\"what if ETH drops 20%?\"), and (5) tooltips explaining each concept. Deploy on Vercel for instant iteration.","learn_first":["LLAMMA mechanism (soft vs hard liquidation)","Curve's crvUSD docs and architecture","Framer Motion animation patterns","Next.js API routes for data fetching"],"tech_stack":{"data":["Curve subgraph (The Graph)","Curve API (price feeds)"],"infra":["Vercel","ethers.js or viem for RPC calls (optional, for live collateral ratios)"],"frontend":["Next.js 15+","Framer Motion","Recharts","TailwindCSS","TypeScript"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS. Install Framer Motion and Recharts.","Create a static mockup of the LLAMMA band diagram: render 3–5 horizontal price bands, show collateral position as a dot or bar, label each band with price range and state (safe, warning, liquidation).","Build the price band component in Framer Motion: animate collateral movement left/right as price changes. Use `animate` prop to smoothly transition position over 1–2 seconds.","Add a scenario builder: simple slider or input for \"current price\" and \"new price\". Recalculate band position and trigger animation on input change.","Integrate Curve subgraph or API to fetch live ETH/USD price and a sample crvUSD vault's collateral ratio. Display real data in the visualizer.","Add a risk meter (progress bar or radial gauge) showing distance to liquidation. Color-code: green (safe), yellow (warning), red (danger).","Create an info panel with tooltips: hover over bands to explain what happens at each stage (e.g., \"Collateral swaps to stablecoin\", \"Soft liquidation begins\"). Use Framer Motion's `whileHover` for reveal animations.","Deploy to Vercel. Test on mobile and desktop. Iterate on animation timing and clarity based on user feedback."],"gotchas":["LLAMMA's math is non-intuitive: users often confuse soft liquidation (gradual swap) with hard liquidation (instant loss). Your explainer must make the *benefit* (no sudden rekt) crystal clear, not just the mechanism.","Curve's subgraph can lag or be unavailable; always have a fallback to static demo data so the visualizer works offline.","Animation performance on low-end devices: test Framer Motion animations on throttled mobile. Use `will-change` CSS and reduce simultaneous animations if needed.","Price feed latency: if you fetch live prices, cache them client-side for 30–60 seconds to avoid excessive API calls and jank during rapid slider changes."],"references":[{"url":"https://docs.curve.fi/crvUSD/overview","kind":"docs","label":"LLAMMA Mechanism Docs"},{"url":"https://github.com/curvefi/curve-stablecoin","kind":"repo","label":"crvUSD Smart Contract (GitHub)"},{"url":"https://www.framer.com/motion/","kind":"docs","label":"Framer Motion Documentation"},{"url":"https://thegraph.com/hosted-service/subgraph/curvefi/curve","kind":"tool","label":"Curve Subgraph (The Graph)"},{"url":"https://nextjs.org/docs","kind":"docs","label":"Next.js 15 Docs"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Documentation"}],"time_estimate_hours":16,"projects":{"slug":"crvusd"},"project_slug":"crvusd","project":{"slug":"crvusd","name":"crvUSD","logo_url":"https://icons.llamao.fi/icons/protocols/curve-crvusd?w=64&h=64","category":"stablecoins"}},{"id":"e00bd2fa-c92f-4b83-9508-51e1b183484e","project_id":"a04903e3-3f98-4112-8783-6fef40d79c07","title":"Liquidation Earnings Calculator","pitch":"Models historical SP returns including liquidation gains. Sets realistic yield expectations.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:25.803562+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web dashboard that backtests Stability Pool performance by analyzing historical liquidation events, ETH collateral gains, and BOLD token rewards. Users input a hypothetical deposit amount and date range to see what returns they would have earned. The calculator fetches liquidation data from The Graph, computes collateral gains per share, and projects forward-looking yields based on recent protocol metrics. This helps SP depositors make informed decisions about capital allocation to Liquity.","learn_first":["Liquity Stability Pool mechanics (liquidations, collateral gains, BOLD rewards)","The Graph subgraph queries and pagination","ERC-20 token accounting (LUSD/BOLD decimals and share math)"],"tech_stack":{"data":["The Graph (Liquity subgraph for liquidation events)"],"other":["Viem for RPC calls to fetch current SP state"],"frontend":["Next.js","TypeScript","Tailwind CSS","Recharts or Chart.js for historical returns visualization"]},"build_steps":["Set up Next.js project with TypeScript and Tailwind; create layout with input form (deposit amount, start date, end date) and results panel.","Write a Liquity subgraph query (or use existing Liquity subgraph) to fetch all liquidation events with timestamps, collateral amounts, and LUSD burned in a given date range.","Implement historical data aggregation: calculate cumulative collateral gains per LUSD share for each day in the range using liquidation data.","Fetch current Stability Pool state via Viem (total LUSD deposited, current BOLD reward rate) to extrapolate forward yields.","Build calculator logic: given user input (deposit amount + date), compute realized returns (collateral gains + BOLD rewards earned) and annualized yield.","Add a chart component showing daily/weekly returns over the backtest period and a summary card with key metrics (total return %, annualized yield, collateral gain vs. BOLD reward breakdown).","Deploy frontend to Vercel; test with real historical data from Liquity subgraph (start with last 3–6 months).","Add optional features: compare SP yields to other stablecoin protocols, export backtest results as CSV."],"gotchas":["Liquidation events are sparse; if the date range has few liquidations, returns will be low and variance high. Communicate this clearly to users.","BOLD reward rates and distribution have changed over time; use historical on-chain data rather than current rates for accurate backtesting.","Stability Pool share price can fluctuate due to both liquidations (gains) and BOLD dilution; ensure your share math accounts for both.","The Graph subgraph may have indexing lag; cache results and refresh on a schedule rather than querying live on every page load."],"references":[{"url":"https://docs.liquity.org/faq/stability-pool-and-lusd-redemptions","kind":"docs","label":"Liquity Stability Pool Docs"},{"url":"https://thegraph.com/hosted-service/subgraph/liquity/liquity","kind":"tool","label":"Liquity Subgraph (The Graph)"},{"url":"https://github.com/liquity/liquity","kind":"repo","label":"Liquity Protocol GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Token Accounting Guide"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"}],"time_estimate_hours":16,"projects":{"slug":"liquity"},"project_slug":"liquity","project":{"slug":"liquity","name":"Liquity","logo_url":"https://icons.llamao.fi/icons/protocols/liquity-v2?w=64&h=64","category":"stablecoins"}},{"id":"72a78819-4ecb-4b7a-9d25-67ff7e4460df","project_id":"a04903e3-3f98-4112-8783-6fef40d79c07","title":"Trove Refinancing Helper","pitch":"Find Liquity V2 troves at risk of redemption and offer one-click rate adjustments via the user interest setting.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","liquity-v2-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:22.27221+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that monitors Liquity V2 troves and alerts users when their collateral ratio approaches redemption risk thresholds. Users can then refinance their troves by adjusting their interest rate in one click, potentially lowering their rate or rebalancing collateral without closing and reopening. This targets active Liquity borrowers who want to avoid liquidation and redemption penalties without manual contract interaction.","learn_first":["Liquity V2 trove mechanics and interest rate model","ERC-20 and ERC-4626 vault patterns","Redemption risk and collateral ratio calculations","ethers.js vs viem for contract reads"],"tech_stack":{"data":["Liquity V2 SDK for rate calculations","etherscan or Alchemy for trove state"],"infra":["Vercel or Railway for hosting"],"other":["Liquity V2 testnet for development"],"wallet":["wagmi useContractRead","viem publicClient"],"indexer":["Ponder","The Graph (Liquity V2 subgraph)"],"frontend":["Next.js 14+","React","TailwindCSS","wagmi hooks","RainbowKit or Privy"],"contracts":["Liquity V2 Trove Manager","Liquity V2 Interest Rate Module"]},"build_steps":["Set up Next.js 14 project with TypeScript, TailwindCSS, and wagmi + RainbowKit for wallet connection.","Install liquity-v2-sdk and viem; create a utility module to fetch trove state (collateral, debt, interest rate) using publicClient.readContract() against Liquity V2 TroveManager.","Build a dashboard page that displays the user's connected wallet's trove(s), showing current collateral ratio, interest rate, and redemption risk score (calculate as: (collateral value / debt) vs. system MCR).","Implement real-time monitoring: use wagmi useContractRead with polling to refresh trove state every 30–60 seconds; highlight troves where collateral ratio < 1.5x or approaching system average.","Create a refinancing modal that calls Liquity V2's adjustTrove() function with new interest rate parameters; use wagmi useContractWrite to submit the transaction.","Add a simple backend endpoint (Next.js API route) that queries Liquity V2 subgraph or Ponder indexer to fetch historical rate trends and suggest optimal rate adjustments.","Integrate Privy or RainbowKit for seamless wallet connection; test on Ethereum mainnet fork (Foundry anvil) and Liquity V2 testnet.","Deploy to Vercel; add Sentry or similar for error tracking; test end-to-end with a real trove on testnet."],"gotchas":["Liquity V2 interest rates are dynamic and depend on system utilization; fetching the 'optimal' rate requires reading the InterestRateModule state, which may have a 1–2 block lag.","Redemption risk is not just collateral ratio: it also depends on the trove's position in the sorted list and system-wide redemption activity; monitor the TroveManager's redemption counter and trove ordering.","Gas costs for adjustTrove() can be high if the trove is deep in the sorted list; consider batching multiple adjustments or warning users about gas before signing.","The liquity-v2-sdk may not expose all refinancing helpers; you may need to construct calldata manually using viem's encodeFunctionData() for advanced rate adjustments."],"references":[{"url":"https://docs.liquity.org","kind":"docs","label":"Liquity V2 Documentation"},{"url":"https://github.com/liquity","kind":"repo","label":"Liquity V2 GitHub Repository"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://github.com/liquity/liquity-v2/blob/main/docs/interest-rate-model.md","kind":"article","label":"Liquity V2 Interest Rate Model (EIP)"},{"url":"https://thegraph.com/explorer/subgraphs","kind":"tool","label":"The Graph Liquity V2 Subgraph"}],"time_estimate_hours":80,"projects":{"slug":"liquity"},"project_slug":"liquity","project":{"slug":"liquity","name":"Liquity","logo_url":"https://icons.llamao.fi/icons/protocols/liquity-v2?w=64&h=64","category":"stablecoins"}},{"id":"375bf149-df29-4c19-9112-147eb32dbb4b","project_id":"a04903e3-3f98-4112-8783-6fef40d79c07","title":"BOLD Stability Pool Comparator","pitch":"Across Liquity V2's multiple branches, picks the optimal Stability Pool deposit for risk-adjusted yield.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","liquity-v2-sdk","ponder"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:16.551533+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Liquity V2 introduces multiple parallel branches, each with its own Stability Pool offering different risk/reward profiles. This tool compares real-time metrics across branches—deposit APY, liquidation frequency, collateral composition, BOLD accrual rates—and recommends the best pool for a user's risk tolerance. Builders can use this as a reference for multi-branch indexing patterns and as a foundation for yield optimization dashboards.","learn_first":["Liquity V2 branch architecture and Stability Pool mechanics","ERC-4626 vault interface (Stability Pools are vaults)","Risk metrics: liquidation frequency, collateral ratios, slippage on redemptions","Ponder for efficient multi-chain/multi-contract indexing"],"tech_stack":{"data":["Liquity V2 subgraph (fallback)","Ponder indexer"],"infra":["Vercel"],"wallet":["RainbowKit"],"indexer":["Ponder"],"frontend":["Next.js","viem","wagmi","TanStack Query"],"contracts":["Liquity V2 Stability Pool (ERC-4626)","Liquity V2 BranchManager"]},"build_steps":["Set up a Ponder project to index Liquity V2 BranchManager and Stability Pool contracts on Ethereum; track branch creation, deposits, and liquidation events.","Create Ponder schema tables: branches (address, collateral, status), pools (branch_id, total_deposits, accrued_BOLD), liquidations (timestamp, collateral_lost, BOLD_earned).","Write a Next.js app with a server action that queries Ponder for all active branches and their Stability Pool metrics.","Fetch real-time APY for each pool by calculating (BOLD_accrued_per_block * blocks_per_year) / total_deposits; cache for 5 minutes.","Compute risk scores: (liquidation_frequency_7d * collateral_volatility) / (collateral_ratio_min); lower is safer.","Build a comparison table UI showing branch name, collateral, APY, risk score, and a 'Deposit' button; use TanStack Query for polling.","Integrate wagmi + RainbowKit for wallet connection; add a modal to deposit into the selected pool via Liquity V2 SDK.","Deploy to Vercel; set up environment variables for Ponder API endpoint and RPC."],"gotchas":["Liquity V2 branches can be created permissionlessly; filter to 'active' branches by checking recent activity to avoid stale pools.","Stability Pool APY is denominated in BOLD, not USD; display BOLD yield separately from any governance token rewards.","Liquidation events may batch multiple troves; parse events carefully to avoid double-counting losses.","Ponder indexing lag can be 1–2 blocks; add a 'last updated' timestamp and refresh button so users know data freshness."],"references":[{"url":"https://docs.liquity.org","kind":"docs","label":"Liquity V2 Docs"},{"url":"https://github.com/liquity","kind":"repo","label":"Liquity V2 GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Documentation"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://www.rainbowkit.com","kind":"docs","label":"RainbowKit Setup Guide"}],"time_estimate_hours":12,"projects":{"slug":"liquity"},"project_slug":"liquity","project":{"slug":"liquity","name":"Liquity","logo_url":"https://icons.llamao.fi/icons/protocols/liquity-v2?w=64&h=64","category":"stablecoins"}},{"id":"2973f18e-2d5c-43d2-bb0d-463cdcded418","project_id":"7774ff75-82d8-4cfe-958e-707988a43847","title":"Fraxlend Liquidation Watcher","pitch":"Public list of at-risk Fraxlend positions for liquidator bots to monitor — feeds a real MEV niche.","difficulty":"weekend","use_case":"security","build_with":["node","viem","ethers"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:15.221282+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time monitoring service that tracks Fraxlend lending positions, calculates collateral ratios, and surfaces accounts approaching liquidation thresholds. Liquidators pay attention to such feeds to identify profitable liquidation opportunities. This service ingests on-chain data via Viem + Ethers, indexes Fraxlend pair contracts, computes health factors, and exposes an API (REST or WebSocket) so bots can subscribe to position updates. The core value: reducing the latency gap between liquidation events and bot discovery.","learn_first":["Fraxlend pair contract architecture and collateral/debt tracking","Liquidation mechanics: LTV, health factor, and liquidation threshold calculations","Event-driven indexing patterns with Viem logs and filters","Real-time data streaming and subscription patterns"],"tech_stack":{"ai":[],"data":["PostgreSQL or SQLite for position cache","Redis for real-time updates"],"infra":["Node.js (Express or Fastify for API)","WebSocket server for subscriptions"],"other":["Chainlink price feeds (optional, for USD valuations)"],"wallet":[],"indexer":["Viem (log filtering + multicall)","Ethers.js (optional fallback)"],"frontend":[],"contracts":["Fraxlend Pair (FraxlendPair.sol)"]},"build_steps":["Set up a Node.js project with Viem, Ethers, and Express; configure RPC endpoints for Ethereum, Arbitrum, Base, Polygon, and BSC.","Fetch the list of active Fraxlend pairs from Frax docs or on-chain registry; store pair addresses and collateral/debt token info in a local database.","Implement a Viem log listener for Fraxlend pair events (Borrow, Repay, AddCollateral, RemoveCollateral, Liquidate) on each chain.","For each position update, query the pair contract to fetch current collateral and debt amounts; compute health factor = (collateral value in USD) / (debt value in USD).","Set a liquidation threshold (e.g., health factor < 1.1); flag positions below this threshold and store in a database with timestamps.","Build a REST API endpoint (GET /at-risk-positions) that returns positions sorted by health factor; include collateral type, debt amount, owner address, and chain.","Add a WebSocket endpoint so liquidator bots can subscribe to real-time updates; emit events when a position crosses the liquidation threshold.","Deploy to a VPS or cloud function; set up monitoring and alerting for service uptime and data freshness."],"gotchas":["Fraxlend pairs exist on multiple chains with different addresses; you must track and query each chain independently, managing separate RPC connections and event listeners.","Health factor calculations depend on collateral and debt token prices; use Chainlink oracles or Frax's own price feeds, but cache prices to avoid rate limits and stale data.","Liquidation thresholds vary by pair; some pairs may have different LTV requirements. Parse pair metadata from contract calls or Frax documentation to avoid hardcoding.","Event ordering and reorgs: use Viem's confirmed block depth (e.g., wait 12 blocks) before marking a position as liquidatable to avoid false positives from chain reorgs.","Rate limiting on RPC endpoints: use batch calls (multicall) and pagination to avoid hitting node rate limits when querying hundreds of positions."],"references":[{"url":"https://docs.frax.finance/fraxlend/overview","kind":"docs","label":"Fraxlend Documentation"},{"url":"https://github.com/FraxFinance/fraxlend/blob/main/src/contracts/FraxlendPair.sol","kind":"repo","label":"Fraxlend Pair Contract (GitHub)"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://docs.ethers.org","kind":"docs","label":"Ethers.js Documentation"},{"url":"https://github.com/FraxFinance","kind":"repo","label":"Frax Finance GitHub Organization"}],"time_estimate_hours":16,"projects":{"slug":"frax"},"project_slug":"frax","project":{"slug":"frax","name":"Frax","logo_url":"https://icons.llamao.fi/icons/protocols/frax-finance?w=64&h=64","category":"stablecoins"}},{"id":"49e650dd-5a16-47e0-adea-09ad3a2fb8e6","project_id":"7774ff75-82d8-4cfe-958e-707988a43847","title":"Frax Bond Issuance Tracker","pitch":"Live view of FXB bond auctions and secondary trading, with implied yield curves.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","viem","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:15.09252+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard tracking Frax Bond (FXB) issuance auctions, secondary market trades, and settlement events. Users see live auction prices, historical yield curves, and can query which bonds are trading at discount/premium to par. The app indexes FXB contract events (mints, burns, transfers) and aggregates DEX trade data from Uniswap v3/v4 to compute implied yields. Target users: yield farmers comparing FXB to other stablecoins, treasury managers, and protocol analysts monitoring Frax's debt issuance.","learn_first":["ERC-4626 vault standard (FXB is a vault share)","Frax bond mechanics: collateral ratio, redemption price","Uniswap v3 concentrated liquidity and price oracles","The Graph or Ponder for event indexing"],"tech_stack":{"data":["Ponder indexer for FXB events","Uniswap v3 subgraph or direct RPC calls for pool state"],"infra":["Vercel (Next.js hosting)","Alchemy or Infura RPC endpoints (multi-chain)"],"other":["TypeScript","Zod for schema validation"],"wallet":["Wagmi (read-only, no signing needed)"],"indexer":["Ponder (recommended for real-time)","The Graph (subgraph alternative)"],"frontend":["Next.js 14+","TailwindCSS","Recharts or Lightweight Charts for yield curves","Wagmi + Viem for on-chain queries"],"contracts":["FXB (ERC-4626 vault)","Frax Collateral Manager","Uniswap v3 Router"]},"build_steps":["Set up Next.js 14 project with TailwindCSS and TypeScript; scaffold pages for auctions, secondary market, and yield curves.","Write Ponder indexer schema to track FXB contract events (Transfer, Deposit, Withdraw) on Ethereum, Arbitrum, and Base; deploy indexer.","Query Uniswap v3 subgraph or use Viem to fetch FXB/USDC pool state and recent swaps; compute mid-price and implied yield (discount to par).","Build API route handlers in Next.js to aggregate indexer data and compute 7d/30d yield curves; cache results with SWR or React Query.","Create React components: live auction table (latest FXB mints with collateral ratio), secondary market table (recent trades with price delta), and yield curve chart.","Integrate Wagmi for multi-chain read support; add chain selector (Ethereum, Arbitrum, Base) to UI.","Add real-time updates using Ponder subscriptions or polling; display last-updated timestamp and refresh button.","Deploy to Vercel; test across chains; add error boundaries and loading states."],"gotchas":["FXB price depends on collateral ratio and redemption price, not just pool liquidity—compute both to show true yield; a low-liquidity pool may show stale prices.","Frax uses multiple collateral types (USDC, sfrxETH, etc.); track which collateral backs each bond issuance to avoid conflating yields.","Uniswap v3 concentrated liquidity means pool price can gap on large trades; use TWAP (time-weighted average price) from the pool oracle, not spot price.","Cross-chain data sync lag: Arbitrum and Base may lag Ethereum by 1–2 blocks; display chain-specific timestamps to avoid confusion.","FXB redemption price updates on-chain via oracle; if oracle is stale, your yield calculation will be wrong—check oracle freshness in your indexer."],"references":[{"url":"https://docs.frax.finance","kind":"docs","label":"Frax Finance Docs"},{"url":"https://github.com/FraxFinance/frax-contracts-public","kind":"repo","label":"FXB Bond Contract (GitHub)"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://thegraph.com/hosted-service/subgraph/uniswap/uniswap-v3","kind":"docs","label":"Uniswap v3 Subgraph"},{"url":"https://viem.sh/docs/clients/public","kind":"docs","label":"Viem Multi-Chain RPC Guide"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Vault Standard (EIP)"}],"time_estimate_hours":80,"projects":{"slug":"frax"},"project_slug":"frax","project":{"slug":"frax","name":"Frax","logo_url":"https://icons.llamao.fi/icons/protocols/frax-finance?w=64&h=64","category":"stablecoins"}},{"id":"9018bf36-2208-4e98-aa68-9e369a3bc210","project_id":"7774ff75-82d8-4cfe-958e-707988a43847","title":"frxETH Yield Decomposer","pitch":"Shows whether sfrxETH or frxETH+Curve LP gives better risk-adjusted yield right now.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","frax-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:10.930084+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that compares yield strategies for Frax Ether holders. Users input their risk tolerance and see side-by-side APY, volatility, and Sharpe ratio for: (1) staking frxETH as sfrxETH, (2) providing frxETH+ETH liquidity on Curve, (3) leveraged LP positions via Aave. Pulls live data from Frax subgraph, Curve API, and Aave, then recalculates metrics hourly. Helps users decide which leg of the Frax ecosystem maximizes their returns without overleveraging.","learn_first":["ERC-4626 vault mechanics (sfrxETH is a vault)","Curve StableSwap AMM math and LP slippage","Sharpe ratio and risk-adjusted return calculation","Frax governance token (FXS) role in sfrxETH yield"],"tech_stack":{"data":["Frax API (frax-api)","Curve API","Aave lending pool contract calls via viem"],"infra":["Vercel","ethers.js or viem for contract reads"],"indexer":["Frax subgraph (The Graph)","Curve subgraph"],"frontend":["Next.js 14+","TailwindCSS","Recharts or Plotly for yield curves"],"contracts":["ERC-4626 (sfrxETH)","Curve StableSwap"]},"build_steps":["Set up Next.js project with TailwindCSS and Recharts; scaffold pages for dashboard and strategy comparison.","Query Frax subgraph for sfrxETH APY, total assets, and historical yield snapshots (last 30 days).","Fetch Curve pool data (frxETH/ETH pair) via Curve API or subgraph: current reserves, trading volume, fee tier.","Calculate LP yield: (fees earned / liquidity provided) annualized; estimate impermanent loss using historical price volatility.","Fetch Aave borrow rates and collateral factors; model leveraged LP yield (2x, 3x) with liquidation risk.","Compute Sharpe ratio for each strategy: (annualized return - risk-free rate) / volatility; use 30-day rolling volatility.","Build UI: input slider for risk tolerance, output table + chart showing APY, volatility, Sharpe ratio, and max drawdown.","Add hourly data refresh via Next.js API route; cache results in Redis or Vercel KV to avoid rate limits."],"gotchas":["sfrxETH yield is paid in FXS (not ETH); must convert FXS price to USD and factor into APY calculation or clearly label it as FXS-denominated.","Curve frxETH/ETH pool has low slippage but high concentration risk; LP returns are sensitive to pool depth and trading volume—use 7-day average volume, not spot.","Impermanent loss calculation assumes constant product AMM; Curve is StableSwap (different curve), so IL is lower but still non-zero—use Curve's own IL estimator or historical rebalance data.","Aave leverage positions can be liquidated; must track health factor in real-time and warn users if their modeled position would be underwater in a 20% ETH drop.","Frax subgraph may lag 1–2 blocks; always cross-check APY with on-chain sfrxETH.convertToAssets() call via viem to catch stale data."],"references":[{"url":"https://docs.frax.finance","kind":"docs","label":"Frax Finance Docs"},{"url":"https://etherscan.io/address/0xac3e0cD6f45b2ceA577e28b2886350d387e59B4b","kind":"tool","label":"sfrxETH (ERC-4626) Contract"},{"url":"https://curve.fi/#/ethereum/pools/frxeth","kind":"tool","label":"Curve frxETH/ETH Pool"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard (EIPs)"},{"url":"https://curve.fi/files/stableswap-paper.pdf","kind":"article","label":"Curve StableSwap Whitepaper"},{"url":"https://github.com/FraxFinance","kind":"repo","label":"Frax GitHub"}],"time_estimate_hours":16,"projects":{"slug":"frax"},"project_slug":"frax","project":{"slug":"frax","name":"Frax","logo_url":"https://icons.llamao.fi/icons/protocols/frax-finance?w=64&h=64","category":"stablecoins"}},{"id":"98a7220a-6bfd-4bd9-a3f6-b8030fb79431","project_id":"7774ff75-82d8-4cfe-958e-707988a43847","title":"Frax Universal Dashboard","pitch":"Single dashboard covering FRAX, sFRAX, frxETH, FXS staking, and Fraxlend — the sprawling Frax ecosystem in one place.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","frax-api","wagmi"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:05.728239+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a unified analytics dashboard that aggregates Frax protocol data across all major chains (Ethereum, Arbitrum, Base, Polygon, BSC). Display real-time balances, staking rewards, lending positions, and historical performance for users holding any Frax asset. Use on-chain data indexing and Frax's public APIs to surface wallet holdings, yield accrual, and cross-chain positions without requiring users to hop between Frax's scattered interfaces.","learn_first":["ERC-20 token standards","Frax protocol architecture (FRAX, sFRAX, frxETH, FXS)","Staking and yield mechanisms","Multi-chain data aggregation patterns"],"tech_stack":{"ai":[],"data":["Frax API","ethers.js or viem for RPC calls"],"infra":["Vercel"],"other":["TypeScript"],"wallet":["wagmi","viem","RainbowKit"],"indexer":["The Graph (Frax subgraphs)","Ponder"],"frontend":["Next.js","React","TailwindCSS","shadcn/ui"],"contracts":[]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for dashboard, wallet connect, and settings.","Integrate RainbowKit + wagmi for multi-chain wallet connection (Ethereum, Arbitrum, Base, Polygon, BSC).","Query Frax API endpoints to fetch user balances for FRAX, sFRAX, frxETH, and FXS across all chains; cache responses with SWR or React Query.","Build components to display: total USD value, staking APY, lending positions (Fraxlend), and historical yield accrual.","Integrate The Graph subgraph queries (or Ponder) to fetch historical transaction data and staking events for charts.","Add real-time balance updates using viem's watchAccount hook and periodic polling of user's wallet address.","Implement cross-chain aggregation logic: sum balances across all chains, normalize to USD using Chainlink price feeds or Frax's own oracle data.","Deploy to Vercel and test with testnet wallets on each chain; iterate on UX based on data load times."],"gotchas":["Frax API rate limits and inconsistent response times across chains — implement exponential backoff and cache aggressively.","sFRAX and frxETH have different yield mechanics (rebasing vs. appreciation); ensure UI clearly distinguishes between them.","Fraxlend positions require querying multiple contract states (collateral, debt, interest accrual); consider batch RPC calls to reduce latency.","Cross-chain balance aggregation can be stale if one chain's data lags; add timestamp indicators and refresh controls.","Gas costs for historical data queries on-chain can be high; rely on The Graph subgraphs or Ponder for historical lookups rather than direct RPC calls."],"references":[{"url":"https://docs.frax.finance","kind":"docs","label":"Frax Finance Docs"},{"url":"https://github.com/FraxFinance","kind":"repo","label":"Frax GitHub"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://thegraph.com/docs","kind":"docs","label":"The Graph Docs"},{"url":"https://frax.finance","kind":"tool","label":"Frax Protocol Overview"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer"}],"time_estimate_hours":80,"projects":{"slug":"frax"},"project_slug":"frax","project":{"slug":"frax","name":"Frax","logo_url":"https://icons.llamao.fi/icons/protocols/frax-finance?w=64&h=64","category":"stablecoins"}},{"id":"4d2ec21e-dcd0-4c70-96bb-0b086a4edd76","project_id":"15c9fd5d-acc7-4286-ad0f-4041ec899133","title":"USDe Composability Map","pitch":"All venues where you can lend/LP/loop USDe with current rates and TVL caps, in one screen.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","defillama-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:02.852948+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard aggregating real-time yield opportunities across USDe venues—lending protocols (Aave, Compound), DEX LPs (Curve, Uniswap), and looping strategies (Lido staking + USDe minting). Display APY, TVL, slippage, and risk factors for each venue. Users can compare strategies side-by-side and simulate returns. Built for yield farmers deciding where to deploy capital efficiently.","learn_first":["USDe mechanism (delta-neutral staking + perp shorts)","Aave/Compound lending pool architecture","Curve/Uniswap LP fee structures","TVL and APY calculation from on-chain data"],"tech_stack":{"data":["DefiLlama API (TVL, pool data)","Etherscan API or Alchemy (real-time rates)","Aave/Compound subgraphs via The Graph"],"infra":["Vercel or Netlify for hosting"],"other":["viem for optional on-chain reads (contract ABIs for Aave lending pools)"],"frontend":["Next.js 14+","TailwindCSS","Recharts or Chart.js for APY trends"]},"build_steps":["Set up Next.js project with TailwindCSS and create a layout with header + sidebar navigation","Define TypeScript interfaces for Venue (name, protocol, apy, tvl, asset, url) and Strategy (venues, combined_apy, risk_level)","Fetch DefiLlama API for USDe pools: filter by USDe asset, extract TVL and pool fee data","Integrate Aave/Compound subgraph queries (via The Graph) to pull live lending rates for USDe deposits","Create a data aggregation layer that normalizes APY across venues (account for fees, slippage, compounding)","Build a React table component displaying venues with sortable columns: APY, TVL, slippage, risk, link to venue","Add a simple calculator: user inputs USDe amount, shows projected returns across top 3 venues over 30/90/365 days","Deploy to Vercel, set up environment variables for API keys, test with real data"],"gotchas":["APY is not static—Aave/Compound rates update every block; cache data for 5–10 min to avoid rate limits and stale UI","USDe liquidity varies by chain and venue; some pools may have low TVL or high slippage; always show slippage warnings","Curve pools can have imbalance fees; don't just use base APY—factor in IL and fee structure for accurate comparisons","Looping strategies (deposit USDe, borrow stETH, mint more USDe) have liquidation risk; clearly separate them from simple lending","DefiLlama API may lag 5–15 min behind on-chain reality; consider adding a 'last updated' timestamp"],"references":[{"url":"https://defillama.com/api","kind":"docs","label":"DefiLlama API Docs"},{"url":"https://docs.ethena.fi","kind":"docs","label":"Ethena USDe Docs"},{"url":"https://docs.aave.com/developers/v/2.0/the-graph","kind":"docs","label":"Aave Protocol Data Provider"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Subgraph Docs"},{"url":"https://curve.fi","kind":"tool","label":"Curve Finance Pool Data"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"}],"time_estimate_hours":12,"projects":{"slug":"ethena"},"project_slug":"ethena","project":{"slug":"ethena","name":"Ethena","logo_url":"https://icons.llamao.fi/icons/protocols/ethena-usde?w=64&h=64","category":"stablecoins"}},{"id":"df8d63fd-bca6-436f-b3c4-a92beba3eaba","project_id":"15c9fd5d-acc7-4286-ad0f-4041ec899133","title":"Funding Rate Risk Alerter","pitch":"Pings when perpetual funding rates flip negative across exchanges, signaling potential USDe yield drop.","difficulty":"weekend","use_case":"trading","build_with":["node","telegram-bot-api","axios"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:18:01.728271+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"USDe's yield comes from a delta-neutral strategy: long staked ETH + short perps. When funding rates turn negative, shorts become unprofitable, threatening the yield that makes USDe attractive. This bot monitors funding rates across major perp venues (Hyperliquid, dYdX, Bybit) and alerts via Telegram when rates drop below a configurable threshold or flip negative, giving USDe holders and yield farmers early warning to rebalance or exit positions.","learn_first":["How perpetual funding rates work and why they matter to delta-neutral strategies","Ethena's USDe mechanism: staking ETH, shorting perps, minting USDe","REST APIs for Hyperliquid, dYdX v4, and Bybit perpetuals","Basic Node.js async patterns and error handling"],"tech_stack":{"data":["Hyperliquid API","dYdX v4 API","Bybit Perpetuals API","axios"],"infra":["Node.js","Telegram Bot API"],"other":["dotenv for config management"]},"build_steps":["Set up a Node.js project with axios, dotenv, and node-telegram-bot-api npm packages","Create a config file with exchange API endpoints, Telegram bot token, and alert thresholds (e.g., -0.01% funding rate)","Write a function to fetch current funding rates from Hyperliquid's REST endpoint (/v1/perpetuals/funding_rates or equivalent) for ETH perps","Write similar fetchers for dYdX v4 (query via LCD or indexer) and Bybit (GET /v5/market/funding/history)","Implement a comparison function that checks if any rate is below your threshold or has flipped negative since the last check","Set up a Telegram bot that sends formatted alerts with exchange name, current rate, 1h/8h history, and a timestamp","Add a simple in-memory or file-based store to track the last known rates and avoid duplicate alerts","Deploy the bot to a cheap VPS (Heroku free tier deprecated, use Railway or Fly.io) and set it to poll every 5–10 minutes"],"gotchas":["Funding rates update at different intervals per exchange (Hyperliquid every block ~12s, dYdX every epoch, Bybit hourly); you may see stale data—always check the timestamp in the API response","Some exchanges require authentication for certain endpoints; read their docs carefully and use API keys if needed, storing them in .env","Negative funding rates are rare and can swing quickly; a naive alert on every flip will spam users—implement a cooldown or threshold duration (e.g., alert only if negative for >2 consecutive checks)","Telegram Bot API has rate limits (~30 messages/second per chat); batch alerts or add small delays if you're monitoring many pairs or exchanges","Exchange APIs can go down or lag; wrap all fetch calls in try-catch and implement exponential backoff to avoid hammering endpoints"],"references":[{"url":"https://docs.ethena.fi","kind":"docs","label":"Ethena Docs: USDe Mechanism"},{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/api","kind":"docs","label":"Hyperliquid API Reference"},{"url":"https://dydx-v4-api.allthatnode.com/swagger/","kind":"docs","label":"dYdX v4 Perpetuals API"},{"url":"https://bybit-exchange.github.io/docs/v5/intro","kind":"docs","label":"Bybit Perpetuals API"},{"url":"https://www.npmjs.com/package/node-telegram-bot-api","kind":"tool","label":"node-telegram-bot-api NPM"},{"url":"https://www.investopedia.com/terms/f/funding-rate.asp","kind":"article","label":"Funding Rate Mechanics Explainer"}],"time_estimate_hours":6,"projects":{"slug":"ethena"},"project_slug":"ethena","project":{"slug":"ethena","name":"Ethena","logo_url":"https://icons.llamao.fi/icons/protocols/ethena-usde?w=64&h=64","category":"stablecoins"}},{"id":"0f39ef44-3e85-448e-b3d6-a87817d9d22e","project_id":"15c9fd5d-acc7-4286-ad0f-4041ec899133","title":"sUSDe Yield Calendar","pitch":"Calendar of sUSDe yield history with annotations for major funding-rate regime changes.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","ethena-api","recharts","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:58.195965+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that visualizes sUSDe (staked USDe) yield accrual over time, displayed as an interactive calendar. Each day shows the yield earned, with annotations highlighting when funding rates shifted significantly—helping users understand how market regimes affect their returns. Data is fetched from Ethena's API and historical on-chain events, then rendered with a heatmap-style calendar and a timeline of regime changes.","learn_first":["How sUSDe accrues yield (funding rates + staking rewards)","Ethena API endpoints for historical yield and funding rates","React hooks for date-based state management","Recharts calendar/heatmap patterns"],"tech_stack":{"data":["ethena-api","viem"],"infra":["vercel"],"frontend":["nextjs","recharts","tailwindcss"]},"build_steps":["Set up Next.js 15 project with TypeScript and Tailwind; scaffold pages/index.tsx and components/YieldCalendar.tsx","Create a hook useYieldHistory() that fetches sUSDe daily yield from Ethena API (docs.ethena.fi) for a date range, storing as {date, yield, fundingRate}","Fetch funding-rate regime changes from Ethena API or parse historical snapshots; identify dates where funding rate crossed key thresholds (e.g., >0.01% daily)","Build a Recharts ResponsiveContainer with a custom calendar heatmap: 7 columns (days of week), rows for weeks, cell color intensity mapped to yield amount","Add a timeline component below the calendar showing regime-change events (e.g., 'Funding rate spike to 0.05%') with dates and brief annotations","Implement date-range picker (e.g., react-day-picker) to allow users to zoom into months or quarters","Deploy to Vercel; add env var for Ethena API key if needed; test with 3–6 months of historical data","Polish: add tooltips on hover, export CSV of yield data, and a summary stat card (total yield, avg daily, max day)"],"gotchas":["Ethena API rate limits: cache responses or use ISR (incremental static regeneration) in Next.js to avoid hammering the endpoint","Funding-rate regime detection is subjective—define clear thresholds upfront (e.g., >0.01% = 'high', <0.005% = 'low') or the annotations will be noise","sUSDe yield is not linear; it compounds and can vary hour-to-hour. Decide whether to show daily snapshots or intraday granularity early","Timezone handling: ensure all dates are normalized to UTC to avoid off-by-one errors when crossing day boundaries"],"references":[{"url":"https://docs.ethena.fi","kind":"docs","label":"Ethena Docs"},{"url":"https://docs.ethena.fi/api","kind":"docs","label":"Ethena API Reference"},{"url":"https://recharts.org/examples/SimpleBarChart","kind":"tool","label":"Recharts Calendar Example"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching","kind":"docs","label":"Next.js Data Fetching"},{"url":"https://etherscan.io/token/0x9D39A5DE30e57443BfF2A8307A4256c8797A3497","kind":"tool","label":"sUSDe Contract (Etherscan)"}],"time_estimate_hours":12,"projects":{"slug":"ethena"},"project_slug":"ethena","project":{"slug":"ethena","name":"Ethena","logo_url":"https://icons.llamao.fi/icons/protocols/ethena-usde?w=64&h=64","category":"stablecoins"}},{"id":"2be6aa92-3576-4da0-9bfe-ec763f2de882","project_id":"15c9fd5d-acc7-4286-ad0f-4041ec899133","title":"USDe Backing Auditor","pitch":"Real-time view of Ethena's hedge composition across exchanges. Independently verifies the delta-neutral claim.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","ethena-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:54.913344+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that independently audits Ethena's USDe backing by pulling staked ETH balances from Lido/Eigenlayer and short perpetual positions from Dydx, Bybit, Binance, and other exchanges. The tool continuously monitors whether the delta-neutral hedge is maintained—alerting when the ratio drifts. This catches operational risk, exchange outages, or liquidation pressure that could threaten USDe's peg. Solo builders can start with Ethena's public API and exchange REST endpoints; teams can add on-chain verification via Ponder indexer and real-time WebSocket feeds.","learn_first":["delta-neutral hedging mechanics","perpetual futures funding rates","staking derivatives (stETH, weETH)","Ethena's collateral model"],"tech_stack":{"ai":[],"data":["Ethena API","Dydx API","Bybit API","Binance API"],"infra":["Vercel","node.js"],"other":["viem","ethers.js"],"wallet":[],"indexer":["Ponder"],"frontend":["Next.js","TailwindCSS","Recharts"],"contracts":[]},"build_steps":["Set up Next.js app with TailwindCSS; scaffold pages for collateral view, hedge positions, and delta ratio dashboard","Integrate Ethena API client to fetch USDe supply, staked ETH collateral, and current hedge details; store in React state or lightweight cache","Fetch staked ETH balances from Lido and Eigenlayer using viem and public RPC; cross-check against Ethena's reported collateral","Add Dydx API integration to pull Ethena's short perp positions (ETH-USD, BTC-USD); parse open interest and notional value","Implement Bybit and Binance REST endpoints to fetch Ethena's short positions on those exchanges; aggregate across venues","Calculate delta ratio: (staked ETH value in USD) / (short perps notional); flag when drift exceeds threshold (e.g., >2%)","Add real-time WebSocket listeners for Dydx and Bybit to update positions every 1–5 seconds; display live delta and liquidation distance","Deploy to Vercel; add simple alerts (email or Discord webhook) when delta ratio breaches threshold or exchange connection drops"],"gotchas":["Ethena's positions may be spread across multiple sub-accounts or wallets per exchange; you'll need to identify all of them (check Ethena's disclosures or ask their team)","Perpetual funding rates and mark prices vary by exchange; a position that looks hedged on Dydx may not be on Bybit due to price divergence—aggregate with care","Staked ETH (stETH, weETH) has slippage and redemption delays; use time-weighted average prices, not spot price, for accuracy","Rate limits on exchange APIs are tight; cache responses for 5–10 seconds and use WebSocket for real-time updates to avoid throttling","Liquidation risk is non-linear near the edge; monitor not just delta ratio but also collateral utilization and funding costs on each exchange"],"references":[{"url":"https://docs.ethena.fi/learn/usde","kind":"docs","label":"Ethena Docs: USDe Mechanism"},{"url":"https://docs.ethena.fi/api","kind":"docs","label":"Ethena API Reference"},{"url":"https://dydx.exchange/api","kind":"docs","label":"Dydx v4 API"},{"url":"https://bybit-exchange.github.io/docs/v5/intro","kind":"docs","label":"Bybit Perpetuals API"},{"url":"https://docs.lido.fi/guides/lido-tokens-integration-guide","kind":"docs","label":"Lido stETH Balance Queries"},{"url":"https://viem.sh","kind":"docs","label":"viem: Ethereum TypeScript Client"}],"time_estimate_hours":80,"projects":{"slug":"ethena"},"project_slug":"ethena","project":{"slug":"ethena","name":"Ethena","logo_url":"https://icons.llamao.fi/icons/protocols/ethena-usde?w=64&h=64","category":"stablecoins"}},{"id":"20fa772c-05b0-42de-bd34-51bb6e6beb5f","project_id":"926e55bc-b431-42a3-af2c-d94e9be7417f","title":"Pre-Launch Token Perps Tracker","pitch":"Watches Aevo pre-launch perps, tracks implied launch price vs eventual TGE outcome.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","aevo-api","ethers"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:52.056734+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that monitors pre-launch token perpetual futures on Aevo, extracts implied prices from open interest and funding rates, and compares them against actual token launch prices post-TGE. Useful for traders, token teams, and researchers to understand market expectations vs reality. The tracker polls Aevo's REST API for active pre-launch perps, calculates mark prices from order book depth, stores historical snapshots in a database, and surfaces price divergence alerts and comparative charts.","learn_first":["How perpetual futures mark prices are derived from funding rates and open interest","Aevo API endpoints for markets, candles, and order book data","Basic time-series data aggregation and storage patterns"],"tech_stack":{"data":["PostgreSQL or Supabase","node-cron for polling"],"infra":["Vercel or Railway"],"frontend":["Next.js","TailwindCSS","Recharts or Chart.js"]},"build_steps":["Set up a Next.js project with TypeScript and install axios, dotenv, and a charting library (Recharts)","Create a Supabase or PostgreSQL schema with tables for markets, snapshots (timestamp, market_id, mark_price, funding_rate, open_interest), and alerts","Write a Node.js service that polls Aevo REST API /markets endpoint every 5 minutes to fetch pre-launch perp markets (filter by market_type='perpetual' and status='pre_launch')","Extract mark price from each market's last_price or calculate it from funding_rate + index_price using the formula: mark_price = index_price * (1 + funding_rate)","Store each snapshot in the database with timestamp; implement a cleanup job to prune data older than 90 days","Build a Next.js API route /api/markets that queries the database and returns current + historical data for the frontend","Create a dashboard page with a table of live pre-launch perps (market name, current mark price, 24h change, funding rate) and a detail view showing price history chart + TGE actual price once available","Add a simple alert system: if mark_price diverges >10% from a user-watched market's previous 7-day average, send a console log or webhook notification"],"gotchas":["Aevo's pre-launch markets may have sparse liquidity and wide spreads; mark price can be stale if no recent trades—always cross-check with index_price from an oracle feed if available","Funding rates on Aevo are typically 8-hour intervals; don't assume real-time funding updates; poll at least every 5–10 minutes to catch changes","TGE actual price discovery is manual: you'll need to either hardcode known TGE prices post-launch or integrate a price feed (CoinGecko API) keyed by token symbol","Rate limits on Aevo REST API are generous but not unlimited; implement exponential backoff and cache responses for 1–2 minutes to avoid throttling","Pre-launch markets can be delisted or renamed; add error handling for 404s and gracefully skip missing markets in your polling loop"],"references":[{"url":"https://docs.aevo.xyz","kind":"docs","label":"Aevo API Documentation"},{"url":"https://docs.aevo.xyz/api-documentation/rest-api/markets","kind":"docs","label":"Aevo Markets & Perps Overview"},{"url":"https://www.binance.com/en/support/faq/360033524991","kind":"article","label":"Perpetual Futures Funding Rate Mechanics"},{"url":"https://vercel.com/docs/cron-jobs","kind":"docs","label":"Next.js Data Fetching & Cron Jobs"},{"url":"https://supabase.com/docs/guides/database","kind":"docs","label":"Supabase PostgreSQL Setup"},{"url":"https://recharts.org/en-US/examples/LineChartWithReferenceLines","kind":"tool","label":"Recharts Time Series Example"}],"time_estimate_hours":8,"projects":{"slug":"aevo"},"project_slug":"aevo","project":{"slug":"aevo","name":"Aevo","logo_url":"https://icons.llamao.fi/icons/protocols/aevo?w=64&h=64","category":"perps"}},{"id":"5eaf8baf-a8ec-44b1-a2e8-0483e56142bd","project_id":"926e55bc-b431-42a3-af2c-d94e9be7417f","title":"Implied Vol Surface Viewer","pitch":"Real-time 3D IV surface across all Aevo expirations. The kind of tool pro options traders pay for.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","three.js","aevo-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:50.447899+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an interactive 3D visualization of the implied volatility surface for options on Aevo. Display IV across strikes and expirations in real-time, with the ability to filter by underlying asset, zoom into specific regions, and overlay Greeks (delta, gamma, vega). This is a professional-grade analytics tool that helps traders spot mispricing, understand volatility skew, and make informed hedging decisions. The backend pulls live option data from Aevo's API, computes IV via Black-Scholes inversion, and streams updates. The frontend renders the surface using Three.js with interactive controls and a sidebar showing Greeks and market data.","learn_first":["Black-Scholes model and IV calculation","3D graphics fundamentals with Three.js","Options Greeks (delta, gamma, vega, theta)","Aevo API structure and WebSocket subscriptions"],"tech_stack":{"data":["Aevo REST API (for historical data)","Aevo WebSocket API (for live updates)","Decimal.js or ethers.js BigNumber (for precision)"],"infra":["Vercel or Netlify for hosting","Redis (optional, for caching IV surfaces)"],"other":["Black-Scholes-Merton library (e.g., mibian or custom implementation)"],"frontend":["Next.js 14+","Three.js","React Three Fiber (optional, for easier Three.js integration)","TailwindCSS","Zustand or Jotai for state"]},"build_steps":["Set up Next.js project with TypeScript, TailwindCSS, and Three.js dependencies (three, @react-three/fiber, @react-three/drei).","Create a data fetching layer: write functions to call Aevo REST API for all active options on a given underlying (e.g., ETH), extracting strike, expiration, bid/ask, and mark prices.","Implement IV calculation: use Black-Scholes inversion to compute implied volatility from option prices. Handle edge cases (deep OTM, ITM, near-expiration). Consider using a library like mibian or writing a fast numerical solver.","Build the 3D surface mesh: normalize strikes and expirations to a grid, compute IV at each point, and create a Three.js BufferGeometry with vertices and faces. Use a color gradient (e.g., blue=low IV, red=high IV).","Set up WebSocket subscription to Aevo for live price updates. On each update, recalculate affected IV points and smoothly animate the surface mesh.","Create UI controls: dropdown to select underlying, date range slider for expirations, strike range slider, and toggle for Greeks overlay. Use React state to drive mesh updates.","Add Greeks computation: for each point on the surface, calculate delta, gamma, vega, theta using Black-Scholes formulas. Display as a heatmap overlay or sidebar table.","Deploy to Vercel, set up environment variables for Aevo API key, and test with live market data."],"gotchas":["IV calculation near expiration or deep OTM becomes numerically unstable; implement bounds checking and fallback to mid-price if IV solver fails to converge.","Aevo's WebSocket can drop; implement reconnection logic with exponential backoff and a fallback to polling.","Three.js rendering large meshes (1000+ vertices) can stutter; use BufferGeometry, avoid creating new geometries on every update, and consider LOD (level of detail) for zoomed-out views.","Black-Scholes assumes European options; Aevo may have American-style or exotic options, so IV from BS will be approximate—document this assumption.","Real-time IV surfaces require fast computation; pre-compute grids off-chain or cache results to avoid lag when users pan/zoom."],"references":[{"url":"https://docs.aevo.xyz","kind":"docs","label":"Aevo API Documentation"},{"url":"https://en.wikipedia.org/wiki/Black%E2%80%93Scholes_model","kind":"article","label":"Black-Scholes Model (Wikipedia)"},{"url":"https://threejs.org/docs/","kind":"docs","label":"Three.js Documentation"},{"url":"https://docs.pmnd.rs/react-three-fiber/","kind":"docs","label":"React Three Fiber"},{"url":"https://github.com/vollib/mibian","kind":"repo","label":"mibian: Python Options Pricing"},{"url":"https://github.com/ribbon-finance","kind":"repo","label":"Aevo GitHub"}],"time_estimate_hours":80,"projects":{"slug":"aevo"},"project_slug":"aevo","project":{"slug":"aevo","name":"Aevo","logo_url":"https://icons.llamao.fi/icons/protocols/aevo?w=64&h=64","category":"perps"}},{"id":"e2e104db-5abb-406c-a6be-c66b9ca38a08","project_id":"926e55bc-b431-42a3-af2c-d94e9be7417f","title":"Funding + Premium Capture Bot","pitch":"Sells weekly cash-secured puts on Aevo while holding the underlying. Backtested + paper-trade mode.","difficulty":"1-2 weeks","use_case":"yield","build_with":["python","aevo-api","pandas","backtrader"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:47.325463+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Python bot that systematically sells cash-secured puts on Aevo's perp platform, capturing funding rates and option premiums. The bot monitors funding rates and implied volatility, executes put sales when conditions are favorable, holds the underlying asset to hedge, and backtests strategies against historical data. Includes paper-trading mode to validate logic before live execution. Target: yield farmers comfortable with collateral lock-up and tail risk.","learn_first":["How Aevo's off-chain matching + on-chain settlement works","Cash-secured puts mechanics and collateral requirements","Funding rate dynamics on perpetual platforms","Greeks (delta, theta, vega) for options pricing"],"tech_stack":{"ai":[],"data":["Aevo REST API","pandas for backtesting data","numpy for calculations"],"infra":["Python 3.10+","APScheduler for recurring tasks"],"other":["backtrader or VectorBT for backtesting","requests library for HTTP calls"],"wallet":[],"indexer":[],"frontend":[],"contracts":[]},"build_steps":["Set up Aevo API credentials and test connectivity with a simple balance query","Build a data fetcher that pulls hourly funding rates, mark prices, and IV from Aevo's public endpoints","Implement a cash-secured put strategy: define strike selection (e.g., 5% OTM), position sizing (e.g., 10% of collateral per trade), and entry/exit rules","Create a backtester using backtrader or VectorBT that replays historical funding + IV data and simulates put sales with realistic slippage and fees","Add paper-trading mode that logs intended trades to a CSV without executing, allowing validation of signals for 1–2 weeks","Implement live execution logic: authenticate with Aevo, place orders via API, track open positions, and log all trades with timestamps","Build a monitoring dashboard (simple Flask app or Streamlit) showing P&L, collateral utilization, Greeks, and current funding rates","Deploy on a small VPS or local machine with error handling, reconnection logic, and daily reports via email or Discord webhook"],"gotchas":["Aevo's funding rates are paid 8 times per day; ensure your bot reconciles funding payments correctly and doesn't double-count or miss them.","Cash-secured puts lock up collateral for the full notional amount; if you're undercapitalized, liquidation risk is real—always stress-test your position sizing.","IV on Aevo can be thin or stale; validate that the IV you're using for Greeks calculations matches the actual bid-ask spread before placing large orders.","Off-chain matching means orders may not fill instantly; implement a timeout and cancellation logic to avoid orphaned orders or accidental double-fills.","Slippage and fees (taker/maker) compound quickly; backtest with realistic fee assumptions (check Aevo's current fee schedule) or your live results will disappoint."],"references":[{"url":"https://docs.aevo.xyz","kind":"docs","label":"Aevo API Documentation"},{"url":"https://github.com/ribbon-finance","kind":"repo","label":"Aevo GitHub (Ribbon Finance)"},{"url":"https://www.investopedia.com/terms/c/cash-secured-put.asp","kind":"article","label":"Cash-Secured Puts Strategy Guide"},{"url":"https://www.backtrader.com/","kind":"docs","label":"backtrader Documentation"},{"url":"https://www.deribit.com/pages/docs/perpetuals","kind":"docs","label":"Funding Rate Mechanics (Deribit)"},{"url":"https://www.investopedia.com/terms/g/greeks.asp","kind":"article","label":"Greeks in Options Trading"}],"time_estimate_hours":80,"projects":{"slug":"aevo"},"project_slug":"aevo","project":{"slug":"aevo","name":"Aevo","logo_url":"https://icons.llamao.fi/icons/protocols/aevo?w=64&h=64","category":"perps"}},{"id":"8db0bb59-900a-4872-9061-8de00d65f4dd","project_id":"926e55bc-b431-42a3-af2c-d94e9be7417f","title":"Options Strategy Builder","pitch":"Visual P&L payoff editor for Aevo options strategies (spreads, condors, butterflies). Click 'execute' to deploy in one tx.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","aevo-sdk","d3","wagmi","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:43.275001+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that lets traders design multi-leg options strategies visually by dragging strike prices and quantities on a payoff diagram, then executes the entire strategy on Aevo in a single transaction. Users see real-time P&L curves as they adjust legs, and the app computes the optimal order routing to minimize slippage across Aevo's off-chain matching engine. Target: retail and semi-pro traders who want to avoid manual order entry for complex spreads.","learn_first":["Options Greeks (delta, gamma, theta, vega)","Payoff diagrams and intrinsic vs extrinsic value","Aevo API: order placement, quote fetching, settlement flow","ERC-20 approvals and permit signatures for collateral"],"tech_stack":{"data":["Aevo REST API (quotes, order book, historical prices)","Aevo WebSocket for live mark prices and Greeks"],"other":["Decimal.js or ethers.js BigNumber for precision math","TypeScript for type safety on complex strategy objects"],"wallet":["wagmi v2+","viem v2+","RainbowKit or Privy for wallet connection"],"frontend":["Next.js 14+ (React 19)","D3.js v7+ for payoff curve rendering","TailwindCSS for UI","recharts or plotly.js as D3 alternative"]},"build_steps":["Set up Next.js 14 scaffold with TypeScript, TailwindCSS, and wagmi hooks for wallet connection (Privy or RainbowKit).","Fetch live spot and option prices from Aevo REST API; store in React state or Zustand. Display current BTC/ETH mark price and implied volatility.","Build a D3 payoff diagram component: x-axis = underlying price, y-axis = P&L. Render initial long call or long put as a baseline curve.","Add interactive strike/quantity controls: sliders or input fields for each leg (call/put, strike, size). Update payoff curve in real-time using Black-Scholes Greeks.","Implement multi-leg strategy builder: allow users to add/remove legs (spreads, condors, butterflies). Compute net payoff by summing individual leg P&Ls across price range.","Integrate Aevo SDK to fetch live quotes for each leg; compute total premium/credit and margin requirement. Show execution cost breakdown.","Build order submission flow: construct Aevo order objects for each leg, sign with wagmi, submit via aevo-sdk. Handle partial fills and order rejection.","Add post-execution dashboard: show filled orders, current P&L, Greeks for open position, and ability to close or adjust legs."],"gotchas":["Aevo's off-chain matching means orders may not fill immediately; implement polling or WebSocket listener to track order status and alert user to partial fills or rejections.","Options Greeks (especially gamma and vega) are non-linear; recalculate payoff curve on every slider change to avoid stale P&L estimates that mislead traders.","Collateral requirements on Aevo scale with notional exposure; ensure you fetch current margin usage before submission and warn if user is near liquidation.","ERC-20 permit signatures for collateral approval may have different expiry windows; handle permit failures gracefully and fall back to standard approve() if needed.","Strike prices and expirations are discrete; validate user selections against Aevo's available instruments to avoid \"no quotes\" errors at execution time."],"references":[{"url":"https://docs.aevo.xyz","kind":"docs","label":"Aevo API Documentation"},{"url":"https://github.com/aevo-xyz/aevo-sdk","kind":"repo","label":"Aevo SDK (GitHub)"},{"url":"https://d3js.org","kind":"docs","label":"D3.js Documentation"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Hooks Reference"},{"url":"https://en.wikipedia.org/wiki/Greeks_(finance)","kind":"article","label":"Black-Scholes Greeks Primer"},{"url":"https://eips.ethereum.org/EIPS/eip-2612","kind":"docs","label":"ERC-20 Permit Standard (EIP-2612)"}],"time_estimate_hours":80,"projects":{"slug":"aevo"},"project_slug":"aevo","project":{"slug":"aevo","name":"Aevo","logo_url":"https://icons.llamao.fi/icons/protocols/aevo?w=64&h=64","category":"perps"}},{"id":"035b6e04-2922-4cb6-a72b-0f7e7f6cea36","project_id":"2d2b4289-3176-4922-936e-6db688f86b9b","title":"Solana Funding Arb Bot","pitch":"Headless bot that captures funding-rate arbitrage between Drift and Jupiter perps automatically.","difficulty":"1-2 weeks","use_case":"trading","build_with":["typescript","drift-sdk","jupiter-perps-sdk","anchor-client"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:40.399204+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A market-neutral trading bot that monitors funding rates across Drift Protocol (vAMM + DLOB hybrid) and Jupiter Perps, then automatically opens offsetting long/short positions when spreads exceed your profitability threshold. The bot runs headless on a Solana RPC, manages position sizing via wallet keypair, and settles profits by closing positions when funding converges. This is a real revenue stream for builders with capital to deploy—funding arb is one of the few pure alpha strategies that scales with market volatility rather than requiring directional edge.","learn_first":["Solana program architecture and Anchor IDL parsing","Funding rates: perpetual mechanics, mark vs index price, settlement mechanics","vAMM vs DLOB liquidity models and how Drift's hybrid works","Jupiter Perps AMM design and oracle integration","Position lifecycle: open, modify, close, and liquidation risk"],"tech_stack":{"ai":[],"data":["Drift SDK (real-time state, oracle prices, funding rates)","Jupiter Perps SDK (state, funding rates, mark prices)","Solana RPC (transaction submission, account state polling)"],"infra":["Node.js runtime (local or VPS)","Dotenv for secrets management"],"other":["BN.js for fixed-point arithmetic","Decimal.js for funding rate calculations"],"wallet":["Solana Keypair (hot wallet for bot operations)","@solana/web3.js for transaction signing"],"indexer":[],"frontend":[],"contracts":["Drift vAMM + DLOB contracts (read-only via IDL)","Jupiter Perps AMM (read-only)"]},"build_steps":["Set up a Node.js project with drift-sdk, jupiter-perps-sdk, @solana/web3.js, and dotenv. Create a .env file with your RPC endpoint and bot wallet keypair (never commit this).","Write a PriceOracle class that fetches current mark prices, index prices, and funding rates from both Drift (via getDriftClient().getStateAccount()) and Jupiter Perps (via Jupiter's state account). Cache these for 2–5 seconds to avoid RPC spam.","Implement a FundingRateMonitor that polls both protocols every 5–10 seconds, calculates the funding spread (Drift long funding - Jupiter long funding), and logs it. Add a config threshold (e.g., 0.05% per 8h) above which you'll consider opening a position.","Build a PositionManager class that can (a) estimate margin requirements for a given notional size on both protocols using their respective collateral calculations, (b) open a long on one protocol and short on the other via drift-sdk's openPosition() and Jupiter's equivalent, (c) track PnL in real time by polling account state.","Write a RiskController that enforces max position size, max leverage, and liquidation-price guardrails. Before opening any position, ensure your account health stays >50% on both protocols. Add a circuit breaker that closes all positions if health drops below 30%.","Implement the core arbitrage loop: when funding spread exceeds threshold, calculate the max notional size that keeps you safe, open positions atomically (or as close as possible), and log entry prices and funding rates. Store position IDs and entry state to a local JSON file or SQLite for recovery.","Add a position-closing logic: monitor funding convergence and close both legs when the spread narrows to near-zero or your target profit (e.g., 0.02% per 8h) is hit. Use drift-sdk's closePosition() and Jupiter's close methods.","Deploy the bot to a VPS or local machine, set it to run in a screen/tmux session, and monitor logs. Add Slack/Discord webhooks to alert on entries, exits, and risk events (liquidation warnings, RPC failures)."],"gotchas":["Drift's vAMM and DLOB can have different pricing for the same market at the same instant; your bot must fetch both and use the worse (higher) price for longs, better (lower) for shorts to avoid slippage surprises. Test on devnet first.","Funding rates on both protocols are typically settled every 8 hours (Drift) or 1 hour (Jupiter); if you open a position mid-cycle, you'll only capture partial funding. Align your bot's entry logic to settlement times if possible.","Solana network congestion can cause your two position-opening transactions to land at different times or not at all, leaving you unhedged. Use a timeout + fallback: if the second leg doesn't land within 30 seconds, cancel the first leg and retry.","Jupiter Perps and Drift use different oracle sources (Pyth, Switchboard, etc.); basis risk means their mark prices can diverge by 0.1–0.5% during volatile periods. Your spread threshold must account for this slippage buffer.","Liquidation cascades: if your long position on Drift gets liquidated but your short on Jupiter doesn't, you're left with naked short exposure. Monitor both accounts' health scores independently and close the entire arb if either approaches liquidation."],"references":[{"url":"https://docs.drift.trade","kind":"docs","label":"Drift Protocol Docs"},{"url":"https://github.com/drift-labs/protocol-v2","kind":"repo","label":"Drift SDK on GitHub"},{"url":"https://docs.jupiterprotocol.com/docs/perps/overview","kind":"docs","label":"Jupiter Perps Documentation"},{"url":"https://solana-labs.github.io/solana-web3.js/","kind":"docs","label":"Solana Web3.js Documentation"},{"url":"https://www.anchor-lang.com/docs/idl","kind":"docs","label":"Anchor IDL & Program Introspection"},{"url":"https://www.investopedia.com/terms/f/funding-rate.asp","kind":"article","label":"Funding Rate Mechanics Primer"}],"time_estimate_hours":80,"projects":{"slug":"drift"},"project_slug":"drift","project":{"slug":"drift","name":"Drift","logo_url":"https://icons.llamao.fi/icons/protocols/drift-trade?w=64&h=64","category":"perps"}},{"id":"3896f13c-7ab4-4d95-a307-16b75533a3a5","project_id":"2d2b4289-3176-4922-936e-6db688f86b9b","title":"Prediction Market Builder","pitch":"Use Drift's BET feature to bootstrap user-generated prediction markets (sports, politics, crypto).","difficulty":"1+ month","use_case":"social","build_with":["anchor","drift-sdk","nextjs","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:38.41564+00:00","metadata":{},"source":"curated","why_now":"Drift's BET feature is live on mainnet; social prediction markets are proven on Ethereum (Polymarket, Manifold) and ready for Solana's lower fees and faster settlement.","source_signal_ids":[],"published_at":null,"summary":"Build a social prediction market platform on Solana where users create binary outcome bets (e.g., \"BTC > $100k by Dec 2026\"), discover markets via a feed, place bets through Drift's BET mechanism, and settle outcomes via oracle data or community consensus. The platform combines Drift's vAMM liquidity for efficient pricing with a social layer for market discovery and engagement. Users earn yield on locked capital while market creators earn fees. This is a real product surface—not just a wrapper—with user onboarding, bet discovery, portfolio tracking, and settlement UX.","learn_first":["Drift's BET mechanism and vAMM pricing model","Solana Program Library (SPL) token standards","Oracle integration patterns (Switchboard or Pyth)","Settlement and dispute resolution patterns","Social feed and discovery algorithms"],"tech_stack":{"data":["Switchboard or Pyth for price oracles","Drift's on-chain vAMM data"],"infra":["Vercel for hosting","Helius or Quicknode RPC"],"other":["Drift SDK for BET interactions"],"wallet":["Privy or RainbowKit for Solana","@solana/web3.js"],"indexer":["Ponder (real-time indexing of Drift BET events)"],"frontend":["Next.js 14+","wagmi/viem for Solana","TailwindCSS","Zustand for state"],"contracts":["Anchor (Rust)","Drift BET program integration"]},"build_steps":["Set up Anchor project scaffold and integrate Drift SDK; create a local Solana validator environment with Drift's test programs deployed.","Design and implement the core Anchor contract: a PredictionMarket struct that wraps Drift BET orders, tracks market metadata (title, description, outcome options, settlement time), and manages creator fees.","Build the Ponder indexer to listen for Drift BET events and market creation events; index market state, liquidity depth, and user positions in real-time.","Create the Next.js frontend with wallet connection (Privy), market feed (paginated, filterable by category/time), and market detail page showing vAMM pricing and liquidity.","Implement the bet placement flow: connect to Drift's BET program, construct and sign transactions, handle slippage and gas estimation.","Add portfolio tracking: query user positions from Ponder, calculate P&L, show open/closed bets with settlement status.","Integrate oracle settlement: call Switchboard or Pyth to fetch outcome data, execute settlement transactions, distribute winnings via Drift's settlement mechanism.","Deploy to devnet, test end-to-end (create market → place bet → settle), then mainnet with rate-limiting and security audits."],"gotchas":["Drift's BET feature is tightly coupled to their vAMM; you must understand their AMM math (k-constant curves, funding rates) to price markets correctly and avoid arbitrage losses.","Oracle latency and price feeds: ensure your chosen oracle (Switchboard/Pyth) covers all outcome types you support; sports outcomes require custom oracles or community voting fallback.","Settlement disputes: binary outcomes can be ambiguous (e.g., \"BTC > $100k\" at which timestamp?). Plan for a dispute resolution layer (e.g., DAO vote or Drift's own oracle) before launch.","Solana network congestion can cause bet placement failures during high volume; implement retry logic, queue management, and clear UX feedback for pending transactions.","Drift's BET program may have TVL or leverage limits; monitor these and communicate constraints to users to avoid surprise rejections."],"references":[{"url":"https://docs.drift.trade","kind":"docs","label":"Drift Protocol Docs"},{"url":"https://github.com/drift-labs","kind":"repo","label":"Drift GitHub"},{"url":"https://book.anchor-lang.com","kind":"docs","label":"Anchor Book"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Documentation"},{"url":"https://docs.switchboard.xyz","kind":"docs","label":"Switchboard Oracle Integration"},{"url":"https://solana-labs.github.io/solana-web3.js","kind":"docs","label":"Solana Web3.js Reference"}],"time_estimate_hours":160,"projects":{"slug":"drift"},"project_slug":"drift","project":{"slug":"drift","name":"Drift","logo_url":"https://icons.llamao.fi/icons/protocols/drift-trade?w=64&h=64","category":"perps"}},{"id":"62056175-ac42-4108-b041-29c686c5bdd7","project_id":"2d2b4289-3176-4922-936e-6db688f86b9b","title":"Insurance Fund Health Dashboard","pitch":"Live view of Drift's insurance fund coverage ratio across markets — critical safety information.","difficulty":"weekend","use_case":"security","build_with":["nextjs","drift-sdk","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:36.260942+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time dashboard that tracks Drift Protocol's insurance fund health across all perpetual markets. Display the current insurance fund balance, total coverage ratio, per-market exposure, and historical trends. This gives traders transparency into protocol solvency and helps identify when the insurance fund is under stress. The dashboard pulls state from Drift's on-chain accounts via the Drift SDK, calculates coverage metrics, and surfaces them with charts and alerts. Essential for risk-aware trading and protocol monitoring.","learn_first":["How Drift's vAMM and DLOB work","Insurance fund mechanics in perp protocols","Solana account structure and RPC queries"],"tech_stack":{"data":["Drift SDK","Solana Web3.js or Viem","RPC (Helius or Magic Eden)"],"infra":["Vercel or similar"],"frontend":["Next.js","TypeScript","TailwindCSS","Recharts or Chart.js"]},"build_steps":["Set up a Next.js project with TypeScript and TailwindCSS for styling.","Install and configure the Drift SDK (npm install @drift-labs/sdk) and connect to a Solana RPC endpoint.","Create a utility function using the Drift SDK to fetch the current insurance fund account state and calculate the coverage ratio (insurance fund balance / total notional exposure).","Build a React component that displays the insurance fund balance, coverage ratio percentage, and a status indicator (green/yellow/red based on thresholds).","Add a second component that lists per-market insurance fund exposure using Drift's market state data.","Integrate Recharts to plot historical insurance fund balance over time (fetch snapshots every 5–10 minutes and store in a simple in-memory cache or local database).","Add real-time updates using Solana's WebSocket subscription to the insurance fund account, triggering dashboard refreshes when state changes.","Deploy to Vercel and set up environment variables for your RPC endpoint."],"gotchas":["Drift's insurance fund account structure is complex — use the SDK's built-in parsers rather than raw account deserialization to avoid errors.","RPC rate limits can be hit quickly with frequent polling; use WebSocket subscriptions for real-time updates instead of polling every second.","Coverage ratio calculation must account for both realized losses and potential liquidation cascades — the SDK provides helper functions for this, but verify the math against Drift's docs.","Market state changes asynchronously; ensure your UI handles loading states gracefully during RPC calls."],"references":[{"url":"https://docs.drift.trade","kind":"docs","label":"Drift SDK Documentation"},{"url":"https://github.com/drift-labs","kind":"repo","label":"Drift Protocol GitHub"},{"url":"https://solana-labs.github.io/solana-web3.js/","kind":"docs","label":"Solana Web3.js Documentation"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Documentation"},{"url":"https://docs.drift.trade/insurance-fund","kind":"docs","label":"Drift Insurance Fund Mechanics"}],"time_estimate_hours":8,"projects":{"slug":"drift"},"project_slug":"drift","project":{"slug":"drift","name":"Drift","logo_url":"https://icons.llamao.fi/icons/protocols/drift-trade?w=64&h=64","category":"perps"}},{"id":"aa5a6ba8-19ef-4dcf-9744-ac1914e015e5","project_id":"2d2b4289-3176-4922-936e-6db688f86b9b","title":"Drift Vault Performance Tracker","pitch":"Compare every Drift vault — drawdown, Sharpe, fees, manager track record. Currently scattered across the Drift UI.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","drift-sdk","ponder"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:30.744613+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that aggregates performance metrics across all Drift Protocol vaults. Users can filter by manager, strategy type, risk profile, and time period to compare historical returns, volatility, maximum drawdown, Sharpe ratio, and fee structure. The tracker pulls vault data from Drift's on-chain state and historical transaction logs, then computes performance statistics and ranks vaults by custom criteria. Solves the current friction where vault depositors must manually check individual vault pages or use spreadsheets to compare opportunities.","learn_first":["Drift vAMM mechanics and vault architecture","How to query Drift on-chain state via RPC and SDK","Sharpe ratio and maximum drawdown calculation","Ponder indexer setup for Solana event streaming"],"tech_stack":{"ai":[],"data":["Drift SDK","Helius or QuickNode RPC"],"infra":["Vercel"],"other":["TypeScript"],"wallet":["Privy or Phantom wallet connector"],"indexer":["Ponder"],"frontend":["Next.js","React","TailwindCSS","Recharts or Tremor for charts"],"contracts":[]},"build_steps":["Set up a Next.js project with TypeScript and TailwindCSS; scaffold pages for vault list, vault detail, and comparison views.","Install and configure Ponder to index Drift vault events (vault creation, deposits, withdrawals, fee claims) from Solana mainnet.","Create Ponder schema for vaults, deposits, and withdrawals; write indexer queries to track cumulative AUM and transaction history per vault.","Integrate Drift SDK in a Next.js API route to fetch live vault state (current AUM, manager, fee structure, vault type) and combine with Ponder historical data.","Implement performance calculation logic: compute daily/weekly/monthly returns, maximum drawdown, Sharpe ratio (assuming risk-free rate ~4%), and annualized volatility.","Build a React table component displaying all vaults with sortable columns (AUM, Sharpe, max drawdown, fees, manager); add filters for strategy type and time period.","Add a vault detail page showing performance charts (cumulative returns, drawdown over time), fee breakdown, manager info, and a comparison tool to overlay 2–3 vaults.","Deploy to Vercel; set up environment variables for RPC endpoint and Ponder indexer URL; test with live Drift vault data."],"gotchas":["Drift vault data is sparse on-chain; you'll need to backfill historical performance by replaying transaction logs or using Drift's off-chain API if available—check docs.drift.trade for data availability.","Sharpe ratio requires consistent daily/hourly snapshots; if vault AUM is only updated on deposits/withdrawals, you may need to interpolate or use proxy metrics like fee-adjusted returns.","Solana RPC rate limits can be hit quickly when querying historical data for many vaults; use a paid RPC (Helius, QuickNode) or batch requests via Ponder.","Vault managers can change strategy or pause deposits; ensure your UI clearly shows vault status and last update time so users don't act on stale data."],"references":[{"url":"https://docs.drift.trade","kind":"docs","label":"Drift Protocol Docs"},{"url":"https://github.com/drift-labs/protocol-v2","kind":"repo","label":"Drift SDK GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Documentation"},{"url":"https://docs.drift.trade/vaults","kind":"docs","label":"Drift Vaults Overview"},{"url":"https://solana.com/docs/rpc-reference","kind":"docs","label":"Solana RPC Best Practices"}],"time_estimate_hours":16,"projects":{"slug":"drift"},"project_slug":"drift","project":{"slug":"drift","name":"Drift","logo_url":"https://icons.llamao.fi/icons/protocols/drift-trade?w=64&h=64","category":"perps"}},{"id":"1361bc69-1979-4491-a35b-fc55e1a88d1d","project_id":"0eab156f-81e3-4162-aa22-87e376375ffe","title":"Vertex MM Performance Tracker","pitch":"Ranks Vertex market makers by spread, depth, and uptime. Transparency tool for retail.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","vertex-api","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:27.011069+00:00","metadata":{},"source":"curated","why_now":"Vertex is scaling across multiple chains (Arbitrum, Base, Mantle) and attracting more retail traders; MM transparency is a gap—no public tool ranks execution quality or flags suspicious behavior.","source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that tracks market maker performance on Vertex Protocol across Arbitrum, Base, and Mantle. Aggregates on-chain orderbook snapshots and API data to compute spread (bid-ask gap), depth (liquidity at key price levels), and uptime (order presence over time). Displays rankings by asset and chain, helping retail traders identify which MMs provide best execution and spot manipulation or withdrawal patterns. Serves as a transparency layer for the Vertex ecosystem.","learn_first":["How Vertex orderbook works (hybrid model)","Market maker incentives and rebate structures","Spread and depth metrics in DEX context","Real-time data indexing patterns"],"tech_stack":{"ai":[],"data":["Vertex REST API (orderbook snapshots)","Vertex subgraph (GraphQL)","Postgres for time-series storage"],"infra":["Vercel","Supabase or Railway for Postgres"],"other":["Cron jobs for periodic snapshots"],"wallet":[],"indexer":["Ponder (for orderbook events)","Vertex subgraph (if available)"],"frontend":["Next.js 15","TanStack Query (React Query)","Recharts or Tremor for charts","Tailwind CSS"],"contracts":[]},"build_steps":["Set up Next.js 15 project with TypeScript and Tailwind; scaffold pages for dashboard, rankings, and MM detail view.","Integrate Vertex REST API client to fetch current orderbook state (bids, asks, MMs) for major trading pairs on Arbitrum/Base/Mantle.","Build Ponder indexer to listen to Vertex orderbook events (OrderPlaced, OrderCanceled, OrderFilled) and store MM activity in Postgres.","Create a data aggregation layer that computes spread (best_ask - best_bid), depth (sum of liquidity within 0.5%, 1%, 2% of mid), and uptime (% of blocks where MM had active orders).","Set up TanStack Query hooks to fetch MM metrics from your backend API; paginate and filter by chain, asset, time range.","Build a leaderboard table component with sortable columns (spread, depth, uptime, 24h volume); add sparklines for trend visualization.","Add a detail page per MM showing historical spread/depth charts, order history, and execution quality metrics (slippage vs mid-price).","Deploy to Vercel; set up Postgres on Supabase/Railway; configure cron job to snapshot orderbook state every 5–10 minutes."],"gotchas":["Vertex orderbook state is hybrid (on-chain + off-chain matching); API may lag chain state by seconds—snapshot timing matters for accuracy.","MM addresses may be contracts or EOAs; some MMs may use multiple addresses; need heuristic or manual mapping to consolidate.","Spread/depth vary wildly by asset and chain; normalize metrics (e.g., % spread vs absolute) to make cross-asset rankings meaningful.","Orderbook snapshots grow quickly; design Postgres schema for efficient time-series queries (consider TimescaleDB extension or partitioning)."],"references":[{"url":"https://docs.vertexprotocol.com","kind":"docs","label":"Vertex Protocol Docs"},{"url":"https://github.com/vertex-protocol","kind":"repo","label":"Vertex GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://tanstack.com/query/latest","kind":"docs","label":"TanStack Query (React Query)"},{"url":"https://www.tremor.so","kind":"tool","label":"Tremor Charts for React"},{"url":"https://www.timescale.com","kind":"docs","label":"TimescaleDB for Time-Series"}],"time_estimate_hours":80,"projects":{"slug":"vertex"},"project_slug":"vertex","project":{"slug":"vertex","name":"Vertex","logo_url":"https://icons.llamao.fi/icons/protocols/vertex-protocol?w=64&h=64","category":"perps"}},{"id":"2b6d7dbc-c40c-46f6-bf35-20434f933afb","project_id":"0eab156f-81e3-4162-aa22-87e376375ffe","title":"Hybrid Liquidity Visualizer","pitch":"Animated visualization of how Vertex blends orderbook + AMM liquidity for every trade.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","framer-motion","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:24.577894+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an interactive dashboard that streams live trade data from Vertex's hybrid orderbook+AMM engine and animates how each trade executes across both liquidity sources. Users see orderbook depth, AMM curves, and the execution path of their trades in real-time. This teaches traders how hybrid execution works and surfaces Vertex's unique liquidity model. The visualizer pulls from Vertex's WebSocket API, renders animated transitions between orderbook and AMM fills, and displays slippage/price impact metrics. Target: traders curious about execution quality and Vertex's technical differentiation.","learn_first":["Vertex hybrid orderbook+AMM architecture","Orderbook depth visualization patterns","Price impact calculation (AMM bonding curves)","WebSocket real-time data handling","Framer Motion animation primitives"],"tech_stack":{"data":["Vertex WebSocket API (trades, orderbook snapshots)","ethers.js or viem for on-chain state reads"],"infra":["Vercel or similar for hosting"],"other":["TypeScript"],"frontend":["Next.js 14+","Framer Motion","TailwindCSS","Recharts or D3.js for depth chart"]},"build_steps":["Scaffold Next.js app with TypeScript and TailwindCSS; set up Framer Motion for animation library.","Connect to Vertex WebSocket API (wss://api.prod.vertexprotocol.com/v1/ws) and subscribe to trade and orderbook update streams for a single market (e.g., BTC/USD).","Build a static orderbook depth chart component using Recharts showing bid/ask levels; render as a stacked area chart.","Add a simple AMM curve visualization (bonding curve) overlaid on the orderbook to show where AMM liquidity sits relative to orderbook prices.","Implement real-time data updates: on each trade event, animate the orderbook depth shrinking/growing and highlight the executed price level.","Add an animated 'execution path' overlay: draw a line or arrow showing whether the trade filled from orderbook, AMM, or both; use Framer Motion's `layoutId` for smooth transitions.","Layer in slippage/price-impact metrics: calculate expected price without hybrid execution vs. actual execution price; display as a badge that updates per trade.","Deploy to Vercel; add a market selector dropdown to switch between BTC/USD, ETH/USD, etc."],"gotchas":["Vertex's WebSocket API may have rate limits or connection drops; implement exponential backoff reconnection logic and a connection status indicator.","Orderbook snapshots can be large; debounce or throttle updates to avoid re-rendering on every single level change—batch updates every 100–200ms.","Framer Motion animations can stutter if you animate too many DOM nodes at once; use CSS transforms and `will-change` to keep animations on the GPU.","Price impact calculation requires knowing the AMM curve parameters (reserves, fee tier); these may not be exposed directly—you may need to infer from historical trade data or query Vertex's contracts via viem."],"references":[{"url":"https://docs.vertexprotocol.com","kind":"docs","label":"Vertex Protocol Docs"},{"url":"https://docs.vertexprotocol.com/api/websocket","kind":"docs","label":"Vertex WebSocket API Reference"},{"url":"https://github.com/vertex-protocol","kind":"repo","label":"Vertex GitHub"},{"url":"https://www.framer.com/motion/","kind":"docs","label":"Framer Motion Documentation"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Library"},{"url":"https://viem.sh/","kind":"docs","label":"viem Documentation"}],"time_estimate_hours":12,"projects":{"slug":"vertex"},"project_slug":"vertex","project":{"slug":"vertex","name":"Vertex","logo_url":"https://icons.llamao.fi/icons/protocols/vertex-protocol?w=64&h=64","category":"perps"}},{"id":"52922de7-b3b0-4b40-801d-0cc0ab836f42","project_id":"0eab156f-81e3-4162-aa22-87e376375ffe","title":"VRTX Rewards Optimizer","pitch":"Calculates the most-rewards-per-dollar trading pattern on Vertex given current incentives.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","vertex-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:23.416684+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that analyzes Vertex's current reward structure (trading rebates, VRTX incentives, liquidation bonuses) and recommends the optimal trading pairs, position sizes, and holding periods to maximize rewards-per-dollar spent. Pulls live data from Vertex API, models reward accrual across perps and spot markets, and surfaces actionable trading paths ranked by efficiency. Useful for yield farmers and market makers who want to extract maximum value from protocol incentives without taking unnecessary directional risk.","learn_first":["Vertex protocol architecture (perps vs spot, maker/taker rebates)","VRTX tokenomics and reward distribution","Arbitrage and market-making basics on hybrid orderbook+AMM systems","Real-time data fetching and caching patterns"],"tech_stack":{"data":["Vertex REST API (quotes, orders, rewards endpoints)","Ponder or The Graph for historical incentive snapshots"],"other":["Node.js for reward calculation engine"],"frontend":["Next.js 14+","TailwindCSS","Recharts or similar for reward curves"]},"build_steps":["Scaffold a Next.js app with a simple two-column layout: left side shows live Vertex market data (top pairs by volume, current rebate tiers), right side shows a reward calculator input form.","Wire up the Vertex REST API client using viem's http transport to fetch current trading pairs, rebate schedules, and VRTX incentive multipliers; cache responses for 30 seconds.","Build a reward calculation engine: for each market pair, compute rewards-per-dollar as (maker_rebate + taker_rebate + vrtx_incentive) / notional_size; rank pairs by this metric.","Add a form where users input their capital amount and risk tolerance (e.g., 'max slippage 0.5%'); filter and rank markets accordingly.","Fetch order book depth from Vertex API and estimate execution costs (slippage) for each recommended pair; adjust reward calculations downward by slippage cost.","Display top 5–10 recommended trading paths as cards: pair name, recommended notional size, estimated rewards, execution cost, net yield %; include a 'copy order' button that pre-fills order parameters.","Add a simple 'backtest' feature: let users select a past 24h or 7d window and see what yield they would have captured following the optimizer's top recommendation.","Deploy to Vercel; set up a simple cron job (or serverless function) to refresh reward data every 5 minutes and alert users via email or in-app banner if top recommendation changes."],"gotchas":["Vertex's rebate structure can change mid-epoch; always fetch the current schedule from the API rather than hardcoding. Rebates may also be tier-based (volume-dependent), so you need to model cumulative volume to get accurate estimates.","Slippage varies wildly by pair and order size; use Vertex's order book snapshot to estimate real execution cost, not just a flat percentage. Small orders may face worse slippage than the calculator assumes.","VRTX incentives are often time-limited campaigns; the optimizer should clearly show incentive end dates and warn users when a lucrative reward is about to expire.","Rewards are typically settled at epoch end (often weekly or bi-weekly); the optimizer should clarify settlement timing so users don't expect instant payouts."],"references":[{"url":"https://docs.vertexprotocol.com","kind":"docs","label":"Vertex Protocol Docs"},{"url":"https://docs.vertexprotocol.com/api","kind":"docs","label":"Vertex API Reference"},{"url":"https://github.com/vertex-protocol","kind":"repo","label":"Vertex GitHub"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://nextjs.org/docs","kind":"docs","label":"Next.js 14 Getting Started"}],"time_estimate_hours":16,"projects":{"slug":"vertex"},"project_slug":"vertex","project":{"slug":"vertex","name":"Vertex","logo_url":"https://icons.llamao.fi/icons/protocols/vertex-protocol?w=64&h=64","category":"perps"}},{"id":"6f2af387-9868-41ee-8c01-ca7ef7d35496","project_id":"0eab156f-81e3-4162-aa22-87e376375ffe","title":"Vertex Edge Aggregator UI","pitch":"Single front-end that taps Vertex Edge across chains for unified order book trading.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","vertex-sdk","viem","wagmi"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:19.460561+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a multi-chain trading dashboard that aggregates Vertex Edge liquidity across Arbitrum, Base, and Mantle into one unified order book interface. Users see real-time bids/asks from all three chains, execute trades with automatic chain selection based on best price/liquidity, and manage positions across chains from a single wallet connection. This requires fetching order book snapshots from Vertex's WebSocket API on each chain, normalizing the data, and routing orders through the appropriate chain's smart contract.","learn_first":["Vertex Edge order book architecture and WebSocket subscriptions","Cross-chain routing patterns and slippage calculation","ERC-20 token normalization across chains (e.g., USDC variants)","Wallet multi-chain support with wagmi"],"tech_stack":{"data":["Vertex Edge WebSocket API (real-time order book)","Vertex REST API for historical trades and positions"],"infra":["Vercel for deployment","Alchemy or Infura RPC endpoints for each chain"],"other":["TypeScript for type safety"],"wallet":["wagmi for multi-chain account management","RainbowKit or Privy for wallet connection","viem for low-level chain interactions"],"indexer":[],"frontend":["Next.js 14+","React Query or SWR for order book state","TailwindCSS or shadcn/ui for UI components","Recharts for price charts"],"contracts":["Vertex Perps Engine (read-only integration)"]},"build_steps":["Scaffold Next.js 14 project with TypeScript, set up Tailwind and shadcn/ui components","Integrate wagmi and RainbowKit; enable multi-chain wallet switching (Arbitrum, Base, Mantle)","Set up Vertex SDK instances for each chain; test basic account queries and balance fetches","Implement WebSocket subscription to Vertex Edge order book on each chain; normalize order data into a unified schema","Build unified order book component displaying top-of-book bids/asks; add chain badge and liquidity depth indicator","Create order execution flow: user selects best-priced side, SDK routes to correct chain, displays slippage estimate before signing","Add position management view showing open positions across all chains with P&L; fetch via REST API","Deploy to Vercel; test cross-chain order routing with testnet tokens; add error handling for RPC failures and disconnections"],"gotchas":["Order book snapshots from different chains may be milliseconds out of sync; consider adding a 'last updated' timestamp and refresh frequency control to avoid stale data confusion","USDC and other tokens have different contract addresses per chain; maintain a mapping and handle decimals carefully (e.g., USDC.e on Arbitrum vs native USDC on Base)","Vertex Edge WebSocket connections can drop; implement reconnection logic with exponential backoff and graceful fallback to REST polling","Gas costs and settlement times differ per chain; display estimated execution time and fees per chain before user commits to an order","User may switch chains mid-order; ensure pending transactions are tracked per chain and don't get orphaned if wallet connection changes"],"references":[{"url":"https://docs.vertexprotocol.com","kind":"docs","label":"Vertex Protocol Docs"},{"url":"https://docs.vertexprotocol.com/api","kind":"docs","label":"Vertex Edge API Reference"},{"url":"https://github.com/vertex-protocol/vertex-typescript-sdk","kind":"repo","label":"Vertex SDK GitHub"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://github.com/vertex-protocol","kind":"repo","label":"Vertex Protocol GitHub"}],"time_estimate_hours":80,"projects":{"slug":"vertex"},"project_slug":"vertex","project":{"slug":"vertex","name":"Vertex","logo_url":"https://icons.llamao.fi/icons/protocols/vertex-protocol?w=64&h=64","category":"perps"}},{"id":"d801443e-7b18-4166-8f17-2012fec4705b","project_id":"e13b5308-3f90-429c-a2a1-6f80002b18a1","title":"Cross-chain Margin Manager","pitch":"Single UI to manage Synthetix v3 positions across Arbitrum, Base, and Optimism — with collateral routing.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","synthetix-v3-sdk","layerzero","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:15.291597+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that aggregates Synthetix v3 margin accounts across multiple chains, letting traders view all positions in one place, adjust collateral allocations across chains via LayerZero, and execute cross-chain rebalancing. This solves the fragmentation problem where traders must switch between chain-specific UIs to manage their perp positions. The app reads from Synthetix v3 subgraphs, displays real-time PnL and collateral ratios, and routes collateral transfers through LayerZero's omnichain messaging to keep positions healthy without manual bridge hops.","learn_first":["Synthetix v3 margin account architecture and collateral requirements","LayerZero OmniChain Fungible Token (OFT) standard for cross-chain transfers","ERC-7412 off-chain signed price feeds used by Synthetix v3","Multi-chain wallet state management with wagmi"],"tech_stack":{"data":["The Graph subgraph queries for margin accounts and positions","Synthetix v3 SDK for on-chain reads"],"infra":["Vercel or similar for hosting","Alchemy or Infura RPC endpoints for each chain"],"other":["LayerZero SDK for cross-chain messaging"],"wallet":["wagmi","viem","RainbowKit"],"indexer":["The Graph (Synthetix v3 subgraphs on Arbitrum, Base, Optimism)"],"frontend":["Next.js 14+ with App Router","TanStack Query for multi-chain data fetching","Tailwind CSS","RainbowKit for wallet connection","wagmi v2 for multi-chain hooks"],"contracts":["Synthetix v3 Core (read-only via SDK)","LayerZero OFT for USDC or SNX collateral"]},"build_steps":["Set up Next.js 14 project with TypeScript, Tailwind, and wagmi/RainbowKit; configure RPC endpoints for Arbitrum, Base, and Optimism.","Scaffold multi-chain wallet connection using RainbowKit and wagmi; test switching between chains.","Integrate Synthetix v3 SDK; write hooks to fetch margin accounts and positions from each chain's subgraph using The Graph queries.","Build dashboard layout: left sidebar for chain selector, center panel showing aggregated positions (symbol, size, collateral, PnL), right panel for collateral allocation controls.","Implement collateral rebalancing UI: input form to specify amount and destination chain; use LayerZero OFT contract to send collateral cross-chain, track tx status.","Add real-time price feeds: fetch Pyth or Chainlink prices (via ERC-7412 oracle) to calculate PnL and collateral ratios; update every 5–10 seconds.","Write error handling for failed cross-chain transfers, insufficient collateral, and liquidation risk; display warnings when margin ratio drops below safe threshold.","Deploy to Vercel; test end-to-end on testnet (Arbitrum Sepolia, Base Sepolia, OP Sepolia) before mainnet."],"gotchas":["LayerZero messaging fees vary by destination chain; always estimate and display fee before user confirms a cross-chain collateral transfer.","Synthetix v3 subgraph indexing can lag 1–2 blocks; cache aggregated position data client-side and refresh every 30 seconds to avoid stale reads.","ERC-7412 price feeds require signed data from off-chain oracles; if you need real-time PnL, fetch prices from Pyth or Chainlink directly rather than relying on on-chain reads.","Multi-chain state synchronization is eventual; if a user sends collateral cross-chain and immediately rebalances on another chain, they may over-allocate. Implement a pending-tx queue and lock UI until LayerZero confirms."],"references":[{"url":"https://github.com/Synthetixio/synthetix-v3-sdk","kind":"repo","label":"Synthetix v3 SDK"},{"url":"https://docs.synthetix.io","kind":"docs","label":"Synthetix v3 Docs"},{"url":"https://docs.layerzero.network/v2/developers/evm/oft/overview","kind":"docs","label":"LayerZero OFT Standard"},{"url":"https://thegraph.com/explorer?query=synthetix-v3","kind":"tool","label":"The Graph Synthetix v3 Subgraph"},{"url":"https://wagmi.sh/react/guides/multi-chain","kind":"docs","label":"wagmi Multi-chain Guide"},{"url":"https://eips.ethereum.org/EIPS/eip-7412","kind":"docs","label":"ERC-7412 Specification"}],"time_estimate_hours":80,"projects":{"slug":"synthetix"},"project_slug":"synthetix","project":{"slug":"synthetix","name":"Synthetix","logo_url":"https://icons.llamao.fi/icons/protocols/synthetix-v3?w=64&h=64","category":"perps"}},{"id":"de536a7c-a5ce-4736-8dfc-70ddb31403e3","project_id":"e13b5308-3f90-429c-a2a1-6f80002b18a1","title":"Council Election Voter App","pitch":"Beautiful UI for the Spartan Council elections with candidate profiles and voting history.","difficulty":"weekend","use_case":"social","build_with":["nextjs","snapshot-api","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:14.018779+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web application that makes Synthetix Spartan Council voting accessible and transparent. Users can browse candidate profiles, view voting history, check delegation status, and cast votes directly from the app. The interface surfaces on-chain voting data through Snapshot's API, displaying candidate platforms, past governance participation, and real-time vote tallies. This lowers the friction for SNX holders to participate in governance and helps voters make informed decisions.","learn_first":["Snapshot voting mechanics and API","Synthetix governance structure (Spartan Council roles)","ERC-20 delegation patterns","Web3 wallet connection flows"],"tech_stack":{"data":["Snapshot GraphQL API","Ethers.js or viem for on-chain reads"],"infra":["Vercel","IPFS (for candidate media if needed)"],"wallet":["wagmi","RainbowKit","viem"],"frontend":["Next.js 14+","TypeScript","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; scaffold pages for candidates list, candidate detail, and voting interface.","Integrate wagmi + RainbowKit for wallet connection; test with a testnet RPC.","Query Snapshot GraphQL API to fetch active Synthetix governance proposals and voting space metadata; parse candidate addresses and current vote counts.","Build candidate profile cards showing name, bio, voting history (past votes on proposals), and delegation count using Snapshot data.","Implement voting UI: show proposal details, current vote distribution, and a vote button that triggers a Snapshot vote transaction via wagmi.","Add vote history view: query Snapshot for user's past votes and display them in a timeline or table.","Style the app with TailwindCSS and shadcn/ui components; ensure responsive design for mobile and desktop.","Deploy to Vercel and test end-to-end with live Snapshot voting on mainnet or testnet."],"gotchas":["Snapshot votes are off-chain; ensure users understand their wallet signature is binding but not a blockchain transaction. Clarify gas-free voting in the UI.","Candidate data may be incomplete or missing from Snapshot; build a fallback UI and consider a manual candidate registry for missing profiles.","Vote delegation is separate from voting itself; users may delegate their voting power but still vote directly. Surface both actions clearly in the UI.","Snapshot API rate limits apply; cache proposal and candidate data server-side with ISR (Incremental Static Regeneration) to avoid hitting limits during high-traffic voting periods."],"references":[{"url":"https://docs.snapshot.org/","kind":"docs","label":"Snapshot Documentation"},{"url":"https://api.thegraph.com/subgraphs/name/snapshot-labs/snapshot","kind":"tool","label":"Snapshot GraphQL API Playground"},{"url":"https://wagmi.sh/","kind":"docs","label":"wagmi Documentation"},{"url":"https://docs.synthetix.io/governance","kind":"docs","label":"Synthetix Governance Docs"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup Guide"},{"url":"https://github.com/snapshot-labs/snapshot-js","kind":"repo","label":"Snapshot Voting Integration Example"}],"time_estimate_hours":16,"projects":{"slug":"synthetix"},"project_slug":"synthetix","project":{"slug":"synthetix","name":"Synthetix","logo_url":"https://icons.llamao.fi/icons/protocols/synthetix-v3?w=64&h=64","category":"perps"}},{"id":"2a336bd3-afe9-4b67-b899-209c374d37e6","project_id":"e13b5308-3f90-429c-a2a1-6f80002b18a1","title":"Integrator-Ready Perps Widget","pitch":"Embeddable JS widget any site can drop in to offer Synthetix-powered perps in 10 lines of code.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["typescript","synthetix-v3-sdk","wagmi","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:10.888621+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a production-ready, white-label JavaScript widget that lets any website (trading dashboard, portfolio tracker, yield aggregator, or content platform) embed Synthetix V3 perpetuals trading without managing liquidity, collateral, or order routing themselves. The widget handles wallet connection, position management, order placement, and real-time P&L display. Target initial integrators: DeFi dashboards, news sites with trading features, and portfolio management tools. Ship with iframe sandboxing, configurable branding, and testnet support for rapid partner onboarding.","learn_first":["Synthetix V3 architecture (markets, accounts, collateral)","ERC-4626 vault patterns (sUSD collateral)","iframe security and postMessage API","wagmi hooks for wallet connection"],"tech_stack":{"data":["Synthetix V3 subgraph (The Graph)","Pyth or Chainlink for price feeds"],"infra":["iframe sandbox mode","postMessage for cross-origin communication"],"other":["ethers.js or viem for contract ABIs"],"wallet":["wagmi useAccount, useContractRead, useContractWrite","viem publicClient for reads"],"frontend":["React","TypeScript","wagmi","viem","RainbowKit or Privy for wallet UI"],"contracts":["Synthetix V3 PerpsMarket contract","sUSD ERC-4626 vault"]},"build_steps":["Set up React + TypeScript scaffold with Vite; install wagmi, viem, RainbowKit, and synthetix-v3-sdk.","Create a WalletProvider wrapper using wagmi's WagmiConfig; expose useAccount and useBalance hooks for iframe isolation.","Build core PerpsWidget component: render market selector, leverage slider, order type (market/limit), and position display.","Integrate synthetix-v3-sdk to fetch live market data (funding rates, open interest, mark price) from Synthetix V3 PerpsMarket contract via The Graph subgraph.","Implement order submission: use viem writeContract to call PerpsMarket.submitOrder with user collateral (sUSD), size, and leverage; handle gas estimation.","Add postMessage bridge for iframe communication: parent site sends config (chain, market list, branding) and widget sends back order events, balance updates, and errors.","Wire up real-time P&L: subscribe to subgraph for position updates; compute unrealized P&L using mark price and entry price.","Build and deploy widget as standalone bundle (UMD or ESM); create integration docs with copy-paste embed code and testnet faucet link."],"gotchas":["Synthetix V3 uses account NFTs (ERC-721) for position ownership—widget must handle account creation on first trade or guide user to pre-create via main UI.","sUSD collateral must be approved before order submission; widget needs to prompt for approval only once per integrator domain.","Leverage is applied server-side by PerpsMarket; widget must validate max leverage per market to avoid silent order rejections.","Cross-origin iframe restrictions: postMessage serialization does not support BigInt; use string encoding for large numbers (prices, balances).","Subgraph indexing lag (5–30 seconds) means real-time P&L may lag actual on-chain state; display a 'syncing' indicator or use WebSocket fallback."],"references":[{"url":"https://github.com/Synthetixio/synthetix-v3-sdk","kind":"repo","label":"Synthetix V3 SDK"},{"url":"https://docs.synthetix.io","kind":"docs","label":"Synthetix V3 Docs"},{"url":"https://thegraph.com/hosted-service/subgraph/synthetixio/synthetix-v3","kind":"tool","label":"Synthetix V3 Subgraph (The Graph)"},{"url":"https://wagmi.sh/react/api/hooks","kind":"docs","label":"wagmi Hooks Documentation"},{"url":"https://viem.sh/docs/contract/readContract.html","kind":"docs","label":"viem Contract Interactions"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage","kind":"docs","label":"iframe Security & postMessage"}],"time_estimate_hours":80,"projects":{"slug":"synthetix"},"project_slug":"synthetix","project":{"slug":"synthetix","name":"Synthetix","logo_url":"https://icons.llamao.fi/icons/protocols/synthetix-v3?w=64&h=64","category":"perps"}},{"id":"6868a94f-543f-41bc-8d1c-d41eecce4668","project_id":"e13b5308-3f90-429c-a2a1-6f80002b18a1","title":"SNX Staker Dashboard","pitch":"All-in-one view of SNX rewards, C-ratio, snxUSD debt, and historical perf for v3 stakers.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","synthetix-v3-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:08.581166+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard for Synthetix v3 stakers showing collateral ratio, accrued rewards across pools, snxUSD debt position, liquidation risk, and 30/90-day performance trends. Pulls on-chain data via Synthetix-v3-sdk and The Graph, displays via React components with ethers.js wallet integration. Target: solo stakers managing multiple pools who need one place to monitor health and optimize delegation.","learn_first":["Synthetix v3 architecture (pools, markets, collateral)","C-ratio calculation and liquidation mechanics","snxUSD stablecoin debt model","The Graph subgraph queries for historical events"],"tech_stack":{"data":["Synthetix-v3-sdk","ethers.js for fallback RPC calls"],"infra":["Vercel or similar for hosting"],"other":["Chart.js or Recharts for reward/C-ratio trends"],"wallet":["wagmi","viem","RainbowKit"],"indexer":["The Graph (Synthetix v3 subgraph)"],"frontend":["Next.js 14+","React","TailwindCSS","shadcn/ui"],"contracts":["Synthetix v3 Core (read-only)"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; add wagmi + RainbowKit for wallet connection.","Install synthetix-v3-sdk and viem; scaffold API route to fetch staker account data (collateral, debt, pool delegations).","Query The Graph Synthetix v3 subgraph for historical reward events and C-ratio snapshots over 30/90 days.","Build React components: StakerOverview (C-ratio gauge, snxUSD debt), PoolDelegations (list of pools, weight %), RewardHistory (chart of accrued rewards).","Integrate real-time updates via wagmi hooks (useAccount, useBalance) and poll SDK every 30–60 seconds for fresh data.","Add liquidation-risk indicator: calculate current C-ratio vs. min required, show warning if trending toward threshold.","Deploy to Vercel; test on Optimism testnet first, then mainnet.","Add optional email alerts or Discord webhook for liquidation warnings (stretch goal)."],"gotchas":["Synthetix v3 SDK can be slow on first load—cache account data in localStorage and invalidate on block changes, not every render.","The Graph subgraph may lag 1–2 blocks; use SDK for current state, Graph for historical trends only.","C-ratio calculation requires summing collateral across all markets and dividing by total debt; ensure you're using the correct market IDs and accounting for stale prices.","snxUSD debt accrues interest; display both current debt and projected debt at next epoch to set expectations.","Multi-chain support (Optimism, Base, Arbitrum) requires separate RPC endpoints and subgraph queries per chain; start with one chain, abstract later."],"references":[{"url":"https://docs.synthetix.io","kind":"docs","label":"Synthetix v3 Docs"},{"url":"https://github.com/Synthetixio/synthetix-v3","kind":"repo","label":"Synthetix v3 SDK GitHub"},{"url":"https://thegraph.com/hosted-service/subgraph/synthetixio/synthetix-v3","kind":"tool","label":"The Graph Synthetix Subgraph"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://www.rainbowkit.com","kind":"docs","label":"RainbowKit Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Staking Patterns"}],"time_estimate_hours":8,"projects":{"slug":"synthetix"},"project_slug":"synthetix","project":{"slug":"synthetix","name":"Synthetix","logo_url":"https://icons.llamao.fi/icons/protocols/synthetix-v3?w=64&h=64","category":"perps"}},{"id":"1725c071-d048-4a70-ace8-edd883c4daaf","project_id":"bb71d2bf-eeed-4a93-bb53-b62b26d18c3a","title":"Builder-Code Rebate Dashboard","pitch":"Track rebates earned via your builder code, see top routes by volume, optimize commission tiers.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","hyperliquid-sdk","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:03.308545+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard for Hyperliquid builder-code affiliates to monitor rebate earnings, visualize trading volume by asset pair, identify high-performing routes, and optimize their commission tier strategy. Pulls live data from Hyperliquid's API, aggregates rebate events, and surfaces actionable insights—helping builders maximize yield from their referral programs.","learn_first":["Hyperliquid builder-code mechanics and rebate structure","REST API pagination and real-time data polling","Basic chart libraries (Recharts or Chart.js)"],"tech_stack":{"data":["Hyperliquid REST API","localStorage or Vercel KV for caching"],"infra":["Vercel","environment variables for API keys"],"other":["hyperliquid-sdk (JS/TS)"],"frontend":["Next.js 14+","React","Recharts or Chart.js","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; scaffold pages for dashboard, settings, and export.","Install and configure hyperliquid-sdk; create API utility module to fetch user info, open orders, and historical fills.","Build backend route handler (app/api/rebates/route.ts) that calls Hyperliquid API to fetch fills, filter by builder code, and aggregate rebate earnings by day/week.","Create React component to display total rebates earned, current tier, and estimated next-tier threshold; use shadcn/ui cards.","Implement volume-by-pair chart (Recharts bar/line chart) showing which asset pairs generated the most trading volume under your builder code.","Add filters (date range, asset pair, minimum volume) and sorting to let users drill into top routes and identify optimization opportunities.","Integrate localStorage caching with a manual refresh button to reduce API calls; optionally add Vercel KV for multi-device persistence.","Deploy to Vercel, test with live builder code, and validate rebate calculations against Hyperliquid's official dashboard."],"gotchas":["Hyperliquid API has rate limits; implement exponential backoff and cache aggressively to avoid hitting limits during development.","Builder-code rebates may have a settlement lag (24–48 hours); clearly label data freshness and set user expectations on update frequency.","Ensure you're correctly filtering fills by your specific builder code; test with a known builder code first to validate the aggregation logic.","Chart rendering can be slow with large datasets (10k+ fills); consider server-side aggregation or pagination to keep client-side state lean."],"references":[{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/api","kind":"docs","label":"Hyperliquid API Documentation"},{"url":"https://github.com/hyperliquid-dex/hyperliquid-ts-sdk","kind":"repo","label":"Hyperliquid SDK (TypeScript)"},{"url":"https://recharts.org","kind":"docs","label":"Recharts Documentation"},{"url":"https://ui.shadcn.com","kind":"docs","label":"shadcn/ui Components"},{"url":"https://nextjs.org/docs/app/building-your-application/routing/route-handlers","kind":"docs","label":"Next.js API Routes"},{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/trading/builder-code","kind":"docs","label":"Hyperliquid Builder Code Guide"}],"time_estimate_hours":8,"projects":{"slug":"hyperliquid"},"project_slug":"hyperliquid","project":{"slug":"hyperliquid","name":"Hyperliquid Perps","logo_url":"https://icons.llamao.fi/icons/protocols/hyperliquid?w=64&h=64","category":"perps"}},{"id":"24e2a0e1-eaf4-4461-a643-b57cf1a12f79","project_id":"bb71d2bf-eeed-4a93-bb53-b62b26d18c3a","title":"Vault Strategy Backtester","pitch":"Test HLP-style or copy-trading vault strategies against historical Hyperliquid trade data.","difficulty":"1+ month","use_case":"trading","build_with":["python","hyperliquid-data","backtrader or zipline"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:17:03.004127+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a backtesting engine that replays Hyperliquid CLOB trades and order book snapshots to evaluate passive liquidity vault strategies (HLP rebalancing, copy-trading allocations, delta-hedging rules). Ingest historical trade feeds via Hyperliquid's REST API or WebSocket, simulate vault deposits/withdrawals and position updates, and output Sharpe ratio, drawdown, and fee accrual metrics. Target solo traders and vault operators who want to validate strategy assumptions before deploying real capital.","learn_first":["CLOB mechanics and market microstructure","HLP vault mechanics (deposit/withdrawal, fee distribution)","Backtesting best practices (survivorship bias, slippage modeling)","Time-series analysis and performance metrics"],"tech_stack":{"data":["Hyperliquid REST API (trades, candles, funding)","Hyperliquid WebSocket (real-time order book)","pandas, numpy for data wrangling"],"infra":["backtrader or zipline (event-driven backtester framework)","SQLite or DuckDB (local trade history cache)","Python 3.10+"],"other":["matplotlib/plotly for equity curves and drawdown charts","scipy.stats for Sharpe/Sortino calculations"]},"build_steps":["Set up a Python project with backtrader or zipline; scaffold a data loader that fetches Hyperliquid trade history via REST (start with 1-week sample data).","Implement a HyperliquidDataFeed class that converts raw trade/candle data into OHLCV bars and order book snapshots; cache locally to DuckDB to avoid re-fetching.","Define a BaseVaultStrategy class that models vault mechanics: track LP deposits, accrued fees, rebalance triggers, and position PnL; inherit for specific strategies (e.g., HLPRebalancer, CopyTradeAllocator).","Build a simple HLP rebalancing strategy: on each bar, compute portfolio delta, scale positions proportionally, and simulate slippage (e.g., 5–10 bps per trade).","Integrate a copy-trading strategy: track top traders' positions from Hyperliquid API, allocate vault capital proportionally, and apply a lag (e.g., 1–5 blocks) to simulate realistic replication delay.","Run backtest over 3–6 months of historical data; compute Sharpe ratio, max drawdown, win rate, and fee yield; output equity curve and monthly returns.","Add sensitivity analysis: sweep rebalance frequency, slippage assumptions, and copy-trade lag to see which parameters optimize risk-adjusted returns.","Deploy a simple CLI or Jupyter notebook UI to let users upload custom strategy logic (via YAML or Python subclass) and run backtests without modifying core code."],"gotchas":["Hyperliquid's REST API has rate limits (typically 100 req/s); batch requests and cache aggressively or you'll hit 429s mid-backtest.","Order book snapshots are sparse; you'll need to interpolate or use trade-based reconstruction to fill gaps, especially for slippage modeling on illiquid pairs.","Funding rates change frequently; using stale funding assumptions can skew PnL by 10–50 bps per day—fetch fresh rates or use a rolling average.","Survivorship bias: if you only backtest on pairs that exist today, you miss delisted pairs and survivorship-induced outperformance; track pair history carefully.","Slippage is nonlinear: a 10% vault rebalance hits much worse slippage than a 1% trade; use a power-law or impact model, not flat bps."],"references":[{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/api","kind":"docs","label":"Hyperliquid API Docs"},{"url":"https://github.com/hyperliquid-dex","kind":"repo","label":"Hyperliquid GitHub (SDK & examples)"},{"url":"https://www.backtrader.com/","kind":"docs","label":"backtrader Documentation"},{"url":"https://zipline.ml4trading.io/","kind":"docs","label":"zipline Backtester (Quantopian)"},{"url":"https://arxiv.org/abs/1912.08548","kind":"article","label":"Order Book Microstructure & Slippage Modeling"},{"url":"https://hyperliquid.xyz","kind":"article","label":"HLP Vault Mechanics (Hyperliquid Blog)"}],"time_estimate_hours":160,"projects":{"slug":"hyperliquid"},"project_slug":"hyperliquid","project":{"slug":"hyperliquid","name":"Hyperliquid Perps","logo_url":"https://icons.llamao.fi/icons/protocols/hyperliquid?w=64&h=64","category":"perps"}},{"id":"16b63138-ce50-44bc-ad76-f4db0ad39b99","project_id":"bb71d2bf-eeed-4a93-bb53-b62b26d18c3a","title":"Whale Position Tracker","pitch":"Tracks Hyperliquid positions above a size threshold. Public feed of who's long/short and at what price.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","hyperliquid-sdk","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:56.76537+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time analytics dashboard that monitors large positions on Hyperliquid's CLOB perps exchange. Query the Hyperliquid API for open positions, filter by notional size, and display a public leaderboard showing top traders' directional bets, entry prices, and leverage. Include alerts for position changes above thresholds and historical tracking to identify patterns in whale behavior. This gives retail traders visibility into smart money moves and helps them understand market structure.","learn_first":["Hyperliquid CLOB architecture and position data model","REST API vs WebSocket for real-time updates","Basic position sizing and notional value calculation"],"tech_stack":{"data":["Hyperliquid REST API","Hyperliquid WebSocket for real-time updates"],"infra":["Vercel or Netlify for deployment","Redis or in-memory cache for rate limiting"],"other":["TypeScript"],"frontend":["Next.js","React","TailwindCSS","Recharts or Chart.js for position visualization"]},"build_steps":["Set up a Next.js project with TypeScript and install hyperliquid-sdk and viem","Create a server-side API route that queries Hyperliquid's /positions endpoint to fetch all active positions","Implement position filtering logic: calculate notional value (size × mark price × leverage) and filter positions above your threshold (e.g., >$500k notional)","Build a React component to display positions in a sortable table with columns: trader address, asset, direction (long/short), size, entry price, current price, PnL, and timestamp","Add a WebSocket connection to Hyperliquid to stream real-time position updates and re-filter on each new event","Implement a simple in-memory store or Redis cache to track position history and detect threshold breaches for alert generation","Create a public dashboard page that refreshes the position feed every 5–10 seconds and displays top whales ranked by notional exposure","Deploy to Vercel with environment variables for API keys and set up basic error handling for API rate limits"],"gotchas":["Hyperliquid's API has rate limits; use exponential backoff and cache aggressively to avoid hitting them during peak market hours","Position data is only available for open positions; closed positions are not queryable via the public API, so you cannot build historical PnL tracking without logging yourself","Notional value calculation must account for leverage and mark price at query time; stale prices lead to incorrect filtering","WebSocket connections can drop; implement reconnection logic with exponential backoff to maintain real-time updates","Address privacy: displaying raw wallet addresses may attract unwanted attention; consider anonymizing or using ENS names where available"],"references":[{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/api","kind":"docs","label":"Hyperliquid API Documentation"},{"url":"https://github.com/hyperliquid-dex/hyperliquid-sdk","kind":"repo","label":"Hyperliquid SDK (TypeScript)"},{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/api/rest","kind":"docs","label":"Hyperliquid REST Endpoints"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://nextjs.org/docs/app/building-your-application/routing/route-handlers","kind":"docs","label":"Next.js API Routes"}],"time_estimate_hours":8,"projects":{"slug":"hyperliquid"},"project_slug":"hyperliquid","project":{"slug":"hyperliquid","name":"Hyperliquid Perps","logo_url":"https://icons.llamao.fi/icons/protocols/hyperliquid?w=64&h=64","category":"perps"}},{"id":"e4e15663-5a64-4bb6-aade-2f240dd51b5d","project_id":"bb71d2bf-eeed-4a93-bb53-b62b26d18c3a","title":"HL Smart-Order TG Bot","pitch":"Telegram bot for Hyperliquid: place TWAP, scaled, and stop-loss orders without leaving chat.","difficulty":"1-2 weeks","use_case":"social","build_with":["telegram-bot-api","hyperliquid-sdk","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:56.283133+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Telegram bot that connects to Hyperliquid's CLOB perps API, allowing users to compose and execute advanced order types (time-weighted average price fills, scaled entry/exit, conditional stops) directly from chat. Users authenticate via wallet signature, set order parameters through interactive messages, and receive real-time fill confirmations. The bot abstracts Hyperliquid's REST API and WebSocket streams behind a conversational interface, reducing friction for traders who want to manage positions on mobile or in low-attention contexts.","learn_first":["Hyperliquid REST API order placement and cancellation","Telegram Bot API message handlers and inline keyboards","Wallet signature verification (EIP-191)","TWAP and scaled order logic (client-side order splitting)"],"tech_stack":{"ai":[],"data":["Hyperliquid REST API","Hyperliquid WebSocket"],"infra":["Node.js","Vercel Functions or Railway"],"other":["node-telegram-bot-api","dotenv"],"wallet":["viem","ethers.js"],"indexer":[],"frontend":["Telegram Bot API"],"contracts":[]},"build_steps":["Scaffold a Node.js project with node-telegram-bot-api and viem; set up environment variables for Telegram token and Hyperliquid API endpoint.","Implement wallet authentication: users send /auth, bot returns a message to sign, viem verifies the signature (EIP-191) and stores session token in memory or Redis.","Build order parameter collection: use Telegram inline keyboards to let users choose order type (TWAP, scaled, stop-loss), asset pair, size, and execution window.","Integrate Hyperliquid SDK to fetch live mark prices and user account state (margin, positions) on demand via /status command.","Implement TWAP order splitting logic: given total size and duration, calculate child order sizes and intervals; queue them with timers.","Implement scaled order logic: for entry/exit, split orders across price levels using a simple linear or exponential ladder.","Implement stop-loss: store trigger price and size; poll mark price via WebSocket or REST; execute market order when triggered.","Deploy bot to a serverless platform (Vercel, Railway, or self-hosted VPS); test end-to-end with small live orders on Hyperliquid testnet, then mainnet."],"gotchas":["Hyperliquid order IDs are not returned synchronously; you must poll the /orders endpoint or listen to WebSocket updates to confirm fills and track order state.","Telegram rate limits (30 msgs/sec per chat) can cause delays if you're sending many order updates; batch confirmations or use Telegram's edit_message to reduce noise.","Wallet signature verification must use the exact message format Hyperliquid expects; off-by-one character breaks verification. Always test with a known keypair first.","TWAP and scaled orders are client-side constructs; if the bot crashes mid-execution, pending child orders may not fire. Consider persisting order state to a database (Supabase, Firebase) for recovery.","Hyperliquid's testnet and mainnet use different API endpoints and require separate API keys; ensure your environment config clearly separates them to avoid accidental mainnet trades during development."],"references":[{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/","kind":"docs","label":"Hyperliquid API Docs"},{"url":"https://github.com/hyperliquid-dex/hyperliquid-ts-sdk","kind":"repo","label":"Hyperliquid SDK (TypeScript)"},{"url":"https://github.com/yagop/node-telegram-bot-api","kind":"repo","label":"node-telegram-bot-api"},{"url":"https://viem.sh/docs/utilities/verifyMessage","kind":"docs","label":"viem Signature Verification"},{"url":"https://eips.ethereum.org/EIPS/eip-191","kind":"docs","label":"EIP-191: Signed Data Standard"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Reference"}],"time_estimate_hours":80,"projects":{"slug":"hyperliquid"},"project_slug":"hyperliquid","project":{"slug":"hyperliquid","name":"Hyperliquid Perps","logo_url":"https://icons.llamao.fi/icons/protocols/hyperliquid?w=64&h=64","category":"perps"}},{"id":"d480628a-332d-4d16-8457-e9634ca880e7","project_id":"556e3ca7-1a32-43c5-8e08-8402d18d65c2","title":"Mobile-First Perps UI","pitch":"Ultra-lean mobile dYdX interface focused on one-handed trading and quick position management.","difficulty":"1-2 weeks","use_case":"ux","build_with":["expo","dydx-v4-client","privy"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:53.418843+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a React Native app (Expo) that connects to dYdX v4 and strips trading down to essentials: open/close positions, view PnL, manage collateral, and execute limit/market orders with minimal taps. Target sub-3s load times and gesture-driven workflows. Use dydx-v4-client for chain interaction, Privy or WalletConnect for non-custodial auth, and a lightweight charting library like Lightweight Charts. The goal is traders who want to manage perps positions while commuting or away from desktop—not a full feature parity clone, but a focused mobile experience that handles the 80% use case.","learn_first":["dYdX v4 REST API and indexing","Cosmos chain fundamentals and account model","React Native / Expo best practices for performance","WalletConnect or Privy mobile auth flows"],"tech_stack":{"ai":[],"data":["dYdX v4 REST API","Lightweight Charts"],"infra":[],"other":["dydx-v4-client library"],"wallet":["Privy","WalletConnect v2"],"indexer":["dYdX Indexer API"],"frontend":["React Native","Expo","Privy","WalletConnect"],"contracts":[]},"build_steps":["Set up Expo project with TypeScript and configure EAS build for iOS/Android","Integrate Privy for mobile wallet connection and session management","Fetch dYdX account state (balances, open positions) via dydx-v4-client and cache locally","Build tabbed navigation: Positions tab (list open perps, PnL, collateral), Trade tab (quick order entry), Account tab (deposits/withdrawals)","Implement gesture-driven position management: swipe to close, long-press to edit stop-loss/take-profit","Add real-time price updates via dYdX Indexer WebSocket and render lightweight candlestick chart","Build order submission flow: validate margin, sign transaction with Privy, broadcast via dydx-v4-client","Test on physical device with network throttling and optimize bundle size (<5MB); ship to TestFlight/internal testing"],"gotchas":["dYdX v4 uses Cosmos SDK and requires understanding of account sequences and gas estimation—dydx-v4-client abstracts this but test gas limits on real transactions","Mobile wallets (Privy, WalletConnect) have session timeouts; implement graceful re-auth and persist session tokens securely","Expo managed workflow has limitations on native modules; if you need Bluetooth or advanced crypto, you may need to eject to bare React Native","Real-time WebSocket updates can drain battery on mobile; implement smart reconnection logic and pause updates when app is backgrounded","Order book depth and price feeds are served by dYdX Indexer; latency can vary; always show staleness indicator to user"],"references":[{"url":"https://docs.dydx.exchange","kind":"docs","label":"dYdX v4 Documentation"},{"url":"https://github.com/dydxprotocol/v4-clients","kind":"repo","label":"dydx-v4-client GitHub"},{"url":"https://docs.privy.io/guide/react-native","kind":"docs","label":"Privy Mobile Wallet Integration"},{"url":"https://docs.expo.dev","kind":"docs","label":"Expo Documentation"},{"url":"https://github.com/tradingview/lightweight-charts","kind":"repo","label":"Lightweight Charts Library"},{"url":"https://docs.walletconnect.com/2.0/","kind":"docs","label":"WalletConnect v2 Mobile"}],"time_estimate_hours":80,"projects":{"slug":"dydx"},"project_slug":"dydx","project":{"slug":"dydx","name":"dYdX","logo_url":"https://icons.llamao.fi/icons/protocols/dydx?w=64&h=64","category":"perps"}},{"id":"8df04f93-cfdc-4a77-83b6-cd279298cd58","project_id":"556e3ca7-1a32-43c5-8e08-8402d18d65c2","title":"Market Maker Strategy Sandbox","pitch":"Run a paper MM bot against live dYdX orderbook data with API key. Great onboarding to programmatic trading.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["python","dydx-v4-client","websockets"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:49.247723+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a local Python bot that connects to dYdX v4 via REST API, subscribes to real orderbook updates, simulates market-making strategies (spread-based quoting, inventory management), and tracks P&L on paper without risking capital. Learn order placement mechanics, latency patterns, and strategy tuning in a safe environment before deploying real capital or moving to production infrastructure.","learn_first":["dYdX v4 REST API structure and WebSocket streams","Orderbook mechanics: best bid/ask, spread, depth","Market-making basics: quoting, inventory risk, slippage","Python async/await for real-time data handling"],"tech_stack":{"ai":[],"data":["dYdX v4 REST API","dYdX v4 WebSocket streams"],"infra":["Python 3.10+","asyncio","websockets library"],"other":["dydx-v4-client library"],"wallet":[],"indexer":[],"frontend":[],"contracts":[]},"build_steps":["Set up Python project with dydx-v4-client, websockets, and pandas; create .env for API credentials (testnet first)","Authenticate to dYdX v4 REST API and fetch account info, available markets, and current positions","Subscribe to WebSocket stream for a single market (e.g., ETH-USD) to consume real-time orderbook snapshots","Parse orderbook JSON into a simple data structure (bid/ask levels, sizes); calculate mid-price and spread","Implement a basic MM strategy: post limit orders at mid ± spread, track orders in a local dict, handle order fills via WebSocket updates","Add paper trading state: simulate order placement (no actual API calls), track hypothetical P&L, log fills and cancellations","Build a simple CLI or loop to tune strategy params (spread width, order size, rebalance frequency) and observe live results","Run for 1–2 hours against testnet or mainnet data, log metrics (fill rate, slippage, P&L), and document learnings"],"gotchas":["dYdX v4 uses Cosmos SDK; order placement requires proper message signing with private keys—test on testnet first to avoid fund loss","WebSocket streams may lag or disconnect; implement reconnection logic with exponential backoff and state recovery","Orderbook snapshots are not guaranteed to be in order; always sort bids descending and asks ascending before calculating mid-price","Paper trading P&L does not account for gas fees, slippage on actual fills, or latency—real execution will differ significantly","Rate limits on REST API (check docs for current limits); use WebSocket for frequent updates and batch REST calls"],"references":[{"url":"https://docs.dydx.exchange/api","kind":"docs","label":"dYdX v4 API Documentation"},{"url":"https://github.com/dydxprotocol/v4-clients/tree/main/python","kind":"repo","label":"dYdX v4 Python Client Library"},{"url":"https://docs.dydx.exchange/api/websocket","kind":"docs","label":"dYdX v4 WebSocket Streams Guide"},{"url":"https://www.investopedia.com/terms/m/marketmaker.asp","kind":"article","label":"Market Making 101: Basics and Risks"},{"url":"https://docs.python.org/3/library/asyncio.html","kind":"docs","label":"Async Python with asyncio"}],"time_estimate_hours":60,"projects":{"slug":"dydx"},"project_slug":"dydx","project":{"slug":"dydx","name":"dYdX","logo_url":"https://icons.llamao.fi/icons/protocols/dydx?w=64&h=64","category":"perps"}},{"id":"5c71799b-aaa2-468d-8383-f44bf3f654f8","project_id":"556e3ca7-1a32-43c5-8e08-8402d18d65c2","title":"Validator Performance Index","pitch":"Ranks dYdX chain validators by uptime, missed blocks, and rewards. Useful for stakers picking a delegate.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","cosmos-sdk","ponder"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:47.489087+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that aggregates on-chain validator metrics from the dYdX Cosmos chain and surfaces them in a sortable, filterable interface. Stakers can see which validators are reliable (high uptime, low missed blocks), profitable (commission rates, estimated rewards), and trustworthy (slashing history, voting participation). Built with Next.js + Ponder indexer to pull validator state from dYdX RPC, stored in a lightweight database, and displayed with interactive charts. The index updates every block and helps delegators make informed staking decisions without manually querying the chain.","learn_first":["Cosmos SDK validator set queries","dYdX chain RPC endpoints","Ponder indexing patterns","Delegating and staking mechanics on Cosmos"],"tech_stack":{"ai":[],"data":["postgresql","redis"],"infra":["vercel","docker"],"other":["axios","ethers.js"],"wallet":[],"indexer":["ponder","cosmos-sdk"],"frontend":["nextjs","react","tailwindcss","recharts"],"contracts":[]},"build_steps":["Set up a Next.js project with TypeScript and Tailwind CSS for the dashboard UI.","Configure Ponder to index dYdX chain validator data by querying the Cosmos SDK staking module (validators, delegations, slashing events).","Create a PostgreSQL schema to store validator snapshots: address, moniker, commission, uptime, missed_blocks, total_power, slashing_history.","Write a Ponder indexer that polls the dYdX RPC endpoint every block to fetch current validator set and compute rolling uptime metrics (e.g., blocks signed in last 10k blocks).","Build a Next.js API route that queries the indexed data and returns validators sorted by uptime, commission, or rewards.","Create React components for the main dashboard: a sortable table of validators, detail cards showing uptime charts, commission rates, and delegation info.","Add filtering and search by validator moniker, and a simple delegation calculator showing estimated APY based on current commission and network rewards.","Deploy to Vercel with a PostgreSQL backend (e.g., Supabase or Railway) and set up incremental data refresh every 12 blocks."],"gotchas":["dYdX RPC rate limits can throttle frequent validator set queries; use a local node or batch requests via Ponder to stay under limits.","Uptime metrics require historical block signing data; backfill at least 10k blocks on first run to get meaningful percentages.","Validator monikers and metadata can change; cache them with a TTL and refresh on-chain state every hour to avoid stale display names.","Commission rates and slashing events are on-chain but not always indexed by default; ensure your Ponder schema explicitly watches the staking module's MsgUpdateParams and SlashEvent messages."],"references":[{"url":"https://docs.dydx.exchange","kind":"docs","label":"dYdX Chain Documentation"},{"url":"https://docs.cosmos.network/main/modules/staking","kind":"docs","label":"Cosmos SDK Staking Module"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://github.com/dydxprotocol","kind":"repo","label":"dYdX Protocol GitHub"},{"url":"https://hub.cosmos.network/main/validators/validator-faq.html","kind":"article","label":"Cosmos Validator Monitoring Best Practices"}],"time_estimate_hours":12,"projects":{"slug":"dydx"},"project_slug":"dydx","project":{"slug":"dydx","name":"dYdX","logo_url":"https://icons.llamao.fi/icons/protocols/dydx?w=64&h=64","category":"perps"}},{"id":"5c300941-c73f-4744-b314-7c34851794fb","project_id":"9f6af033-0db7-43e0-8644-ff94e741c5fd","title":"GLP Tax Helper","pitch":"Untangles GLP/GM rebases and ETH rewards into a proper cost-basis report for tax season.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:44.005662+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that pulls a user's GLP/GM transaction history from GMX contracts and The Graph, reconstructs cost basis across rebases and token splits, calculates realized/unrealized gains, and exports a tax-ready CSV or PDF. Handles the complexity that GLP rebases dilute holdings while distributing ETH rewards, making manual tracking impossible. Targets US tax filers who need Schedule D entries.","learn_first":["ERC-4626 vault mechanics and rebases","GMX GLP/GM token architecture","The Graph subgraph queries","Cost-basis accounting (FIFO vs. average-cost)","Web3 wallet connection patterns"],"tech_stack":{"data":["CSV export (papaparse)","jsPDF for PDF generation"],"infra":["Vercel"],"other":["ethers.js for contract ABI parsing"],"wallet":["wagmi","viem","RainbowKit"],"indexer":["The Graph (GMX subgraph)"],"frontend":["Next.js 14+","React","TypeScript","Tailwind CSS"],"contracts":["GMX GLP (ERC-20 with rebases)","GMX GM (ERC-4626 vault token)","GMX RewardRouter"]},"build_steps":["Set up Next.js 14 project with TypeScript, Tailwind, and wagmi/RainbowKit for wallet connection.","Query The Graph GMX subgraph for all Transfer, Mint, Burn, and Claim events for a given wallet address on Arbitrum.","Parse rebase events from GMX RewardRouter contract to map historical GLP/GM supply and ETH distribution per share.","Implement cost-basis calculator: track each buy/mint as a lot, apply rebase dilution to quantity, mark sells/burns against lots using FIFO or average-cost method.","Build a React form to let users select date range, cost-basis method (FIFO/average), and export format (CSV/PDF).","Fetch current prices from CoinGecko or Uniswap V3 TWAP to calculate unrealized gains at report date.","Generate CSV with columns: Date, Type (Buy/Sell/Rebase), Quantity, Price, Cost Basis, Proceeds, Gain/Loss, Cumulative Basis.","Deploy to Vercel and test with a known GMX holder's address; validate numbers against manual spot-checks."],"gotchas":["GLP rebases happen daily; you must fetch the exact rebase ratio for each day from The Graph or contract events, not just the current supply ratio.","ETH rewards are claimed separately and may not appear as transfers; query the RewardRouter Claim events and match them to the wallet.","The Graph GMX subgraph may lag by a few blocks; add a 'data freshness' timestamp and warn users if data is >1 hour old.","Tax rules vary by jurisdiction (US FIFO vs. UK pooling vs. no CGT in some countries); consider a disclaimer and allow method selection but don't give legal advice.","Decimal handling: GLP and GM use 18 decimals; use BigInt or a library like decimal.js to avoid floating-point errors in cost basis."],"references":[{"url":"https://docs.gmx.io/docs/trading/v2/overview","kind":"docs","label":"GMX Docs – GLP & GM Architecture"},{"url":"https://thegraph.com/hosted-service/subgraph/gmx-io/gmx-stats","kind":"tool","label":"GMX Subgraph (The Graph)"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://wagmi.sh","kind":"docs","label":"Wagmi Documentation"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Query Guide"},{"url":"https://github.com/gmx-io/gmx-contracts","kind":"repo","label":"GMX GitHub – Contracts"}],"time_estimate_hours":80,"projects":{"slug":"gmx"},"project_slug":"gmx","project":{"slug":"gmx","name":"GMX","logo_url":"https://icons.llamao.fi/icons/protocols/gmx-v2?w=64&h=64","category":"perps"}},{"id":"0342e835-73fc-47ce-9f43-8a9829e26c69","project_id":"556e3ca7-1a32-43c5-8e08-8402d18d65c2","title":"dYdX Funding Arb Scanner","pitch":"Pulls funding rates across dYdX, Binance, Hyperliquid and flags clean cash-and-carry opportunities.","difficulty":"weekend","use_case":"trading","build_with":["node","dydx-v4-client","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:43.084163+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time funding rate arbitrage scanner that monitors perpetual funding rates across dYdX (Cosmos), Binance, and Hyperliquid to identify profitable cash-and-carry trades. The tool fetches current funding rates, calculates spreads accounting for borrowing costs and exchange fees, and alerts traders to actionable opportunities. This is a practical trading tool that solves the friction of manual rate checking across three major venues.","learn_first":["How perpetual funding rates work and why they create arbitrage","dYdX v4 indexer and gRPC API structure","Binance and Hyperliquid API rate limits and authentication","Basic cash-and-carry math: long on low-rate venue, short on high-rate venue"],"tech_stack":{"data":["dYdX v4 indexer (gRPC)","Binance REST API","Hyperliquid REST API"],"infra":["Node.js with TypeScript","node-cron for polling","dotenv for secrets"],"other":["SQLite or in-memory store for rate history","Discord webhook for alerts"]},"build_steps":["Set up a Node.js + TypeScript project with dydx-v4-client, axios, and node-cron","Implement a dYdX v4 gRPC client to fetch perpetual markets and current funding rates using the indexer endpoint","Create Binance API client to poll USDT perpetual funding rates for BTC, ETH, SOL (use testnet first)","Create Hyperliquid API client to fetch funding rates for the same assets","Build a rate comparison engine that calculates net arbitrage: (short_rate - long_rate) - (borrowing_cost + exchange_fees)","Set up a polling loop (every 30–60 seconds) that fetches all three venues and stores rates in SQLite with timestamps","Implement alert logic: flag spreads >0.02% annualized and send to Discord webhook or stdout","Test with live data on testnet/paper trading, validate calculations against manual spot checks"],"gotchas":["dYdX v4 gRPC endpoints may have rate limits; use connection pooling and respect backoff","Funding rates update at different intervals per venue (dYdX every block, Binance every 8h, Hyperliquid hourly); sync your polling to avoid stale data","Exchange fees vary (maker/taker, volume tier); hardcode conservative estimates or fetch from API","Borrowing costs for cash-and-carry vary by asset and venue; assume 0.01–0.05% daily for initial screening","Clock skew across your machine and exchange servers can cause false alerts; use NTP sync or add a 2-minute buffer"],"references":[{"url":"https://docs.dydx.exchange/indexer/indexer_api","kind":"docs","label":"dYdX v4 Indexer gRPC API"},{"url":"https://github.com/dydxprotocol/v4-clients/tree/main/typescript","kind":"repo","label":"dYdX v4 Client Library (TypeScript)"},{"url":"https://binance-docs.github.io/apidocs/futures/en/","kind":"docs","label":"Binance Perpetual Futures API"},{"url":"https://hyperliquid.gitbook.io/hyperliquid-docs/api","kind":"docs","label":"Hyperliquid API Reference"},{"url":"https://www.binance.com/en/support/faq/360033524991","kind":"article","label":"Funding Rate Arbitrage Primer"}],"time_estimate_hours":6,"projects":{"slug":"dydx"},"project_slug":"dydx","project":{"slug":"dydx","name":"dYdX","logo_url":"https://icons.llamao.fi/icons/protocols/dydx?w=64&h=64","category":"perps"}},{"id":"f672aa51-cc51-4cce-aa39-3d7df6ddd5da","project_id":"9f6af033-0db7-43e0-8644-ff94e741c5fd","title":"Trader Copy Trading App","pitch":"Permissionless copy-trading of top GMX traders, with risk caps and auto-replay of trades into your account.","difficulty":"1+ month","use_case":"trading","build_with":["foundry","gmx-sdk","nextjs","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:39.528724+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a decentralized copy-trading platform for GMX perpetuals that lets users mirror the positions of top traders with configurable risk limits, position sizing, and stop-loss controls. Monitor on-chain trader activity via indexer, detect entry/exit signals, and execute mirrored trades through GMX contracts. Users deposit collateral into a vault, set a cap on max position size and leverage, and the system automatically replicates tracked traders' moves. Include a leaderboard of tracked traders ranked by returns, win rate, and Sharpe ratio. Revenue comes from a small fee on copied trades (e.g., 0.5–2% of trade value) or a performance fee on gains.","learn_first":["GMX V2 order flow and position lifecycle","Chainlink Automation or Gelato for trigger-based execution","ERC-4626 vault pattern for collateral management","Event indexing strategies for real-time trader detection"],"tech_stack":{"ai":[],"data":["Subgraph queries for leaderboard and trader stats","Ponder real-time event stream for live position updates"],"infra":["Vercel for frontend","Arbitrum and Avalanche RPC endpoints (Alchemy or Infura)"],"other":["Gelato Web3 Functions for serverless order execution"],"wallet":["RainbowKit for wallet connection","Privy for optional social login"],"indexer":["Ponder for real-time GMX event indexing","Subgraph (The Graph) as fallback for historical queries"],"frontend":["Next.js with TypeScript","wagmi + viem for contract interaction","TanStack Query for server state","Recharts or Lightweight Charts for performance charts"],"contracts":["ERC-4626 vault for collateral pooling","GMX V2 Router and OrderBook for trade execution","Chainlink Automation or Gelato Network for conditional order triggers"]},"build_steps":["Set up Foundry project with GMX V2 contracts; write ERC-4626 vault that accepts USDC/ETH and tracks user shares.","Index GMX IncreasePosition and DecreasePosition events via Ponder; expose REST API with trader stats (PnL, win rate, avg leverage).","Build Next.js dashboard: connect wallet, display top traders leaderboard, show tracked traders' live positions and P&L.","Implement copy-trading logic: user selects trader to copy, sets max position size and leverage multiplier; vault stores these settings.","Write Gelato Web3 Function that polls Ponder API every 30s, detects when a tracked trader opens/closes a position, and queues a mirrored trade.","Integrate GMX V2 Router in Web3 Function to execute mirrored orders; include slippage protection and position-size scaling based on user's collateral.","Add risk controls: position-size caps, max leverage, stop-loss automation via Chainlink Automation or manual close button.","Deploy to Arbitrum testnet, test with mock traders, then mainnet; add analytics dashboard showing copy-trader performance vs. tracked traders."],"gotchas":["GMX V2 uses a keeper network for order execution—your mirrored order may execute at a different price than the original trader's; build in slippage tolerance and consider partial fills.","Ponder indexing can lag 1–2 blocks; if a trader closes a position in the same block it opens, you may miss the signal or execute after they've exited.","Gelato Web3 Functions have cold-start latency (~5–10s); for fast-moving markets, consider running a dedicated keeper bot on a VPS instead.","Users can withdraw collateral at any time, but open positions are locked; you need a queue or forced liquidation mechanism if vault TVL drops below open position collateral.","GMX V2 has different market conditions per asset (funding rates, max OI); copying a trader's 50x BTC position may fail if BTC market is at max OI—gracefully degrade to lower leverage or skip."],"references":[{"url":"https://docs.gmx.io","kind":"docs","label":"GMX V2 Docs"},{"url":"https://github.com/gmx-io/gmx-contracts","kind":"repo","label":"GMX V2 GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://docs.gelato.network/web3-services/web3-functions","kind":"docs","label":"Gelato Web3 Functions"},{"url":"https://docs.chain.link/chainlink-automation","kind":"docs","label":"Chainlink Automation Docs"}],"time_estimate_hours":200,"projects":{"slug":"gmx"},"project_slug":"gmx","project":{"slug":"gmx","name":"GMX","logo_url":"https://icons.llamao.fi/icons/protocols/gmx-v2?w=64&h=64","category":"perps"}},{"id":"6a4d9587-e7c6-4147-93e1-a4f87ae363c0","project_id":"9f6af033-0db7-43e0-8644-ff94e741c5fd","title":"Funding Rate Strategy Backtester","pitch":"Backtest delta-neutral GMX funding capture strategies against historical funding data.","difficulty":"1-2 weeks","use_case":"trading","build_with":["python","gmx-stats","pandas","backtrader"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:36.65339+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a Python backtester that simulates delta-neutral positions on GMX perpetuals, capturing funding rates while hedging directional exposure. Ingest historical funding rates, entry/exit prices, and borrowing costs from GMX subgraph or on-chain data, then replay trades to measure Sharpe ratio, max drawdown, and net funding collected. Output performance metrics and identify optimal rebalance frequencies and position sizing for different market regimes.","learn_first":["funding rate mechanics (long/short imbalance drives rates)","delta-neutral hedging (short perp + long spot or vice versa)","GMX architecture (GLP/GM pool collateral, price feeds)","slippage and execution costs on GMX"],"tech_stack":{"data":["The Graph (GMX subgraph)","gmx-stats API"],"infra":["pandas","numpy"],"other":["backtrader or custom event-loop backtester","matplotlib for equity curves"]},"build_steps":["Set up Python env with pandas, numpy, backtrader; clone gmx-stats repo or query The Graph for historical funding rates, open interest, and mark prices.","Design data schema: timestamp, funding_rate, mark_price, index_price, long_oi, short_oi, collateral_available; backfill 6–12 months of hourly or 4h candles.","Implement position entry logic: when funding rate > threshold, open long perp + short spot (or vice versa); size based on available collateral and max leverage cap.","Add rebalance rules: check delta every N hours; if spot drifts >5% from perp, close and re-enter; track realized funding collected per rebalance.","Model transaction costs: GMX opening fee (~0.1%), closing fee (~0.05%), slippage on spot hedge (assume 0.2–0.5% depending on liquidity), borrow cost if shorting spot.","Run backtest loop: iterate through time series, execute entries/exits, accumulate PnL (funding + realized delta moves + costs); compute Sharpe, max DD, win rate, avg funding per day.","Validate against live GMX data: pick a recent week, compare backtest assumptions (fees, slippage) against actual trade fills; adjust cost model.","Output results: equity curve plot, monthly returns table, funding collected vs. realized losses, sensitivity analysis (funding threshold, rebalance frequency, leverage)."],"gotchas":["Funding rates are paid at discrete intervals (usually every 1h on GMX); if you backtest at sub-hourly resolution, you must account for when funding actually settles—off by one interval breaks the model.","GMX has position caps per market and per collateral pool; your backtest must respect these or you'll over-allocate capital. Check GLP/GM utilization in subgraph.","Spot hedge liquidity varies wildly; if you're hedging on a DEX like Uniswap, slippage can exceed 1% for large size. Backtest with realistic order sizes and liquidity snapshots, not just fixed slippage %.","Funding rates are mean-reverting but not stationary; a strategy profitable in bull market (high long bias, negative funding) may blow up in bear market (high short bias, positive funding). Stress-test across regimes.","Historical funding data from subgraph may have gaps or incorrect values if indexer fell behind; validate by spot-checking against GMX UI snapshots or Dune queries."],"references":[{"url":"https://docs.gmx.io/docs/trading/perpetuals#funding-rates","kind":"docs","label":"GMX Docs – Funding Rates"},{"url":"https://thegraph.com/hosted-service/subgraph/gmx-io/gmx-arbitrum","kind":"tool","label":"GMX Subgraph (Arbitrum)"},{"url":"https://github.com/gmx-io/gmx-stats","kind":"repo","label":"gmx-stats Repository"},{"url":"https://www.backtrader.com/","kind":"docs","label":"Backtrader Documentation"},{"url":"https://www.paradigm.xyz/","kind":"article","label":"Delta-Neutral Strategies in Crypto (Paradigm Research)"}],"time_estimate_hours":80,"projects":{"slug":"gmx"},"project_slug":"gmx","project":{"slug":"gmx","name":"GMX","logo_url":"https://icons.llamao.fi/icons/protocols/gmx-v2?w=64&h=64","category":"perps"}},{"id":"dbb23aea-da3f-4f0a-910c-be9960e92494","project_id":"4ad20cbf-a191-4132-a902-67a8f3ca7753","title":"Custom Strategy Builder","pitch":"Low-code wizard for new strategy providers to design and submit Sommelier cellars.","difficulty":"1+ month","use_case":"infrastructure","build_with":["nextjs","foundry","typescript"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:32.840719+00:00","metadata":{},"source":"curated","why_now":"Sommelier is expanding its cellar ecosystem and actively seeking new strategy providers. Lowering the technical barrier to cellar creation directly increases the number of strategies available on the platform, benefiting both Sommelier and yield-seeking users. Institutional interest in automated yield is high, and many teams have strategies but lack Solidity expertise.","source_signal_ids":[],"published_at":null,"summary":"Sommelier cellars are automated vaults that execute complex yield strategies across multiple chains. Today, creating a new cellar requires deep Solidity expertise and manual contract deployment. This project builds a no-code/low-code interface where strategy providers can define their cellar's core logic—which tokens to hold, rebalancing triggers, risk limits, and target chains—then generate a production-ready cellar contract and submit it to Sommelier governance. The builder should guide users through: (1) selecting base strategy type (e.g., concentrated liquidity, staking, lending), (2) configuring positions and rebalancing rules via a visual editor, (3) setting risk parameters (slippage, max drawdown, position limits), (4) choosing deployment chains, (5) generating and testing the contract, and (6) preparing a governance proposal. This lowers the barrier for institutional yield strategists and quant teams to launch cellars on Sommelier.","learn_first":["ERC-4626 vault standard","Sommelier cellar architecture and governance","Uniswap V3 concentrated liquidity (or other core DeFi primitive your strategy targets)","Solidity templating and code generation","Cross-chain messaging basics (Axelar or IBC)"],"tech_stack":{"ai":[],"data":["The Graph (for Sommelier cellar and position data)","Ponder (optional, for custom indexing of strategy submissions)"],"infra":["Foundry (local testing)","Etherscan/Arbiscan/Optimiscan APIs for contract verification"],"other":["Sommelier SDK (if available) or direct contract ABIs"],"wallet":["RainbowKit","Wagmi"],"indexer":[],"frontend":["Next.js 14+","React","TypeScript","TailwindCSS","Wagmi v2","Viem","RainbowKit (for wallet connection)","React Flow or similar for visual strategy editor"],"contracts":["Foundry (for contract generation and testing)","OpenZeppelin ERC-4626","Sommelier cellar base contracts"]},"build_steps":["Set up Next.js project with Wagmi, Viem, and RainbowKit; create basic wallet connection and chain selector (Ethereum, Arbitrum, Optimism, Base).","Design and build the strategy configuration UI: a multi-step form covering (a) strategy type selection, (b) token/position inputs, (c) rebalancing rules (e.g., Uniswap V3 tick ranges, lending protocol selection), (d) risk parameters (slippage tolerance, max position size).","Implement a visual strategy editor using React Flow: nodes for positions, edges for rebalancing logic, and a canvas to preview the strategy DAG.","Build a Solidity template engine (use Handlebars or similar) that generates a cellar contract scaffold from the user's configuration; include ERC-4626 compliance and Sommelier-specific hooks.","Integrate Foundry backend: compile generated contracts, run unit tests (e.g., position entry/exit, rebalancing), and generate a test report shown in the UI.","Add chain-specific deployment logic: generate constructor args for each selected chain, estimate gas, and prepare deployment transactions (do not auto-deploy; require user signature).","Implement governance proposal builder: format cellar metadata, strategy description, and risk parameters into a Sommelier governance proposal template; show preview and allow download/submission.","Build a dashboard showing submitted cellars, their status in governance, and historical performance metrics pulled from The Graph."],"gotchas":["Solidity code generation is fragile: small template errors lead to non-compiling contracts. Invest heavily in test coverage and schema validation before generating code.","Cross-chain rebalancing logic is complex: ensure your template handles chain-specific gas costs, bridge delays, and liquidity fragmentation. Start with single-chain cellars first.","Sommelier governance has specific requirements (voting period, proposal format, etc.); coordinate with the Sommelier team early to ensure your generated proposals are compliant.","Users may not understand the risk/reward tradeoffs of their strategy; add educational tooltips and a risk score calculator to prevent dangerous configurations.","Contract verification on multiple chains can fail if constructor args or bytecode don't match exactly; automate this and provide clear error messages."],"references":[{"url":"https://docs.sommelier.finance","kind":"docs","label":"Sommelier Docs"},{"url":"https://github.com/PeggyJV","kind":"repo","label":"Sommelier GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Book"},{"url":"https://wagmi.sh","kind":"docs","label":"Wagmi Documentation"},{"url":"https://reactflow.dev","kind":"tool","label":"React Flow"}],"time_estimate_hours":200,"projects":{"slug":"sommelier"},"project_slug":"sommelier","project":{"slug":"sommelier","name":"Sommelier","logo_url":"https://icons.llamao.fi/icons/protocols/sommelier?w=64&h=64","category":"yield"}},{"id":"0413997a-49d4-4d31-8754-1228afc24cb2","project_id":"9f6af033-0db7-43e0-8644-ff94e741c5fd","title":"GM Pool Risk Decomposer","pitch":"Real-time view of each GMX V2 GM pool's trader P&L exposure, utilization, and 'is the LP profitable now' signal.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","gmx-api","the-graph"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:32.326243+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that surfaces the financial health of GMX V2 GM pools by decomposing key risk metrics: current trader P&L (long/short imbalance), pool utilization rate, funding rates, and net LP profitability. Builders can query GMX subgraphs and on-chain data to show LPs whether their capital is earning or losing, and traders whether pools are skewed (high slippage risk). The tool helps both constituencies make better capital allocation decisions.","learn_first":["GMX V2 architecture (GM tokens, pool mechanics)","Subgraph queries for GMX events and pool state","Real-time P&L calculation from trader positions"],"tech_stack":{"data":["The Graph (GMX subgraph)","GMX API (if available)","ethers.js or viem for on-chain reads"],"infra":["Vercel or similar","Arbitrum RPC","Avalanche RPC"],"frontend":["Next.js","React","TailwindCSS","Recharts or Chart.js"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS.","Create a schema for GM pool state: total AUM, long/short OI, funding rates, realized/unrealized trader P&L.","Write GraphQL queries against The Graph's GMX V2 subgraph to fetch pool events, position opens/closes, and settlement data.","Build a data aggregation layer that calculates: (1) net trader P&L by pool, (2) LP utilization %, (3) current funding rate, (4) estimated LP P&L.","Create React components for pool cards showing key metrics: pool name, TVL, trader P&L, LP profitability indicator (green/red).","Add a detail view per pool with time-series charts (P&L over 7d, utilization, funding rate trends).","Deploy to Vercel and wire up RPC endpoints for Arbitrum and Avalanche.","Test with live GMX pools and validate P&L calculations against GMX UI."],"gotchas":["GMX V2 uses a different architecture than V1 (GM tokens instead of GLP); ensure you're querying the correct subgraph version and contract addresses.","Trader P&L is realized only at settlement; unrealized P&L requires tracking open positions and current mark prices, which can be expensive to compute in real-time.","Funding rates and borrow fees are updated on-chain at intervals; your dashboard will lag slightly behind true current state unless you poll frequently.","The Graph indexing can lag by 1–2 blocks; for a 'live' feel, consider supplementing subgraph data with direct RPC calls for the most recent block."],"references":[{"url":"https://docs.gmx.io","kind":"docs","label":"GMX V2 Documentation"},{"url":"https://thegraph.com/explorer/subgraphs/98Dvv75qKqDJrujDS3SQgGP6QRvFXXHCXvCQWXD92FKJ?view=About","kind":"tool","label":"GMX V2 Subgraph (The Graph)"},{"url":"https://github.com/gmx-io/gmx-synthetics","kind":"repo","label":"GMX GitHub (V2 contracts)"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Vault Standard (GM token reference)"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"}],"time_estimate_hours":12,"projects":{"slug":"gmx"},"project_slug":"gmx","project":{"slug":"gmx","name":"GMX","logo_url":"https://icons.llamao.fi/icons/protocols/gmx-v2?w=64&h=64","category":"perps"}},{"id":"8e70ca3f-8e05-441c-a5c9-ed80ddbe1069","project_id":"4ad20cbf-a191-4132-a902-67a8f3ca7753","title":"Strategy Logic Decoder","pitch":"AI that reads any Sommelier strategy's cellar configuration and explains its trading logic in plain English.","difficulty":"1-2 weeks","use_case":"security","build_with":["openrouter","nextjs","viem","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:25.615421+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web app that ingests Sommelier cellar ABIs and on-chain state, then uses an LLM to decode the strategy's intent, position management rules, and risk parameters into human-readable summaries. Useful for auditors, LPs evaluating vaults, and developers reverse-engineering strategies. The decoder parses cellar positions, adaptor calls, and rebalance logic, then prompts Claude or GPT-4 with structured context to generate explanations.","learn_first":["Sommelier cellar architecture and adaptors","ERC-4626 vault interface","LLM prompt engineering for code explanation","Subgraph querying for on-chain state"],"tech_stack":{"ai":["openrouter","claude-3.5-sonnet"],"data":["viem","ethers.js"],"infra":["openrouter","vercel"],"other":["typescript"],"wallet":[],"indexer":["the-graph"],"frontend":["nextjs","react","tailwindcss"],"contracts":[]},"build_steps":["Set up a Next.js app with TypeScript and Tailwind; scaffold pages for cellar input (address field) and output (decoded strategy display)","Use viem to fetch cellar ABI from Etherscan or Sommelier's contract registry; parse the ABI to identify position management functions and adaptor calls","Query The Graph (Sommelier subgraph if available, or build a minimal indexer) to fetch recent cellar state: current positions, adaptor configs, and rebalance history","Extract strategy metadata: adaptor names, position limits, fee structure, and rebalance triggers; structure this as JSON context","Build a prompt template that feeds the cellar's ABI, current state, and recent transactions to Claude via OpenRouter; ask the model to explain the strategy's goals, risk profile, and mechanics","Implement the LLM call with streaming to show real-time explanation generation in the UI","Add a position breakdown view showing each adaptor's role and current allocation; cross-reference with the LLM's explanation","Test with 3–5 live Sommelier cellars (e.g., Turbo Staked ETH, Real Yield USD); refine prompts based on accuracy and clarity"],"gotchas":["Sommelier adaptors are custom and evolve; your decoder must handle unknown adaptors gracefully—fall back to bytecode inspection or flag them for manual review","Cellar state changes frequently; cache ABI and strategy metadata but refresh on-chain positions on every request to avoid stale explanations","LLM hallucination: Claude may invent adaptor behavior; mitigate by grounding prompts in actual function signatures and recent transaction logs, not just ABI names","The Graph subgraph for Sommelier may lag or have incomplete indexing; validate critical state against direct RPC calls using viem","Cross-chain complexity: cellars span Ethereum, Arbitrum, Optimism, Base; your app must support multi-chain queries without conflating state—use chain ID in all queries"],"references":[{"url":"https://docs.sommelier.finance","kind":"docs","label":"Sommelier Cellar Architecture Docs"},{"url":"https://github.com/PeggyJV","kind":"repo","label":"Sommelier GitHub (Cellar & Adaptor Code)"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Reference"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Query Language (GraphQL)"}],"time_estimate_hours":80,"projects":{"slug":"sommelier"},"project_slug":"sommelier","project":{"slug":"sommelier","name":"Sommelier","logo_url":"https://icons.llamao.fi/icons/protocols/sommelier?w=64&h=64","category":"yield"}},{"id":"401e26bb-0760-4400-a49e-e7e6a6adb12c","project_id":"4ad20cbf-a191-4132-a902-67a8f3ca7753","title":"Cross-chain Vault Bridge","pitch":"UI that lets users deposit into Sommelier vaults from any chain via LayerZero. Removes the 'wrong chain' friction.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","layerzero-sdk","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:23.400072+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A multi-chain deposit interface that abstracts away chain selection for Sommelier vault deposits. Users on Ethereum, Arbitrum, Optimism, or Base can deposit stablecoins or target assets directly into Sommelier vaults without manually bridging or swapping chains first. The UI detects the user's connected chain, quotes gas + bridge costs, and executes a LayerZero cross-chain message to mint vault shares on the destination chain. This reduces friction for retail users unfamiliar with multi-chain mechanics and increases vault TVL by lowering onboarding barriers.","learn_first":["LayerZero OFT (Omnichain Fungible Token) standard","Sommelier vault architecture and deposit flow","Cross-chain message passing and gas estimation","wagmi hooks for multi-chain wallet detection"],"tech_stack":{"ai":[],"data":["LayerZero endpoint contract ABIs","Sommelier vault registry (on-chain or API)"],"infra":["Vercel for hosting","Alchemy or Infura RPC endpoints for each chain"],"other":["LayerZero testnet for staging"],"wallet":["RainbowKit","Privy (optional for email login)"],"indexer":[],"frontend":["Next.js 14+ with App Router","wagmi for wallet connection and contract calls","viem for low-level contract interaction","RainbowKit for wallet UI","TailwindCSS for styling"],"contracts":["LayerZero OFT adapter for Sommelier vault tokens","Simple deposit router contract on each chain"]},"build_steps":["Set up Next.js project with wagmi, viem, and RainbowKit; configure multi-chain support (Ethereum, Arbitrum, Optimism, Base)","Create a simple contract on each chain that accepts deposits and sends a LayerZero message to the destination vault chain","Integrate LayerZero SDK to estimate cross-chain gas fees and construct OFT send transactions","Build a chain selector component that shows user's current chain and available destination vaults","Implement deposit form with token input, destination vault selection, and gas/bridge cost preview","Add transaction simulation using viem's simulateContract to catch reverts before sending","Create a transaction status tracker that listens to LayerZero message delivery events","Deploy to testnet, test end-to-end deposit flow across all four chains"],"gotchas":["LayerZero gas estimation can be volatile; always add a 20–30% buffer and allow user override before sending","Sommelier vaults may have deposit caps or minimum amounts; validate these on-chain before quoting","Cross-chain finality varies by chain; set realistic expectations for settlement time (e.g., 10–30 minutes for Arbitrum to Ethereum)","Token decimals and vault share calculations differ per chain; normalize inputs and outputs carefully to avoid rounding errors","LayerZero testnet faucets and endpoints differ from mainnet; test with real testnets (Sepolia, Arbitrum Sepolia, OP Sepolia, Base Sepolia)"],"references":[{"url":"https://docs.layerzero.network/v2/developers/evm/oft/overview","kind":"docs","label":"LayerZero OFT Standard"},{"url":"https://docs.sommelier.finance","kind":"docs","label":"Sommelier Vault Documentation"},{"url":"https://wagmi.sh/react/guides/multiple-chains","kind":"docs","label":"wagmi Multi-Chain Guide"},{"url":"https://viem.sh/docs/contract/simulateContract","kind":"docs","label":"viem Contract Interaction"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup"},{"url":"https://github.com/LayerZero-Labs/LayerZero-v2","kind":"repo","label":"LayerZero GitHub Examples"}],"time_estimate_hours":80,"projects":{"slug":"sommelier"},"project_slug":"sommelier","project":{"slug":"sommelier","name":"Sommelier","logo_url":"https://icons.llamao.fi/icons/protocols/sommelier?w=64&h=64","category":"yield"}},{"id":"eec978c3-8c32-4ef4-ba61-9956a58f61bf","project_id":"4ad20cbf-a191-4132-a902-67a8f3ca7753","title":"Strategy Provider Leaderboard","pitch":"Compare every Sommelier strategy provider's historical performance, drawdown, and current strategies.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","sommelier-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:20.868399+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A public leaderboard dashboard that aggregates and ranks all active Sommelier strategy providers by key metrics: total value locked, historical returns, maximum drawdown, Sharpe ratio, and current vault allocations. Users can filter by chain, asset class, and risk profile. Strategy providers gain visibility and credibility; users discover high-performing vaults. Data refreshes hourly from the Sommelier API and on-chain state.","learn_first":["Sommelier vault architecture and strategy provider model","ERC-4626 vault standard basics","How to query Sommelier API for vault and provider data","Time-series performance calculation (returns, drawdown, Sharpe)"],"tech_stack":{"data":["Sommelier API (REST)","viem for on-chain vault state queries","ethers.js or viem for historical event decoding"],"infra":["Vercel for hosting","node-cron or similar for hourly data refresh"],"frontend":["Next.js 14+","React","TailwindCSS","Recharts or Chart.js for performance charts"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for /leaderboard and /provider/[id]","Create data fetching layer: write functions to call Sommelier API endpoints for all vaults, providers, and historical performance data","Implement on-chain queries using viem to fetch current TVL, asset balances, and vault metadata from Ethereum, Arbitrum, Optimism, and Base","Build performance calculation engine: compute returns (period-over-period), max drawdown, and Sharpe ratio from historical price/balance snapshots","Create leaderboard table component with sorting and filtering by chain, asset type, and risk metrics; add pagination for 100+ providers","Add individual provider detail pages showing strategy description, current allocations, performance chart over 1m/3m/1y, and linked vaults","Set up hourly data refresh using node-cron or a simple API route that re-fetches Sommelier API and stores results in memory or a lightweight DB (Supabase)","Deploy to Vercel, test with live data, and add basic error handling for API downtime"],"gotchas":["Sommelier API rate limits: batch requests and cache aggressively; consider storing snapshots in a lightweight DB instead of querying every page load","Performance metrics (Sharpe, drawdown) require historical price data; if Sommelier API doesn't provide raw snapshots, you'll need to query vault token prices from a price oracle (Pyth, Chainlink) or DEX liquidity pools","Multi-chain aggregation: ensure you're querying the correct RPC and contract addresses for each chain; Sommelier deployments differ across Arbitrum, Optimism, and Base","Stale data risk: if hourly refresh fails silently, users see outdated leaderboards; add a 'last updated' timestamp and monitoring alerts"],"references":[{"url":"https://docs.sommelier.finance","kind":"docs","label":"Sommelier Docs"},{"url":"https://docs.sommelier.finance/developers/api","kind":"docs","label":"Sommelier API Reference"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://github.com/PeggyJV","kind":"repo","label":"Sommelier GitHub"},{"url":"https://recharts.org","kind":"tool","label":"Recharts for React Charts"}],"time_estimate_hours":16,"projects":{"slug":"sommelier"},"project_slug":"sommelier","project":{"slug":"sommelier","name":"Sommelier","logo_url":"https://icons.llamao.fi/icons/protocols/sommelier?w=64&h=64","category":"yield"}},{"id":"b0673862-29e3-49c1-9f89-94672d73f3d3","project_id":"0252dc6e-3ed6-4adb-97c1-f9b36425bb64","title":"Boost Lock Calculator","pitch":"Models how much vlAURA you need to lock to break even given your LP size and current boost APY.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:18.165471+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web calculator that helps Balancer LPs determine the optimal vlAURA lock amount to maximize yield. Users input their LP token balance and current pool APY, and the tool calculates the breakeven vlAURA lock size, projected yield gains at different lock tiers, and ROI timeline. Integrates live Aura boost data and Balancer pool metrics to show real-time scenarios. Useful for LPs deciding whether to enter the Aura ecosystem or increase their lock commitment.","learn_first":["Balancer liquidity pools and BAL token economics","Aura Finance vlAURA locking mechanics and boost multipliers","Convex-style vote-escrow (ve) tokenomics","ERC-20 token balances and on-chain data queries"],"tech_stack":{"data":["Balancer API for pool APY data","Aura on-chain boost multiplier contract calls"],"infra":["Vercel"],"other":["ethers.js (optional fallback)"],"wallet":["wagmi","viem","RainbowKit"],"indexer":["The Graph (Balancer subgraph)","The Graph (Aura subgraph)"],"frontend":["Next.js 15+","React 19","TailwindCSS","shadcn/ui"],"contracts":["Balancer Vault (read-only)","Aura Locker (read-only)","Balancer Gauge (read-only)"]},"build_steps":["Set up Next.js project with TypeScript, TailwindCSS, and shadcn/ui components","Install and configure wagmi + viem for multi-chain RPC calls (Ethereum, Arbitrum, Optimism, Base, Polygon)","Create a form component accepting LP token amount and optional pool address input","Query Balancer subgraph via The Graph to fetch pool APY, current BAL emissions, and gauge data","Query Aura Locker contract via viem to read current boost multipliers and vlAURA lock tiers","Build calculation logic: (LP value × base APY × boost multiplier) - (vlAURA lock cost × lock APY) = net gain","Fetch real-time token prices (AURA, BAL, LP token) from an oracle (Coingecko API or on-chain Chainlink)","Display results in a table showing breakeven vlAURA, ROI timeline, and boost scenarios at 1x, 1.5x, 2.5x multipliers"],"gotchas":["Boost multipliers decay over time as vlAURA locks expire; calculator must account for lock decay schedules and re-locking costs","Balancer pool APYs are highly volatile and depend on trading volume and BAL incentive schedules; use 7-day or 30-day averages rather than spot rates","vlAURA lock amounts have minimum thresholds and discrete tiers; don't assume continuous scaling—round to actual lockable amounts","Aura's boost formula includes both veBAL voting power and vlAURA lock amount; ensure you're reading the correct boost contract state, not stale data","Different chains have different pool compositions and boost availability; Ethereum mainnet has the deepest liquidity but higher gas costs for locking"],"references":[{"url":"https://docs.aura.finance","kind":"docs","label":"Aura Finance Docs"},{"url":"https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-v2","kind":"docs","label":"Balancer Subgraph (The Graph)"},{"url":"https://github.com/aurafinance","kind":"repo","label":"Aura GitHub"},{"url":"https://docs.balancer.fi/concepts/governance/veBAL.html","kind":"docs","label":"Balancer Gauge & Boost Mechanics"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Query Examples"}],"time_estimate_hours":16,"projects":{"slug":"aura"},"project_slug":"aura","project":{"slug":"aura","name":"Aura","logo_url":"https://icons.llamao.fi/icons/protocols/aura?w=64&h=64","category":"yield"}},{"id":"2efd4318-5503-40d4-90db-7912a75c0217","project_id":"0252dc6e-3ed6-4adb-97c1-f9b36425bb64","title":"vlAURA Voting Bot","pitch":"Auto-votes weekly with vlAURA to a configured strategy (max bribes, max BAL, custom). Includes auto-relock.","difficulty":"1-2 weeks","use_case":"automation","build_with":["foundry","gelato","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:13.317508+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Gelato-automated bot that votes vlAURA holdings on Balancer gauge weights according to a configurable strategy (maximize bribes, maximize BAL emissions, or custom weighted logic), then auto-relocks expired vlAURA to maintain boost. Solves the friction of manual weekly voting and relocking for liquidity providers who want passive yield optimization without governance overhead. Runs on Ethereum mainnet with optional cross-chain deployments to Arbitrum, Optimism, Base, and Polygon.","learn_first":["Balancer gauge voting mechanics","vlAURA locking and relock patterns","Gelato task automation (Web3 Functions)","Aura's vote escrow (ve) contract interface","Bribe aggregation data sources"],"tech_stack":{"ai":[],"data":["Aura Finance API or subgraph for bribe data","Balancer subgraph for gauge weights and emissions"],"infra":["Gelato Web3 Functions","Etherscan/block explorer for vote verification"],"other":["Viem for contract interactions","Foundry for testing and deployment"],"wallet":[],"indexer":["The Graph (Balancer subgraph for gauge data)","Ponder (optional, for real-time bribe tracking)"],"frontend":[],"contracts":["Aura vlAURA contract (ve)","Balancer GaugeController","Aura's voting snapshot or on-chain vote storage"]},"build_steps":["Set up a Foundry project with Aura and Balancer contract ABIs; write tests for vote encoding and relock logic.","Create a voting strategy interface: define enums for MAX_BRIBES, MAX_BAL, CUSTOM_WEIGHTS; implement vote calculation logic that reads current gauge state and bribe data.","Build a Gelato Web3 Function (TypeScript) that: (a) fetches current vlAURA balance, (b) queries bribe aggregator (e.g., Aura's API or subgraph), (c) calculates optimal vote allocation, (d) encodes the vote call.","Implement the on-chain voting contract: a simple executor that receives vote data from Gelato, validates it, and calls GaugeController.vote_for_gauge_weights() for each gauge.","Add relock logic: detect when vlAURA lock is expiring (< 1 week remaining), call Aura's re_lock() function to extend the lock period.","Deploy the voting contract to Ethereum mainnet; register the Gelato Web3 Function with a weekly cron trigger (e.g., every Thursday at 12 UTC).","Write a config file (JSON or env-based) that lets users specify: strategy type, custom gauge weights (if CUSTOM), max slippage, and relock threshold.","Test end-to-end: mock a vote cycle, verify vote encoding, confirm Gelato execution, and validate relock on-chain."],"gotchas":["Balancer's vote escrow has a 10-day delay between voting and execution; plan automation to vote early in the week so votes take effect before gauge weight updates.","vlAURA relock has a max lock period (typically 16 weeks); if you auto-relock every week, ensure you don't exceed the max or the transaction will revert.","Bribe data is often off-chain or delayed; use a reliable aggregator (Aura's official API preferred) or risk voting for low-bribe gauges.","Gelato Web3 Functions have execution limits (~5M gas); if you vote on many gauges in one tx, you may exceed limits; batch or split votes across multiple executions.","Gauge voting power is snapshot-based at a specific block; if your bot reads stale data, votes may not reflect current vlAURA balance."],"references":[{"url":"https://docs.aura.finance","kind":"docs","label":"Aura Finance Docs"},{"url":"https://github.com/balancer/balancer-v2-monorepo/blob/master/pkg/governance/contracts/gauges/GaugeController.sol","kind":"repo","label":"Balancer GaugeController Contract"},{"url":"https://docs.gelato.network/web3-functions/overview","kind":"docs","label":"Gelato Web3 Functions Docs"},{"url":"https://github.com/aurafinance","kind":"repo","label":"Aura GitHub"},{"url":"https://docs.balancer.fi/concepts/governance/gauges","kind":"docs","label":"Balancer Gauge Voting Guide"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"}],"time_estimate_hours":80,"projects":{"slug":"aura"},"project_slug":"aura","project":{"slug":"aura","name":"Aura","logo_url":"https://icons.llamao.fi/icons/protocols/aura?w=64&h=64","category":"yield"}},{"id":"7b8f3d03-1a41-4377-85d8-e2bc0b9b30aa","project_id":"0252dc6e-3ed6-4adb-97c1-f9b36425bb64","title":"Aura Treasury Health Tracker","pitch":"Public dashboard of Aura's runway, fee revenue, and DAO actions. Useful for AURA holders.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph","etherscan-api"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:12.222796+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time treasury dashboard that surfaces Aura Finance's financial health: accumulated protocol fees (BAL, ETH, stablecoins), treasury wallet balances across chains, monthly burn rate, runway estimate, and recent DAO votes/treasury transfers. Pull on-chain data via The Graph subgraph queries and Etherscan/Arbiscan APIs, display it in a clean Next.js frontend with charts (Recharts or Chart.js). Target AURA holders who want to assess DAO sustainability without digging through Etherscan or Snapshot manually.","learn_first":["Aura Finance treasury structure and fee mechanics","The Graph subgraph querying basics","ERC-20 balance tracking across multiple chains"],"tech_stack":{"ai":[],"data":["Etherscan API","Arbiscan API","Blockscout (for smaller chains)"],"infra":["Vercel"],"other":["node-fetch or axios for API calls"],"wallet":[],"indexer":["The Graph (Aura subgraph)"],"frontend":["Next.js","React","Recharts or Chart.js","TailwindCSS"],"contracts":[]},"build_steps":["Set up Next.js project with TailwindCSS and Recharts; scaffold pages for dashboard, treasury detail, and governance log.","Query The Graph for Aura's fee accrual subgraph (if available) or build a simple indexer tracking BAL/ETH transfers to treasury multisig addresses.","Fetch treasury wallet balances using Etherscan/Arbiscan APIs for Ethereum, Arbitrum, Optimism, Base, and Polygon; store in React state or lightweight cache (Redis optional).","Calculate runway: monthly average fee revenue ÷ monthly DAO spend (from recent governance votes or treasury transfers).","Build chart components: stacked bar chart of treasury composition by asset, line chart of fee revenue over time, gauge for runway months.","Integrate Snapshot API or Aura's governance contract to pull recent DAO votes and treasury proposals; display as a feed.","Add a simple refresh interval (e.g., every 5 minutes) to keep balances current; consider SWR for client-side caching.","Deploy to Vercel, set up environment variables for API keys, and test across all five chains."],"gotchas":["The Graph subgraph for Aura may not exist or may lag; fall back to direct RPC calls or Etherscan API for real-time balance checks.","Treasury multisig addresses vary by chain; you'll need to hardcode or fetch them from Aura's docs—mismatched addresses will show incomplete balances.","Etherscan/Arbiscan API rate limits (150 calls/sec on free tier); batch requests or use a proxy service if dashboard gets heavy traffic.","Fee revenue can be denominated in multiple tokens (BAL, ETH, stablecoins); ensure consistent USD conversion using a price feed (Coingecko API is free and reliable).","DAO spend is often multi-step (vote → timelock → execution); you may need to track pending vs. executed transfers separately."],"references":[{"url":"https://docs.aura.finance","kind":"docs","label":"Aura Finance Docs"},{"url":"https://github.com/aurafinance","kind":"repo","label":"Aura GitHub"},{"url":"https://thegraph.com/docs/en/querying/graphql-api/","kind":"docs","label":"The Graph Query Language (GraphQL)"},{"url":"https://docs.etherscan.io/","kind":"docs","label":"Etherscan API Documentation"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Documentation"},{"url":"https://docs.snapshot.org/","kind":"docs","label":"Snapshot API Docs"}],"time_estimate_hours":12,"projects":{"slug":"aura"},"project_slug":"aura","project":{"slug":"aura","name":"Aura","logo_url":"https://icons.llamao.fi/icons/protocols/aura?w=64&h=64","category":"yield"}},{"id":"dcf088d1-f737-42b3-9767-1e9d095ed2e6","project_id":"0252dc6e-3ed6-4adb-97c1-f9b36425bb64","title":"Aura Pool Heatmap","pitch":"Visual heatmap of every Balancer pool on Aura by APY × TVL × bribe yield. Spot the sweet spots instantly.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","the-graph","d3"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:10.246282+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that renders all Balancer pools available on Aura Finance as an interactive heatmap, color-coded by composite yield (base APY + bribe yield) and sized by TVL. Users can filter by chain, sort by metrics, and click through to pool details. The heatmap updates every 5–10 minutes via The Graph queries, surfacing high-yield, low-competition pools that LPs might miss in the raw data. This is a pure discovery tool—no transactions, just signal.","learn_first":["Balancer pool architecture (weighted, stable, concentrated)","Aura's vlAURA boost mechanism and how it affects APY","The Graph subgraph queries for Balancer and Aura data","D3 treemap or bubble chart patterns for financial data viz"],"tech_stack":{"data":["The Graph (Balancer subgraph on each chain)","Aura subgraph or direct contract queries for boost data","Ethers.js v6 or viem for fallback RPC calls"],"infra":["Vercel (Next.js hosting)","Redis or SWR for client-side caching of Graph queries"],"frontend":["Next.js 15 (App Router)","D3.js v7+ (treemap or bubble chart)","TailwindCSS","Recharts or Nivo (optional, lighter alternative to D3)"]},"build_steps":["Set up Next.js 15 project with TailwindCSS and install D3, viem, and @apollo/client for Graph queries.","Write a utility to query The Graph's Balancer subgraph for all pools on a given chain (Ethereum, Arbitrum, Optimism, Base, Polygon), fetching pool ID, symbol, TVL, and base APY.","Query Aura's subgraph or contract (AuraBooster) to fetch bribe yields and vlAURA boost multipliers for each pool; merge with Balancer data.","Build a React component that renders a D3 treemap or bubble chart, with color scale mapped to total APY (base + bribe) and size mapped to TVL; add chain selector and sort controls.","Add hover tooltips showing pool name, APY breakdown, TVL, and a link to the Aura UI or Balancer pool page.","Implement a 5–10 minute polling interval (SWR or React Query) to refresh data without hammering The Graph.","Deploy to Vercel and test across all five chains; verify data freshness and chart responsiveness.","(Optional) Add a 'favorites' feature using localStorage to bookmark pools and compare them side-by-side."],"gotchas":["Aura bribes are often off-chain or stored in a separate contract (Aura's bribe module); you may need to index them manually or use a custom subgraph if The Graph doesn't have full coverage.","Pool APY varies by chain and can shift rapidly if bribe amounts change; display a 'last updated' timestamp and warn users that yields are not guaranteed.","D3 treemaps can become cluttered with hundreds of pools; consider pagination, filtering by TVL floor, or a 'top 50' view to keep the chart readable.","The Graph can have indexing lag (5–30 min behind chain state); document this and consider adding a manual 'refresh' button for users who want live data.","Some pools may have zero TVL or be deprecated; filter these out or mark them visually to avoid confusion."],"references":[{"url":"https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-v2","kind":"docs","label":"Balancer Subgraph"},{"url":"https://docs.aura.finance","kind":"docs","label":"Aura Finance Docs"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Query API"},{"url":"https://d3-graph-gallery.com/treemap.html","kind":"article","label":"D3 Treemap Examples"},{"url":"https://github.com/aurafinance","kind":"repo","label":"Aura GitHub (Contracts & Subgraph)"},{"url":"https://docs.balancer.fi/concepts/pools/","kind":"docs","label":"Balancer Pool Architecture"}],"time_estimate_hours":12,"projects":{"slug":"aura"},"project_slug":"aura","project":{"slug":"aura","name":"Aura","logo_url":"https://icons.llamao.fi/icons/protocols/aura?w=64&h=64","category":"yield"}},{"id":"860977c2-29d3-4a97-9aac-cd6df26607b2","project_id":"2105f7a2-bed8-48d6-8eed-b590556ff17b","title":"Liquid Locker Routing Helper","pitch":"Compares Yearn's yCRV, Convex cvxCRV, and other liquid locker tokens by yield and exit liquidity. Picks the best for your size.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","defillama-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:06.933366+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web tool that aggregates real-time yield data and liquidity metrics across Curve liquid lockers (yCRV, cvxCRV, sdCRV, etc.) to recommend the optimal token for a given deposit size. Users input their CRV amount and the tool returns ranked options with APY, slippage estimates on exit, and lock-up periods. Solves the fragmentation problem: LPs don't know which locker maximizes their returns after accounting for exit costs.","learn_first":["Curve liquid locker mechanics (yCRV, cvxCRV, sdCRV)","Uniswap V3 / Balancer pool queries for exit liquidity","APY calculation from gauge rewards and token prices"],"tech_stack":{"data":["DefiLlama API","Curve subgraph (The Graph)","Uniswap V3 subgraph"],"infra":["Vercel"],"frontend":["Next.js","TailwindCSS","wagmi","viem"]},"build_steps":["Set up Next.js app with TailwindCSS and wagmi hooks for Ethereum mainnet","Create a data layer that fetches current CRV price, gauge APYs, and boosts from Curve subgraph and DefiLlama","Query Uniswap V3 and Balancer subgraphs to find liquidity pools for yCRV, cvxCRV, sdCRV and estimate slippage at various exit sizes using simulation","Build a comparison table component showing each locker: APY, 7-day average APY, exit slippage at user's input size, lock duration, and net yield after exit costs","Implement a ranking algorithm: (APY - exit_slippage_percent) * (1 - lock_duration_penalty) to surface the best option","Add a \"what-if\" slider to let users adjust their deposit size and see how slippage and recommendations change","Deploy to Vercel and test with real mainnet data; add a simple disclaimer about past performance"],"gotchas":["Curve gauge APYs fluctuate hourly with CRV emissions and voting; cache data for 5–10 min to avoid rate limits and stale reads","Exit slippage varies dramatically by pool depth and locker size; use Uniswap V3 simulation (not just spot price) or you'll mislead users on small exits","cvxCRV and yCRV have different fee structures (Convex takes a cut, Yearn takes a cut); factor these into net APY, not just gross gauge APY","Some lockers (e.g., Aura for Balancer) may not have deep Uniswap liquidity; handle missing data gracefully and warn users"],"references":[{"url":"https://docs.curve.fi/governance/gauges/overview/","kind":"docs","label":"Curve Docs: Gauges & Emissions"},{"url":"https://docs.convexfinance.com","kind":"docs","label":"Convex Finance Docs"},{"url":"https://docs.yearn.fi/getting-started/products/yvaults/overview","kind":"docs","label":"Yearn yCRV Strategy"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API Docs"},{"url":"https://thegraph.com/hosted-service/subgraph/convex-community/curve-main","kind":"docs","label":"Curve Subgraph (The Graph)"},{"url":"https://thegraph.com/hosted-service/subgraph/uniswap/uniswap-v3","kind":"docs","label":"Uniswap V3 Subgraph"}],"time_estimate_hours":12,"projects":{"slug":"convex"},"project_slug":"convex","project":{"slug":"convex","name":"Convex Finance","logo_url":"https://icons.llamao.fi/icons/protocols/convex-finance?w=64&h=64","category":"yield"}},{"id":"c0076a2c-35ba-4159-b37d-956b07564c20","project_id":"2105f7a2-bed8-48d6-8eed-b590556ff17b","title":"Curve+Convex APY Decomposer","pitch":"Shows the exact yield breakdown for any Curve-on-Convex deposit: trading fees, CRV, CVX, bribes.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:00.979646+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that deconstructs yield for Curve liquidity providers who deposit through Convex. Users paste a wallet address or pool address and see the precise APY split: Curve trading fees (from swaps), CRV emissions (base Curve rewards), CVX rewards (Convex boost), and bribe rewards (from protocols incentivizing specific pools). This surfaces hidden yield sources that most LPs miss, helping them optimize pool selection and rebalance across Curve's 500+ pools. Built with Next.js frontend querying The Graph for historical data and Convex/Curve subgraphs for real-time rates.","learn_first":["Curve pool mechanics and fee structures","Convex's boost model and CVX tokenomics","The Graph subgraph queries for DeFi data","ERC-20 balance tracking and historical snapshots"],"tech_stack":{"data":["The Graph (Curve subgraph)","The Graph (Convex subgraph)","Curve API or on-chain RPC calls"],"infra":["Vercel or similar"],"frontend":["Next.js","React","TailwindCSS","wagmi","viem"]},"build_steps":["Set up Next.js project with TypeScript, TailwindCSS, and wagmi for wallet connection.","Create a GraphQL client to query The Graph's Curve subgraph for pool fee data, trading volume, and historical APY.","Add a second GraphQL client to query Convex's subgraph (or Convex API) for CVX rewards, boost multipliers, and bribe data.","Build a form component that accepts either a wallet address or Curve pool address, with input validation.","Write a calculation module that decomposes APY: (1) trading fees from pool volume, (2) CRV emissions from Curve gauge, (3) CVX boost from Convex's vlCVX voting power, (4) bribe APY from Votium or similar.","Create a results card layout showing each yield component as a percentage, stacked bar chart, and absolute dollar value (if LP amount is known).","Add a table view comparing top 10 pools by total APY, sortable by each yield component.","Deploy to Vercel and test with 5–10 real Curve pools; validate numbers against Curve's UI and Convex's dashboard."],"gotchas":["Bribe data is fragmented: Votium, Aura, Balancer bribes are on different platforms. You may need to aggregate from multiple sources or start with just Votium.","Convex boost is non-linear and depends on vlCVX holdings and total CVX locked. A user's personal boost differs from the pool average; clarify which you're showing.","The Graph can lag by 1–2 blocks; for real-time APY, you may need to supplement with direct RPC calls to get current gauge weights and emissions rates.","Trading fee APY fluctuates daily based on volume. Show a 7-day or 30-day average to avoid misleading snapshots."],"references":[{"url":"https://docs.curve.fi","kind":"docs","label":"Curve Finance Docs"},{"url":"https://docs.convexfinance.com","kind":"docs","label":"Convex Finance Docs"},{"url":"https://thegraph.com/hosted-service/subgraph/messari/curve-finance","kind":"docs","label":"The Graph Curve Subgraph"},{"url":"https://votium.app","kind":"tool","label":"Votium Bribe Data"},{"url":"https://etherscan.io/address/0x0959158eea72d993ef400de1246c57bfb8a4b666","kind":"docs","label":"Curve Pool Factory Contract"}],"time_estimate_hours":16,"projects":{"slug":"convex"},"project_slug":"convex","project":{"slug":"convex","name":"Convex Finance","logo_url":"https://icons.llamao.fi/icons/protocols/convex-finance?w=64&h=64","category":"yield"}},{"id":"17d75c8e-1193-4874-b759-b0b65b778298","project_id":"2105f7a2-bed8-48d6-8eed-b590556ff17b","title":"Convex Position Dashboard","pitch":"Clean overview of all your Convex positions — locked, boosted LPs, claimable across pools, with one-click claim.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:16:00.06512+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web dashboard that aggregates a user's Convex positions across all pools. Display locked CVX, boosted LP positions with current boost multipliers, pending CRV/CVX rewards, and claimable amounts. Include a one-click claim function that batches multiple reward claims into a single transaction. The dashboard reads from Convex contracts and The Graph, displays real-time balances, and provides a polished UX for yield farmers who manage multiple positions.","learn_first":["Convex contract architecture (cvxCRV, cvxLP, Booster)","ERC-20 token balances and allowances","The Graph subgraph querying","Curve/Convex pool mechanics and boost calculation"],"tech_stack":{"data":["The Graph API","Convex API endpoints"],"infra":["Vercel"],"wallet":["RainbowKit","Privy (optional, for email login)"],"indexer":["The Graph (Convex subgraph)"],"frontend":["Next.js","React","Viem","Wagmi","TailwindCSS","Ethers.js (optional, for fallback)"],"contracts":["Convex Booster (0xF403C3e569E8f6F8003B83eF031eD9ef636f5ee2)","Convex cvxCRV (0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7)","Curve gauge contracts"]},"build_steps":["Set up Next.js project with TypeScript, TailwindCSS, and Wagmi hooks (useAccount, useContractRead).","Create a wallet connection component using RainbowKit; gate dashboard behind connected wallet.","Query The Graph Convex subgraph to fetch user's LP positions, locked CVX, and pool data; cache results with SWR or React Query.","Build contract read layer using Viem to fetch real-time claimable rewards from Convex Booster and individual pool contracts.","Design dashboard layout: three sections — Locked CVX (with unlock date), Active LP Positions (with boost %), and Claimable Rewards (with pool names and amounts).","Implement one-click claim function: batch multiple claim calls using Viem's multicall or Convex's batch claim helper; show tx status and toast notifications.","Add a 'Claim All' button that identifies all claimable rewards and submits a single transaction; handle gas estimation and display.","Test on Ethereum mainnet fork (Foundry anvil or Hardhat); deploy frontend to Vercel and verify live data fetching."],"gotchas":["Convex reward claims can fail silently if a pool has no pending rewards; filter out zero-balance positions before displaying.","Boost multipliers are time-dependent (based on lock duration and lock amount); cache may become stale; refresh on user action or set short TTL.","The Graph Convex subgraph may lag 1–2 blocks behind chain; supplement with direct contract calls for real-time accuracy on claimable amounts.","Multicall batching has a gas limit; if user has >20 positions, split claims into multiple transactions or use Convex's built-in batch claim (if available)."],"references":[{"url":"https://docs.convexfinance.com","kind":"docs","label":"Convex Finance Docs"},{"url":"https://github.com/convex-eth","kind":"repo","label":"Convex GitHub"},{"url":"https://thegraph.com/hosted-service/subgraph/convex-community/convex-community","kind":"tool","label":"The Graph Convex Subgraph"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reading Guide"},{"url":"https://wagmi.sh/docs/hooks/useContractRead","kind":"docs","label":"Wagmi useContractRead Hook"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup"}],"time_estimate_hours":12,"projects":{"slug":"convex"},"project_slug":"convex","project":{"slug":"convex","name":"Convex Finance","logo_url":"https://icons.llamao.fi/icons/protocols/convex-finance?w=64&h=64","category":"yield"}},{"id":"02022f3b-e9c3-48a9-9186-db403f3e0570","project_id":"2105f7a2-bed8-48d6-8eed-b590556ff17b","title":"vlCVX Bribe Optimizer","pitch":"Calculates the optimal weekly vote across Convex bribe markets (Votium, Hidden Hand) to maximize stable-coin returns.","difficulty":"1-2 weeks","use_case":"yield","build_with":["nextjs","votium-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:57.458796+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A yield optimization tool that monitors Convex's weekly gauge voting cycles and bribe offerings from Votium and Hidden Hand, then recommends or executes the highest-ROI vote allocations for vlCVX holders. The optimizer ingests live bribe data, models vote weight impact, and surfaces actionable weekly strategies. Target users: vlCVX holders seeking passive yield, yield aggregators, and Curve LPs who want to capture bribe upside without manual research.","learn_first":["Convex gauge voting mechanics and vote-locking (vlCVX)","Votium and Hidden Hand bribe market structures","Curve gauge weight snapshots and on-chain voting","ERC-20 token approvals and delegation patterns"],"tech_stack":{"data":["Votium API (REST)","Hidden Hand API (REST)","Alchemy or Infura (RPC)"],"infra":["Vercel (Next.js hosting)","GitHub Actions (weekly cron for bribe snapshots)"],"other":["Zod (schema validation for bribe data)","date-fns (time-series analysis)"],"wallet":["viem (for vote simulation)","ethers.js (optional fallback)"],"indexer":["The Graph (Convex subgraph)","Ponder (for real-time bribe ingestion)"],"frontend":["Next.js","TailwindCSS","Recharts or Plotly (for ROI visualization)"],"contracts":["Convex vlCVX (0xc5E1FdA2B837D1b6b6d07E33030eEB76968d81EC)","Curve GaugeController"]},"build_steps":["Set up Next.js project with TypeScript; scaffold pages for dashboard, strategy details, and historical performance.","Integrate Votium API and Hidden Hand API clients to fetch weekly bribe listings, amounts, and target gauges; store snapshots in a local JSON file or lightweight DB (e.g., SQLite via better-sqlite3).","Query The Graph's Convex subgraph to fetch current gauge weights, vlCVX voting power, and historical vote distributions.","Build the optimization engine: for each gauge, calculate bribe-per-vote ratio (total bribes / expected vote weight), rank by ROI, and surface top N recommendations.","Add a vote simulation layer using viem to estimate vote impact without on-chain execution; display projected bribe yields if user votes according to recommendation.","Create a weekly snapshot cron job (GitHub Actions or Vercel serverless function) that runs every Tuesday morning, stores bribe data, and generates a summary email or Discord webhook alert.","Build the dashboard UI: display current week's top bribe opportunities, historical performance of past recommendations, and a simple \"Copy Vote\" button that pre-fills a Convex voting transaction.","Deploy to Vercel; test end-to-end with live Votium/Hidden Hand data; validate ROI calculations against actual historical bribe payouts."],"gotchas":["Bribe data can be stale or incomplete; Votium and Hidden Hand APIs may have rate limits or downtime—implement retry logic and cache aggressively.","Vote weight snapshots are taken at a specific block height; if you fetch gauge weights after the snapshot, your ROI estimates will be inaccurate—always use historical block data.","Bribes are often distributed in non-stablecoin tokens (e.g., protocol tokens); you must integrate a price feed (Chainlink, CoinGecko) to convert to USD for fair comparison.","Convex's voting power can change mid-week if users stake/unstake CVX; your recommendations are only valid for the current epoch—refresh weekly, not daily.","Some bribes have minimum vote thresholds or are only claimable if you vote for a specific gauge combination; read the fine print on each bribe listing."],"references":[{"url":"https://docs.convexfinance.com","kind":"docs","label":"Convex Finance Docs"},{"url":"https://docs.votium.app","kind":"docs","label":"Votium API Documentation"},{"url":"https://hiddenhand.finance","kind":"tool","label":"Hidden Hand Bribes"},{"url":"https://thegraph.com/hosted-service/subgraph/convex-community/convex-finance","kind":"repo","label":"The Graph Convex Subgraph"},{"url":"https://docs.curve.fi/governance/understanding-gauges","kind":"docs","label":"Curve Gauge Voting Guide"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"}],"time_estimate_hours":80,"projects":{"slug":"convex"},"project_slug":"convex","project":{"slug":"convex","name":"Convex Finance","logo_url":"https://icons.llamao.fi/icons/protocols/convex-finance?w=64&h=64","category":"yield"}},{"id":"7d0b8631-cf8f-41fb-a614-aa13bbccdcd6","project_id":"55348f03-e988-4484-8aa6-d73d566985d1","title":"Vault Risk Scoring","pitch":"Combines audit status, age, underlying-protocol risk into a single 1-10 score for every Beefy vault.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","openrouter","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:56.225641+00:00","metadata":{},"source":"curated","why_now":"Beefy's vault ecosystem has grown to 500+ strategies across 7 chains; users lack a unified, transparent risk comparison tool. Recent exploits in yield farming (e.g., Curve governance attacks, Aave liquidation cascades) have raised demand for real-time risk transparency. LLM-powered audit parsing is now practical and cost-effective, making automated risk scoring feasible for solo builders.","source_signal_ids":[],"published_at":null,"summary":"Build a risk aggregation engine that ingests Beefy vault metadata (strategy contracts, underlying protocols, audit reports, TVL history) and outputs a normalized 1-10 risk score. The score weights multiple signals: smart contract audit status and date, age of the vault, risk profile of underlying protocols (e.g., Curve, Aave, Uniswap), historical slashing or exploit events, and concentration risk. Expose scores via API and a Next.js dashboard showing vault comparisons, risk trends over time, and alerts when risk scores shift. Use LLM calls (via OpenRouter) to parse audit reports and extract risk factors automatically.","learn_first":["ERC-4626 vault standard","Beefy vault architecture and strategy patterns","Risk scoring methodologies in traditional finance","Smart contract audit report structure and common findings"],"tech_stack":{"ai":["OpenRouter (Claude or Llama for audit parsing)"],"data":["OpenRouter (LLM)","CoinGecko API for protocol TVL"],"infra":["Vercel","PostgreSQL"],"other":["Beefy API"],"wallet":[],"indexer":["Ponder","The Graph"],"frontend":["Next.js","TailwindCSS","Recharts"],"contracts":["ERC-4626"]},"build_steps":["Set up Next.js project with TypeScript, TailwindCSS, and Recharts for charting; scaffold API routes for risk scoring endpoints.","Fetch all active Beefy vaults via Beefy API (vaults endpoint) and store vault metadata (strategy address, underlying protocol, creation date) in PostgreSQL.","Implement Ponder indexer to track vault TVL, strategy changes, and historical performance metrics from on-chain events; sync data hourly.","Build LLM integration via OpenRouter to parse audit reports: ingest audit PDFs/URLs for each vault strategy, extract risk findings, severity levels, and remediation status using Claude or Llama.","Create risk scoring logic: weight audit status (30%), vault age (20%), underlying protocol risk (30%), TVL concentration (15%), exploit history (5%); normalize to 1-10 scale with clear thresholds.","Build Next.js dashboard: display vault risk scores in a sortable table, show risk distribution across chains, plot risk trends over 90 days, highlight vaults with recent risk changes.","Expose risk scores via REST API endpoint (GET /api/vaults/:id/risk-score, GET /api/vaults/risk-scores) for third-party integrations.","Deploy to Vercel, set up hourly Ponder sync via cron, add email alerts for vaults crossing risk thresholds (e.g., score drops below 4)."],"gotchas":["Audit report parsing is noisy: LLM may hallucinate risk factors or misinterpret remediation status. Validate parsed findings against known exploits and cross-reference with audit firm summaries.","Beefy vault metadata is incomplete in some cases (missing audit links, strategy docs). Build a fallback to manual curation for top 50 vaults by TVL and crowdsource missing audit data.","Risk scoring is subjective: different users weight audit recency, protocol maturity, and TVL concentration differently. Expose weighting parameters in the UI so users can customize their own risk model.","Underlying protocol risk data (e.g., Aave governance changes, Curve fee shifts) requires manual updates or secondary APIs; CoinGecko doesn't track protocol-level risk. Consider subscribing to protocol governance feeds or using Messari for deeper protocol risk metrics.","Vault strategies can be complex (nested, multi-hop swaps). Ensure your indexer correctly traces the full asset flow to identify true underlying risk; don't stop at the first swap."],"references":[{"url":"https://docs.beefy.finance/","kind":"docs","label":"Beefy Finance API Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://github.com/beefyfinance","kind":"repo","label":"Beefy GitHub Repository"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Documentation"},{"url":"https://messari.io","kind":"article","label":"DeFi Risk Scoring: A Framework (Messari)"}],"time_estimate_hours":80,"projects":{"slug":"beefy"},"project_slug":"beefy","project":{"slug":"beefy","name":"Beefy","logo_url":"https://icons.llamao.fi/icons/protocols/beefy?w=64&h=64","category":"yield"}},{"id":"7f15f878-48b0-430c-be66-aa6c59442a09","project_id":"55348f03-e988-4484-8aa6-d73d566985d1","title":"Yield Tax Optimizer","pitch":"Tracks Beefy compound events to help users time withdrawals around tax year boundaries.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","supabase","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:49.853771+00:00","metadata":{},"source":"curated","why_now":"Tax season demand peaks Q1–Q4 in most jurisdictions; Beefy's multi-chain expansion means users hold vaults across 7+ networks and need unified tax reporting. Automated compounding vaults create complex cost-basis tracking that manual spreadsheets cannot handle at scale.","source_signal_ids":[],"published_at":null,"summary":"A tax-aware analytics dashboard that monitors Beefy vault deposits, compounds, and withdrawals across all supported chains. Users connect their wallet to see realized vs. unrealized gains, projected tax liability by jurisdiction, and receive alerts when compounding events occur near tax year cutoffs. The tool ingests Beefy's on-chain events via The Graph or Ponder, calculates cost basis and holding periods, and surfaces actionable withdrawal timing recommendations to minimize tax drag.","learn_first":["ERC-4626 vault standard","Beefy vault architecture and event emissions","cost basis tracking for DeFi","The Graph subgraph queries","tax-lot accounting methods"],"tech_stack":{"data":["Supabase PostgreSQL","Beefy API"],"infra":["Vercel"],"wallet":["Privy","ethers.js"],"indexer":["The Graph","Ponder"],"frontend":["Next.js","wagmi","viem","RainbowKit"],"contracts":["ERC-4626"]},"build_steps":["Set up Next.js app with Supabase schema: tables for user_vaults, deposits, compounds, withdrawals, tax_events","Scaffold wallet connection using RainbowKit + Privy for multi-chain support","Query Beefy subgraph (or build Ponder indexer) to fetch vault deposit/withdraw/compound events for connected address across all chains","Implement cost-basis calculator: track entry price, quantity, and timestamp for each deposit; compute realized gains on withdrawals using FIFO or average-cost method","Build tax-year timeline UI showing deposits, compounds, and projected tax liability; highlight positions nearing long-term capital gains threshold (1 year)","Add withdrawal recommendation engine: flag upcoming compounds and suggest optimal withdrawal dates to defer/realize gains based on user's tax year","Integrate Beefy API to fetch current vault APY, TVL, and strategy details for context","Deploy to Vercel with Supabase connection; test multi-chain event ingestion and tax calculation accuracy"],"gotchas":["Beefy compounds automatically but timing varies by vault strategy; you must track actual block timestamps from events, not assume fixed schedules","Cost basis must account for reinvested rewards and fee-on-transfer tokens; some vaults have performance fees that reduce share count","Tax rules differ by jurisdiction (US FIFO vs. EU average-cost); avoid hardcoding US rules—make it configurable or disclaimer-heavy","The Graph subgraph for Beefy may lag during high network congestion; implement polling with exponential backoff and fallback to RPC direct queries","Privy and RainbowKit wallet connections can conflict if both are initialized; use one primary provider and wrap the other carefully"],"references":[{"url":"https://docs.beefy.finance","kind":"docs","label":"Beefy Finance Docs"},{"url":"https://github.com/beefyfinance","kind":"repo","label":"Beefy GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Hooks for Ethereum"},{"url":"https://www.irs.gov/publications/p544","kind":"article","label":"Cost Basis Accounting for Crypto"}],"time_estimate_hours":80,"projects":{"slug":"beefy"},"project_slug":"beefy","project":{"slug":"beefy","name":"Beefy","logo_url":"https://icons.llamao.fi/icons/protocols/beefy?w=64&h=64","category":"yield"}},{"id":"7fc826a7-187b-4e39-9ad0-00b257ddd68c","project_id":"55348f03-e988-4484-8aa6-d73d566985d1","title":"Beefy CLM Performance Tracker","pitch":"Detailed performance and rebalance history for Beefy's Concentrated Liquidity Manager positions, per chain.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","beefy-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:48.328619+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a multi-chain analytics dashboard that tracks Concentrated Liquidity Manager (CLM) vault performance across Beefy's supported chains. Display historical rebalance events, fee accrual, impermanent loss vs. gains, APY calculations, and position health metrics. Use Beefy's public API to fetch vault data and on-chain events, then index and visualize performance trends per chain and per vault. This gives CLM users transparency into their actual returns and rebalance mechanics.","learn_first":["ERC-3156 flash loans and concentrated liquidity mechanics","Beefy CLM vault architecture and fee structure","On-chain event indexing patterns for multi-chain data"],"tech_stack":{"data":["Beefy API (vault & strategy endpoints)","Etherscan/Arbiscan/Optimiscan RPC for event logs"],"infra":["Vercel or self-hosted Node.js","PostgreSQL or SQLite for caching rebalance history"],"frontend":["Next.js","React Query","Tailwind CSS","Recharts or Chart.js"]},"build_steps":["Set up Next.js project with TypeScript and Tailwind; scaffold pages for chain selector and vault list.","Integrate Beefy API client to fetch all CLM vaults across chains (use /vaults endpoint filtered by strategy type).","Create a data layer that polls Beefy API every 5–10 minutes and caches vault snapshots (TVL, APY, last rebalance timestamp) in a local database.","Fetch on-chain rebalance events by querying contract logs via viem for CLM vault addresses; parse Transfer and Swap events to reconstruct rebalance history.","Build a performance calculator that computes cumulative APY, fee accrual, and IL vs. gains using historical snapshots and rebalance event data.","Create dashboard views: chain overview (aggregate metrics), vault detail page (rebalance timeline, fee breakdown, APY chart), and export CSV for tax/accounting.","Add filters for date range, chain, and vault type; implement real-time updates for active positions.","Deploy to Vercel with environment variables for RPC endpoints; test across Ethereum, Arbitrum, Optimism, and Base."],"gotchas":["Beefy API may lag on rebalance events by 5–15 minutes; supplement with direct RPC queries to contract logs for real-time accuracy.","CLM vault rebalance mechanics vary by underlying DEX (Uniswap v3, Camelot, etc.); fee structures differ—parse vault metadata to handle each correctly.","Multi-chain RPC rate limits will hit quickly if polling every vault every minute; batch requests and use a caching layer (Redis or local DB) to avoid throttling.","Impermanent loss calculation requires accurate price history; use a time-series price feed (e.g., Coingecko API or on-chain oracle snapshots) rather than inferring from swap events alone."],"references":[{"url":"https://docs.beefy.finance","kind":"docs","label":"Beefy Finance Docs"},{"url":"https://github.com/beefyfinance","kind":"repo","label":"Beefy GitHub"},{"url":"https://docs.beefy.finance/developer/api","kind":"docs","label":"Beefy API Endpoints"},{"url":"https://docs.beefy.finance/strategies/concentrated-liquidity-manager","kind":"docs","label":"Concentrated Liquidity Manager Strategy"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://uniswap.org/blog/uniswap-v3","kind":"article","label":"Uniswap v3 Concentrated Liquidity Primer"}],"time_estimate_hours":16,"projects":{"slug":"beefy"},"project_slug":"beefy","project":{"slug":"beefy","name":"Beefy","logo_url":"https://icons.llamao.fi/icons/protocols/beefy?w=64&h=64","category":"yield"}},{"id":"8830d666-64b2-4661-b9a7-fdb42dcbfe86","project_id":"55348f03-e988-4484-8aa6-d73d566985d1","title":"Multichain APY Aggregator","pitch":"Filter every Beefy vault across all chains by token, APY, TVL, and risk score. Currently spread across multiple pages.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","beefy-api","wagmi"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:43.656795+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a unified dashboard that aggregates Beefy's auto-compounding vaults from all supported chains (Ethereum, Arbitrum, Optimism, Base, BSC, Polygon, Avalanche) into a single searchable interface. Users can filter by token pair, APY range, TVL, strategy type, and custom risk scoring. The aggregator pulls live data from Beefy's API, caches it efficiently, and surfaces the highest-yield opportunities across chains without requiring users to visit each chain's vault page separately. This solves discovery friction for yield farmers comparing opportunities.","learn_first":["Beefy vault architecture and API structure","ERC-4626 vault standard basics","Multi-chain RPC calls and data aggregation patterns","APY calculation methodologies (TVL, daily rewards, compounding frequency)"],"tech_stack":{"data":["Beefy API (vaults, APY, TVL endpoints)","node-cache or Redis for server-side caching"],"infra":["Vercel or similar for deployment","ethers.js or viem for optional on-chain verification"],"other":["TypeScript","SWR or TanStack Query for client-side data fetching"],"frontend":["Next.js 14+","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; scaffold pages for dashboard and individual vault detail views","Create a data layer that fetches all vaults from Beefy API (GET /vaults endpoint) and caches results server-side with 5-minute TTL to avoid rate limits","Build a filtering engine that indexes vaults by chain, token, APY range, TVL, and strategy type; store in memory or lightweight database","Create React components for vault cards (token pair, APY, TVL, chain badge) and a filter sidebar with dropdowns and range sliders","Implement a search bar that fuzzy-matches vault names and underlying tokens; use fuse.js for client-side search performance","Add a detail page for each vault showing strategy breakdown, historical APY, risk factors, and a direct link to deposit on Beefy","Deploy to Vercel and set up ISR (Incremental Static Regeneration) to refresh vault data every 5 minutes without full rebuilds","Add optional wallet integration (wagmi + RainbowKit) to show user's existing positions and one-click routing to deposit flows"],"gotchas":["Beefy's API rate limits are generous but not unlimited; implement server-side caching with a 5-minute TTL and avoid polling from the browser directly","APY figures are historical and vary by compounding frequency; clearly label whether displayed APY is annualized or based on recent 7-day/30-day performance","Some vaults are paused or deprecated; filter these out or mark them clearly to avoid user confusion and wasted clicks","Multi-chain data can be stale if one chain's RPC is slow; implement parallel fetches with a reasonable timeout (5s) and graceful degradation if one chain fails"],"references":[{"url":"https://docs.beefy.finance/developer-documentation/api","kind":"docs","label":"Beefy API Documentation"},{"url":"https://api.beefy.finance/vaults","kind":"tool","label":"Beefy Vaults Endpoint"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching/fetching-caching-and-revalidating","kind":"docs","label":"Next.js Data Fetching & Caching"},{"url":"https://github.com/beefyfinance","kind":"repo","label":"Beefy Finance GitHub"}],"time_estimate_hours":12,"projects":{"slug":"beefy"},"project_slug":"beefy","project":{"slug":"beefy","name":"Beefy","logo_url":"https://icons.llamao.fi/icons/protocols/beefy?w=64&h=64","category":"yield"}},{"id":"99790595-bcf2-4aca-ac09-686d3f6f273b","project_id":"032770f2-2184-4fa2-98e8-0884f0171220","title":"Yearn Vault Strategy Marketplace","pitch":"Public list of community-built V3 strategies for curators to plug into their vaults, with on-chain performance data.","difficulty":"1+ month","use_case":"infrastructure","build_with":["nextjs","foundry","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:41.848279+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A decentralized marketplace where strategy developers can publish Yearn V3-compatible strategies with auditable performance metrics. Curators browse strategies, simulate them against their vault's asset mix, and deploy approved ones. The marketplace indexes strategy contracts, tracks returns via The Graph or Ponder, and surfaces reputation signals (audit status, TVL, historical APY). Builders earn visibility; curators get vetted options beyond Yearn's core team.","learn_first":["Yearn V3 architecture and BaseStrategy contract pattern","ERC-4626 vault interface and harvest mechanics","Subgraph design for tracking strategy performance over time","Multicall patterns for efficient on-chain data fetching"],"tech_stack":{"data":["The Graph subgraph","Ponder indexer","Multicall3"],"infra":["Vercel","Alchemy RPC","IPFS for strategy metadata"],"other":["Foundry for testing","Hardhat for local simulation"],"wallet":["RainbowKit","ethers.js"],"indexer":["The Graph","Ponder"],"frontend":["Next.js","wagmi","viem","RainbowKit"],"contracts":["Yearn V3 BaseStrategy","ERC-4626"]},"build_steps":["Set up Foundry project with Yearn V3 dependencies (yearn-vaults-v3 npm package) and write a minimal BaseStrategy subclass that implements harvest() and _invest() stubs","Create a Ponder indexer (or Graph subgraph) that listens to StrategyDeployed events on Yearn Registry and tracks strategy contract state, harvest calls, and gain/loss deltas","Build Next.js frontend with wagmi hooks to connect wallet, display strategy list from indexer, and show 7d/30d/90d APY calculated from harvest events","Implement a strategy submission form that validates contract address, pulls ABI, simulates a harvest call via Multicall3 to check for reverts, and stores metadata (name, description, author) to IPFS","Add a curator dashboard showing vault composition, allowing selection of candidate strategies, and running a local Foundry simulation (fork + strategy.harvest()) to estimate impact on vault APY","Deploy subgraph/Ponder indexer to production and backfill historical harvest data for existing strategies to populate leaderboard","Write integration tests in Foundry that deploy a mock vault + strategy, call harvest multiple times, and verify gain/loss tracking matches frontend calculations","Launch on testnet (Sepolia or Arbitrum Sepolia), seed with 3–5 reference strategies, and iterate on curator feedback before mainnet"],"gotchas":["Strategy harvest() can revert silently or partially succeed; always use try-catch in Multicall and validate return data before displaying APY to avoid false confidence","Yearn V3 strategies are vault-specific (asset, debt token, risk profile); a strategy built for USDC vault won't work for DAI; marketplace must tag strategies by vault type or risk class","Subgraph indexing lag (blocks behind chain head) means real-time APY is stale; show a 'last updated' timestamp and refresh interval to set expectations","Gas costs for strategy deployment and harvest are high on mainnet; emphasize testnet-first and cost estimates in the submission UI to avoid wasted deployments","Strategy authors can game APY metrics by front-running harvests or using flashloans; add a 'verification' step (manual audit or automated checks) before listing on main leaderboard"],"references":[{"url":"https://docs.yearn.fi/developers/v3/overview","kind":"docs","label":"Yearn V3 Vaults Documentation"},{"url":"https://github.com/yearn/yearn-vaults-v3/blob/master/contracts/BaseStrategy.sol","kind":"repo","label":"Yearn V3 BaseStrategy Contract"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://github.com/mds1/multicall/blob/main/src/Multicall3.sol","kind":"repo","label":"Multicall3 Contract"},{"url":"https://docs.yearn.fi/developers/v3/strategy_development","kind":"docs","label":"Yearn Strategy Development Guide"}],"time_estimate_hours":160,"projects":{"slug":"yearn"},"project_slug":"yearn","project":{"slug":"yearn","name":"Yearn Finance","logo_url":"https://icons.llamao.fi/icons/protocols/yearn-finance?w=64&h=64","category":"yield"}},{"id":"ad28a6cc-f91f-4a64-84e8-5366e5499b27","project_id":"032770f2-2184-4fa2-98e8-0884f0171220","title":"veYFI Bribe Analytics","pitch":"Per-gauge bribe ROI and historical voting patterns for veYFI holders.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:37.943195+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that aggregates bribe data across Yearn gauges, calculates real ROI for veYFI voters, and surfaces historical voting patterns. Users can see which gauges have the richest bribes, compare bribe efficiency over time, and identify voting opportunities. Built on The Graph to index bribe contracts and Yearn's gauge system, with a Next.js frontend for exploration and export.","learn_first":["Yearn gauge system and voting mechanics","veYFI tokenomics and locking","Bribe contract patterns (Convex-style or Yearn-native)","The Graph subgraph indexing basics"],"tech_stack":{"data":["The Graph API","Ethers.js or viem for RPC calls"],"other":["Vercel for deployment"],"indexer":["The Graph (Arbitrum, Ethereum)"],"frontend":["Next.js","wagmi","viem","TailwindCSS","Recharts or Nivo for charts"]},"build_steps":["Set up a Next.js project with TypeScript and wagmi for wallet connection","Write a Subgraph schema to index bribe contract events (Bribe, Claim, VotedForGauge) and gauge metadata from Yearn's GaugeController","Deploy the subgraph to The Graph Studio for Arbitrum and Ethereum","Build a React hook (useGaugeBribes) that queries The Graph for current and historical bribe data, including bribe amounts, token addresses, and claim status","Create a table component showing gauges ranked by bribe ROI: (total bribes / veYFI voting power) * 100","Add a historical chart showing bribe trends per gauge over the last 4 weeks using Recharts","Implement a detail view per gauge with bribe breakdown by token, claim deadlines, and voting history","Deploy to Vercel and wire up Privy or RainbowKit for wallet auth to show personalized voting history"],"gotchas":["Bribe data may be scattered across multiple bribe contract instances; ensure your subgraph captures all active bribe sources (check Yearn's gauge registry)","Bribe ROI depends on accurate veYFI voting power snapshots at the time of voting; The Graph's block-based queries are essential for historical accuracy","Bribes are often claimed in different tokens; normalize to USD using a price feed (Chainlink or Uniswap TWAP) for fair ROI comparison","Some gauges may have low or zero bribes; filter or gray out inactive gauges to avoid clutter"],"references":[{"url":"https://docs.yearn.fi/getting-started/governance","kind":"docs","label":"Yearn Docs: Governance & Voting"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Documentation"},{"url":"https://github.com/yearn/governance","kind":"repo","label":"Yearn Governance GitHub"},{"url":"https://github.com/convex-eth/platform","kind":"repo","label":"Convex Finance Bribe System (reference pattern)"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://etherscan.io/address/0xe0db582d390eec3b1d4288d0b6cb3055b841886a","kind":"tool","label":"Yearn Gauge Controller Contract"}],"time_estimate_hours":16,"projects":{"slug":"yearn"},"project_slug":"yearn","project":{"slug":"yearn","name":"Yearn Finance","logo_url":"https://icons.llamao.fi/icons/protocols/yearn-finance?w=64&h=64","category":"yield"}},{"id":"feaef90e-1fe5-46b8-9dd3-71c580fab9ee","project_id":"032770f2-2184-4fa2-98e8-0884f0171220","title":"Yearn Allocator Bot","pitch":"Automated rebalancer that moves USDC between Yearn vaults to chase highest APY, with health checks.","difficulty":"1-2 weeks","use_case":"automation","build_with":["foundry","yearn-sdk","viem","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:37.697432+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a bot that monitors APY across multiple Yearn USDC vaults on Ethereum, Arbitrum, Optimism, and Polygon, then automatically rebalances capital to the highest-yielding vault when spreads exceed a threshold. The bot runs on a schedule (e.g., hourly), fetches current vault APYs via Yearn's API or on-chain calls, calculates gas costs vs. yield gain, and executes swaps only when profitable. Includes circuit breakers for vault health, slippage guards, and dry-run logging.","learn_first":["ERC-4626 vault standard","Yearn vault architecture and strategy routing","Cross-chain RPC calls and gas economics","Slippage calculation and MEV protection"],"tech_stack":{"ai":[],"data":["Yearn API for vault data","Chain RPC endpoints (Alchemy or Infura)"],"infra":["Node.js or Python for bot runtime","GitHub Actions or AWS Lambda for scheduling"],"other":["dotenv for secrets","ethers.js or viem for signing"],"wallet":["viem for transaction construction"],"indexer":["Ponder (optional: index vault APY history)","Yearn subgraph (alternative)"],"frontend":[],"contracts":["ERC-4626 (Yearn vaults)","USDC token contract"]},"build_steps":["Set up Foundry project and install yearn-sdk, viem, and dotenv dependencies","Create a config file listing target USDC vaults across all four chains (contract addresses, RPC URLs, private key)","Write a vault data fetcher that calls Yearn's API or on-chain pricePerShare() to compute current APY for each vault","Implement a rebalancer logic function: fetch user's current vault balances, identify the highest-APY vault, calculate gas cost of rebalancing, and determine if yield gain > gas cost","Build a transaction executor using viem that constructs withdraw() from current vault and deposit() to target vault, with slippage checks (e.g., 0.1% max)","Add health checks: verify vault's totalDebt < debtLimit, strategy is not in emergency mode, and user's balance won't drop below a safety threshold","Deploy bot as a scheduled task (GitHub Actions cron, or local Node.js + node-cron) that runs every hour or on-demand","Test on testnet (Sepolia, Arbitrum Sepolia) with small amounts, then run dry-run logs on mainnet before enabling live execution"],"gotchas":["Gas costs on L1 Ethereum can exceed yield gains for small positions; calculate breakeven rebalancing size and skip if position is too small","Yearn vault APY is historical and can change rapidly; fetch fresh data immediately before executing to avoid stale rate decisions","Cross-chain rebalancing requires bridging (e.g., Stargate, Across), which adds latency and cost; start with single-chain rebalancing first","Vault strategies can enter emergency shutdown or debt limits; always check vault.debtLimit and vault.emergencyShutdown before attempting deposits","Slippage and MEV: use viem's simulateContract to dry-run transactions and set conservative slippage limits (0.05–0.1%)"],"references":[{"url":"https://docs.yearn.fi/getting-started/intro","kind":"docs","label":"Yearn Vault Architecture"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://github.com/yearn/yearn-sdk","kind":"repo","label":"Yearn SDK (TypeScript)"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://thegraph.com/hosted-service/subgraph/yearn/yearn-vaults-v3","kind":"tool","label":"Yearn Subgraph"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"}],"time_estimate_hours":80,"projects":{"slug":"yearn"},"project_slug":"yearn","project":{"slug":"yearn","name":"Yearn Finance","logo_url":"https://icons.llamao.fi/icons/protocols/yearn-finance?w=64&h=64","category":"yield"}},{"id":"d5ca3c1a-86c5-4064-a84e-206006adf4f8","project_id":"032770f2-2184-4fa2-98e8-0884f0171220","title":"Yearn V3 Strategy Explainer","pitch":"Paste any V3 vault address — get a plain-English breakdown of strategies inside, risk, and historical performance.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","openrouter","yearn-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:32.838594+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web app that lets users input a Yearn V3 vault address and receive an AI-generated explanation of what strategies the vault runs, how capital is allocated, the risks involved, and how the vault has performed over time. The tool fetches vault metadata and historical data from Yearn's API, uses an LLM to synthesize that into readable prose, and displays it alongside on-chain metrics. Useful for LPs deciding whether to deposit, auditors understanding vault mechanics, and researchers tracking strategy evolution.","learn_first":["ERC-4626 vault standard","Yearn V3 architecture (strategies, roles, queues)","how to read Yearn subgraph or API responses","prompt engineering for financial data"],"tech_stack":{"ai":["OpenRouter (Claude or GPT-4)"],"data":["Yearn API","Yearn Subgraph (The Graph)"],"other":["viem for address validation"],"frontend":["Next.js","React","TailwindCSS"],"contracts":["ERC-4626"]},"build_steps":["Set up Next.js app with TailwindCSS and create a single-page form that accepts a vault address input and a chain selector (Ethereum, Arbitrum, Optimism, Polygon).","Fetch vault metadata from Yearn API (vault name, symbol, decimals, strategy list) using the address and chain; validate the address with viem and handle errors gracefully.","Query Yearn Subgraph to retrieve historical APY, TVL, and strategy allocation over the last 90 days; cache results to avoid rate limits.","For each strategy in the vault, fetch strategy-specific data: name, implementation, allocation percentage, and recent performance metrics from Yearn API.","Construct a detailed prompt that includes vault metadata, strategy breakdown, risk factors (e.g., strategy count, custody model, recent losses if any), and performance data; send to OpenRouter with a model like Claude 3.5 Sonnet.","Parse the LLM response and render it in a clean UI card alongside raw metrics (current APY, TVL, strategy count, last harvest time).","Add a copy-to-clipboard button for the explanation and a link to the vault on Yearn's website.","Test with 3–5 real vault addresses across different chains and refine prompts based on output quality."],"gotchas":["Yearn API rate limits and inconsistent response schemas across chains; implement caching and retry logic early.","LLM hallucination on strategy names or risk claims; always show raw on-chain data alongside AI text so users can verify.","Strategy addresses and historical data may differ between chains; always fetch for the correct chain and handle missing data gracefully.","Some older strategies may not have full historical data in the subgraph; gracefully degrade the explanation if data is sparse."],"references":[{"url":"https://docs.yearn.fi","kind":"docs","label":"Yearn V3 Docs"},{"url":"https://docs.yearn.fi/developers/v3/overview","kind":"docs","label":"Yearn API & Subgraph"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://github.com/yearn/yearn-vaults-v3","kind":"repo","label":"Yearn GitHub Contracts"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Docs"},{"url":"https://viem.sh/docs/utilities/isAddress","kind":"docs","label":"viem Address Validation"}],"time_estimate_hours":12,"projects":{"slug":"yearn"},"project_slug":"yearn","project":{"slug":"yearn","name":"Yearn Finance","logo_url":"https://icons.llamao.fi/icons/protocols/yearn-finance?w=64&h=64","category":"yield"}},{"id":"65072946-30a5-4fcc-86bc-69f347fb5375","project_id":"b8673760-f0cf-42f0-9d57-66512c094217","title":"Implied APY Arbitrage Scanner","pitch":"Highlights Pendle PT implied yields that look mispriced vs underlying yield-bearing asset's recent realized APY.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","pendle-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:28.843653+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A trading tool that monitors Pendle Principal Tokens (PTs) across multiple chains and flags arbitrage opportunities when the implied APY diverges significantly from the underlying asset's realized yield. The scanner pulls PT prices and maturity dates from Pendle's smart contracts or API, calculates the implied yield to maturity, compares it against recent on-chain data for the underlying yield source (e.g., Lido stETH APY, Aave lending rates), and surfaces actionable alerts. Traders can then execute swaps directly or hedge positions. This catches market inefficiencies where PTs trade at yields that don't match fundamentals—common during liquidity crunches or when new yield sources launch.","learn_first":["How Pendle splits yield-bearing assets into PT (principal) and YT (yield) tokens","Pendle's AMM pricing model and how implied APY is derived from PT price","ERC-4626 vault standard and how yield sources report APY","Basic fixed-income math: yield-to-maturity and duration concepts"],"tech_stack":{"data":["Pendle API (REST) for PT data and prices","CoinGecko or Chainlink for underlying asset prices","Lido API or Aave subgraph for staking/lending APY"],"infra":["Vercel for deployment","PostgreSQL or Supabase for storing historical PT prices and alerts","Node.js backend for scheduled APY fetches"],"other":["Cron job library (node-cron) for periodic scanning"],"wallet":["viem for contract reads","ethers.js or wagmi for wallet integration (optional for alerts-only mode)"],"indexer":["Pendle subgraph (The Graph)","Ponder for custom indexing if needed"],"frontend":["Next.js 14+","TailwindCSS","Recharts or similar for APY charts"],"contracts":["Pendle PT token (ERC-20)","Pendle Router for swaps","ERC-4626 yield source vaults"]},"build_steps":["Set up Next.js project with TypeScript; scaffold pages for dashboard and alerts","Integrate viem to read Pendle PT contract data (balanceOf, totalSupply, maturity timestamps) from Ethereum, Arbitrum, Optimism, BSC","Call Pendle API to fetch current PT prices, YT prices, and implied yields for major pools (stETH, USDC, etc.)","Build a data layer that fetches underlying yield source APY: use Lido's API for stETH APY, Aave subgraph for lending rates, or Pendle's own yield source integrations","Implement implied APY calculation: (1 - PT_price / underlying_value)^(365 / days_to_maturity) - 1","Create a comparison engine that flags alerts when |implied_APY - realized_APY| > threshold (e.g., 2%)","Build a dashboard UI showing top arbitrage opportunities ranked by spread size, with PT/YT pair details, maturity, and chain","Deploy backend cron job to scan all chains every 5–15 minutes and store alerts in database; expose via API endpoint for frontend polling"],"gotchas":["Pendle PT prices are highly dependent on the underlying yield source's APY stability—if the source APY drops suddenly, the PT price can gap, making your alert stale within minutes.","Implied APY calculation assumes linear yield accrual; in reality, compounding and slippage on swaps matter—always show estimated slippage when surfacing trade recommendations.","Cross-chain data freshness: Arbitrum and Optimism blocks finalize faster than Ethereum; lag in fetching from multiple chains can lead to stale comparisons.","Pendle's liquidity varies dramatically by pool and chain; a wide spread might exist but be too illiquid to profitably trade, so include 24h volume and depth data.","The Pendle API rate limits can be hit if you scan all pools every minute—batch requests and cache aggressively, or use the subgraph instead."],"references":[{"url":"https://docs.pendle.finance","kind":"docs","label":"Pendle Finance Docs"},{"url":"https://github.com/pendle-finance/pendle-core-v2-public","kind":"repo","label":"Pendle Smart Contracts GitHub"},{"url":"https://api-docs.pendle.finance","kind":"docs","label":"Pendle API Reference"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Subgraph Querying"}],"time_estimate_hours":80,"projects":{"slug":"pendle"},"project_slug":"pendle","project":{"slug":"pendle","name":"Pendle","logo_url":"https://icons.llamao.fi/icons/protocols/pendle?w=64&h=64","category":"yield"}},{"id":"669754aa-ebdd-4fd1-88f8-de57c8e9aa87","project_id":"b8673760-f0cf-42f0-9d57-66512c094217","title":"Pendle Tax Reporter","pitch":"Accurate cost-basis tracking across PT/YT splits, swaps, and maturities. Exports IRS-style CSV.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:27.605609+00:00","metadata":{},"source":"curated","why_now":"Tax season pressure (Jan–Apr) drives demand for accurate yield-farming reporting. Pendle's growth across multiple chains creates urgent need for multi-chain cost-basis tools.","source_signal_ids":[],"published_at":null,"summary":"A tax accounting tool that tracks Pendle Principal Tokens (PT) and Yield Tokens (YT) positions across multiple chains, reconstructs cost-basis for each token through splits and swaps, and exports transaction records in IRS Form 8949 format. Handles the complexity of yield-bearing asset decomposition, maturity events, and cross-chain activity. Targets DeFi users who need defensible tax documentation for yield farming strategies.","learn_first":["Pendle PT/YT token mechanics and maturity flow","ERC-20 token standards and transfer events","Cost-basis accounting methods (FIFO, LIFO, specific ID)","IRS Form 8949 and Schedule D requirements","The Graph subgraph query patterns"],"tech_stack":{"ai":[],"data":["The Graph GraphQL","Etherscan/Arbiscan/Optimiscan APIs for fallback","CSV export library (papaparse)"],"infra":["Vercel for hosting"],"other":["date-fns for transaction date handling","decimal.js for precise arithmetic"],"wallet":["Privy or RainbowKit for wallet connection"],"indexer":["The Graph (Pendle subgraph or custom)"],"frontend":["Next.js","React","TailwindCSS","wagmi","viem","RainbowKit"],"contracts":[]},"build_steps":["Set up Next.js project with wagmi, viem, and RainbowKit for multi-chain wallet connection (Ethereum, Arbitrum, Optimism, BSC)","Query The Graph (or Pendle's subgraph) to fetch all PT/YT token transfers, swaps, and maturity events for a connected wallet address","Parse raw events into a transaction ledger: record each buy/sell/swap with timestamp, quantity, price (from DEX or oracle), and token type (PT or YT)","Implement cost-basis calculation engine: track FIFO or specific-ID method per token, apply cost-basis to each YT/PT sale or maturity event","Build a transaction reconciliation UI showing all Pendle activity grouped by underlying asset and chain","Generate IRS Form 8949 CSV export with columns: date acquired, date sold, proceeds, cost basis, gain/loss, and description (e.g., 'Pendle PT-stETH matured')","Add chain selector and date-range filter to narrow export scope","Deploy to Vercel and test with a known Pendle position (testnet or small mainnet wallet)"],"gotchas":["PT/YT prices fluctuate; you need oracle prices (Chainlink, Uniswap TWAP, or DEX spot) at transaction time, not current price. Pendle's own price feeds or historical DEX data are critical.","Maturity events are implicit: when a PT reaches maturity, it redeems 1:1 for the underlying. You must detect maturity block/timestamp and treat it as a forced sale at underlying price.","Cross-chain activity complicates cost-basis tracking; a user may buy PT on Ethereum and sell on Arbitrum. Ensure wallet address normalization and chain-aware ledger.","Pendle's subgraph may lag or have gaps; always have a fallback to direct RPC queries or Etherscan API for critical transactions.","Tax rules vary by jurisdiction (US FIFO vs. UK specific ID vs. other countries' wash-sale rules). Start with US FIFO; document assumptions clearly in exports."],"references":[{"url":"https://docs.pendle.finance/docs/Concepts/YieldTokenization","kind":"docs","label":"Pendle Docs: PT and YT Overview"},{"url":"https://github.com/pendle-finance","kind":"repo","label":"Pendle GitHub"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://www.irs.gov/forms/about-form-8949","kind":"article","label":"IRS Form 8949 Instructions"},{"url":"https://wagmi.sh/","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh/","kind":"docs","label":"viem Documentation"}],"time_estimate_hours":80,"projects":{"slug":"pendle"},"project_slug":"pendle","project":{"slug":"pendle","name":"Pendle","logo_url":"https://icons.llamao.fi/icons/protocols/pendle?w=64&h=64","category":"yield"}},{"id":"27e34759-939f-407b-afb3-6526ee9f1eca","project_id":"b8673760-f0cf-42f0-9d57-66512c094217","title":"Pendle Maturity Calendar","pitch":"Calendar view of every Pendle market's maturity date with personal alerts before yours expire.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","pendle-api","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:25.319765+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that aggregates all active Pendle markets across chains, displays their maturity dates in a calendar interface, and sends email/push alerts when a user's positions are approaching expiration. Pendle splits yield-bearing assets (like stETH) into principal tokens (PT) and yield tokens (YT), each with fixed maturity dates. Traders often forget when their positions expire, leading to missed opportunities to roll or harvest. This tool solves that by centralizing maturity visibility and proactive notifications.","learn_first":["How Pendle PT/YT tokens work and maturity mechanics","Pendle subgraph or API endpoints for market data","Email/push notification services (SendGrid, Expo)","Wallet connection with wagmi/RainbowKit"],"tech_stack":{"data":["Pendle API (REST)","Pendle Subgraph (The Graph)"],"infra":["Vercel","SendGrid or Resend for email alerts"],"other":["node-cron or AWS Lambda for scheduled alerts"],"wallet":["wagmi","RainbowKit","viem"],"frontend":["Next.js 14+","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; scaffold pages for calendar view and user settings.","Integrate wagmi + RainbowKit for wallet connection; store connected address in localStorage and state.","Fetch all active Pendle markets from Pendle Subgraph or REST API, filtering by chain (Ethereum, Arbitrum, Optimism, BSC); parse maturity timestamps.","Build calendar component (use react-big-calendar or a custom grid) that displays markets grouped by maturity date; color-code by chain.","Add user portfolio tracking: query Pendle Subgraph for positions held by connected wallet; highlight user's own expiring positions.","Implement alert settings form: let user set alert thresholds (e.g., 7 days before maturity) and email address; store in Supabase or Firebase.","Set up scheduled job (node-cron on Vercel or AWS Lambda) that runs daily, checks for positions nearing maturity, and sends emails via SendGrid/Resend.","Test end-to-end: connect wallet, verify positions load, set alert, trigger alert logic manually, confirm email delivery."],"gotchas":["Pendle markets exist across multiple chains; ensure you're fetching from all four and handling chain switching in the UI without confusion.","Maturity dates are stored as Unix timestamps in Pendle contracts; convert to user's local timezone to avoid off-by-one-day surprises.","Pendle Subgraph may lag by a few blocks; for real-time accuracy, supplement with direct contract calls via viem for critical data.","Email alert scheduling on Vercel's free tier is limited; use AWS Lambda or a dedicated cron service (e.g., EasyCron) for reliability.","Users may hold PT/YT across multiple wallets; only alert on the connected wallet to avoid scope creep in MVP."],"references":[{"url":"https://docs.pendle.finance","kind":"docs","label":"Pendle Finance Docs"},{"url":"https://thegraph.com/explorer/subgraphs","kind":"tool","label":"Pendle Subgraph (The Graph)"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup Guide"},{"url":"https://github.com/pendle-finance","kind":"repo","label":"Pendle GitHub"},{"url":"https://sendgrid.com/docs/for-developers/sending-email/api-overview/","kind":"docs","label":"SendGrid Email API"}],"time_estimate_hours":12,"projects":{"slug":"pendle"},"project_slug":"pendle","project":{"slug":"pendle","name":"Pendle","logo_url":"https://icons.llamao.fi/icons/protocols/pendle?w=64&h=64","category":"yield"}},{"id":"fe0d499c-5596-4b78-8dad-65b564a3218b","project_id":"b8673760-f0cf-42f0-9d57-66512c094217","title":"PT/YT Strategy Coach","pitch":"Plain-English UI that explains 'buy PT for fixed yield' or 'buy YT for points leverage' for the user's specific situation.","difficulty":"weekend","use_case":"onboarding","build_with":["nextjs","openrouter","pendle-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:22.344781+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Pendle splits yield-bearing assets (LSTs, staking derivatives) into Principal Tokens (PT) and Yield Tokens (YT). Most users don't understand when to buy which. This tool asks 3–4 questions (risk tolerance, time horizon, asset familiarity) and returns a personalized strategy card: 'You should buy PT of [asset] because [reason]' or 'YT is better for you because [reason]', with live APY data, break-even calculations, and a one-click link to execute on Pendle.","learn_first":["Pendle PT/YT mechanics (principal vs yield token split)","ERC-5115 (Pendle's yield-token standard)","LST/LRT landscape (stETH, rsETH, ezETH, etc.)","Basic APY/APR calculations and compounding"],"tech_stack":{"ai":["OpenRouter (Claude or GPT-4 for strategy explanation)"],"data":["Pendle API (markets, rates, historical APY)","viem (read-only RPC calls for current yields)"],"other":["Vercel (deployment)"],"frontend":["Next.js 15","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js 15 project with TailwindCSS and shadcn/ui; create a simple form component with 4 radio-button questions: (1) risk tolerance (conservative/moderate/aggressive), (2) time horizon (< 3 months / 3–12 months / 1+ years), (3) yield preference (fixed / variable), (4) LST familiarity (beginner/intermediate/expert).","Fetch live Pendle market data via the Pendle API (GET /markets endpoint) to retrieve current PT and YT prices, APYs, and underlying assets; cache results for 5 minutes.","Build a strategy-selection function that maps user answers to 2–3 candidate strategies: e.g., conservative + short horizon → 'PT of stablecoin-backed asset'; aggressive + long horizon → 'YT of high-volatility LST'.","Call OpenRouter (Claude 3.5 Sonnet or GPT-4 mini) with a prompt like 'User profile: [answers]. Candidate strategy: buy [PT/YT] of [asset]. Explain in 2–3 sentences why this matches their profile, what they earn, and what risks apply.' Store the response.","Render a strategy card showing: asset name, PT/YT type, current APY, 12-month projected yield, risk summary, and the AI explanation.","Add a 'View on Pendle' button that deep-links to Pendle's swap interface with the recommended asset pre-filled (use Pendle's UI URL scheme or embed an iframe if available).","Test with 3–4 user personas (e.g., staking newbie, yield farmer, conservative investor) and verify explanations are clear and actionable.","Deploy to Vercel; add basic analytics (Vercel Analytics or Plausible) to track which strategies are most recommended."],"gotchas":["Pendle API rate limits: cache aggressively and implement exponential backoff; free tier is ~100 req/min.","PT/YT prices move fast; always show a 'data as of [timestamp]' disclaimer and refresh every 5 minutes to avoid stale advice.","LLM cost can spike if you call it for every user; batch requests or use a cheaper model (GPT-4 mini or Claude 3.5 Haiku) for explanations.","Users may not understand that PT is not a stablecoin—it still carries underlying asset risk (e.g., stETH depegging); emphasize this in the risk summary."],"references":[{"url":"https://docs.pendle.finance/Developers/Contracts/Markets","kind":"docs","label":"Pendle Docs: Markets & Pricing"},{"url":"https://api-v2-docs.pendle.finance/","kind":"docs","label":"Pendle API Reference"},{"url":"https://eips.ethereum.org/EIPS/eip-5115","kind":"docs","label":"ERC-5115: Yield Token Standard"},{"url":"https://github.com/pendle-finance/pendle-core-v2-public","kind":"repo","label":"Pendle GitHub: Core Contracts"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Docs"}],"time_estimate_hours":12,"projects":{"slug":"pendle"},"project_slug":"pendle","project":{"slug":"pendle","name":"Pendle","logo_url":"https://icons.llamao.fi/icons/protocols/pendle?w=64&h=64","category":"yield"}},{"id":"177622ee-efb1-4081-af44-56df4bb8e783","project_id":"42272302-49fd-4180-bf48-aece46cbd9a0","title":"Karak XP Optimizer","pitch":"Calculates the most-XP-per-dollar restake action across the Karak ecosystem each day.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","karak-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:15.387037+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A daily dashboard that aggregates Karak restaking opportunities and ranks them by XP-per-dollar efficiency. Users can see which validator nodes, asset types, and restaking durations deliver the highest XP yield relative to capital deployed. The tool fetches current Karak state (active validators, their XP multipliers, TVL per validator, current asset prices), computes efficiency scores, and surfaces the top opportunities via a simple Next.js frontend. Useful for restakers deciding where to deploy capital each day and for understanding Karak's incentive structure.","learn_first":["ERC-4626 vault pattern","Karak's XP and validator model","REST API design for on-chain data"],"tech_stack":{"ai":[],"data":["karak-api","viem","ethers.js"],"infra":[],"other":["node.js","typescript"],"wallet":[],"indexer":[],"frontend":["nextjs","tailwindcss","recharts"],"contracts":[]},"build_steps":["Set up a Next.js app with TypeScript and Tailwind CSS; scaffold a /api/opportunities route.","Call Karak API endpoints to fetch active validators, their current XP multipliers, TVL, and supported assets.","Fetch real-time asset prices (ETH, stETH, LSTs) from a public price feed (Coingecko API or Uniswap subgraph).","Calculate XP-per-dollar for each validator–asset pair: (validator_xp_multiplier × asset_price) / tvl_per_validator.","Sort results by efficiency score and cache the results for 1 hour to avoid rate-limit spam.","Build a React component that displays the top 10 opportunities in a sortable table with columns: validator name, asset, XP multiplier, TVL, current price, XP-per-dollar, and a link to Karak's UI.","Add a simple chart (using Recharts) showing XP efficiency trends over the last 7 days by fetching historical snapshots.","Deploy to Vercel and set up a cron job (or use Vercel's serverless functions) to refresh data every 6 hours."],"gotchas":["Karak API rate limits and response latency—cache aggressively and consider batching requests; check their docs for current limits.","XP multipliers and validator TVL change frequently; stale data can mislead users into suboptimal choices. Always timestamp your data and warn users if it's older than 1 hour.","Asset prices fluctuate rapidly; use a price feed with low latency (Coingecko updates every ~1 min) and consider fetching mid-trade to avoid arbitrage losses.","Karak's XP model may evolve (new validators, new assets, new multiplier rules); design your efficiency calculation to be easily configurable so you can adapt without redeploying."],"references":[{"url":"https://docs.karak.network","kind":"docs","label":"Karak Docs"},{"url":"https://github.com/karak-network","kind":"repo","label":"Karak GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://www.coingecko.com/en/api/documentation","kind":"docs","label":"CoinGecko API"}],"time_estimate_hours":12,"projects":{"slug":"karak"},"project_slug":"karak","project":{"slug":"karak","name":"Karak","logo_url":"https://icons.llamao.fi/icons/protocols/karak?w=64&h=64","category":"lst-restaking"}},{"id":"af256db0-5f50-4a41-a092-560339b02625","project_id":"42272302-49fd-4180-bf48-aece46cbd9a0","title":"K2 L2 Block Explorer","pitch":"Lightweight, dev-friendly explorer specifically for K2 with built-in DSS context for every contract.","difficulty":"1+ month","use_case":"infrastructure","build_with":["nextjs","viem","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:13.647751+00:00","metadata":{},"source":"curated","why_now":"K2 is moving toward mainnet launch; operators and developers need native tooling to inspect restaking state and debug DSS transitions. A K2-native explorer fills a gap between generic block explorers and Karak's internal dashboards.","source_signal_ids":[],"published_at":null,"summary":"Build a focused block explorer for Karak's K2 L2 that surfaces operator and restaking-specific data alongside standard transaction details. Unlike generic explorers, this tool renders Delegated Stake Snapshot (DSS) state, operator commission schedules, and collateral composition for every contract interaction. Target K2 developers and restaking operators who need to debug DSS state changes and trace operator slashing events without context-switching to multiple tools.","learn_first":["K2 L2 architecture and sequencer design","DSS (Delegated Stake Snapshot) contract patterns","Ponder indexing for custom event filtering","Viem's multicall for batch RPC queries","NextJS server components for SSR of large datasets"],"tech_stack":{"data":["K2 RPC endpoint","Ponder GraphQL API"],"infra":["Vercel or self-hosted Node.js","K2 archive node (optional for deep history)"],"indexer":["Ponder for K2 event indexing","GraphQL schema for DSS state"],"frontend":["NextJS 14+ (App Router)","Viem for contract reads","TailwindCSS","Recharts for operator metrics"],"contracts":["K2 core contracts (Vault, Operator registry)","DSS snapshot contract"]},"build_steps":["Set up NextJS 14 project with TypeScript and TailwindCSS; scaffold pages for /tx/[hash], /address/[addr], /operator/[id]","Install and configure Ponder with K2 RPC; define event handlers for Vault deposits, Operator registration, and DSS snapshot updates","Create Ponder schema with tables for operators, delegations, collateral types, and slashing events; index K2 core contract ABIs","Build Ponder GraphQL queries to fetch operator state, active delegations, and recent DSS snapshots by address","Implement viem client in NextJS API routes to fetch live contract state (operator commissions, vault balances) and merge with indexed data","Create transaction detail page that decodes K2-specific function calls (e.g., restake, undelegate) and renders DSS context inline","Add operator dashboard showing commission schedule, total delegated stake, collateral breakdown, and recent slashing events","Deploy Ponder indexer to production (self-hosted or managed service); wire NextJS frontend to live GraphQL endpoint and test end-to-end"],"gotchas":["K2's DSS contract may emit events in batches; ensure Ponder event handlers are idempotent and handle reorg scenarios gracefully","Viem's multicall on L2s can be expensive; batch reads carefully and cache operator metadata for 1–5 minutes to avoid rate limits","NextJS server components SSR large transaction lists; paginate GraphQL queries and use streaming to avoid timeouts on archive queries","K2 RPC endpoints may lag behind the sequencer; add a \"latest block\" indicator on the UI so operators know if they're viewing stale DSS state","Operator commission schedules are often stored off-chain in governance proposals; consider indexing a secondary source (e.g., Karak governance forum or IPFS) to enrich the UI"],"references":[{"url":"https://docs.karak.network","kind":"docs","label":"K2 L2 Documentation"},{"url":"https://github.com/karak-network","kind":"repo","label":"Karak GitHub Organization"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://viem.sh/docs/contract/getFunction","kind":"docs","label":"Viem Contract Interaction Guide"},{"url":"https://nextjs.org/docs/app","kind":"docs","label":"NextJS App Router Patterns"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Vault Standard (K2 base)"}],"time_estimate_hours":160,"projects":{"slug":"karak"},"project_slug":"karak","project":{"slug":"karak","name":"Karak","logo_url":"https://icons.llamao.fi/icons/protocols/karak?w=64&h=64","category":"lst-restaking"}},{"id":"0b2d4924-85e1-47f1-8305-7b65dc2185d8","project_id":"42272302-49fd-4180-bf48-aece46cbd9a0","title":"DSS Risk Reports","pitch":"Auto-generated risk briefs for every Karak DSS — slashing terms, on-chain activity, audit status.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","openrouter","viem","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:13.616623+00:00","metadata":{},"source":"curated","why_now":"Karak's DSS ecosystem is growing; risk managers and LPs need transparent, automated risk briefs to make collateral decisions. LLM-powered reports scale better than manual analysis as DSS count increases.","source_signal_ids":[],"published_at":null,"summary":"Build an automated risk reporting dashboard that aggregates on-chain data and metadata for each Karak Delegated Security Service (DSS). The system fetches DSS configuration (slashing conditions, operator details, collateral types), queries on-chain activity via The Graph or Ponder, and generates structured risk briefs using an LLM. Each report surfaces key risks: operator reputation, slashing history, collateral concentration, audit status, and TVL trends. Deploy as a Next.js app with real-time updates and exportable reports for risk managers and LPs.","learn_first":["Karak DSS architecture and slashing mechanics","The Graph subgraph queries or Ponder indexing patterns","LLM prompt engineering for structured JSON output","ERC-4626 vault mechanics (Karak uses vault-based collateral)"],"tech_stack":{"ai":["OpenRouter (Claude 3.5 Sonnet recommended for JSON reliability)"],"data":["OpenRouter API (Claude or GPT-4)","Karak on-chain events (DSS created, slashing, collateral added)"],"infra":["Vercel (Next.js hosting)","Ponder or The Graph hosted service"],"other":["Zod for schema validation","node-cron for scheduled report generation"],"wallet":["viem (for read-only RPC calls)","ethers.js (optional fallback)"],"indexer":["Ponder (recommended) or The Graph","Karak subgraph if available"],"frontend":["Next.js 14+","TailwindCSS","shadcn/ui"],"contracts":["Karak core DSS contracts (read-only)"]},"build_steps":["Set up a Ponder indexer to track Karak DSS events: DSS creation, slashing events, collateral deposits, and operator changes. Index both Ethereum and Arbitrum.","Create a Next.js app with pages for DSS list and individual DSS detail views. Use viem to fetch DSS metadata from Karak contracts (operator address, collateral type, slashing conditions).","Build a data aggregation layer that queries Ponder for historical DSS activity: total slashing events, collateral concentration, TVL changes over 30/90 days.","Implement an LLM prompt that takes structured DSS data (operator info, slashing history, audit status, TVL) and returns a JSON risk report with fields: risk_level (low/medium/high), key_risks (array), recommendations (array), confidence_score.","Create a report generation endpoint that calls the LLM for each DSS, caches results for 6 hours, and stores reports in a database (Supabase or similar).","Build a dashboard UI showing all DSS with risk badges, sortable by risk level. Add a detail view with the full risk report, charts of TVL/slashing trends, and export to PDF.","Add scheduled report generation using node-cron to refresh all DSS reports daily at off-peak hours.","Deploy to Vercel with environment variables for RPC endpoints, OpenRouter API key, and Ponder indexer URL. Test with real Karak DSS on Ethereum mainnet."],"gotchas":["Karak DSS contracts may not have a standard ABI published; verify contract addresses and function signatures against Karak docs or GitHub before querying.","LLM responses for risk assessment can be inconsistent; use Zod to validate JSON output and fall back to a default risk level if parsing fails.","Ponder indexing can lag 1–2 blocks behind chain tip; cache LLM results to avoid regenerating reports on every page load and to handle indexer latency gracefully.","Slashing events may be rare; if a DSS has no historical slashing, the LLM may underweight operator reputation risk. Supplement with off-chain operator reputation data (e.g., from Karak forums or governance).","Collateral concentration risk requires understanding Karak's liquidation and slashing mechanics; read the docs carefully to avoid false positives in risk scoring."],"references":[{"url":"https://docs.karak.network","kind":"docs","label":"Karak Documentation"},{"url":"https://github.com/karak-network","kind":"repo","label":"Karak GitHub"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://thegraph.com/docs/en/querying/graphql-api/","kind":"docs","label":"The Graph Query Language"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Docs"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"viem Read Functions"}],"time_estimate_hours":80,"projects":{"slug":"karak"},"project_slug":"karak","project":{"slug":"karak","name":"Karak","logo_url":"https://icons.llamao.fi/icons/protocols/karak?w=64&h=64","category":"lst-restaking"}},{"id":"a4321a65-009a-40b4-8e56-be2edb55aad5","project_id":"42272302-49fd-4180-bf48-aece46cbd9a0","title":"Restakable Asset Discoverer","pitch":"Filterable directory of every asset Karak accepts as restake collateral, with deposit caps, APRs, and DSS partners.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","karak-api","typescript"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:08.565254+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web dashboard that aggregates Karak's restakable asset catalog and displays it with filtering, sorting, and comparison features. Users can search by asset name, filter by chain, APR range, or DSS partner, and see deposit caps, current utilization, and yield strategies. The app pulls from Karak's public API, caches results, and updates periodically. This solves the UX problem of discovering which assets are worth restaking into and comparing risk/reward across Karak's growing asset list.","learn_first":["How Karak's universal restaking model works (any asset as collateral)","Karak API endpoints for assets, vaults, and APR data","Basic filtering and sorting patterns in React"],"tech_stack":{"data":["Karak API (REST)","SWR or TanStack Query for caching"],"infra":["Vercel or similar"],"frontend":["Next.js 14+","React","TailwindCSS","shadcn/ui"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS","Create a types file matching Karak API asset schema (asset address, symbol, chain, deposit cap, current APR, DSS partners)","Build an API route handler that fetches from Karak's /assets or equivalent endpoint and caches results with SWR","Create a React component with a table displaying assets (name, chain, APR, deposit cap, utilization %)","Add filter controls: chain selector, APR range slider, search input for asset name, DSS partner multi-select","Add sorting by APR, deposit cap, utilization, or chain","Implement a detail modal or expandable row showing vault composition, risk profile, and partner info","Deploy to Vercel and set up periodic data refresh (e.g., every 5 minutes via SWR revalidation)"],"gotchas":["Karak API rate limits — cache aggressively and use SWR with a reasonable revalidation interval to avoid hitting limits","APR data may be stale or estimated; clearly label whether it's real-time or last-updated timestamp","Deposit caps can change rapidly if a vault fills up; refresh frequently but warn users if they're viewing stale data","DSS partners and supported chains may expand; design the filter UI to be dynamic rather than hardcoded","Asset decimals and display precision vary; ensure consistent formatting (e.g., always show 2 decimal places for APR)"],"references":[{"url":"https://docs.karak.network","kind":"docs","label":"Karak Docs"},{"url":"https://github.com/karak-network","kind":"repo","label":"Karak GitHub"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching","kind":"docs","label":"Next.js Data Fetching"},{"url":"https://swr.vercel.app","kind":"docs","label":"SWR Documentation"},{"url":"https://ui.shadcn.com/docs/components/data-table","kind":"docs","label":"shadcn/ui Table Component"},{"url":"https://tailwindcss.com/docs","kind":"docs","label":"TailwindCSS"}],"time_estimate_hours":8,"projects":{"slug":"karak"},"project_slug":"karak","project":{"slug":"karak","name":"Karak","logo_url":"https://icons.llamao.fi/icons/protocols/karak?w=64&h=64","category":"lst-restaking"}},{"id":"f960a93c-2a92-46ca-b278-5c40cd26f748","project_id":"cc7b8a39-03ab-4ac1-a80a-5ff9f68ff1b3","title":"Cross-LRT Switcher","pitch":"One-click conversion between rsETH and other LRTs at the best market rate. Closes a real onboarding gap.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","1inch-api","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:05.410386+00:00","metadata":{},"source":"curated","why_now":"Restaking TVL is consolidating around a few major protocols; users stuck in suboptimal LRTs need frictionless exit paths. 1inch API maturity and wagmi v2 stability make this a 1–2 week build.","source_signal_ids":[],"published_at":null,"summary":"A web app that lets users swap between rsETH (Kelp DAO's liquid restaking token) and competing LRTs (like stETH, rETH, cbETH, mETH) with minimal slippage by routing through DEX aggregators and displaying real-time rate comparisons. Users paste their wallet, select source and destination LRT, see the best quote, approve the token, and execute the swap in one flow. Solves the friction of manually bridging across multiple protocols or accepting poor rates on single-pair liquidity pools.","learn_first":["ERC-20 token approvals and transfers","DEX aggregator APIs (1inch, 0x)","Liquid restaking token mechanics (ERC-4626 vault pattern)","Slippage tolerance and price impact calculation","RainbowKit wallet connection flow"],"tech_stack":{"data":["1inch Swap API","Alchemy or Infura for RPC"],"other":["Zod for validation","Tailwind CSS for styling"],"wallet":["RainbowKit","ethers.js or viem for signing"],"frontend":["Next.js 14+","wagmi v2+","viem","RainbowKit","TypeScript"],"contracts":["ERC-20 (standard token interface)"]},"build_steps":["Set up Next.js 14 project with TypeScript, Tailwind, and wagmi + RainbowKit for wallet connection.","Create a token selector component listing rsETH, stETH, rETH, cbETH, mETH with their contract addresses and decimals.","Integrate 1inch Swap API: fetch quotes for source→destination LRT pairs, parse slippage and gas cost.","Build a quote display component showing: source amount, destination amount, rate, slippage %, and gas cost in USD.","Implement token approval flow: check allowance via viem, prompt user to approve 1inch router if needed.","Add swap execution: call 1inch API to get swap transaction data, send via wagmi useContractWrite or useSendTransaction.","Build transaction status UI: pending spinner, success confirmation with tx hash link, error handling with retry.","Test end-to-end on Ethereum mainnet testnet (Sepolia) with small amounts, verify quotes match live rates."],"gotchas":["1inch API rate limits: implement client-side caching of quotes for 10–30 seconds to avoid hammering the API on every keystroke.","Token decimals vary (most are 18, but verify each LRT's actual decimals to avoid off-by-one errors in calculations).","Slippage tolerance: 1inch defaults to 1%; for LRTs with lower liquidity, may need to increase to 0.5–2% or show a warning.","Wallet connection state: RainbowKit can disconnect unexpectedly; always check useAccount().isConnected before rendering swap form.","Gas price spikes: quote is valid for ~30 seconds; if user delays, gas cost estimate becomes stale and actual tx may fail or cost more."],"references":[{"url":"https://docs.1inch.io/docs/aggregation-protocol/swap-api","kind":"docs","label":"1inch Swap API Documentation"},{"url":"https://etherscan.io/token/0xa1290d69402606168498f0a6f6ab50dae4b8d4d","kind":"tool","label":"Kelp DAO rsETH Contract (Ethereum)"},{"url":"https://wagmi.sh/docs/hooks/useContractWrite","kind":"docs","label":"wagmi useContractWrite Hook"},{"url":"https://www.rainbowkit.com/docs/introduction","kind":"docs","label":"RainbowKit Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Token Standard (EIP-20)"},{"url":"https://docs.kelpdao.xyz/rseth/overview","kind":"docs","label":"Liquid Restaking Tokens Overview"}],"time_estimate_hours":80,"projects":{"slug":"kelp"},"project_slug":"kelp","project":{"slug":"kelp","name":"Kelp","logo_url":"https://icons.llamao.fi/icons/protocols/kelp?w=64&h=64","category":"lst-restaking"}},{"id":"c7fc707f-21aa-495f-89b5-6afac7547be6","project_id":"cc7b8a39-03ab-4ac1-a80a-5ff9f68ff1b3","title":"AVS Diversification Score","pitch":"Scores any LRT (including rsETH) by how diversified its AVS exposure is. Lower is riskier.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","the-graph","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:15:01.20538+00:00","metadata":{},"source":"curated","why_now":"EigenLayer AVS ecosystem is maturing with dozens of AVSs live; LRT treasuries and restakers need better tooling to understand concentration risk. Slashing events are becoming more common, making diversification metrics urgent.","source_signal_ids":[],"published_at":null,"summary":"Build a real-time scoring engine that measures AVS (Active Validator Set) concentration risk across liquid restaking tokens. The tool fetches current AVS allocations from on-chain data (via The Graph or direct RPC), calculates Herfindahl-Hirschman Index (HHI) or similar concentration metrics, and surfaces a 0–100 risk score. Users can compare rsETH, ezETH, weETH, and other LRTs to understand which has the most balanced operator/AVS exposure. This becomes a security dashboard for restakers choosing between LRTs and a reference point for LRT treasuries to track their own diversification.","learn_first":["EigenLayer AVS architecture and operator slashing mechanics","Herfindahl-Hirschman Index (HHI) for concentration measurement","LRT token mechanics and how they track underlying AVS allocations","The Graph subgraph querying patterns for restaking data"],"tech_stack":{"ai":[],"data":["Viem for RPC calls to fetch operator/AVS data","EigenLayer contracts (read-only)"],"infra":["Vercel or similar for Next.js hosting"],"other":["Herfindahl-Hirschman Index calculation library or custom math"],"wallet":[],"indexer":["The Graph (existing EigenLayer subgraph or custom)"],"frontend":["Next.js","Tailwind CSS","recharts or similar for concentration visualization"],"contracts":[]},"build_steps":["Set up Next.js project with TypeScript and Tailwind; scaffold pages for LRT comparison and individual LRT detail views.","Identify and document the EigenLayer subgraph (or write a minimal custom subgraph) that indexes operator registrations, AVS allocations, and stake amounts per operator.","Write a utility function using Viem to fetch current operator list and their AVS allocations from EigenLayer contracts (DelegationManager, StrategyManager, AVSDirectory).","Implement HHI calculation: for each LRT, sum the squares of each AVS's allocation percentage; normalize to 0–100 scale where 0 = perfect diversification, 100 = single AVS.","Build a GraphQL query layer (or direct RPC wrapper) to fetch rsETH, ezETH, weETH allocations; cache results in-memory or Redis with 5–10 minute TTL.","Create a comparison table component showing LRT name, total TVL, number of AVSs, HHI score, and top 3 AVS exposures; add sorting and filtering.","Add a detail page per LRT showing a pie chart of AVS allocation, historical HHI trend (if storing snapshots), and risk interpretation (e.g., HHI > 2500 = high concentration).","Deploy to Vercel, set up GitHub Actions to run daily snapshots; add a simple API endpoint to serve scores as JSON for external consumers."],"gotchas":["AVS allocations are not always directly queryable; you may need to aggregate operator → AVS mappings from multiple contract calls or a custom subgraph. EigenLayer's data model is complex; verify you're reading from the correct contract (DelegationManager vs StrategyManager).","LRT tokens may not have a single canonical on-chain registry of their AVS allocations; you may need to infer from operator registrations and then cross-reference which operators are delegated to by the LRT's treasury or staking contract.","HHI is a backward-looking metric; a high score today doesn't predict slashing risk, only current concentration. Pair it with qualitative AVS risk assessment (e.g., audit status, slashing history).","The Graph subgraph indexing can lag by 10–30 blocks; consider adding a fallback to direct RPC queries for real-time accuracy, but be mindful of rate limits.","Restaking is rapidly evolving; AVS allocations can shift hourly as operators rebalance. Your UI should clearly display the timestamp of the last data refresh and warn users if data is stale."],"references":[{"url":"https://github.com/Layr-Labs/eigenlayer-contracts","kind":"repo","label":"EigenLayer Contracts & Architecture"},{"url":"https://docs.eigenlayer.xyz","kind":"docs","label":"EigenLayer Documentation"},{"url":"https://docs.kelpdao.xyz","kind":"docs","label":"Kelp DAO rsETH Docs"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://en.wikipedia.org/wiki/Herfindahl_index","kind":"article","label":"Herfindahl-Hirschman Index Explainer"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"}],"time_estimate_hours":80,"projects":{"slug":"kelp"},"project_slug":"kelp","project":{"slug":"kelp","name":"Kelp","logo_url":"https://icons.llamao.fi/icons/protocols/kelp?w=64&h=64","category":"lst-restaking"}},{"id":"7e31c2d4-6c4f-466a-9352-f7b0e209df68","project_id":"cc7b8a39-03ab-4ac1-a80a-5ff9f68ff1b3","title":"rsETH Liquidity Heatmap","pitch":"Live map of rsETH liquidity venues — DEX depth, lending borrow rates, redemption queue. Find the best exit when needed.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","defillama-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:59.372344+00:00","metadata":{},"source":"curated","why_now":"rsETH adoption is growing; liquidity fragmentation across DEXs and lending protocols makes a unified view valuable for LPs deciding when to exit or rebalance.","source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard aggregating rsETH liquidity across Ethereum: spot prices and depth on Uniswap, Curve, and other DEXs; lending utilization and borrow rates on Aave and Compound; and Kelp's native redemption queue state. Builders and LPs use it to find the cheapest exit route and monitor slippage. The heatmap visualizes venues by spread, depth, and queue depth to surface arbitrage and liquidity gaps.","learn_first":["ERC-20 token standards","DEX AMM mechanics (Uniswap v3 tick spacing)","Lending protocol utilization ratios","Kelp rsETH redemption mechanics"],"tech_stack":{"ai":[],"data":["Uniswap subgraph","Aave subgraph","Curve API","DefiLlama API"],"infra":["Vercel"],"other":["viem for on-chain reads"],"wallet":[],"indexer":["The Graph (subgraphs for Uniswap, Aave)"],"frontend":["Next.js","TailwindCSS","Recharts or Plotly.js"],"contracts":[]},"build_steps":["Set up Next.js project with TailwindCSS and environment variables for RPC and subgraph endpoints.","Query Uniswap v3 subgraph for rsETH/ETH pool: liquidity, tick range, current price, and 24h volume.","Query Aave subgraph for rsETH reserve state: utilization rate, borrow APY, available liquidity.","Fetch Curve pool data (rsETH/ETH) via Curve API or on-chain call: virtual price, pool balance, fee.","Call Kelp's redemption queue contract (viem) to read queue length, average wait time, and current processing rate.","Build a grid or heatmap component showing each venue: spread (bid-ask), depth at 1% slippage, borrow rate, and queue depth; color-code by liquidity quality (green=deep, red=thin).","Add a route-finder: given an amount of rsETH, calculate best exit (lowest slippage + fees) across all venues.","Deploy to Vercel and set up 60-second refresh interval for all data feeds."],"gotchas":["Subgraph indexing lag: Uniswap and Aave subgraphs may be 1–2 blocks behind; cache aggressively and warn users of staleness.","Curve pool data: Curve's API is less standardized than Uniswap; fall back to on-chain calls via viem if API is unavailable.","Redemption queue: Kelp's queue state is not always on-chain; confirm whether queue data is exposed via contract or off-chain API; if off-chain, you may need Kelp's permission or a custom indexer.","Slippage estimation: depth at 1% slippage varies by pool type (v2 vs v3); use Uniswap SDK or simulate swaps to get accurate numbers."],"references":[{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"Uniswap V3 Subgraph"},{"url":"https://docs.aave.com/developers/getting-started/readme","kind":"docs","label":"Aave Subgraph"},{"url":"https://curve.readthedocs.io/","kind":"docs","label":"Curve Finance API"},{"url":"https://viem.sh/","kind":"docs","label":"viem – Ethereum client library"},{"url":"https://docs.kelpdao.xyz","kind":"docs","label":"Kelp DAO Docs"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API"}],"time_estimate_hours":16,"projects":{"slug":"kelp"},"project_slug":"kelp","project":{"slug":"kelp","name":"Kelp","logo_url":"https://icons.llamao.fi/icons/protocols/kelp?w=64&h=64","category":"lst-restaking"}},{"id":"adcdefb2-2b50-4d13-8276-eb6b8b76ed8e","project_id":"cc7b8a39-03ab-4ac1-a80a-5ff9f68ff1b3","title":"Kelp Miles Telegram Bot","pitch":"Daily Telegram digest of your Kelp Miles, restaking yield, and any opportunities to multiply points.","difficulty":"weekend","use_case":"social","build_with":["telegram-bot-api","kelp-api","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:59.251751+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Telegram bot that delivers personalized daily updates to Kelp DAO participants, showing their current Miles balance, accrued restaking yield, and time-sensitive opportunities to boost points (e.g., new campaigns, referral windows, or liquidity events). The bot queries Kelp's API for user data, calculates yield metrics, and sends formatted messages at a configurable time each day. Users authenticate via their Ethereum address or Telegram ID linked to their Kelp account, then receive push notifications without leaving Telegram.","learn_first":["Telegram Bot API basics (polling vs webhooks)","Kelp DAO Miles program mechanics","Ethereum address verification (EIP-191 signing)","Async job scheduling in Node.js"],"tech_stack":{"ai":[],"data":["Kelp API (rsETH balance, Miles accrual, APY)"],"infra":["Node.js + node-telegram-bot-api","node-cron or Bull for daily scheduling","dotenv for secrets management"],"other":["SQLite or PostgreSQL for user subscriptions","ethers.js for address verification"],"wallet":[],"indexer":[],"frontend":[],"contracts":[]},"build_steps":["Set up a Node.js project with node-telegram-bot-api and create a Telegram bot via BotFather; store the token in .env","Implement a /start command that prompts users to verify their Ethereum address via EIP-191 signature (using ethers.js) or link their Kelp account ID","Store verified user data (chat_id, address, subscription preferences) in a local SQLite database or simple JSON file","Write a function that calls Kelp's public API endpoints to fetch the user's rsETH balance, Miles balance, and current APY/yield metrics","Create a message formatter that generates a clean, readable daily digest with Miles count, estimated daily yield, and a bulleted list of active campaigns or point-multiplier events","Set up a cron job (using node-cron) that runs at a fixed time each day (e.g., 9 AM UTC) and sends the digest to all subscribed users","Add optional commands (/unsubscribe, /frequency, /stats) to let users control notification cadence and view historical yield data","Deploy to a free tier (Railway, Render, or Fly.io) and test with a few users; monitor logs for API rate limits or Telegram timeouts"],"gotchas":["Kelp's API may not expose real-time Miles accrual—you may need to poll at intervals or cache data; confirm available endpoints before building","Telegram's rate limits (30 messages/second per bot) can cause delivery delays if you have many users; consider batching or staggering sends","EIP-191 signature verification requires users to sign a message in their wallet; some users may not understand this step—provide clear UX copy and a fallback (e.g., Kelp account ID lookup)","Kelp Miles campaigns and multiplier events change frequently; you'll need a manual update mechanism or scrape Kelp's website to keep the \"opportunities\" list fresh","Free-tier hosting may have cold starts; use a persistent service or accept 30–60 second delays on first message after idle time"],"references":[{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Documentation"},{"url":"https://www.npmjs.com/package/node-telegram-bot-api","kind":"repo","label":"node-telegram-bot-api npm package"},{"url":"https://docs.kelpdao.xyz","kind":"docs","label":"Kelp DAO API Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-191","kind":"docs","label":"EIP-191: Signed Data Standard"},{"url":"https://docs.ethers.org/v6/api/signers/#Signer-signMessage","kind":"docs","label":"ethers.js Signing & Verification"},{"url":"https://www.npmjs.com/package/node-cron","kind":"repo","label":"node-cron npm package"}],"time_estimate_hours":8,"projects":{"slug":"kelp"},"project_slug":"kelp","project":{"slug":"kelp","name":"Kelp","logo_url":"https://icons.llamao.fi/icons/protocols/kelp?w=64&h=64","category":"lst-restaking"}},{"id":"92843e43-81f7-4ee5-b32a-c5cd2298170d","project_id":"c335727c-7658-4f68-8182-78e9862026ad","title":"Points Marketplace","pitch":"OTC desk for Renzo and EigenLayer points — match buyers and sellers with escrow until TGE.","difficulty":"1+ month","use_case":"trading","build_with":["foundry","nextjs","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:52.435934+00:00","metadata":{},"source":"curated","why_now":"Renzo and EigenLayer points are actively accumulating across thousands of users with no official secondary market; TGE timelines remain uncertain, creating demand for price discovery and early monetization. A trustless OTC desk fills this gap before centralized exchanges list these assets.","source_signal_ids":[],"published_at":null,"summary":"A peer-to-peer marketplace where users can buy and sell Renzo points (ezPoints) and EigenLayer points with on-chain escrow settlement. The platform acts as a bulletin board + matching engine: sellers list their points with a price, buyers browse and make offers, and a smart contract holds collateral or stablecoins in escrow until TGE when points convert to tokens. This captures the illiquidity premium of pre-token assets and gives early contributors a way to monetize without waiting for official token launch.","learn_first":["ERC-20 token mechanics and permit()","EigenLayer AVS architecture and points systems","Renzo ezPoints tokenomics","Escrow and multi-sig patterns in Solidity","ECDSA signatures for off-chain order matching"],"tech_stack":{"data":["Ponder (lightweight indexing)","PostgreSQL for off-chain order book state"],"infra":["Vercel for Next.js deployment","Alchemy or Infura for RPC","GitHub Actions for contract testing"],"wallet":["RainbowKit","Privy (optional, for email/social onboarding)"],"indexer":["Ponder or The Graph (for order history and settlement events)"],"frontend":["Next.js 14+","wagmi v2 for contract interaction","viem for transaction building","RainbowKit for wallet connection","TanStack Query for data fetching"],"contracts":["Solidity 0.8.x","OpenZeppelin ERC20 + AccessControl","ECDSA for order signing"]},"build_steps":["Set up Foundry project with test suite; write ERC20 mock contracts for ezPoints and EigenLayer points to test locally","Design and implement core escrow contract: accept buy/sell orders, validate signatures, hold stablecoins or points in escrow, emit events for order creation/cancellation/settlement","Build order matching logic: off-chain order book stored in PostgreSQL, signed orders (buyer amount, seller amount, expiry, nonce), validation of signatures via ECDSA","Create Next.js frontend scaffold with RainbowKit wallet connection, pages for browsing orders and creating new orders","Implement order creation flow: user signs order off-chain (using viem signMessage or EIP-712), POST to backend, backend validates and stores in DB","Add order matching UI: display open buy/sell orders, allow users to accept counterparty offers, trigger on-chain settlement transaction","Deploy escrow contract to Ethereum mainnet (or testnet), wire frontend to contract via wagmi hooks, test end-to-end flow with real signer","Set up Ponder indexer to track OrderCreated, OrderMatched, OrderSettled events; expose GraphQL API for frontend order history and stats"],"gotchas":["Points are typically non-transferable until TGE — you must escrow the *promise* (signed order) rather than the points themselves; settlement happens post-TGE when points convert to tokens, so you need a settlement trigger mechanism or manual claim flow","ECDSA signature replay attacks: use a nonce per user and chain ID in the signed order; validate expiry timestamps to prevent stale orders from being replayed","Renzo and EigenLayer may change points distribution rules or pause new point issuance; monitor governance and build a pause mechanism into your contract","Liquidity fragmentation: if you only support one stablecoin (e.g. USDC), you'll have fewer counterparties; consider supporting multiple stables or a swap aggregator (1inch, Uniswap) for settlement","TGE timing uncertainty: if points-to-token conversion is delayed or cancelled, your escrow contract must have a refund path; design for graceful degradation"],"references":[{"url":"https://docs.renzoprotocol.com","kind":"docs","label":"Renzo Protocol Docs"},{"url":"https://eigenlayer.xyz/whitepaper","kind":"docs","label":"EigenLayer Whitepaper & AVS Guide"},{"url":"https://docs.openzeppelin.com/contracts/5.x/erc20","kind":"docs","label":"OpenZeppelin ERC20 & AccessControl"},{"url":"https://eips.ethereum.org/EIPS/eip-712","kind":"docs","label":"ECDSA Signatures & EIP-712 in Solidity"},{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Book"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Hooks & Contract Interaction"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Docs"}],"time_estimate_hours":160,"projects":{"slug":"renzo"},"project_slug":"renzo","project":{"slug":"renzo","name":"Renzo","logo_url":"https://icons.llamao.fi/icons/protocols/renzo?w=64&h=64","category":"lst-restaking"}},{"id":"5f29a70e-060d-42ea-85cf-40514f9cb2bb","project_id":"c335727c-7658-4f68-8182-78e9862026ad","title":"Cross-chain ezETH Aggregator","pitch":"Single UI to mint, bridge, and deploy ezETH across chains via LayerZero. Removes the chain-switching friction.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","layerzero-sdk","renzo-sdk","wagmi","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:47.304968+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a unified dashboard where users can mint ezETH on Ethereum, bridge it to Arbitrum or Base via LayerZero's Omnichain Fungible Token (OFT) standard, and immediately stake it in AVS pools without leaving the app. The aggregator abstracts Renzo's multi-chain deployment and LayerZero's messaging layer, presenting a single flow: connect wallet → select chain → mint amount → confirm bridge → auto-deploy to yield. This solves the UX friction of manually navigating Renzo's separate chain interfaces and managing bridge delays.","learn_first":["LayerZero OFT token standard and cross-chain messaging","Renzo's ezETH contract architecture and mint/stake flows","EigenLayer AVS selection and restaking mechanics","wagmi hooks for multi-chain wallet state"],"tech_stack":{"ai":[],"data":["Renzo API for APY and TVL","LayerZero endpoint contracts for fee estimation"],"infra":["Vercel or Railway for hosting","Alchemy or Infura for RPC"],"other":["LayerZero SDK for OFT bridging"],"wallet":["RainbowKit","ethers.js v6 or viem"],"indexer":["The Graph (Renzo subgraph for ezETH supply/APY)"],"frontend":["Next.js 14+","wagmi 2.x","viem","RainbowKit for wallet connection","TailwindCSS"],"contracts":["Renzo ezETH (ERC-20)","LayerZero OFT adapter"]},"build_steps":["Set up Next.js 14 project with wagmi, viem, and RainbowKit; configure chains (Ethereum, Arbitrum, Base) in wagmi config.","Fetch Renzo's ezETH contract ABIs and integrate read functions: balanceOf, totalSupply, currentAPY via viem contract instances.","Implement LayerZero OFT bridge detection: query LayerZero endpoint contracts to identify ezETH OFT addresses on each chain and estimate bridge fees.","Build wallet connection flow with RainbowKit; add chain switcher UI that updates wagmi's active chain.","Create mint form: user inputs ETH amount → calls Renzo's deposit function on selected chain → displays expected ezETH output and gas cost.","Add bridge step: after mint, show LayerZero OFT bridge UI → user confirms destination chain → calls oft.send() with destination address and amount.","Integrate AVS pool selector: fetch available pools from Renzo API post-bridge → display APY, TVL, and risk profile → auto-delegate ezETH to selected pool.","Test end-to-end on testnet (Sepolia, Arbitrum Sepolia, Base Sepolia); verify mint, bridge confirmation, and stake execution; deploy to Vercel."],"gotchas":["LayerZero bridge fees vary by destination chain and message size; always fetch live fees via LayerZero SDK before showing user estimates, not hardcoded values.","Renzo's AVS pool selection is dynamic—pools can be deprecated or added; cache pool list with short TTL (5–10 min) and refresh on user interaction.","Cross-chain message delivery is asynchronous; after bridge initiation, the UI must poll LayerZero's message status or subscribe to events to confirm arrival on destination chain before auto-staking.","Wallet chain mismatch: user may have Ethereum selected but try to bridge to Arbitrum; validate chain consistency before each transaction and prompt chain switch via RainbowKit.","Gas estimation on Arbitrum and Base differs from Ethereum; use chain-specific RPC calls (eth_estimateGas) and display warnings if gas is high due to L1 calldata costs."],"references":[{"url":"https://docs.renzoprotocol.com","kind":"docs","label":"Renzo Protocol Docs"},{"url":"https://docs.layerzero.network/v2/developers/evm/oft/overview","kind":"docs","label":"LayerZero OFT Standard & SDK"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://github.com/Renzo-Protocol","kind":"repo","label":"Renzo GitHub Repository"},{"url":"https://github.com/LayerZero-Labs/LayerZero-v2","kind":"repo","label":"LayerZero GitHub SDK"},{"url":"https://www.rainbowkit.com/docs/chains","kind":"docs","label":"RainbowKit Multi-chain Setup"}],"time_estimate_hours":80,"projects":{"slug":"renzo"},"project_slug":"renzo","project":{"slug":"renzo","name":"Renzo","logo_url":"https://icons.llamao.fi/icons/protocols/renzo?w=64&h=64","category":"lst-restaking"}},{"id":"41187228-34a2-47c0-9b39-b30f49230428","project_id":"c335727c-7658-4f68-8182-78e9862026ad","title":"ezETH Depeg Detector","pitch":"24/7 monitor of ezETH/ETH peg with historical event chart. Sends Telegram alerts on > N bps drift.","difficulty":"weekend","use_case":"security","build_with":["node","viem","telegram-bot-api","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:47.137787+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time monitoring service that tracks the price ratio between ezETH (Renzo's liquid restaking token) and ETH across Ethereum, Arbitrum, and Base. The detector maintains a historical record of peg deviations, visualizes them in a chart, and triggers Telegram notifications when the deviation exceeds a configurable threshold. This helps LRT holders and Renzo protocol participants detect liquidity issues, exchange rate anomalies, or systemic problems early. The service runs continuously, polls price data every 1–5 minutes from DEX aggregators and on-chain sources, and stores events in a lightweight database for charting and analysis.","learn_first":["ERC-4626 vault mechanics (ezETH is built on this)","Uniswap V3 / V4 liquidity pool queries","Chainlink price feeds vs. DEX spot prices","Telegram Bot API webhook vs. polling patterns"],"tech_stack":{"ai":[],"data":["Uniswap V3 subgraph (The Graph)","Chainlink Data Feeds","ethers.js / viem for RPC calls"],"infra":["Node.js","SQLite or PostgreSQL for event history","Telegram Bot API"],"other":["cron job scheduler (node-cron)"],"wallet":[],"indexer":[],"frontend":[],"contracts":["ERC-4626 (ezETH vault standard)"]},"build_steps":["Set up a Node.js project with viem, ethers.js, node-telegram-bot-api, and node-cron. Create a .env file for RPC endpoints (Ethereum, Arbitrum, Base), Telegram bot token, and alert threshold (e.g., 50 bps).","Fetch current ezETH and ETH prices from Uniswap V3 pools on each chain using viem's contract read methods. Query the ezETH/ETH pool directly or use a DEX aggregator like 1inch API for spot rates.","Calculate the peg deviation in basis points: ((ezETH_price - ETH_price) / ETH_price) * 10000. Store the result with a timestamp in SQLite.","Set up a cron job to run the price check every 3 minutes. Log each check to the database with chain, prices, and deviation.","Implement Telegram alert logic: if deviation exceeds the threshold (e.g., > 50 bps or < -50 bps), send a formatted message with current prices, deviation, and a link to the pool on a block explorer.","Create a simple in-memory or SQLite-backed historical chart data endpoint (or export to CSV). Track the last 100–1000 events for visualization.","Test the bot locally by manually triggering price checks and verifying Telegram messages arrive. Simulate a depeg by checking during high volatility or using mock data.","Deploy to a VPS or cloud function (AWS Lambda, Railway, Render) with persistent SQLite or connect to a managed PostgreSQL. Set up log rotation and error alerting."],"gotchas":["ezETH price can vary significantly across chains and DEXes due to liquidity fragmentation; use a time-weighted average or query multiple pools to avoid false positives from thin liquidity.","Chainlink price feeds may have staleness or outages; always fall back to on-chain spot prices and validate freshness timestamps.","Telegram Bot API rate limits (30 messages per second per bot); batch alerts or implement exponential backoff if you're monitoring multiple metrics.","RPC rate limits on public endpoints; use a service like Alchemy or Infura with higher quotas, or implement request queuing.","ezETH's underlying restaking exposure means depeg events can correlate with EigenLayer AVS slashing or mass withdrawals; monitor Renzo's official channels for context before alerting users."],"references":[{"url":"https://docs.renzoprotocol.com","kind":"docs","label":"Renzo Protocol Docs"},{"url":"https://etherscan.io/token/0xbf5495efe5db59b732dc72acb79048172a4c7f6b","kind":"tool","label":"ezETH Contract on Ethereum"},{"url":"https://thegraph.com/hosted-service/subgraph/uniswap/uniswap-v3","kind":"docs","label":"Uniswap V3 Subgraph"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Reference"},{"url":"https://www.npmjs.com/package/node-cron","kind":"repo","label":"node-cron NPM Package"}],"time_estimate_hours":12,"projects":{"slug":"renzo"},"project_slug":"renzo","project":{"slug":"renzo","name":"Renzo","logo_url":"https://icons.llamao.fi/icons/protocols/renzo?w=64&h=64","category":"lst-restaking"}},{"id":"25066fb8-7b00-4fd1-9767-46baf20c1c57","project_id":"c335727c-7658-4f68-8182-78e9862026ad","title":"ezETH Yield Per Source","pitch":"Breaks down ezETH yield by source — ETH staking, EigenLayer points, partner protocols. Shows true APY.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","renzo-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:47.043512+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that decomposes ezETH yield into its constituent sources: base ETH staking rewards, EigenLayer AVS points (and their implied value), and yield from partner protocols integrated into Renzo. Display historical and projected APY by source, helping users understand exactly where their yield comes from and how it compounds. This requires pulling data from Renzo's API, EigenLayer's points system, and on-chain events, then aggregating into a clear UI.","learn_first":["EigenLayer AVS points system and how they accrue","Renzo's ezETH minting and redemption mechanics","ERC-4626 vault interface and how Renzo implements it","The Graph or Renzo's indexing for historical yield events"],"tech_stack":{"data":["Renzo API (yield endpoints)","EigenLayer subgraph or API for points","Etherscan/Alchemy for on-chain event logs","The Graph (if querying Renzo subgraph)"],"infra":["Vercel or similar for frontend hosting","RPC provider (Alchemy, Infura, or public)"],"other":["Renzo Protocol contracts (read-only access)"],"frontend":["Next.js","TypeScript","wagmi","viem","TailwindCSS","Recharts or Chart.js for yield breakdowns"]},"build_steps":["Set up Next.js project with TypeScript, wagmi, and viem for contract interaction","Create API route that fetches current ezETH total supply and TVL from Renzo API","Add endpoint to pull historical staking rewards (ETH base layer) from Renzo or Beacon Chain data","Integrate EigenLayer points data: fetch current points balance and historical accrual rate (via EigenLayer API or subgraph)","Query Renzo's partner protocol integrations (e.g., Lido, Curve) to fetch their yield contributions","Build frontend components: yield breakdown card (pie/bar chart), APY calculator by source, historical yield timeline","Add real-time updates using SWR or React Query to refresh yield data every 5–10 minutes","Deploy to Vercel and test with live ezETH holder data"],"gotchas":["EigenLayer points are not yet liquid and have uncertain future value—clearly label them as 'estimated' and link to EigenLayer's point methodology","Renzo's API may have rate limits; cache responses and use SWR stale-while-revalidate strategy","Partner protocol yields can change rapidly (Curve gauge weights, Lido APR); ensure data freshness or show last-update timestamp","ezETH's APY compounds; make sure you're displaying annualized rates correctly and not double-counting reinvested yield","EigenLayer AVS selection is dynamic; yields vary by AVS chosen—consider showing a range or user's specific AVS allocation if available"],"references":[{"url":"https://docs.renzoprotocol.com","kind":"docs","label":"Renzo Protocol Docs"},{"url":"https://github.com/Renzo-Protocol","kind":"repo","label":"Renzo GitHub"},{"url":"https://docs.eigenlayer.xyz","kind":"docs","label":"EigenLayer Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi + viem Docs"},{"url":"https://thegraph.com/docs/en/querying/graphql-api/","kind":"docs","label":"The Graph Query Language"}],"time_estimate_hours":16,"projects":{"slug":"renzo"},"project_slug":"renzo","project":{"slug":"renzo","name":"Renzo","logo_url":"https://icons.llamao.fi/icons/protocols/renzo?w=64&h=64","category":"lst-restaking"}},{"id":"e9af286f-7080-4099-b9a2-158cfe44a103","project_id":"921c5722-d5b3-4b18-b478-693243fdb863","title":"Restaking Yield Decomposer","pitch":"Breaks down weETH yield into base ETH staking + AVS rewards + points. Shows where each basis point comes from.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","etherfi-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:38.186832+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that decomposes liquid restaking yield from ether.fi's weETH token into its constituent parts: base Ethereum staking rewards, AVS (Active Validator Set) operator rewards, and protocol points. Users see real-time APY breakdowns, historical yield trends, and can compare their personal restaking performance against network averages. This helps restakers understand exactly where their yield originates and make informed decisions about which AVS operators to delegate to.","learn_first":["ERC-4626 vault mechanics","Liquid restaking concepts","ether.fi weETH architecture","AVS operator delegation","Chainlink price feeds for yield calculation"],"tech_stack":{"data":["ether.fi REST API","Etherscan API for transaction history","Chainlink ETH/USD price feed"],"infra":["Vercel","Alchemy or Infura for RPC"],"other":["TypeScript"],"wallet":["RainbowKit or Privy"],"indexer":["The Graph (ether.fi subgraph)","Ponder (optional, for custom events)"],"frontend":["Next.js 14+","TailwindCSS","Recharts or Chart.js for yield visualization","wagmi 2.x","viem 2.x"],"contracts":["ERC-4626 (weETH vault)"]},"build_steps":["Set up Next.js 14 project with TailwindCSS and wagmi/viem for blockchain reads","Create data models for yield components: base_staking_apy, avs_rewards_apy, points_multiplier, total_apy","Build API route that calls ether.fi REST API to fetch weETH vault state, TVL, and recent reward events","Integrate The Graph query to fetch historical weETH share price changes and calculate realized yield over time windows (7d, 30d, 90d, 1y)","Create dashboard layout with cards showing current APY breakdown, historical yield chart, and AVS operator performance table","Implement wallet connection via RainbowKit; fetch user's weETH balance and personal yield accrued using viem contract reads","Add yield calculation logic: (current_share_price - entry_share_price) / entry_share_price * 365 / days_held for personalized APY","Deploy to Vercel and test with live ether.fi data; add refresh intervals (5-10 min) for real-time updates"],"gotchas":["weETH share price changes are the primary yield signal—ensure you're reading the correct vault contract state and not confusing it with eETH; verify ABI against ether.fi's official GitHub","AVS rewards may be batched and delayed; cross-reference ether.fi's reward distribution events with on-chain transfers to avoid showing stale APY estimates","Points are often off-chain or emitted as events; you may need to index custom events or call a dedicated points API endpoint—check ether.fi docs for the canonical source","Yield calculations compound; simple APY math will underestimate long-term returns; consider using the formula: (ending_value / starting_value)^(365/days) - 1","Rate limiting on ether.fi API and RPC calls can cause dashboard lag during peak usage; implement caching (Redis or ISR) and batch queries"],"references":[{"url":"https://etherfi.gitbook.io/etherfi/liquid-restaking/weeth","kind":"docs","label":"ether.fi weETH Documentation"},{"url":"https://github.com/etherfi-protocol","kind":"repo","label":"ether.fi GitHub Repository"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://blog.lido.fi/what-is-liquid-restaking/","kind":"article","label":"Liquid Restaking Primer"},{"url":"https://thegraph.com/docs/en/querying/querying-basics/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://wagmi.sh/react/getting-started","kind":"docs","label":"wagmi + viem Setup Guide"}],"time_estimate_hours":80,"projects":{"slug":"etherfi"},"project_slug":"etherfi","project":{"slug":"etherfi","name":"ether.fi","logo_url":"https://icons.llamao.fi/icons/protocols/etherfi-stake?w=64&h=64","category":"lst-restaking"}},{"id":"f5775df8-d742-4085-89df-59504e6d29ef","project_id":"921c5722-d5b3-4b18-b478-693243fdb863","title":"Loyalty Points Optimizer","pitch":"Calculates the most-points-per-dollar action across the ether.fi ecosystem each day. Gamifies the points farm.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","etherfi-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:36.480947+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that aggregates ether.fi's daily reward opportunities (staking, restaking, referrals, liquidity provision) and ranks them by points-per-dollar efficiency. Users see a ranked leaderboard of actions, historical ROI trends, and notifications when a high-efficiency opportunity emerges. The optimizer pulls real-time TVL, APY, and points multipliers from ether.fi's API and on-chain data, then surfaces the mathematically optimal path for a given capital amount. This turns points farming from manual guesswork into a data-driven game.","learn_first":["ERC-20 token standards","Liquid staking mechanics (eETH)","Restaking basics (EigenLayer integration)","Points systems and multiplier mechanics"],"tech_stack":{"ai":[],"data":["ether.fi API","Etherscan API for historical gas costs"],"infra":["Vercel"],"other":["node-cron for daily calculations"],"wallet":["viem","ethers.js"],"indexer":[],"frontend":["Next.js","TailwindCSS","shadcn/ui"],"contracts":[]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for dashboard and leaderboard.","Create a data fetcher module that calls ether.fi API endpoints for current staking rates, restaking yields, and points multipliers; cache results with 5-minute TTL.","Build a points-per-dollar calculator: for each action (stake eETH, restake to EigenLayer, refer, provide liquidity), compute (daily_points_earned / capital_required). Store results in a simple in-memory store or lightweight SQLite.","Implement a daily scheduler (node-cron) that runs calculations at 00:00 UTC, stores historical snapshots, and identifies rank changes.","Create a React component that renders a sortable table of actions ranked by efficiency; include columns for action name, points/dollar, 7-day trend, and estimated daily yield.","Add a user input form to let visitors enter their capital amount and see personalized recommendations (e.g., \"For $1000, stake eETH first for 2.3 pts/$, then refer for 1.8 pts/$\").","Integrate Etherscan API to fetch gas costs for each action and adjust net points-per-dollar by subtracting gas overhead.","Deploy to Vercel; set up a simple webhook or polling mechanism to refresh data every 6 hours."],"gotchas":["ether.fi API rate limits: implement exponential backoff and cache aggressively; hitting the API every minute will get you blocked.","Points multipliers and bonus periods change frequently (seasonal campaigns, new partnerships); the calculator must flag when data is stale (>24h old) so users don't rely on outdated rankings.","Gas costs vary wildly by network congestion; a high-efficiency action might become negative after gas if Ethereum is congested. Always fetch current gwei and recalculate before displaying.","Restaking to EigenLayer has lock-up periods and slashing risk; the optimizer should note these constraints and not just rank by raw points, or users will get rekt."],"references":[{"url":"https://etherfi.gitbook.io","kind":"docs","label":"ether.fi API Documentation"},{"url":"https://github.com/etherfi-protocol","kind":"repo","label":"ether.fi GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Standard"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://nextjs.org/docs","kind":"docs","label":"Next.js App Router Guide"},{"url":"https://docs.eigenlayer.xyz","kind":"docs","label":"EigenLayer Restaking Intro"}],"time_estimate_hours":12,"projects":{"slug":"etherfi"},"project_slug":"etherfi","project":{"slug":"etherfi","name":"ether.fi","logo_url":"https://icons.llamao.fi/icons/protocols/etherfi-stake?w=64&h=64","category":"lst-restaking"}},{"id":"c2fca187-3141-4e73-9615-a2efe12794d6","project_id":"921c5722-d5b3-4b18-b478-693243fdb863","title":"Cash-Card Spending Tracker","pitch":"Personal spending dashboard for ether.fi Cash users — tracks burn rate, categorizes spending, sets monthly limits.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","supabase","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:33.853637+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that connects to ether.fi's Cash card API to fetch transaction history, categorize spending by merchant type, visualize burn rate against earned restaking rewards, and let users set monthly spend caps with alerts. The app surfaces real-time balance, historical spending trends, and a simple budget planner. Users authenticate via their ether.fi account (or wallet), and data persists in a lightweight database. This solves a real UX gap: Cash card holders today have no native way to track spending velocity or correlate it with their restaking yield.","learn_first":["ether.fi Cash card API structure and auth flow","ERC-4626 vault basics (to understand eETH rewards accrual)","Supabase row-level security for user data isolation","wagmi hooks for wallet connection and balance queries"],"tech_stack":{"data":["Supabase (PostgreSQL + auth)","ether.fi Cash card API (REST)"],"infra":["Vercel for deployment","Supabase hosted backend"],"wallet":["wagmi","viem","RainbowKit or Privy for auth"],"frontend":["Next.js 14+ (App Router)","TailwindCSS","Recharts or Chart.js for spending visualizations","shadcn/ui for components"]},"build_steps":["Set up Next.js 14 project with TailwindCSS and shadcn/ui; configure environment variables for ether.fi API keys and Supabase credentials.","Implement wallet connection flow using wagmi + RainbowKit; store user wallet address in Supabase users table with row-level security policies.","Create Supabase schema: users table (wallet, email, created_at), transactions table (user_id, amount, merchant, category, timestamp), budgets table (user_id, category, monthly_limit, alert_threshold).","Build server action to fetch ether.fi Cash card transaction history via their API; parse merchant data and store raw transactions in Supabase with a background job (cron or webhook).","Implement transaction categorization: either via Supabase function (regex on merchant name) or lightweight ML (e.g., Hugging Face API) to tag spending (food, transport, entertainment, etc.).","Create dashboard page with: real-time balance card, monthly spend chart (Recharts bar/line), category breakdown (pie chart), and a transactions table with filters.","Add budget management UI: modal to set monthly limits per category, visual progress bars, and email/toast alerts when 80% of limit is reached.","Deploy to Vercel; set up Supabase cron job to refresh transaction history daily and recalculate budgets; test end-to-end with a test ether.fi Cash card."],"gotchas":["ether.fi Cash card API may have rate limits or require IP whitelisting; cache transaction history client-side and batch API calls to avoid throttling.","Merchant category data from ether.fi API may be sparse or inconsistent; build a fallback categorization layer (regex + manual merchant mapping) and let users override categories.","Supabase RLS policies must be strict: ensure users can only query their own transactions; test with multiple wallets to catch data leaks.","Real-time balance sync: ether.fi balance may lag behind on-chain state; consider fetching balance from eETH contract directly via viem for ground truth, then cache.","Spending alerts can spam users; implement a cooldown (e.g., one alert per category per day) and let users customize alert frequency in settings."],"references":[{"url":"https://etherfi.gitbook.io/etherfi-docs/","kind":"docs","label":"ether.fi Cash Card API Documentation"},{"url":"https://github.com/etherfi-protocol","kind":"repo","label":"ether.fi Protocol GitHub"},{"url":"https://supabase.com/docs/guides/auth","kind":"docs","label":"Supabase Auth & RLS Guide"},{"url":"https://wagmi.sh/docs/getting-started","kind":"docs","label":"wagmi Hooks Documentation"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations","kind":"docs","label":"Next.js App Router & Server Actions"},{"url":"https://recharts.org/en-US/guide","kind":"docs","label":"Recharts Documentation"}],"time_estimate_hours":80,"projects":{"slug":"etherfi"},"project_slug":"etherfi","project":{"slug":"etherfi","name":"ether.fi","logo_url":"https://icons.llamao.fi/icons/protocols/etherfi-stake?w=64&h=64","category":"lst-restaking"}},{"id":"17e50109-62c4-4527-9a0f-f4a5b66a6ee0","project_id":"921c5722-d5b3-4b18-b478-693243fdb863","title":"eETH Composability Map","pitch":"Visual graph of every protocol that accepts eETH/weETH as collateral, with current rates and TVL. Surfaces hidden yield.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","defillama-api","d3","the-graph"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:32.544229+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an interactive dashboard that maps all protocols accepting eETH or weETH as collateral, displaying real-time rates, TVL per protocol, and estimated yield. Use The Graph or Ponder to index eETH transfer events and collateral deposits across major lending/yield protocols (Aave, Compound, Lido, Curve, Balancer, etc.), then visualize the network as a directed graph showing capital flow and rate arbitrage opportunities. This surfaces composability that users miss—e.g., eETH → Aave → yield farming, or weETH as collateral for stablecoin minting on MakerDAO.","learn_first":["ERC-20 token standards and wrapped token mechanics","Aave/Compound collateral factor mechanics","Chainlink price feeds and oracle patterns","D3.js force-directed graph basics"],"tech_stack":{"ai":[],"data":["DefiLlama API for TVL snapshots","Etherscan API for token transfers","Chainlink price feeds via ethers.js"],"infra":["Vercel for deployment","Ethereum mainnet RPC (Alchemy/Infura)"],"other":["ethers.js v6 for contract interactions"],"wallet":["RainbowKit (optional, for user portfolio view)"],"indexer":["The Graph (Ethereum subgraph)","Ponder (optional, for local indexing)"],"frontend":["Next.js 14+","D3.js v7+","TailwindCSS","wagmi v2 for optional wallet connection"],"contracts":[]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; create a /pages/api/graph endpoint","Write a Ponder indexer (or query The Graph) to track eETH/weETH transfers and collateral deposits on Aave, Compound, Curve, and Balancer; store protocol name, collateral amount, and rate","Fetch real-time collateral rates from each protocol's smart contracts (Aave's LendingPool.getReserveData, Compound's cToken.exchangeRateStored) and cache in Redis or Vercel KV","Pull TVL data from DefiLlama API; cross-reference with your indexed transfers to calculate eETH TVL per protocol","Create a D3 force-directed graph component: nodes = protocols, edges = eETH capital flow, node size = TVL, edge width = capital amount","Add a legend and hover tooltips showing protocol name, TVL, collateral factor, current borrow rate, and estimated APY","Deploy to Vercel; add a simple cron job (e.g., Vercel Functions) to refresh data every 6 hours"],"gotchas":["The Graph Ethereum subgraph can lag 1–2 blocks; use Ponder for real-time indexing if sub-minute freshness is critical.","Collateral rates change frequently; cache aggressively (5–10 min TTL) to avoid rate-limit hits on Chainlink or protocol RPCs.","weETH and eETH have different collateral factors on different protocols; hard-code or fetch from each protocol's contracts, not DefiLlama.","D3 force simulations can be slow with >50 nodes; use a spatial index or pre-compute layout server-side if graph grows large."],"references":[{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Ethereum Docs"},{"url":"https://ponder.sh/docs","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API"},{"url":"https://docs.aave.com/developers/v/2.0/the-core-protocol/lendingpool/lendingpool-core","kind":"docs","label":"Aave V3 Protocol Data Provider"},{"url":"https://d3js.org/d3-force","kind":"docs","label":"D3.js Force-Directed Graph Example"},{"url":"https://etherfi.gitbook.io/etherfi/","kind":"docs","label":"ether.fi eETH Documentation"}],"time_estimate_hours":16,"projects":{"slug":"etherfi"},"project_slug":"etherfi","project":{"slug":"etherfi","name":"ether.fi","logo_url":"https://icons.llamao.fi/icons/protocols/etherfi-stake?w=64&h=64","category":"lst-restaking"}},{"id":"8a6cfb0e-2a99-4364-b791-29a0ccab6a2f","project_id":"801d9334-e0fe-48a3-bcb6-2e277fd15bcb","title":"LRT Side-by-Side","pitch":"Compares every liquid restaking token by exposed AVSs, yield breakdown, slashing risk, and liquidity venues.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","defillama-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:25.581381+00:00","metadata":{},"source":"curated","why_now":"Liquid restaking is now the dominant way retail participates in EigenLayer; LRT fragmentation and slashing risk are growing pain points. A transparent comparison tool fills a gap between on-chain data and user decision-making.","source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that aggregates data on all liquid restaking tokens (LRTs) in the EigenLayer ecosystem. Users can compare risk profiles across different LRTs by visualizing which AVSs (actively validated services) each token is exposed to, breaking down yield sources (base ETH staking + AVS rewards), displaying slashing risk metrics per AVS, and showing liquidity depth across DEXs and centralized venues. The dashboard helps LRT holders make informed allocation decisions and helps new AVSs understand which LRTs have capacity to restake with them.","learn_first":["EigenLayer operator and AVS architecture","ERC-4626 vault standard (LRTs implement this)","Liquid staking token mechanics and slashing","DEX liquidity aggregation patterns"],"tech_stack":{"data":["DefiLlama API (TVL, yield data)","Uniswap V3 subgraph (liquidity)","EigenLayer subgraph (operator/AVS data)","Etherscan API (slashing events)"],"infra":["Vercel","PostgreSQL (cache layer for aggregated metrics)"],"other":["Chainlink price feeds (for USD conversions)"],"wallet":["RainbowKit"],"indexer":["The Graph (EigenLayer subgraph)","Ponder (for custom event indexing)"],"frontend":["Next.js","TailwindCSS","Recharts or Visx (for risk/yield charts)","Wagmi (for wallet connection)"],"contracts":["ERC-4626"]},"build_steps":["Set up Next.js project with TailwindCSS and Wagmi/RainbowKit for wallet connection","Query EigenLayer subgraph to fetch all registered LRTs, their operators, and AVS allocations","Fetch TVL and yield data from DefiLlama API and cross-reference with EigenLayer operator addresses","Pull liquidity data from Uniswap V3 subgraph and Curve subgraph (where LRTs trade) to calculate slippage at different sizes","Create a PostgreSQL cache layer that aggregates LRT metrics hourly (TVL, yield, liquidity, AVS exposure count)","Build comparison table component showing LRT name, TVL, APY, number of AVSs, slashing risk score (calculated from AVS age + historical slashing), and liquidity venues","Add drill-down modal that shows per-LRT: detailed AVS list with individual yield %, slashing risk, and operator count per AVS","Deploy to Vercel with cron job to refresh cache every hour"],"gotchas":["EigenLayer subgraph can lag 1–2 blocks; add a fallback to Etherscan API for real-time slashing events","DefiLlama's yield data is aggregated and sometimes stale; verify against on-chain contract state (ERC-4626 totalAssets/totalSupply)","Slashing risk is hard to quantify—consider using AVS age, operator count, and historical slashing events as proxies rather than a single score","LRT liquidity is fragmented across Uniswap, Curve, and small DEXs; missing venues will skew the liquidity comparison","Some LRTs may have different slashing conditions per AVS; you need to track operator-to-AVS mappings, not just LRT-to-AVS"],"references":[{"url":"https://docs.eigenlayer.xyz","kind":"docs","label":"EigenLayer Docs—Operator and AVS Architecture"},{"url":"https://github.com/Layr-Labs/eigenlayer-contracts","kind":"repo","label":"EigenLayer GitHub—Core Contracts"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard (Tokenized Vault)"},{"url":"https://defillama.com/docs/api","kind":"docs","label":"DefiLlama API Documentation"},{"url":"https://thegraph.com/explorer","kind":"tool","label":"The Graph—EigenLayer Subgraph"},{"url":"https://wagmi.sh","kind":"docs","label":"Wagmi Documentation"}],"time_estimate_hours":16,"projects":{"slug":"eigenlayer"},"project_slug":"eigenlayer","project":{"slug":"eigenlayer","name":"EigenLayer","logo_url":"https://icons.llamao.fi/icons/protocols/eigenlayer?w=64&h=64","category":"lst-restaking"}},{"id":"2dcf6f14-212f-4b1d-98db-39668c4f6714","project_id":"801d9334-e0fe-48a3-bcb6-2e277fd15bcb","title":"Slashing Alerts Channel","pitch":"Live Telegram channel that broadcasts any AVS slashing event with affected stakers and amounts.","difficulty":"weekend","use_case":"security","build_with":["node","viem","telegram-bot-api","ethers.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:23.753924+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A monitoring bot that watches EigenLayer's slashing events across all AVS (Actively Validated Services) and pushes notifications to a Telegram channel. Restakers need immediate visibility into slashing events to understand their exposure and respond quickly. This bot indexes slashing events from EigenLayer contracts, decodes them with viem, and broadcasts structured alerts via Telegram. Useful for solo stakers, staking pools, and AVS operators who want to track slashing in one place.","learn_first":["EigenLayer slashing mechanics and DelegationManager contract","ERC-4626 vault interface (AVS uses this pattern)","Event filtering and decoding with viem","Telegram Bot API basics"],"tech_stack":{"ai":[],"data":["Telegram Bot API"],"infra":["Node.js","dotenv for secrets"],"other":[],"wallet":[],"indexer":["viem event watchers","ethers.js event listeners"],"frontend":[],"contracts":["EigenLayer DelegationManager","EigenLayer SlasherRegistry","AVS-specific slashing contracts"]},"build_steps":["Set up a Node.js project with viem and telegram-bot-api dependencies","Create a Telegram bot via BotFather and store the token in .env","Initialize viem client connected to Ethereum mainnet RPC (Alchemy, Infura, or local node)","Write a function to decode EigenLayer DelegationManager slashing events using viem's parseEventLogs with the SlasherUpdated and OperatorSlashed event signatures","Set up an event listener that polls or subscribes to new blocks and filters for slashing events","Parse slashing event data: operator address, AVS address, slashed amount, reason if available","Format alerts with readable details (operator name lookup optional, AVS name, amount in ETH, tx hash) and send via Telegram bot","Deploy to a VPS or serverless function (e.g., AWS Lambda with scheduled invocation) to run continuously"],"gotchas":["EigenLayer has multiple slashing mechanisms (operator slashing, delegator slashing); ensure you're filtering the right event signatures to avoid noise or missing events","Slashing events may be emitted from multiple contracts (DelegationManager, individual AVS slashers); you need to monitor all relevant contract addresses","Telegram rate limits: batch alerts if many slashing events occur in quick succession to avoid hitting API limits","RPC node reliability: use a fallback RPC or retry logic to ensure you don't miss events during provider downtime","Decoding slashing amounts requires understanding the token decimals for each AVS; some use 18 decimals, others may differ"],"references":[{"url":"https://docs.eigenlayer.xyz/eigenlayer/avs-guides/slashing","kind":"docs","label":"EigenLayer Slashing Documentation"},{"url":"https://github.com/Layr-Labs/eigenlayer-contracts/blob/master/src/contracts/core/DelegationManager.sol","kind":"repo","label":"EigenLayer DelegationManager Contract"},{"url":"https://viem.sh/docs/actions/public/getLogs","kind":"docs","label":"viem Event Filtering Guide"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Reference"},{"url":"https://docs.eigenlayer.xyz/eigenlayer/avs-guides/avs-integration","kind":"docs","label":"EigenLayer AVS Integration Guide"}],"time_estimate_hours":8,"projects":{"slug":"eigenlayer"},"project_slug":"eigenlayer","project":{"slug":"eigenlayer","name":"EigenLayer","logo_url":"https://icons.llamao.fi/icons/protocols/eigenlayer?w=64&h=64","category":"lst-restaking"}},{"id":"7a140872-1977-425b-8882-12dd1829c655","project_id":"801d9334-e0fe-48a3-bcb6-2e277fd15bcb","title":"AVS Risk Briefing","pitch":"Per-AVS risk page: code maturity, slashing conditions, operator concentration, and recent incidents. The 'Morningstar for restaking'.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","openrouter","eigenlayer-api","the-graph"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:21.805151+00:00","metadata":{},"source":"curated","why_now":"EigenLayer's AVS ecosystem is rapidly growing (50+ AVSs live or in testnet as of 2025), but there's no unified risk comparison tool. Stakers and operators are making capital allocation decisions with fragmented information. A Morningstar-style dashboard fills a real gap and could become a go-to reference for risk-aware restaking.","source_signal_ids":[],"published_at":null,"summary":"A public dashboard that aggregates and surfaces risk metrics for EigenLayer AVSs (Actively Validated Services). Each AVS gets a dedicated page showing: smart contract audit status and code maturity (via GitHub commits, test coverage), slashing conditions and historical slashing events, operator concentration (Nakamoto coefficient, top 10 operator stake %), recent security incidents or governance changes, and a composite risk score. Users (stakers, operators, protocols) can filter by risk tolerance, compare AVSs side-by-side, and subscribe to alerts when risk metrics shift. Built as a Next.js app pulling from EigenLayer's public APIs, on-chain data via The Graph, and GitHub metadata; LLM-powered summaries of slashing conditions and incident reports via OpenRouter.","learn_first":["EigenLayer AVS architecture and slashing mechanics","ERC-4626 vault basics (restaking pools)","The Graph subgraph querying","Next.js API routes and server components","Risk scoring frameworks (Aave Risk Dashboard as reference)"],"tech_stack":{"ai":["OpenRouter (Claude or GPT-4 for natural-language risk summaries)"],"data":["EigenLayer REST API (AVS registry, operator data)","GitHub REST API (commit history, test coverage via Actions)","Etherscan API (contract verification, creation date)"],"infra":["Vercel (Next.js deployment)","OpenRouter (LLM API for incident summaries)"],"other":["Nakamoto coefficient calculation library"],"wallet":[],"indexer":["The Graph (EigenLayer subgraph)"],"frontend":["Next.js 15+","TypeScript","TailwindCSS","Recharts or Chart.js for risk visualizations","SWR or React Query for data fetching"],"contracts":[]},"build_steps":["Scaffold a Next.js 15 app with TypeScript and TailwindCSS; set up environment variables for EigenLayer API key, GitHub token, OpenRouter key, and Etherscan API key.","Query the EigenLayer API to fetch the list of all registered AVSs and their metadata (name, address, creation date, operator count).","Set up a Ponder or Graph Protocol subgraph indexer to track slashing events, delegation changes, and operator stake snapshots from EigenLayer's core contracts (EigenPodManager, DelegationManager, StrategyManager).","Build the AVS detail page component: fetch AVS metadata, display contract info (creation date, verification status via Etherscan), and render a risk score breakdown (code maturity 20%, slashing risk 30%, operator concentration 25%, incident history 25%).","Implement operator concentration analysis: query The Graph for top 10 operators by stake in each AVS, calculate Nakamoto coefficient (minimum number of operators controlling 51% of stake), and visualize as a bar chart.","Create a GitHub integration: for each AVS with a public repo, fetch commit frequency (last 30 days), test coverage from CI/CD logs, and last audit date from releases; use OpenRouter to summarize code maturity in plain English.","Build an incident/alert feed: manually seed a database of known slashing events and governance changes (or scrrap Discord/Telegram announcements); use OpenRouter to generate one-sentence risk summaries for display on the dashboard.","Deploy to Vercel, set up incremental static regeneration (ISR) to refresh AVS data every 1 hour, and add a simple alert subscription feature (email via SendGrid or Resend) when an AVS's risk score changes by >10%."],"gotchas":["EigenLayer's public API is rate-limited and may not expose all slashing conditions in real-time; you'll need to parse contract ABIs and fallback to manual data entry for newer AVSs.","Operator concentration data is only as fresh as your subgraph indexer; if The Graph is behind, your Nakamoto coefficient will be stale. Consider running a local Ponder instance for real-time updates.","GitHub repo links for AVSs are often missing or outdated; build a fallback mechanism (e.g., manual GitHub URL registry or search by contract address) and surface confidence scores on code maturity metrics.","LLM summaries of slashing conditions can hallucinate; always include a link to the original contract code or documentation and use LLM output only for quick summaries, not as ground truth.","Many AVSs are new and have no historical slashing data; your risk score must gracefully handle missing data (e.g., 'insufficient history' badge) to avoid false confidence."],"references":[{"url":"https://docs.eigenlayer.xyz","kind":"docs","label":"EigenLayer Documentation"},{"url":"https://github.com/Layr-Labs/eigenlayer-contracts","kind":"repo","label":"EigenLayer GitHub (contracts & ABIs)"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Protocol Docs"},{"url":"https://risk.aave.com","kind":"tool","label":"Aave Risk Dashboard (reference UI/UX)"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://news.earn.com/nakamoto-coefficient/","kind":"article","label":"Nakamoto Coefficient Explainer"}],"time_estimate_hours":80,"projects":{"slug":"eigenlayer"},"project_slug":"eigenlayer","project":{"slug":"eigenlayer","name":"EigenLayer","logo_url":"https://icons.llamao.fi/icons/protocols/eigenlayer?w=64&h=64","category":"lst-restaking"}},{"id":"c300e302-edef-4b4c-8632-8c765a6f1e41","project_id":"801d9334-e0fe-48a3-bcb6-2e277fd15bcb","title":"Operator Reputation Index","pitch":"Composite score per EigenLayer operator from uptime, slashing history, and AVS performance. Helps stakers delegate wisely.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","the-graph","rated-api"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:20.946027+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time reputation dashboard that aggregates on-chain and off-chain signals for EigenLayer operators. Track operator uptime across AVS (Active Validator Sets), historical slashing events, and performance metrics from Rated API. Surface this as a sortable, filterable index so liquid stakers can make informed delegation decisions. The index updates via The Graph subgraph polling operator state changes and AVS task completions, then ranks operators by a weighted composite score (e.g., 40% uptime, 30% slashing history, 30% AVS performance). Deploy as a Next.js app with real-time updates and historical charts.","learn_first":["EigenLayer operator registration and AVS delegation flow","The Graph subgraph indexing patterns for EigenLayer contracts","Rated API operator metrics endpoints","Composite scoring methodologies for multi-signal reputation systems"],"tech_stack":{"ai":[],"data":["Rated API (operator metrics)","EigenLayer RPC (state queries)"],"infra":["Vercel or Railway for hosting","PostgreSQL or Supabase for caching composite scores"],"other":["ethers.js or viem for contract reads"],"wallet":[],"indexer":["The Graph (subgraph)"],"frontend":["Next.js 14+","TanStack React Query","Recharts or Chart.js for historical trends","Tailwind CSS"],"contracts":["EigenLayer DelegationManager","EigenLayer StrategyManager","AVS task contracts (generic pattern)"]},"build_steps":["Set up a Next.js 14 project with TypeScript; scaffold pages for operator list, operator detail, and scoring methodology.","Create a Subgraph that indexes EigenLayer DelegationManager and StrategyManager events (operator registration, delegation, slashing); deploy to The Graph Studio.","Build a backend service (Node.js or Python) that polls Rated API hourly for operator uptime and performance metrics, stores results in PostgreSQL.","Implement composite scoring logic: fetch operator state from subgraph, slashing history from indexed events, uptime from Rated API, calculate weighted score (40% uptime, 30% no-slash history, 30% AVS performance).","Create React Query hooks to fetch operator list, individual scores, and historical trend data; add real-time updates via polling or WebSocket.","Build operator list page with sortable/filterable table (by score, uptime, AVS count, slashing events); add pagination for 100+ operators.","Add operator detail page showing score breakdown, historical charts (uptime over 30/90 days), linked AVS tasks, and delegation call-to-action.","Deploy subgraph, backend service, and Next.js frontend; set up monitoring for data freshness and API health."],"gotchas":["Rated API may not cover all operators or AVS immediately—validate coverage before launch and handle missing data gracefully (null or 'insufficient data' state).","EigenLayer operator state changes frequently (new AVS opt-ins, slashing events); ensure subgraph indexes all relevant events and your backend reconciles with on-chain state at least daily.","Composite scoring weights are subjective—expose the methodology clearly on the UI and allow stakers to adjust weights client-side if possible, or publish the rationale for your chosen weights.","Slashing events are rare but critical; ensure your indexing catches all SlashingEvent emissions and backfill historical slashing data from block explorers if subgraph misses early events.","Rate limiting on Rated API and RPC calls; implement caching and batch queries to avoid hitting limits during peak usage."],"references":[{"url":"https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-onboarding","kind":"docs","label":"EigenLayer Operator Registration & Delegation Docs"},{"url":"https://github.com/Layr-Labs/eigenlayer-contracts","kind":"repo","label":"EigenLayer Smart Contracts (GitHub)"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://docs.rated.network/","kind":"docs","label":"Rated API Operator Metrics"},{"url":"https://docs.eigenlayer.xyz/eigenlayer/avs-guides/avs-integration-guide","kind":"docs","label":"EigenLayer AVS Integration Guide"},{"url":"https://tanstack.com/query/latest/docs/framework/react/overview","kind":"docs","label":"Next.js Data Fetching with React Query"}],"time_estimate_hours":80,"projects":{"slug":"eigenlayer"},"project_slug":"eigenlayer","project":{"slug":"eigenlayer","name":"EigenLayer","logo_url":"https://icons.llamao.fi/icons/protocols/eigenlayer?w=64&h=64","category":"lst-restaking"}},{"id":"47c6e8af-c739-4cda-9c73-4716a70a8760","project_id":"633b96c4-91c0-487e-ae55-1ae0bd72f5de","title":"Smoothing Pool Decision Tool","pitch":"Helps RP operators decide whether to opt into the smoothing pool based on validator performance and expected MEV.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","rated-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:13.384174+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web dashboard that fetches Rocket Pool operator and validator metrics, then models the financial impact of joining vs. staying solo. Operators input their validator count and risk tolerance; the tool pulls historical MEV data from Rated API, calculates commission splits, and surfaces a clear recommendation with confidence intervals. Targets operators managing 1–100 validators who need data-driven guidance on smoothing pool participation.","learn_first":["Rocket Pool smoothing pool mechanics and commission structure","MEV concepts and historical data sources","Operator performance metrics from Rated API"],"tech_stack":{"data":["Rated API","Etherscan API or Alchemy"],"infra":["Vercel"],"frontend":["Next.js","React","TailwindCSS","recharts"]},"build_steps":["Scaffold a Next.js app with TypeScript and TailwindCSS; set up environment variables for Rated API key and RPC endpoint.","Create a form component that accepts operator address, validator count, and risk tolerance (conservative/moderate/aggressive).","Integrate Rated API client to fetch operator performance stats (proposal count, MEV captured, attestation performance) for the last 30 days.","Build a calculation engine that models two scenarios: (1) solo validator rewards minus Rocket Pool commission, (2) smoothing pool rewards minus higher commission; use Rated MEV data to estimate future MEV distribution.","Fetch current Rocket Pool smoothing pool parameters (commission rates, pool size, active validators) from a public RPC or Rocket Pool subgraph query.","Render a comparison card showing projected annual yield, MEV capture, and risk-adjusted returns for each scenario; highlight the recommendation with a confidence score (0–100).","Add a sensitivity analysis chart showing how the recommendation changes with MEV volatility and operator performance variance.","Deploy to Vercel with a simple caching layer (e.g., ISR at 1 hour) to avoid rate-limiting Rated API."],"gotchas":["Rated API has rate limits and may not have historical data for all operators; gracefully degrade to Etherscan fallback for basic validator counts.","MEV distribution is highly volatile and operator-specific; emphasize that projections are illustrative and past performance ≠ future results.","Smoothing pool commission rates and pool parameters can change via governance; fetch these dynamically rather than hardcoding.","Operators may have validators on multiple addresses; the form should support bulk input or CSV import to avoid friction."],"references":[{"url":"https://docs.rocketpool.net/guides/node/smoothing-pool","kind":"docs","label":"Rocket Pool Smoothing Pool Docs"},{"url":"https://www.rated.network/docs","kind":"docs","label":"Rated API Documentation"},{"url":"https://github.com/rocket-pool/rocketpool","kind":"repo","label":"Rocket Pool GitHub"},{"url":"https://ethereum.org/en/staking/solo/#mev-boost","kind":"article","label":"MEV-Boost and Smoothing Pool Overview"},{"url":"https://docs.etherscan.io/","kind":"docs","label":"Etherscan API for Validator Data"}],"time_estimate_hours":12,"projects":{"slug":"rocket-pool"},"project_slug":"rocket-pool","project":{"slug":"rocket-pool","name":"Rocket Pool","logo_url":"https://icons.llamao.fi/icons/protocols/rocket-pool?w=64&h=64","category":"lst-restaking"}},{"id":"573c5083-bc8b-41a7-a85b-0feffc32ab0f","project_id":"633b96c4-91c0-487e-ae55-1ae0bd72f5de","title":"RPL Bonded Yield Optimizer","pitch":"Calculates optimal RPL bond amount for node operators given current APR, RPL price volatility, and minipool count.","difficulty":"1-2 weeks","use_case":"yield","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:13.187003+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app for Rocket Pool node operators to determine the ideal amount of RPL to bond against their minipools. The tool ingests live data on RPL price, minipool rewards, and operator collateral ratios, then runs Monte Carlo simulations to model different bond amounts under various market conditions. Outputs a recommended bond target and visualizes risk/reward tradeoffs. Solves a real pain point: operators today manually calculate this or guess, often over-bonding (capital inefficiency) or under-bonding (liquidation risk).","learn_first":["Rocket Pool minipool mechanics and bond requirements","RPL token role and liquidation thresholds","Monte Carlo simulation for portfolio optimization","Chainlink price feeds and on-chain data queries"],"tech_stack":{"ai":[],"data":["Chainlink ETH/USD + RPL/USD feeds","Rocket Pool subgraph queries","Node operator on-chain state"],"infra":["Vercel","ethers.js or viem for RPC calls"],"other":["Monte Carlo.js or custom simulation engine"],"wallet":["wagmi","viem","RainbowKit"],"indexer":["The Graph (Rocket Pool subgraph)","Ponder for custom queries"],"frontend":["Next.js 15","React","TailwindCSS","Recharts for visualization"],"contracts":["Rocket Pool RocketNodeManager","Rocket Pool RocketNodeDeposit"]},"build_steps":["Set up Next.js project with wagmi, viem, and RainbowKit for wallet connection","Query Rocket Pool subgraph to fetch node operator data: minipool count, current RPL bond, effective collateral ratio","Fetch live RPL/USD and ETH/USD prices from Chainlink via on-chain calls or a price API (e.g., CoinGecko as fallback)","Implement Monte Carlo simulator: model RPL price paths (log-normal distribution), calculate bond liquidation risk at each price point, compute expected APR given bond amount","Build UI: input fields for operator address, risk tolerance slider, minipool count; display recommended bond amount, risk heatmap, and comparison chart (current vs. optimal)","Integrate read-only contract calls to RocketNodeManager to validate operator state and fetch minipool details","Add a results dashboard showing: optimal bond target, estimated APY, liquidation price, and sensitivity analysis (how APY changes with ±10% RPL price moves)","Deploy to Vercel and test with a few real Rocket Pool operators"],"gotchas":["Rocket Pool's bond requirement is dynamic and tied to minipool count; if an operator creates new minipools mid-session, the recommendation becomes stale—add a refresh button and timestamp.","RPL price volatility can be extreme; Monte Carlo assumes historical volatility continues, which breaks in regime shifts (e.g., market crash). Warn users the model is backward-looking.","Liquidation is not instant; there's a grace period and a liquidation auction. The simulator should account for this lag, not assume immediate liquidation at the threshold price.","The Graph subgraph can lag 1–2 blocks; if an operator just bonded RPL, your UI may show stale data. Cache with a short TTL and warn users to refresh.","Chainlink price feeds have heartbeat delays (e.g., update every 1 hour if price moves <0.5%). For real-time optimization, you may need a DEX price oracle fallback (e.g., Uniswap TWAP)."],"references":[{"url":"https://docs.rocketpool.net/guides/node/responsibilities.html","kind":"docs","label":"Rocket Pool Docs: Node Operators"},{"url":"https://thegraph.com/hosted-service/subgraph/rocket-pool/mainnet","kind":"tool","label":"Rocket Pool Subgraph"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Price Feeds"},{"url":"https://github.com/rocket-pool/rocketpool","kind":"repo","label":"Rocket Pool Smart Contracts (GitHub)"},{"url":"https://github.com/d3/d3-random","kind":"repo","label":"Monte Carlo Simulation in JavaScript"},{"url":"https://wagmi.sh/react/hooks/useContractRead","kind":"docs","label":"wagmi Hooks Documentation"}],"time_estimate_hours":80,"projects":{"slug":"rocket-pool"},"project_slug":"rocket-pool","project":{"slug":"rocket-pool","name":"Rocket Pool","logo_url":"https://icons.llamao.fi/icons/protocols/rocket-pool?w=64&h=64","category":"lst-restaking"}},{"id":"667d8381-951a-4002-ad79-0ea8ee5389df","project_id":"633b96c4-91c0-487e-ae55-1ae0bd72f5de","title":"rETH Premium/Discount Chart","pitch":"Long-term chart of rETH vs primary rate, with annotations for major events. Great for stakers timing entry/exit.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","recharts","the-graph","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:07.980114+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard tracking rETH's price premium or discount relative to its underlying ETH value (the primary rate). The primary rate is rETH's redemption value—the amount of ETH you'd get if you burned rETH today. When rETH trades above primary rate, it's at a premium (market confidence). Below, it's at a discount (market doubt or liquidation pressure). This tool plots that spread over time, annotates major events (Shapella upgrade, node operator issues, MEV changes), and helps stakers and traders identify optimal entry/exit windows. Built with Next.js for the frontend, Recharts for interactive charting, and The Graph for historical rETH and ETH price data.","learn_first":["rETH redemption mechanics and primary rate calculation","The Graph subgraph querying for time-series data","Recharts composable chart components and custom tooltips"],"tech_stack":{"data":["the-graph","subgraph-queries"],"infra":["vercel"],"frontend":["nextjs","recharts","tailwindcss","viem"]},"build_steps":["Set up Next.js project with TypeScript and Tailwind; scaffold a /pages/chart route and a /api/data endpoint stub.","Query The Graph's Rocket Pool subgraph (or Uniswap subgraph if rETH/ETH pair exists) to fetch historical rETH price and ETH price snapshots; store in a simple JSON cache or fetch on-demand.","Calculate the primary rate from Rocket Pool's on-chain state: call rocketTokenRETH.getRethValue() or fetch from subgraph if available; compute premium/discount as (rETH_price - primary_rate) / primary_rate * 100.","Build a Recharts LineChart component with dual Y-axes: one for premium/discount percentage, one for absolute rETH price; use a ComposedChart to overlay both.","Add event annotations (vertical lines or bands) for major Rocket Pool milestones: Shapella, Shanghai upgrade, significant node operator slashing events, MEV changes; hardcode dates or fetch from a simple JSON config.","Implement a date range picker (React DatePicker or Recharts' own range selector) to let users zoom into specific periods.","Add a tooltip that shows: date, rETH price, primary rate, premium/discount %, and event label if applicable.","Deploy to Vercel; set up environment variables for The Graph API key if needed; test with live data and iterate on chart styling."],"gotchas":["Primary rate calculation can lag on-chain state; The Graph subgraph may be slightly behind the latest block. Always fetch the current primary rate separately via viem + Rocket Pool contract ABI to avoid stale data in your chart.","rETH/ETH price data on The Graph may not have granular enough timestamps (e.g., only daily snapshots). You may need to query Uniswap V3 subgraph or a price oracle like Chainlink to get hourly or 4-hour candles.","Event annotations require manual curation; consider adding a simple admin panel or JSON config file to let non-developers add new events without redeploying.","Recharts can struggle with very large datasets (10k+ points); if you're charting years of data, aggregate to daily or weekly candles and fetch intraday detail on demand."],"references":[{"url":"https://docs.rocketpool.net","kind":"docs","label":"Rocket Pool Docs"},{"url":"https://github.com/rocket-pool","kind":"repo","label":"Rocket Pool GitHub"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Docs"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Documentation"},{"url":"https://viem.sh/docs/contract/getContractEvents.html","kind":"docs","label":"Viem Contract Reading"},{"url":"https://thegraph.com/hosted-service/subgraph/rocket-pool/rocket-pool-mainnet","kind":"tool","label":"Rocket Pool Subgraph (if available)"}],"time_estimate_hours":12,"projects":{"slug":"rocket-pool"},"project_slug":"rocket-pool","project":{"slug":"rocket-pool","name":"Rocket Pool","logo_url":"https://icons.llamao.fi/icons/protocols/rocket-pool?w=64&h=64","category":"lst-restaking"}},{"id":"a63558c6-d49d-4102-8b9c-5151604bc2be","project_id":"633b96c4-91c0-487e-ae55-1ae0bd72f5de","title":"Mini-pool Operator Onboarding","pitch":"Step-by-step guide + calculator for running an 8-ETH Rocket Pool minipool, including hardware cost vs APR break-even.","difficulty":"weekend","use_case":"onboarding","build_with":["nextjs","rocket-pool-sdk","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:05.541153+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web application that walks prospective Rocket Pool node operators through the entire process of setting up an 8-ETH minipool. The tool combines educational content (what is a minipool, hardware requirements, staking mechanics) with an interactive cost calculator that factors in initial ETH deposit, hardware expenses, electricity costs, and projected APR to show break-even timelines. Users can explore different hardware configurations, compare against solo staking, and get a clear action checklist for deployment. The app pulls live rETH/ETH exchange rates and current Rocket Pool commission rates via the Rocket Pool SDK to keep projections accurate.","learn_first":["Rocket Pool minipool mechanics (8-ETH deposit + 24-ETH from pool)","ERC-20 rETH token and how rewards accrue","Node operator registration flow and deposit contract interaction","Basic Ethereum staking economics and APR calculation"],"tech_stack":{"ai":[],"data":["Rocket Pool SDK (rp-js) for minipool data, commission rates, deposit pool status","CoinGecko or similar for ETH/USD pricing (optional)"],"infra":[],"other":["Vercel for hosting","GitHub for version control"],"wallet":["viem for contract reads","ethers.js or wagmi for optional wallet connection (read-only for demo)"],"indexer":[],"frontend":["Next.js 14+ with App Router","TailwindCSS for styling","shadcn/ui for components"],"contracts":["Rocket Pool Deposit Pool (read-only)","Rocket Pool Node Manager (reference)"]},"build_steps":["Set up Next.js 14 project with TailwindCSS and shadcn/ui; create pages for Overview, Calculator, and Checklist","Install rocket-pool-sdk and viem; fetch live minipool deposit amount (8 ETH), current commission rate, and rETH exchange rate on component mount","Build the cost calculator form: inputs for hardware cost, monthly electricity (kWh + price), initial ETH deposit, and projected APR; compute break-even months and annual yield","Display a comparison table: solo staking vs Rocket Pool minipool (highlight commission fee, hardware overhead, and reward sharing)","Create an interactive hardware selector (e.g., Raspberry Pi 4 vs NUC vs used laptop) with preset costs and power consumption; update calculator in real-time","Build a step-by-step checklist component: create Rocket Pool account → register node → deposit 8 ETH → run validator client → monitor rewards; link each step to relevant docs","Add a live data refresh button that re-fetches commission rate and rETH price; display last-updated timestamp","Deploy to Vercel with environment variables for Rocket Pool SDK config; test on Sepolia testnet first, then Mainnet"],"gotchas":["Rocket Pool commission rates and deposit pool status change frequently; cache API responses for 5–10 minutes to avoid rate limits and stale data UX","8-ETH minipool requires the full 24 ETH to come from the deposit pool; if pool is depleted, new minipools cannot be created—show pool status prominently","Hardware costs vary wildly by region and availability; consider showing a range rather than a fixed price, or let users input their own","APR projections are historical and forward-looking; clearly disclaim that actual returns depend on network conditions, validator performance, and Rocket Pool commission changes","Ensure calculator handles edge cases: zero electricity cost, negative APR (loss scenario), or very high hardware costs that never break even"],"references":[{"url":"https://docs.rocketpool.net","kind":"docs","label":"Rocket Pool Documentation"},{"url":"https://github.com/rocket-pool/rocketpool-js","kind":"repo","label":"Rocket Pool SDK (rp-js) GitHub"},{"url":"https://docs.rocketpool.net/guides/node/running-a-node","kind":"docs","label":"Rocket Pool Minipool Guide"},{"url":"https://rocketpool.net/deposit-pool","kind":"tool","label":"Rocket Pool Deposit Pool Status"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://nextjs.org/docs/app","kind":"docs","label":"Next.js App Router Guide"}],"time_estimate_hours":16,"projects":{"slug":"rocket-pool"},"project_slug":"rocket-pool","project":{"slug":"rocket-pool","name":"Rocket Pool","logo_url":"https://icons.llamao.fi/icons/protocols/rocket-pool?w=64&h=64","category":"lst-restaking"}},{"id":"31f7e07a-257c-4fb4-8afd-0e85c235d95d","project_id":"9b0d30ec-01cf-45e3-b4f3-8a394d4dfa89","title":"wstETH Tax Cost-Basis Tool","pitch":"Resolves wstETH ↔ stETH conversions for accurate tax cost basis, including rebase accounting. Exports IRS-friendly CSV.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","viem","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:14:03.005816+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that ingests Ethereum wallet addresses and reconstructs the complete tax history of wstETH holdings, accounting for the daily rebase mechanism that increases stETH balances. Users input their address, the tool fetches all historical transfers and rebases from The Graph or Ponder, calculates cost basis per share using FIFO/LIFO/ACB methods, and exports a CSV compatible with tax software (CoinTracker, Koinly format). The core challenge: wstETH wraps stETH at a fixed exchange rate, but stETH rebases daily, so a user's effective cost basis per wstETH token changes over time as the underlying stETH grows. This tool makes that invisible accounting visible and auditable.","learn_first":["How stETH rebasing works (daily balance increases)","wstETH wrapper contract mechanics (1:1 exchange rate, no rebase)","FIFO vs LIFO vs ACB cost-basis methods for tax reporting","Ethereum event indexing and historical balance reconstruction"],"tech_stack":{"data":["CSV export (papaparse or native)","BigNumber.js (for precise decimal math)"],"infra":["Vercel (Next.js hosting)","Alchemy or Infura RPC"],"other":["date-fns (for rebase date calculations)"],"wallet":["viem (for address validation & RPC calls)","ethers.js (optional fallback)"],"indexer":["The Graph (Lido subgraph)","Ponder (alternative: self-hosted indexer)"],"frontend":["Next.js 15","React 19","TailwindCSS"],"contracts":["Lido stETH (0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984)","Lido wstETH (0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0)"]},"build_steps":["Set up Next.js project with TypeScript; scaffold pages for address input and results display.","Integrate viem to validate Ethereum addresses and fetch current wallet balance via eth_getBalance.","Query The Graph Lido subgraph (or Ponder instance) for all historical stETH Transfer events for the given address.","Query rebase events from Lido's oracle contract (or use daily snapshot data) to reconstruct stETH balance at each transaction date.","Implement cost-basis calculation engine: track FIFO queue of purchases (with date, amount, price), apply rebases to each lot, compute gain/loss per disposal.","Build CSV export formatter: columns for date, transaction type (buy/stake/rebase/sell), quantity, cost basis, proceeds, gain/loss; include IRS-friendly notes.","Add a simple UI form for address input, date range picker, and cost-basis method selector (FIFO/LIFO/ACB).","Test with known Lido addresses (e.g., major stakers) and validate output against manual calculations or existing tax tools."],"gotchas":["Rebase timing: stETH rebases daily at ~12:00 UTC; fetching balances at different times of day can show different amounts for the same historical date. Always normalize to a consistent time (e.g., end-of-day UTC).","wstETH exchange rate changes: the wstETH:stETH ratio is not 1:1 over time; it only updates when stETH rebases. You must track the exact rate at each user transaction, not assume a fixed rate.","The Graph Lido subgraph may lag 1–2 blocks; for real-time accuracy, combine subgraph data with direct RPC calls for the most recent transactions.","Wrapped token accounting: if a user deposited stETH to mint wstETH, that is a non-taxable event in most jurisdictions, but swapping wstETH for stETH or selling it is taxable. Your tool must distinguish these flows.","Large address histories: if an address has >10k transactions, The Graph queries can timeout. Implement pagination and batch processing, or suggest users filter by date range."],"references":[{"url":"https://docs.lido.fi/deployed-contracts/","kind":"docs","label":"Lido stETH & wstETH contracts"},{"url":"https://thegraph.com/hosted-service/subgraph/lidofinance/lido","kind":"tool","label":"The Graph Lido subgraph"},{"url":"https://docs.lido.fi/guides/steth-integration-guide#rebase","kind":"docs","label":"stETH rebase mechanism explained"},{"url":"https://ponder.sh/","kind":"docs","label":"Ponder indexer framework"},{"url":"https://viem.sh/","kind":"docs","label":"viem documentation"},{"url":"https://www.irs.gov/forms-pubs/form-8949","kind":"article","label":"IRS Form 8949 & Schedule D (capital gains)"}],"time_estimate_hours":80,"projects":{"slug":"lido"},"project_slug":"lido","project":{"slug":"lido","name":"Lido","logo_url":"https://icons.llamao.fi/icons/protocols/lido?w=64&h=64","category":"lst-restaking"}},{"id":"12af4dd1-7988-461d-84d7-63300bc3ad14","project_id":"9b0d30ec-01cf-45e3-b4f3-8a394d4dfa89","title":"stETH Discount Arbitrage Alerter","pitch":"Pings when stETH/ETH peg drifts past a threshold and surfaces the most profitable redemption or LP route.","difficulty":"weekend","use_case":"trading","build_with":["node","viem","telegram-bot-api"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:59.654687+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A monitoring bot that watches stETH/ETH price feeds and DEX pools (Curve, Balancer) in real-time, alerting you via Telegram when the discount exceeds your configured threshold. The bot calculates gas costs and slippage for each exit route—direct redemption via Lido's unstake contract, Curve stETH/ETH pool, or Balancer—and recommends the highest-yield path. Useful for traders running capital-efficient strategies or arbitrage bots that need sub-second alerts on peg deviations.","learn_first":["How stETH redemption works (Lido's unstake contract)","Curve stETH/ETH pool mechanics and slippage calculation","Mempool monitoring basics (optional, for front-running awareness)","Gas estimation with viem"],"tech_stack":{"data":["Chainlink ETH/USD feed (for fiat context)","Lido stETH/ETH Curve pool reserves (via ethcall or direct RPC calls)"],"infra":["Alchemy or Infura RPC (for consistent block tracking)","Telegram Bot API"],"other":["viem for contract interactions and gas estimation","ethers.js or web3.js as fallback for pool data fetching"],"contracts":["Lido Unstake contract (0x889edC2eDab5f40e902b864aD4d0Cb3B63E1C9A1)","Curve stETH/ETH pool (0xDC24316b9AE028F1497c275EB9192a3Ea0f67022)"]},"build_steps":["Set up a Node.js project with viem, dotenv, and telegram-bot-api; create .env for RPC URL, Telegram bot token, and alert threshold.","Write a function using viem's publicClient to fetch current stETH balance and ETH balance from a test wallet, then calculate the peg discount percentage.","Query the Curve stETH/ETH pool contract (call get_dy to simulate 1 stETH → ETH swap) and fetch Lido's unstake queue depth and withdrawal delay to estimate redemption profitability.","Implement gas estimation: use viem's estimateGas for redemption tx and Curve swap tx, then calculate net profit after gas costs for each route.","Set up a polling loop (every 12–30 seconds) that fetches the current stETH/ETH price, compares it to your threshold, and stores the last alert time to avoid spam.","When threshold is breached, construct a Telegram message with: current discount %, best route (redemption / Curve / Balancer), estimated profit, and gas cost; send via telegram-bot-api.","Add a simple in-memory or Redis cache to track recent alerts and prevent duplicate pings within a cooldown window (e.g., 5 minutes).","Test against a live testnet (Sepolia stETH) or mainnet with small amounts; verify gas estimates and Telegram delivery."],"gotchas":["Curve pool slippage varies with pool depth; a large stETH dump can shift the peg further, so simulate your actual trade size, not just 1 stETH.","Lido's unstake contract has a queue; withdrawal time can range from hours to days depending on network congestion. Factor this into your 'profitability' calculation or warn the user.","RPC rate limits: polling every 12 seconds on a free tier may hit limits. Use a paid RPC or increase polling interval to 30–60 seconds.","Gas prices fluctuate; your estimated profit can evaporate if the tx sits in mempool during a gas spike. Consider adding a max gas price threshold before alerting.","Balancer pools for stETH/ETH have lower liquidity than Curve; always check pool reserves before recommending them as a route."],"references":[{"url":"https://docs.lido.fi/guides/node-operators/withdrawal-queue-contract","kind":"docs","label":"Lido Unstake Contract & Docs"},{"url":"https://curve.fi/#/ethereum/pools/steth","kind":"tool","label":"Curve stETH/ETH Pool"},{"url":"https://viem.sh/docs/contract/estimateGas","kind":"docs","label":"viem Documentation"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API"},{"url":"https://github.com/lidofinance/lido-dao/tree/master/contracts","kind":"repo","label":"Lido GitHub Contracts"},{"url":"https://github.com/MyCryptoHQ/eth-call","kind":"repo","label":"Ethcall for Batch RPC Calls"}],"time_estimate_hours":8,"projects":{"slug":"lido"},"project_slug":"lido","project":{"slug":"lido","name":"Lido","logo_url":"https://icons.llamao.fi/icons/protocols/lido?w=64&h=64","category":"lst-restaking"}},{"id":"17ff5f46-78f6-4e7d-aa42-18d34562e20d","project_id":"9b0d30ec-01cf-45e3-b4f3-8a394d4dfa89","title":"Node Operator Performance Tracker","pitch":"Per-operator stats across Lido's set — uptime, MEV captured, slashing history. Transparency tool for stakers.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","rated-api","viem","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:56.736142+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard tracking performance metrics for all Lido node operators on Ethereum. Aggregates on-chain data (validator effectiveness, missed attestations, slashing events) with off-chain sources (Rated API, Lido subgraph) to surface operator reputation, MEV extraction patterns, and historical reliability. Stakers can filter operators by performance bands, sort by uptime or MEV capture, and see risk profiles. Operators get a public scorecard. Built as a Next.js app with server-side data fetching and incremental static regeneration to keep metrics fresh.","learn_first":["Lido operator registry and validator lifecycle","Rated API operator metrics schema","Ethereum validator performance concepts (attestation effectiveness, slashing)","The Graph subgraph queries for Lido events"],"tech_stack":{"data":["Rated API (operator metrics)","Lido subgraph (validator deposits, exits, slashing)","Ethereum RPC (viem for validator state reads)"],"infra":["Vercel or similar for Next.js hosting","Postgres or SQLite for caching operator snapshots"],"wallet":[],"indexer":["The Graph (Lido subgraph)","Rated API"],"frontend":["Next.js 14+","React","TailwindCSS","Recharts or similar for charts"],"contracts":[]},"build_steps":["Set up Next.js 14 project with TypeScript; scaffold pages for operator list, operator detail, and metrics dashboard.","Integrate Rated API client to fetch operator performance metrics (uptime, missed attestations, MEV captured); store results in a local cache layer (Postgres or SQLite) updated hourly via a cron job.","Query Lido subgraph to fetch all active node operators, their validator counts, and slashing history; join with Rated data.","Use viem to read Lido staking contract state (operator registry, validator balances) to cross-check on-chain operator status and detect recent changes.","Build operator list view with sortable columns (uptime %, MEV/validator, slashing events, validator count); add filters for uptime bands and risk tiers.","Create operator detail page showing time-series charts of uptime, MEV trends, and a timeline of slashing or exit events.","Add a simple scoring algorithm: weighted combination of uptime, MEV efficiency, and slashing history; display as a 0–100 score per operator.","Deploy to Vercel; set up ISR (incremental static regeneration) to refresh operator pages every 30 minutes; test with real Lido operator data."],"gotchas":["Rated API may have rate limits or require authentication; plan caching strategy and batch requests to avoid throttling.","Slashing events are rare but critical; ensure your subgraph query correctly filters Lido validator slashing events (not all Ethereum slashing).","Operator registry can change (operators exit, new ones join); refresh operator list at least daily and handle stale operator IDs gracefully.","MEV data from Rated API may lag by 1–2 epochs; clearly label data freshness on the UI so users don't make decisions on stale numbers.","Uptime metrics depend on Rated API's beacon chain monitoring; validate their methodology aligns with your definition of 'uptime' (e.g., do they count missed slots vs. attestations?)."],"references":[{"url":"https://docs.lido.fi/guides/node-operators/node-operator-overview","kind":"docs","label":"Lido Docs – Node Operators"},{"url":"https://www.rated.network/docs","kind":"docs","label":"Rated API Documentation"},{"url":"https://thegraph.com/explorer/subgraphs/9Yt9Ym7tGVMw9282twqQDx2m9kkxchUVWNfRcKXRNcR?view=Query","kind":"tool","label":"Lido Subgraph (The Graph)"},{"url":"https://eth2book.info/capella/part2/incentives/rewards/","kind":"article","label":"Ethereum Validator Concepts – eth2book"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Development"}],"time_estimate_hours":80,"projects":{"slug":"lido"},"project_slug":"lido","project":{"slug":"lido","name":"Lido","logo_url":"https://icons.llamao.fi/icons/protocols/lido?w=64&h=64","category":"lst-restaking"}},{"id":"5ea23a83-96c9-4c94-b803-609adfbf1276","project_id":"9b0d30ec-01cf-45e3-b4f3-8a394d4dfa89","title":"wstETH Yield Pulse","pitch":"Daily AI-summarized digest of every protocol where you can earn extra yield on wstETH today — sorted by risk-adjusted APR.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","openrouter","defillama-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:52.360435+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A daily digest service that aggregates all active yield opportunities for wstETH holders across DeFi protocols, ranks them by risk-adjusted returns, and delivers an AI-generated summary highlighting the best opportunities, protocol risks, and changes from the previous day. Users receive a single email or dashboard view instead of manually checking 20+ protocols. The service pulls real-time TVL, APR, and smart contract risk data, then uses an LLM to contextualize each opportunity with plain-English risk assessment and historical performance notes.","learn_first":["ERC-4626 vault standard","Lido staking derivatives (stETH vs wstETH)","DeFi APR calculation and TVL indexing","LLM prompt engineering for financial summaries","Risk scoring methodologies (e.g., Aave Risk Dashboard)"],"tech_stack":{"ai":["OpenRouter (Claude or GPT-4)"],"data":["DefiLlama API","Coingecko API for price feeds"],"other":["Resend or SendGrid for email delivery","Vercel for deployment"],"indexer":["DefiLlama API"],"frontend":["Next.js","TailwindCSS","shadcn/ui"],"contracts":["ERC-4626"]},"build_steps":["Set up a Next.js project with TypeScript and environment variables for OpenRouter API key and email service credentials.","Create a server-side function that fetches all wstETH yield opportunities from DefiLlama API, filtering for protocols that accept wstETH as collateral or in liquidity pools.","Enrich each opportunity with on-chain risk data: pull contract deployment date, audit status, and TVL history from DefiLlama; optionally cross-reference with Aave Risk Dashboard or similar for risk scores.","Calculate risk-adjusted APR for each opportunity by dividing base APR by a risk multiplier (e.g., newer contracts get 1.5x multiplier, unaudited get 2x).","Sort opportunities by risk-adjusted APR and prepare a structured JSON payload with top 10–15 opportunities, including protocol name, APR, TVL, risk score, and a 1-sentence description.","Call OpenRouter API with a prompt template that asks Claude to generate a 2–3 paragraph daily digest summarizing the best opportunities, highlighting any new protocols or APR changes, and warning about high-risk options.","Build a simple Next.js page that displays the digest and allows users to subscribe via email; store subscriptions in a lightweight database (Supabase or Vercel KV).","Set up a cron job (using Vercel Crons or an external service like EasyCron) to run the digest generation and email delivery daily at a fixed time (e.g., 8 AM UTC)."],"gotchas":["DefiLlama's wstETH yield data may lag 1–2 hours; consider caching results and refreshing every 4 hours to balance freshness and API rate limits.","APR calculations vary wildly across protocols (some annualize daily rates, others use 7-day averages); normalize by fetching raw data and recalculating yourself rather than trusting protocol-reported APR.","LLM outputs can hallucinate or misrepresent risk; always include disclaimers and link directly to audits/contracts so users verify claims independently.","Email deliverability is critical; use a reputable service (Resend, SendGrid) and monitor bounce rates; free SMTP often lands in spam.","wstETH liquidity and yield opportunities shift rapidly; a digest older than 24 hours may reference stale APRs, so enforce strict expiration and re-fetch before serving cached results."],"references":[{"url":"https://defillama.com/api","kind":"docs","label":"DefiLlama API Documentation"},{"url":"https://docs.lido.fi/guides/lido-tokens-guide","kind":"docs","label":"Lido stETH & wstETH Overview"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Docs"},{"url":"https://aave.com/risk","kind":"tool","label":"Aave Risk Dashboard"},{"url":"https://resend.com/docs","kind":"docs","label":"Resend Email API"}],"time_estimate_hours":16,"projects":{"slug":"lido"},"project_slug":"lido","project":{"slug":"lido","name":"Lido","logo_url":"https://icons.llamao.fi/icons/protocols/lido?w=64&h=64","category":"lst-restaking"}},{"id":"d5451ca3-1cad-43af-a41a-5a4d681d218a","project_id":"891b4590-f9a9-432b-9d4c-97704d6215c3","title":"Borrow Position Risk Pinger","pitch":"Discord/Telegram bot that monitors any Kamino lend position and pings when health gets risky.","difficulty":"weekend","use_case":"security","build_with":["node","kamino-sdk","telegram-bot-api","discord.js"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:48.778944+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time monitoring bot that tracks Kamino lending positions on Solana and alerts users via Discord or Telegram when their borrow health factor drops below safe thresholds. The bot queries Kamino's on-chain state via RPC, calculates liquidation risk based on collateral value and borrowed amounts, and sends actionable alerts before positions become underwater. Useful for active lenders who want to avoid liquidation without constantly checking the dashboard.","learn_first":["Kamino lending mechanics (collateral, borrow limits, health factor)","Solana RPC queries and account state parsing","Bot framework basics (polling vs webhooks)","Telegram Bot API or Discord.js basics"],"tech_stack":{"ai":[],"data":["Solana RPC (Helius, QuickNode, or public endpoint)"],"infra":["Node.js runtime","Telegram Bot API or Discord.js"],"other":["dotenv for secrets management"],"wallet":[],"indexer":[],"frontend":[],"contracts":["Kamino lending pool contracts (on-chain state queries only)"]},"build_steps":["Set up Node.js project with kamino-sdk, discord.js or telegram-bot-api, and dotenv","Create a config file with Kamino lending pool addresses, RPC endpoint, and alert thresholds (e.g., health factor < 1.5)","Write a function to fetch Kamino lending account state via RPC using kamino-sdk's account parsing utilities","Implement health factor calculation: (total collateral value in USD) / (total borrowed value in USD)","Build a polling loop that checks monitored positions every 30–60 seconds","Create alert formatting and send logic for Discord embeds or Telegram messages with position details","Add a simple command interface (/monitor <wallet> or !watch <position>) to register/unregister positions","Deploy to a free tier cloud service (Railway, Render, or local VPS) and test with a live Kamino position"],"gotchas":["Kamino's health factor calculation includes multiple collateral types and borrow tiers; verify you're using the exact formula from Kamino's smart contracts or SDK to avoid false alerts","RPC rate limits: free endpoints may throttle; use a paid RPC or implement exponential backoff and caching","Solana account state can be stale; cross-check with multiple RPC endpoints or use a subscription-based listener if available","Telegram/Discord token leakage is a common attack vector; never commit secrets to git; use environment variables and rotate tokens regularly","Kamino's liquidation engine may have nuances (e.g., partial liquidations, oracle staleness); test alerts against real liquidation events in devnet first"],"references":[{"url":"https://docs.kamino.finance","kind":"docs","label":"Kamino Finance Docs"},{"url":"https://github.com/Kamino-Finance","kind":"repo","label":"Kamino SDK on GitHub"},{"url":"https://solana.com/docs/rpc/http","kind":"docs","label":"Solana RPC Methods Reference"},{"url":"https://discord.js.org/","kind":"docs","label":"Discord.js Documentation"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Reference"},{"url":"https://www.helius.dev/","kind":"tool","label":"Helius RPC for Solana"}],"time_estimate_hours":8,"projects":{"slug":"kamino"},"project_slug":"kamino","project":{"slug":"kamino","name":"Kamino Lend","logo_url":"https://icons.llamao.fi/icons/protocols/kamino-lend?w=64&h=64","category":"lending"}},{"id":"7e9416bd-e043-4c74-a7cc-12a3ffc76975","project_id":"891b4590-f9a9-432b-9d4c-97704d6215c3","title":"Solana LP Range Optimizer","pitch":"Suggests optimal Kamino concentrated LP ranges per pair based on recent realized volatility.","difficulty":"1-2 weeks","use_case":"yield","build_with":["python","kamino-api","solana-web3.py"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:45.665165+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Python tool that analyzes on-chain price data for Solana token pairs, calculates realized volatility over configurable windows, and recommends optimal concentrated liquidity ranges for Kamino positions. The tool fetches historical OHLCV data from Solana indexers or DEX APIs, applies volatility metrics (standard deviation, Parkinson volatility), and outputs range suggestions that balance fee capture against IL risk. LPs can use this to rebalance existing positions or plan new ones, especially valuable during market regime changes.","learn_first":["concentrated liquidity mechanics (Uniswap v3 / Raydium CLMMs)","realized volatility calculation and interpretation","Kamino vault architecture and fee tiers","Solana RPC and on-chain data indexing"],"tech_stack":{"ai":[],"data":["pandas","numpy","scipy.stats"],"infra":["Python 3.10+","APScheduler for periodic updates"],"other":["Kamino Python SDK or REST API"],"wallet":[],"indexer":["Helius RPC","Magic Eden API","Solana on-chain program state"],"frontend":[],"contracts":[]},"build_steps":["Set up Python environment with solana-web3.py, pandas, numpy, and requests; authenticate with a Solana RPC endpoint (Helius or QuickNode recommended for rate limits).","Fetch historical price data for target pairs from Solana DEX APIs (Orca, Raydium, or Magic Eden) or use on-chain event logs; store 30–90 days of OHLCV data in a local database or CSV.","Implement realized volatility calculation: compute log returns, then standard deviation over rolling windows (7d, 14d, 30d); optionally add Parkinson volatility for intraday swings.","Query Kamino API to retrieve current vault configurations, fee tiers, and historical APY by range for each pair; map fee tier to volatility regime (e.g., 25bp tier for low vol, 100bp for high vol).","Build a range suggestion engine: given volatility, calculate optimal width using formulas like width ≈ 2σ × z-score (where z ≈ 1.96 for 95% confidence); center ranges on current spot price or use time-weighted average price (TWAP).","Integrate Kamino API to fetch live positions and simulate rebalancing scenarios; calculate expected APY delta if LP moves to recommended range.","Create a CLI or simple web endpoint (Flask/FastAPI) that outputs JSON with pair, current range, recommended range, volatility metrics, and confidence score.","Test end-to-end: run optimizer on historical data for 2–3 known pairs, backtest recommendations against actual price movements, and validate APY improvements."],"gotchas":["Realized volatility is backward-looking; sudden market regime shifts (e.g., macro news, exploit) can invalidate recommendations within hours—add a confidence decay or re-run frequency.","Kamino fee tiers and vault configurations vary by pair and change over time; cache API responses and refresh every 4–6 hours to avoid stale suggestions.","Solana RPC rate limits (especially free tiers) will throttle historical data fetches; use batching, pagination, and consider a paid endpoint or local validator for production.","Concentrated ranges can suffer IL during volatile swings; your optimizer should flag pairs with extreme realized vol (>150% annualized) and suggest wider ranges or lower position sizes.","Kamino vault TVL and liquidity depth affect actual execution; a theoretically optimal range may have low liquidity, making slippage worse than expected—cross-check with on-chain depth."],"references":[{"url":"https://docs.kamino.finance","kind":"docs","label":"Kamino Finance Docs"},{"url":"https://github.com/Kamino-Finance","kind":"repo","label":"Kamino GitHub"},{"url":"https://github.com/michaelhly/solana-py","kind":"repo","label":"Solana Web3.py Library"},{"url":"https://uniswap.org/whitepaper-v3.pdf","kind":"article","label":"Uniswap v3 Concentrated Liquidity Whitepaper"},{"url":"https://en.wikipedia.org/wiki/Volatility_(finance)#Realized_volatility","kind":"article","label":"Realized Volatility Calculation Guide"},{"url":"https://www.helius.dev","kind":"tool","label":"Helius Solana RPC"}],"time_estimate_hours":80,"projects":{"slug":"kamino"},"project_slug":"kamino","project":{"slug":"kamino","name":"Kamino Lend","logo_url":"https://icons.llamao.fi/icons/protocols/kamino-lend?w=64&h=64","category":"lending"}},{"id":"adb9bb87-f209-431d-b41c-b6f54ce4274e","project_id":"891b4590-f9a9-432b-9d4c-97704d6215c3","title":"JLP Auto-Compounder Wrap","pitch":"One-click vault that holds JLP and routes Kamino-borrowed SOL to compound back into JLP — automated leverage on JLP yield.","difficulty":"1-2 weeks","use_case":"yield","build_with":["anchor","kamino-sdk","marinade-sdk"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:43.335651+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an Anchor-based vault contract that accepts JLP deposits, borrows SOL against them via Kamino's lending protocol, and automatically reinvests the borrowed SOL back into JLP. Users deposit once and earn leveraged JLP yield without manual rebalancing. The vault manages collateral health, rebalances on-chain, and handles liquidation risk through conservative LTV targets. This is a practical yield product for Solana users who want hands-off leverage without managing debt positions themselves.","learn_first":["Kamino lending mechanics and collateral requirements","JLP (Jupiter Liquidity Provider) token structure and yield sources","Anchor PDA patterns for vault state management","Solana composability and CPI calls between protocols"],"tech_stack":{"ai":[],"data":["Pyth or Switchboard for SOL/USD pricing","Kamino's on-chain health factor calculations"],"infra":["Solana Devnet for testing","Mainnet-beta RPC provider (Helius, Alchemy)"],"other":["Marinade for liquid staking (optional for SOL yield boost)"],"wallet":["Phantom","Magic Eden","Ledger"],"indexer":["Anchor IDL for vault events","Solana RPC for health factor tracking"],"frontend":["Next.js or SvelteKit","Wallet adapter (Phantom, Magic Eden)","@solana/web3.js or Umi","Real-time vault APY calculator"],"contracts":["Anchor (Rust)","Kamino lending program (CPI)","Jupiter Swap program (CPI)","Marinade or other SOL liquid staking (optional)"]},"build_steps":["Set up Anchor project scaffold with Kamino IDL imports; define vault PDA structure (total_jlp_deposited, total_sol_borrowed, owner, last_rebalance_block).","Write deposit instruction: accept JLP from user, mint vault shares (proportional to vault TVL), store in vault PDA.","Implement borrow instruction: call Kamino lending program via CPI to borrow SOL against JLP collateral; enforce max LTV (e.g., 50% to stay safe).","Build swap instruction: route borrowed SOL through Jupiter swap program to acquire JLP; reinvest into vault collateral.","Create rebalance instruction: check current health factor, adjust borrow/repay if LTV drifts; can be called by keeper or user.","Implement withdraw instruction: burn vault shares, return proportional JLP to user, repay borrowed SOL from vault reserves if needed.","Write liquidation safety checks: monitor health factor on-chain; emit events when approaching danger zone; allow emergency shutdown.","Deploy to Devnet, test with Kamino testnet lending pools, verify CPI calls and PDA derivation; then move to Mainnet-beta with conservative limits."],"gotchas":["Kamino's LTV limits and collateral factors vary by market; JLP may have lower collateral factor than SOL — verify current rates before hardcoding.","JLP yield is variable (depends on Jupiter swap fees and volume); users expecting fixed returns will be disappointed; communicate volatility clearly.","Solana network congestion can cause failed transactions mid-rebalance; implement retry logic and idempotent operations (check state before CPI).","Liquidation risk is real if SOL price drops sharply; use conservative LTV (50% or lower) and monitor health factor frequently; consider circuit breaker to pause borrows.","Kamino's lending program may have upgrade cycles; lock your IDL version and test after protocol updates before users deposit large amounts."],"references":[{"url":"https://docs.kamino.finance","kind":"docs","label":"Kamino Finance Docs"},{"url":"https://github.com/Kamino-Finance","kind":"repo","label":"Kamino GitHub"},{"url":"https://book.anchor-lang.com","kind":"docs","label":"Anchor Book"},{"url":"https://github.com/jup-ag/jupiter-core","kind":"repo","label":"Jupiter Swap Program IDL"},{"url":"https://docs.solana.com/developing/programming-model/calling-between-programs","kind":"docs","label":"Solana CPI Guide"},{"url":"https://docs.marinade.finance","kind":"docs","label":"Marinade Liquid Staking (optional)"}],"time_estimate_hours":80,"projects":{"slug":"kamino"},"project_slug":"kamino","project":{"slug":"kamino","name":"Kamino Lend","logo_url":"https://icons.llamao.fi/icons/protocols/kamino-lend?w=64&h=64","category":"lending"}},{"id":"f66bd962-c535-489d-9e52-b2fa2ef91a50","project_id":"891b4590-f9a9-432b-9d4c-97704d6215c3","title":"Kamino Multiply Strategy Explorer","pitch":"Browse and filter every Kamino multiply position by chain, asset, leverage, and historical realized APY. Solana yield in one screen.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","kamino-api","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:40.093669+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that aggregates all active Kamino multiply (leveraged lending) positions across Solana, allowing users to filter by collateral asset, borrowed asset, leverage ratio, and compare historical APY performance. The explorer surfaces real yield opportunities by showing position details, liquidation thresholds, and realized returns over time. Built as a read-only analytics tool that queries Kamino's API and on-chain data to provide a single pane of glass for yield farmers evaluating leverage strategies.","learn_first":["Kamino multiply mechanics (collateral, borrow, leverage ratio)","Solana RPC and account structure","APY calculation from historical yield data"],"tech_stack":{"data":["Kamino API","Solana RPC (Helius or QuickNode)"],"infra":["Vercel"],"frontend":["Next.js","TypeScript","TailwindCSS","Recharts or Chart.js"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS scaffolding","Create API route to fetch Kamino multiply positions via Kamino API and cache results","Parse position data: extract collateral asset, borrowed asset, leverage ratio, health factor, and current APY","Build filter UI component with dropdowns for chain, collateral, borrowed asset, and leverage range","Implement sortable table displaying positions with columns for asset pair, leverage, current APY, liquidation price, and position size","Add historical APY chart using Recharts showing 7d/30d/90d realized returns per position","Integrate Solana RPC calls to fetch real-time price data and calculate liquidation thresholds","Deploy to Vercel and set up periodic API refresh (every 5–10 minutes) to keep APY data fresh"],"gotchas":["Kamino API rate limits: cache aggressively and use exponential backoff for retries","Leverage ratio display can be confusing (some protocols show as 2x, others as 50% collateral ratio); document your convention clearly","Historical APY data may not exist for new positions; handle null gracefully and show 'insufficient data' state","Solana RPC nodes can be slow during network congestion; consider using a dedicated RPC provider with higher rate limits","Liquidation price calculation requires real-time oracle prices; stale prices lead to incorrect threshold display"],"references":[{"url":"https://docs.kamino.finance","kind":"docs","label":"Kamino Finance Documentation"},{"url":"https://github.com/Kamino-Finance","kind":"repo","label":"Kamino GitHub Repository"},{"url":"https://docs.solana.com/api/http","kind":"docs","label":"Solana RPC API Reference"},{"url":"https://www.helius.dev","kind":"tool","label":"Helius RPC Provider"},{"url":"https://recharts.org","kind":"docs","label":"Recharts Documentation"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching","kind":"docs","label":"Next.js Data Fetching Guide"}],"time_estimate_hours":12,"projects":{"slug":"kamino"},"project_slug":"kamino","project":{"slug":"kamino","name":"Kamino Lend","logo_url":"https://icons.llamao.fi/icons/protocols/kamino-lend?w=64&h=64","category":"lending"}},{"id":"3170eb82-d962-4aa6-a358-3fa96cd38ef5","project_id":"f21e290e-523f-4073-b48f-fbe6bcf784ae","title":"Silo Treasury Dashboard","pitch":"Public view of all Silo protocol fees, treasury holdings, and DAO actions. Built for governance researchers.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:39.061361+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that aggregates Silo protocol treasury data—accumulated fees, token holdings, DAO treasury movements, and governance proposals. The dashboard queries on-chain data via The Graph subgraph, surfaces key metrics (fee accrual rate, treasury composition, proposal history), and provides exportable reports for governance analysis. Useful for LPs evaluating protocol sustainability, researchers tracking DAO spending patterns, and governance participants making informed voting decisions.","learn_first":["Silo isolated lending architecture and fee collection model","The Graph subgraph querying and filtering","ERC-20 token balance tracking on-chain","Basic DAO treasury accounting patterns"],"tech_stack":{"data":["The Graph (Silo subgraph)","ethers.js or viem for direct RPC calls if needed"],"infra":["Vercel or Netlify for hosting"],"frontend":["Next.js","React","TailwindCSS","Recharts or Chart.js for visualizations"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS scaffold.","Identify Silo's fee collection contracts (typically a treasury or fee distributor) and review The Graph subgraph schema for Silo on Ethereum and Arbitrum.","Create React hooks to query The Graph for: (1) cumulative protocol fees by asset, (2) treasury token balances, (3) DAO proposal history if available via subgraph.","Build dashboard layout with cards showing: total fees accrued (YTD and all-time), treasury composition (pie chart by token), fee accrual velocity (line chart over time), and recent treasury transactions.","Add chain selector (Ethereum / Arbitrum toggle) to aggregate or compare treasury data across deployments.","Implement data refresh logic (e.g., refetch every 30–60 seconds) and add loading/error states.","Deploy to Vercel with environment variables for The Graph API key and RPC endpoints.","Test with real Silo subgraph queries and validate treasury figures against on-chain block explorers."],"gotchas":["The Graph subgraph for Silo may lag 1–2 blocks behind chain tip; document refresh latency on the dashboard.","Fee collection and treasury movements may be spread across multiple contracts (fee distributor, DAO treasury, insurance fund); confirm all relevant addresses with Silo docs before querying.","Arbitrum and Ethereum may have different fee accrual rates or treasury structures; ensure queries handle chain-specific logic or display data separately.","If Silo subgraph does not expose all treasury movements, you may need to fall back to direct RPC calls or event logs, increasing query complexity."],"references":[{"url":"https://devdocs.silo.finance","kind":"docs","label":"Silo Finance Documentation"},{"url":"https://github.com/silo-finance","kind":"repo","label":"Silo GitHub Repository"},{"url":"https://thegraph.com/docs/en/querying/graphql-api/","kind":"docs","label":"The Graph Query Language (GraphQL)"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching","kind":"docs","label":"Next.js Data Fetching Guide"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Documentation"}],"time_estimate_hours":8,"projects":{"slug":"silo"},"project_slug":"silo","project":{"slug":"silo","name":"Silo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/silo-finance?w=64&h=64","category":"lending"}},{"id":"03721b9e-c363-41cf-a362-d16a92df6d2a","project_id":"f21e290e-523f-4073-b48f-fbe6bcf784ae","title":"Cross-Silo Liquidity Optimizer","pitch":"Detects when the same asset has better rates in another Silo and helps user migrate atomically.","difficulty":"1-2 weeks","use_case":"yield","build_with":["nextjs","viem","flashbots","foundry"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:31.928897+00:00","metadata":{},"source":"curated","why_now":"Silo's isolated market design creates natural rate fragmentation across assets; as TVL grows, arbitrage spreads widen, making atomic migration tooling increasingly valuable for yield farmers managing multi-silo positions.","source_signal_ids":[],"published_at":null,"summary":"A bot + UI that monitors deposit and borrow rates across Silo Finance's isolated lending markets on Ethereum and Arbitrum, identifies arbitrage opportunities when the same asset trades at significantly different rates between silos, and executes atomic migrations using flashloans to minimize slippage and gas costs. Users connect their wallet, see rate comparisons, and trigger migrations that repay debt in one silo and redeposit in another in a single transaction.","learn_first":["ERC-4626 vault standard","Silo isolated markets architecture","Aave flashloan pattern","MEV-aware transaction ordering"],"tech_stack":{"ai":[],"data":["Silo on-chain rate feeds","Chainlink oracle for cross-asset pricing"],"infra":["Flashbots Relay for MEV protection","Alchemy or Infura for RPC"],"other":["Foundry for contract testing"],"wallet":["RainbowKit","ethers.js provider"],"indexer":["The Graph (Silo subgraph)","Ponder for real-time rate indexing"],"frontend":["Next.js 14+","wagmi v2","viem","TailwindCSS","RainbowKit"],"contracts":["Silo core lending contracts","ERC-4626 vault interface","Flashloan receiver pattern"]},"build_steps":["Set up Next.js project with wagmi, viem, and RainbowKit for wallet connection","Create Ponder indexer to track Silo market state: deposit rates, borrow rates, utilization per asset per silo","Build React component to display rate matrix: rows = assets, columns = silos, highlight best rates","Query user's positions on-chain via Silo contracts (balanceOf, borrowBalanceOf) and display migration candidates","Write Solidity contract: flashloan receiver that repays debt in source silo, withdraws collateral, deposits in target silo","Integrate Flashbots Relay in frontend to submit migration txs with MEV protection; use viem's sendTransaction with custom RPC","Add slippage protection: calculate min output before flashloan, revert if actual output < threshold","Test end-to-end on Arbitrum testnet: seed test account with assets, trigger migration, verify balances in target silo"],"gotchas":["Silo markets are isolated by design—ensure you're checking the correct market pair (asset + collateral combo) before suggesting migration; moving between silos may change your collateral factor or liquidation threshold","Flashloans have a fee (usually 0.05%); factor this into rate arbitrage calculations—the spread must exceed flashloan cost + gas to be profitable","Rate changes mid-transaction: use time-weighted average rates from indexer, not spot rates, to avoid suggesting migrations that become unprofitable by execution time","Cross-chain migrations (Ethereum ↔ Arbitrum) require bridge liquidity and add significant latency; start with single-chain optimization first","User debt must be fully repaid in one atomic tx; if position is partially borrowed in multiple assets, you need multi-step unwinding logic"],"references":[{"url":"https://devdocs.silo.finance","kind":"docs","label":"Silo Finance Developer Docs"},{"url":"https://github.com/silo-finance","kind":"repo","label":"Silo GitHub Repository"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://docs.flashbots.net/flashbots-relay/overview","kind":"docs","label":"Flashbots Relay Documentation"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi v2 Documentation"}],"time_estimate_hours":80,"projects":{"slug":"silo"},"project_slug":"silo","project":{"slug":"silo","name":"Silo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/silo-finance?w=64&h=64","category":"lending"}},{"id":"4179c0cf-176e-4f40-99ce-3bd7b2f89d81","project_id":"f21e290e-523f-4073-b48f-fbe6bcf784ae","title":"Silo Borrow Calculator","pitch":"Visual tool that explains exactly how Silo's two-asset borrow model works for new users. Removes the #1 onboarding friction.","difficulty":"weekend","use_case":"onboarding","build_with":["nextjs","viem","wagmi"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:30.489987+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Silo Finance uses isolated lending markets where each market consists of exactly two assets: one as collateral, one as the borrow asset. This model prevents bad debt in one market from affecting others, but it's unintuitive for new users. This calculator lets users input their collateral amount and see: (1) how much they can borrow given the LTV and collateral factor, (2) their liquidation price, (3) interest accrual over time, and (4) a visual breakdown of risk zones. The tool reads live Silo contract state (asset configs, exchange rates, interest rates) via viem and displays interactive sliders to explore scenarios. It's a pure frontend onboarding tool that dramatically reduces support questions.","learn_first":["How Silo's two-asset market design works","ERC-4626 vault mechanics (Silo uses vaults)","LTV, collateral factor, and liquidation mechanics","Chainlink oracle integration for price feeds"],"tech_stack":{"data":["Silo subgraph (The Graph) for historical rates (optional)","Chainlink oracle data"],"other":["shadcn/ui for UI components","recharts for liquidation curve visualization"],"frontend":["Next.js 14+","React","Tailwind CSS","wagmi hooks for contract reads","viem for low-level contract calls"],"contracts":["Silo core contracts (read-only via viem)","Chainlink price feeds"]},"build_steps":["Set up Next.js 14 project with TypeScript, Tailwind, and shadcn/ui scaffold.","Install wagmi, viem, and @wagmi/core; configure for Ethereum and Arbitrum chains.","Write viem contract read functions to fetch: Silo market config (LTV, collateral factor), current exchange rates, borrow/supply APR, and Chainlink price for collateral and borrow assets.","Build a React component with two input sliders: collateral amount and borrow amount. Use wagmi useReadContract hooks to fetch live data on each input change.","Calculate and display: (1) max borrow amount given collateral and LTV, (2) liquidation price, (3) interest accrual formula, (4) current utilization ratio.","Create a visual risk zone chart (using recharts) showing safe zone (green), warning zone (yellow), and liquidation zone (red) based on collateral value vs. borrow value.","Add a scenario explorer: let users toggle between different collateral/borrow pairs from the same Silo market; show how rates and limits change.","Deploy to Vercel; test on Ethereum mainnet and Arbitrum. Add a disclaimer that this is educational and not financial advice."],"gotchas":["Silo markets are two-asset only, but there are multiple markets on each chain. You must clearly label which market pair the calculator is showing; consider a dropdown to switch markets.","Exchange rates (from ERC-4626 vaults) update on-chain but your frontend may cache stale data. Use a 30-second refetch interval on contract reads to stay reasonably fresh.","Liquidation price calculation depends on the oracle price feed used by Silo (Chainlink). If the oracle is stale or has a large deviation, your calculation may diverge from reality; add a timestamp to show when prices were last updated.","Interest rates in Silo are dynamic and depend on utilization. Your calculation assumes rates stay constant, but in reality they change as the market utilizes. Show a caveat that APR is a snapshot."],"references":[{"url":"https://devdocs.silo.finance","kind":"docs","label":"Silo Finance Developer Docs"},{"url":"https://github.com/silo-finance/silo-contracts-v2","kind":"repo","label":"Silo Core Contracts Repository"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"viem Contract Interaction Guide"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Price Feeds"}],"time_estimate_hours":12,"projects":{"slug":"silo"},"project_slug":"silo","project":{"slug":"silo","name":"Silo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/silo-finance?w=64&h=64","category":"lending"}},{"id":"7822f42f-ac70-42d6-bd6b-82890385302c","project_id":"06210f72-cfea-4c0e-9305-bb6a7d0d904a","title":"Operator Marketplace","pitch":"Directory of audited Euler operators (auto-rebalancers, leverage loopers) that users can grant authority to in one click.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","supabase","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:30.136462+00:00","metadata":{},"source":"curated","why_now":"Euler's EVC is live on Ethereum and Base; operator adoption is growing but discovery is fragmented. A curated marketplace reduces friction for users seeking vetted automation and gives operators a distribution channel.","source_signal_ids":[],"published_at":null,"summary":"A curated marketplace where Euler users discover and authorize pre-audited operators to manage their accounts. Operators are smart contracts or EOAs that can execute complex strategies (rebalancing, liquidation protection, yield farming) on behalf of users via Euler's EVC (Ethereum Vault Connector). The marketplace surfaces operator metadata, audit reports, performance metrics, and risk profiles. Users authenticate with their wallet, review operator permissions, and grant authority with a single transaction. Operators are ranked by TVL, success rate, and community feedback.","learn_first":["EVC (Ethereum Vault Connector) permission model","Euler account abstraction and operator pattern","ERC-7579 (modular accounts) basics","Smart contract audit standards and SWC registry"],"tech_stack":{"data":["Supabase PostgreSQL for operator registry, audit metadata, and user ratings","Supabase Auth for optional social login"],"infra":["Vercel for Next.js hosting","Supabase for backend","IPFS or Arweave for audit report storage"],"other":["OpenZeppelin Defender for operator monitoring and alerts"],"wallet":["RainbowKit","ethers.js or viem for transaction signing"],"indexer":["The Graph (Euler subgraph for operator TVL and transaction history)"],"frontend":["Next.js 14+","wagmi v2","viem","RainbowKit for wallet connection","TailwindCSS","shadcn/ui for components"],"contracts":["Euler core (read-only integration)","ERC-7579 for operator interface compatibility"]},"build_steps":["Set up Next.js 14 project with wagmi and viem; scaffold pages for /operators, /operator/[id], /dashboard","Create Supabase schema: operators table (address, name, description, audit_url, tvl, success_rate, risk_profile), audits table (operator_id, report_hash, auditor, date), and user_authorizations table (user_address, operator_address, permissions_granted, timestamp)","Integrate The Graph Euler subgraph to fetch real operator TVL, transaction counts, and success metrics; cache in Supabase with hourly refresh","Build operator detail page: display audit reports (fetched from IPFS), performance charts (success rate, avg return), and permission breakdown using EVC's permission model","Implement wallet connection with RainbowKit; on connect, fetch user's current operator authorizations from Supabase and display active operators in dashboard","Create authorization flow: user selects operator, reviews permission scope (e.g., rebalance up to 10% slippage), and signs EVC permission transaction via wagmi useContractWrite","Build admin panel (protected by Supabase RLS): allow auditors to submit operator audits with report hash and SWC vulnerability checklist; trigger email notification to operator","Deploy to Vercel; set up Supabase edge functions to validate operator addresses against Euler's official registry and flag suspicious entries"],"gotchas":["EVC permissions are scoped and revocable but not all operators expose granular permission controls—document what each operator *actually* can do vs. what the UI claims","Operator TVL from The Graph may lag 5–15 minutes; clearly timestamp data and warn users if data is stale","Audit reports are only as good as the auditor—no automated verification; consider requiring audits from a whitelist of known firms or requiring multi-sig approval before listing","Users may authorize operators without understanding the risk; add prominent disclaimers and a 'dry run' simulation feature showing what the operator would do with sample funds","Supabase RLS rules must be airtight; any misconfiguration exposes audit metadata or user authorization history; test with Supabase's policy simulator"],"references":[{"url":"https://docs.euler.finance","kind":"docs","label":"Euler Finance Docs – EVC & Operators"},{"url":"https://eips.ethereum.org/EIPS/eip-7579","kind":"docs","label":"ERC-7579: Modular Smart Contract Accounts"},{"url":"https://thegraph.com/hosted-service/subgraph/euler-xyz/euler-mainnet","kind":"tool","label":"The Graph – Euler Subgraph"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi v2 Documentation"},{"url":"https://supabase.com/docs/guides/auth","kind":"docs","label":"Supabase Auth & RLS Guide"},{"url":"https://defender.openzeppelin.com","kind":"tool","label":"OpenZeppelin Defender Monitoring"}],"time_estimate_hours":80,"projects":{"slug":"euler"},"project_slug":"euler","project":{"slug":"euler","name":"Euler V2","logo_url":"https://icons.llamao.fi/icons/protocols/euler-v2?w=64&h=64","category":"lending"}},{"id":"4dcd8220-55f6-4b54-9feb-877b0d77eaeb","project_id":"f21e290e-523f-4073-b48f-fbe6bcf784ae","title":"Silo Long-Tail Asset Screener","pitch":"Discover Silo markets for rare/long-tail tokens that aren't lendable anywhere else. Filter by rate, depth, depeg risk.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","the-graph","wagmi","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:29.297466+00:00","metadata":{},"source":"curated","why_now":"Long-tail token lending is growing as isolated markets become standard (Silo, Morpho, Spark); users need better discovery tools to find yield in emerging assets without manual market research.","source_signal_ids":[],"published_at":null,"summary":"A web app that indexes all Silo lending markets across Ethereum and Arbitrum, surfaces long-tail and emerging token markets with low competition, and lets users filter by APY, liquidity depth, collateral risk, and depeg exposure. Unlike Aave or Compound which focus on blue-chip assets, Silo's isolated market design enables lending for riskier tokens—this tool helps users find the best risk-adjusted yields in that space. Users can bookmark markets, track rate history, and export data for yield farming analysis.","learn_first":["Silo market isolation model and how bad debt is contained per market","ERC-4626 vault standard (Silo uses this for yield bearing tokens)","The Graph subgraph querying and real-time indexing patterns","Chainlink price feeds for depeg risk calculation"],"tech_stack":{"data":["The Graph GraphQL","Silo API if available"],"infra":["Vercel"],"wallet":["wagmi","viem","RainbowKit"],"indexer":["The Graph (Silo subgraph)"],"frontend":["Next.js 15+","React 19","TailwindCSS","shadcn/ui"],"contracts":["Silo ERC-4626 vaults","Chainlink price oracles"]},"build_steps":["Set up Next.js 15 project with TypeScript, TailwindCSS, and shadcn/ui components","Install and configure wagmi + viem for Ethereum and Arbitrum chain support","Query The Graph Silo subgraph to fetch all markets, APY rates, total supply/borrow, and collateral config","Build a data model to calculate depeg risk: compare Chainlink oracle price to market price, flag markets where collateral is >10% off peg","Create a filterable table component: columns for token symbol, APY (supply/borrow), TVL, collateral factor, depeg risk, market age","Add sorting and filtering: by APY range, TVL threshold, depeg risk level, chain, and asset type (stablecoin vs. volatile)","Implement market detail modal showing historical APY chart (7d/30d), composition of collateral, liquidation events, and link to Silo UI","Deploy to Vercel and set up periodic subgraph polling (every 5–10 min) to keep rates fresh"],"gotchas":["Silo subgraph may lag 1–2 blocks behind chain state; add a 'last updated' timestamp and refresh button for users expecting real-time data","Depeg risk calculation requires accurate Chainlink price feeds—some long-tail tokens may not have feeds; handle missing data gracefully with a 'no oracle' badge","APY displayed on Silo can be misleading if a market has low liquidity; always show TVL and borrow depth to contextualize yield","Isolated markets mean each Silo has its own risk profile; users may not understand that high APY in a small market = higher liquidation risk; add educational tooltips","The Graph Silo subgraph may not track all historical rate changes; consider caching rate snapshots in your own DB if you want 30d+ charts"],"references":[{"url":"https://devdocs.silo.finance","kind":"docs","label":"Silo Finance Developer Docs"},{"url":"https://github.com/silo-finance","kind":"repo","label":"Silo GitHub"},{"url":"https://thegraph.com/hosted-service","kind":"docs","label":"The Graph Hosted Service / Silo Subgraph"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Price Feeds"}],"time_estimate_hours":16,"projects":{"slug":"silo"},"project_slug":"silo","project":{"slug":"silo","name":"Silo Finance","logo_url":"https://icons.llamao.fi/icons/protocols/silo-finance?w=64&h=64","category":"lending"}},{"id":"27e2eb3e-4768-464c-be45-c7854ec37400","project_id":"06210f72-cfea-4c0e-9305-bb6a7d0d904a","title":"Sub-Account Manager","pitch":"Clean UI for managing Euler sub-accounts — name them, group them, see consolidated risk per account.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","viem","typescript"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:20.167539+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web interface that lets Euler users organize and monitor their sub-accounts (enabled by Euler's EVC architecture) with human-readable names, custom grouping, and real-time risk aggregation. Users can see collateral ratios, liquidation thresholds, and exposure across all their accounts in one dashboard. Built on Euler's on-chain sub-account system and integrated with their risk calculation APIs.","learn_first":["Euler's EVC (Ethereum Vault Connector) architecture and sub-account concept","ERC-7201 namespaced storage pattern used by Euler","Basic lending protocol risk metrics (collateral ratio, liquidation threshold)","viem's contract interaction patterns for read-heavy queries"],"tech_stack":{"ai":[],"data":["Euler's subgraph (if available) or direct RPC calls to fetch account state","Euler's risk engine API or on-chain risk calculation"],"infra":["Vercel for deployment"],"other":[],"wallet":["viem publicClient for reads","wagmi useContractRead hooks"],"indexer":[],"frontend":["Next.js 14+","TypeScript","viem","wagmi","RainbowKit or Privy for wallet connection","TailwindCSS","Zustand or Jotai for state management"],"contracts":["Euler EVC (no custom contracts needed)"]},"build_steps":["Set up Next.js 14 project with TypeScript and TailwindCSS; scaffold pages for dashboard and account detail views","Integrate viem and wagmi; set up wallet connection with RainbowKit or Privy; test connection to Ethereum mainnet and Base","Create a Zustand store to hold user's sub-account list, names, groups, and selected account state; add localStorage persistence for UI preferences","Write a viem publicClient hook to fetch all sub-accounts for a connected wallet using Euler's contract ABI; decode EVC-enabled account data","Build the dashboard grid showing all sub-accounts with custom names, group tags, and key risk metrics (collateral ratio, borrowed amount, health factor)","Add a modal/form to create new sub-account groups and rename existing accounts; persist these labels to localStorage or a simple backend","Fetch and display real-time risk data per account: total collateral value, total debt, liquidation price, and margin ratio using Euler's on-chain calculations","Deploy to Vercel; test on testnet (Sepolia or Base Sepolia) with Euler's test contracts; validate sub-account creation and risk updates"],"gotchas":["Euler's EVC uses namespaced storage (ERC-7201); ensure you're reading from the correct storage slots or use their official contract ABI and decoding helpers","Sub-account addresses are deterministic but require correct controller/operator setup; if a user hasn't activated a sub-account, it won't appear on-chain yet","Risk metrics (collateral ratio, liquidation threshold) depend on Euler's oracle prices; stale or missing oracle data can cause incorrect calculations; always fetch fresh prices","localStorage alone won't sync account names across devices; consider a simple backend (Supabase, Firebase) if multi-device support is needed","Euler's contract state can change mid-transaction; add a small refetch delay or polling interval to keep the dashboard fresh without hammering RPC"],"references":[{"url":"https://docs.euler.finance","kind":"docs","label":"Euler Finance Docs"},{"url":"https://docs.euler.finance/euler-vault-connector-evc","kind":"docs","label":"Euler EVC Architecture"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://wagmi.sh/react/api/hooks","kind":"docs","label":"wagmi Hooks Reference"},{"url":"https://github.com/euler-xyz","kind":"repo","label":"Euler GitHub Repository"},{"url":"https://eips.ethereum.org/EIPS/eip-7201","kind":"docs","label":"ERC-7201 Namespaced Storage"}],"time_estimate_hours":12,"projects":{"slug":"euler"},"project_slug":"euler","project":{"slug":"euler","name":"Euler V2","logo_url":"https://icons.llamao.fi/icons/protocols/euler-v2?w=64&h=64","category":"lending"}},{"id":"68344582-93be-40f5-8418-f5687691d654","project_id":"06210f72-cfea-4c0e-9305-bb6a7d0d904a","title":"Euler Position Stress Test","pitch":"What-if simulator: 'if ETH drops 20%, what happens to my Euler position?' Shows liquidation cascades across linked vaults.","difficulty":"1-2 weeks","use_case":"security","build_with":["nextjs","viem","tenderly","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:18.6565+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that lets Euler users model the impact of price movements on their positions in real time. Users input a price shock scenario (e.g., ETH -20%, USDC +5%), and the simulator recalculates collateral ratios, liquidation thresholds, and cascade effects across all their linked vaults using Euler's EVC (Ethereum Vault Connector). The tool surfaces which positions would be liquidated first, in what order, and how much slippage they'd face. Built with on-chain data from Tenderly's simulation API and Euler's subgraph, rendered in a Next.js dashboard with viem for wallet integration.","learn_first":["Euler's EVC architecture and vault linking","Liquidation mechanics and collateral ratios","Tenderly's transaction simulation API","The Graph subgraph queries for Euler data"],"tech_stack":{"data":["Tenderly Simulation API","Euler subgraph"],"infra":["Vercel"],"other":["ethers.js for ABI decoding"],"wallet":["viem","RainbowKit"],"indexer":["The Graph (Euler subgraph)"],"frontend":["Next.js","React","Tailwind CSS","viem"],"contracts":["Euler EVC vault pattern"]},"build_steps":["Set up Next.js app with TypeScript, Tailwind, and viem for wallet connection using RainbowKit","Query Euler subgraph to fetch user's vault positions, collateral ratios, and linked vaults for a given address","Create a form UI to input price shock scenarios (e.g., asset name, % change, direction) and store in React state","Use Tenderly Simulation API to fork the current block and execute liquidation scenarios; call Euler's liquidation functions with the shocked prices","Parse Tenderly simulation results to extract: which positions get liquidated, in what order, and the slippage/loss for each","Build a visualization showing the cascade: a directed graph or timeline of liquidations, with color-coding for severity (safe, warning, liquidated)","Add a table view showing before/after collateral ratios, LTV, and health factor for each vault","Deploy to Vercel, test on Ethereum mainnet and Base with a test account holding Euler positions"],"gotchas":["Euler's EVC allows complex vault linking; a single price shock can trigger cascading liquidations across multiple vaults—you must simulate the full chain, not just the primary vault","Tenderly fork simulation has a small cost per call; cache results aggressively and warn users about simulation freshness (prices update every block)","Liquidation order depends on Euler's liquidation engine logic (e.g., which collateral to seize first); you may need to inspect Euler's contracts or ask their team for the exact order","Price feeds on Euler can come from Chainlink, Uniswap TWAP, or custom oracles; your simulator must use the same feed source the protocol uses, or results will diverge from reality","Users may have positions in multiple chains (Ethereum + Base); the simulator needs separate instances per chain, or a unified view that clarifies which chain each position is on"],"references":[{"url":"https://docs.euler.finance","kind":"docs","label":"Euler Finance Docs"},{"url":"https://github.com/euler-xyz/ethereum-vault-connector","kind":"repo","label":"Euler EVC (Ethereum Vault Connector) GitHub"},{"url":"https://docs.tenderly.co/reference/api","kind":"docs","label":"Tenderly Simulation API Docs"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Subgraph Docs"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://docs.euler.finance/euler-protocol/liquidations","kind":"docs","label":"Euler Liquidation Mechanics (Forum/Docs)"}],"time_estimate_hours":80,"projects":{"slug":"euler"},"project_slug":"euler","project":{"slug":"euler","name":"Euler V2","logo_url":"https://icons.llamao.fi/icons/protocols/euler-v2?w=64&h=64","category":"lending"}},{"id":"7a381c8e-b6e8-44f0-8ea9-30a74b4bcd97","project_id":"06210f72-cfea-4c0e-9305-bb6a7d0d904a","title":"Custom Vault Builder","pitch":"Visual EVC composer — pick collateral, controller, and price oracles to launch a custom Euler lending vault.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","foundry","euler-sdk","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:16.694775+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web interface that lets users compose custom lending vaults on Euler by selecting collateral assets, risk controllers, and price oracle configurations through a visual UI. Deploy the resulting vault configuration as an ERC-4626 vault with Euler's EVC (Ethereum Vault Connector) handling the modular risk logic. Users can preview vault parameters, simulate liquidation thresholds, and deploy to testnet or mainnet. This targets power users and protocols wanting custom risk profiles without writing Solidity.","learn_first":["ERC-4626 vault standard","Euler EVC architecture and risk controllers","Chainlink price feeds and oracle patterns","Foundry contract deployment and verification"],"tech_stack":{"ai":[],"data":["Euler API","Chainlink Data Feeds"],"infra":["Foundry","Etherscan verification"],"other":["Euler SDK"],"wallet":["RainbowKit","viem"],"indexer":[],"frontend":["Next.js","React","TypeScript","Tailwind CSS","wagmi","RainbowKit"],"contracts":["ERC-4626","Euler EVC","Chainlink Price Feeds"]},"build_steps":["Scaffold Next.js app with wagmi and RainbowKit for wallet connection","Study Euler EVC docs and ERC-4626 pattern; create a TypeScript interface for vault config (collateral array, controller params, oracle addresses)","Build React form UI with collateral picker (fetch token list from Euler API), controller selector (borrow caps, LTV, liquidation thresholds), and oracle input (Chainlink feed addresses)","Implement vault parameter preview component showing LTV, liquidation price, and borrow capacity calculations using Euler SDK math utilities","Write Foundry contract: minimal ERC-4626 vault that accepts EVC-enabled collateral and integrates a Chainlink price feed for liquidations","Add deploy flow: generate contract bytecode from form inputs, use viem to send deployment tx, capture deployed vault address and ABI","Build vault dashboard showing deployed vault config, current TVL (from Euler subgraph or API), and borrow/supply activity","Test end-to-end on Sepolia or Base testnet: deploy vault, supply collateral, borrow against it, verify liquidation logic"],"gotchas":["EVC requires the vault to call enableController() on the EVC contract during initialization—missing this breaks collateral accounting and risk checks.","Chainlink price feeds have heartbeat and deviation thresholds; if a feed hasn't updated recently, your liquidation logic may use stale prices. Always check updatedAt timestamp.","Euler's risk controllers are modular but not all combinations are safe; certain LTV + liquidation threshold pairs can create arbitrage opportunities. Validate against Euler's risk framework docs.","Gas costs for EVC initialization and multi-step collateral setup can be high on Ethereum mainnet. Consider recommending Base or L2 deployment for testing.","Form-to-contract code generation is error-prone; always deploy to testnet first and simulate liquidations before mainnet launch."],"references":[{"url":"https://docs.euler.finance","kind":"docs","label":"Euler EVC Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://github.com/euler-xyz","kind":"repo","label":"Euler GitHub Repository"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Price Feeds Docs"},{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Book"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"}],"time_estimate_hours":80,"projects":{"slug":"euler"},"project_slug":"euler","project":{"slug":"euler","name":"Euler V2","logo_url":"https://icons.llamao.fi/icons/protocols/euler-v2?w=64&h=64","category":"lending"}},{"id":"4764272e-bf39-4d49-a5c2-4a8155b3c60a","project_id":"b8b7b0bc-8053-4f68-9096-d0ca2b696ae8","title":"PSM Liquidity Mapper","pitch":"Visualizes flows through Maker's Peg Stability Modules over time. Educational tool for understanding USDS peg defense.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph","d3","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:16.02234+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time analytics dashboard that tracks liquidity movements through Maker's Peg Stability Modules (PSMs)—the mechanisms that defend USDS/DAI peg stability. The tool ingests on-chain PSM swap events, aggregates them by time window and asset pair, and renders interactive flow visualizations showing how much stablecoin is being minted/burned and at what rates. Users can drill into specific time periods, compare PSM performance across different collateral types, and understand the economic incentives driving peg arbitrage. This builds intuition for how Maker maintains stability without relying on external price feeds for PSM operations.","learn_first":["How Maker PSMs work (collateral in, stablecoin out at fixed rate)","ERC-20 token swap event signatures and filtering","The Graph subgraph indexing patterns","D3 flow/sankey diagram basics"],"tech_stack":{"ai":[],"data":["Etherscan or Alchemy for historical event verification"],"infra":[],"other":["Vercel for deployment"],"wallet":[],"indexer":["The Graph (subgraph for PSM swap events)"],"frontend":["Next.js 14+","React","D3.js or Recharts for flow visualization","TailwindCSS"],"contracts":["Peg Stability Module (PSM) contract ABI"]},"build_steps":["Clone a Next.js starter and set up TailwindCSS for quick styling.","Write a GraphQL query against The Graph's Maker subgraph to fetch PSM swap events (GemJoin.join, DaiJoin.exit events) over a time range.","Parse event data to extract: timestamp, asset in, asset out, amounts, PSM contract address, and compute implied exchange rate.","Aggregate swap flows by 1-hour or 1-day buckets; calculate cumulative inflows/outflows per PSM per asset pair.","Build a React component that accepts a date range picker and renders a D3 Sankey or flow diagram showing asset flows into and out of each PSM.","Add a table below the visualization listing top swaps, PSM utilization, and implied fees/spreads.","Deploy to Vercel and wire up live subgraph queries so the dashboard updates as new blocks arrive.","(Optional) Add a second view comparing PSM peg defense effectiveness across different collateral types over time."],"gotchas":["PSM events are emitted from multiple contract layers (GemJoin, DaiJoin, PSM itself); ensure you're filtering the right contract addresses and event signatures to avoid double-counting.","The Graph's Maker subgraph may have indexing lag during high-load periods; consider caching aggregated results client-side or using a simple backend cache layer.","D3 Sankey diagrams can become visually cluttered with many asset pairs; consider filtering to top-N PSMs or allowing users to toggle asset types to reduce noise.","Exchange rates in PSM are fixed on-chain but the effective rate users experience depends on fee tiers; make sure to surface both the contract rate and any protocol fees in the UI."],"references":[{"url":"https://docs.makerdao.com/smart-contract-modules/peg-stability-module","kind":"docs","label":"Maker PSM Documentation"},{"url":"https://thegraph.com/explorer/subgraphs/","kind":"tool","label":"The Graph Maker Subgraph"},{"url":"https://d3-graph-gallery.com/sankey.html","kind":"article","label":"D3 Sankey Diagram Examples"},{"url":"https://github.com/makerdao/dss","kind":"repo","label":"Maker Smart Contracts GitHub"},{"url":"https://viem.sh/docs/contract/decodeEventLog","kind":"docs","label":"Viem Event Parsing Guide"},{"url":"https://nextjs.org/docs/app/building-your-application/data-fetching","kind":"docs","label":"Next.js Data Fetching Best Practices"}],"time_estimate_hours":12,"projects":{"slug":"makerdao"},"project_slug":"makerdao","project":{"slug":"makerdao","name":"Sky (MakerDAO)","logo_url":"https://icons.llamao.fi/icons/protocols/makerdao?w=64&h=64","category":"lending"}},{"id":"f3691103-cead-4d4b-acfa-0d1d0e468239","project_id":"b8b7b0bc-8053-4f68-9096-d0ca2b696ae8","title":"Vault Health Watcher","pitch":"Tracks any Maker CDP and pings Telegram when collateralization gets dangerous. Better UX than the official explorer.","difficulty":"weekend","use_case":"security","build_with":["node","viem","telegram-bot-api","ethers.js"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:08.180681+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time monitoring bot that watches Maker vaults (CDPs) on Ethereum and sends Telegram alerts when collateral ratios drop below user-defined thresholds. Users input a vault ID, set a danger level (e.g., 150% collateralization), and receive instant notifications before liquidation risk becomes critical. The bot queries on-chain vault state via viem, calculates live collateral ratios using Maker's price feeds, and maintains a simple database of watched vaults. This solves a real pain point: Maker's official UI requires manual checking, and liquidations can happen fast. A weekend builder can ship a working version that handles 10–100 vaults with sub-minute polling.","learn_first":["Maker CDP mechanics (collateral, debt, liquidation ratio)","Maker price feeds and OSM (Oracle Security Module)","Telegram Bot API basics","Ethers.js or viem contract interaction patterns"],"tech_stack":{"ai":[],"data":["Etherscan API (optional, for fallback)"],"infra":["Node.js runtime","Telegram Bot API","SQLite or simple JSON file for vault tracking"],"other":["viem for contract reads","node-cron or similar for polling schedule"],"wallet":[],"indexer":[],"frontend":[],"contracts":["Maker Vat (core vault registry)","Maker Spotter (price feed aggregator)","Maker OSM (price oracle)"]},"build_steps":["Set up a Node.js project with viem, dotenv, and telegram-bot-api npm packages.","Create a Telegram bot via BotFather; store the token in .env.","Write a function using viem to read from Maker's Vat contract (0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B on mainnet) to fetch vault data by ID.","Write a function to fetch current collateral price from Maker's Spotter contract (0x65C79fcB50Ca1594B025960e539eD7A9a6D434A3) or OSM for the specific collateral type.","Implement collateralization ratio calculation: (collateral_amount × current_price) / debt_amount.","Create a simple SQLite database or JSON file to store user subscriptions: {vaultId, telegramUserId, thresholdRatio}.","Set up a polling loop (e.g., every 30–60 seconds) that checks each watched vault and compares current ratio to threshold.","Implement Telegram message handler to parse commands like /watch <vaultId> <threshold> and /unwatch <vaultId>.","Test with a real vault ID from Etherscan or Maker's UI; verify alerts fire when you manually adjust thresholds.","Deploy to a free tier (Railway, Render, or local machine with systemd)."],"gotchas":["Maker's price feeds update on a delay (OSM has a 1-hour security delay); your alerts may lag real liquidation risk by up to an hour. Document this clearly.","Vault IDs are not sequential and can be large integers; ensure your database schema handles bigint properly.","Maker has multiple collateral types (ETH-A, ETH-B, USDC-A, etc.) with different liquidation ratios; you must fetch the correct liquidation ratio from the Vat for each vault's ilk.","Telegram rate limits: if you have >100 users, batch notifications or use a message queue to avoid hitting API limits.","The Spotter contract returns prices in WAD format (18 decimals); ensure you normalize correctly when calculating ratios, or you'll get wildly wrong numbers."],"references":[{"url":"https://github.com/makerdao/dss/blob/master/src/vat.sol","kind":"repo","label":"Maker Vat Contract (Core Vault Registry)"},{"url":"https://github.com/makerdao/dss/blob/master/src/spot.sol","kind":"repo","label":"Maker Spotter Contract (Price Feed)"},{"url":"https://docs.makerdao.com/smart-contract-modules/core-module","kind":"docs","label":"Maker Protocol Docs – Vault Basics"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reading Guide"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Documentation"},{"url":"https://github.com/makerdao/dss/blob/master/src/osm.sol","kind":"repo","label":"Maker OSM (Oracle Security Module) Explainer"}],"time_estimate_hours":8,"projects":{"slug":"makerdao"},"project_slug":"makerdao","project":{"slug":"makerdao","name":"Sky (MakerDAO)","logo_url":"https://icons.llamao.fi/icons/protocols/makerdao?w=64&h=64","category":"lending"}},{"id":"68a34f04-8ac0-4130-b30a-ccce4b8a82bf","project_id":"b8b7b0bc-8053-4f68-9096-d0ca2b696ae8","title":"Endgame Tracker","pitch":"Real-time view of Sky's Endgame roadmap — SubDAO launches, NewGov votes, allocator changes. Decoded for normal users.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","openrouter","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:07.491685+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that surfaces the state of MakerDAO's Endgame transition: active SubDAOs, governance proposal timelines, allocator fund flows, and key parameter changes. Users see decoded events from Sky governance contracts, historical vote outcomes, and upcoming milestones in plain language. Useful for Sky stakeholders, governance participants, and observers tracking the protocol's structural evolution.","learn_first":["MakerDAO Endgame roadmap phases","Sky governance architecture (NewGov, SubDAOs)","ERC-20 and MKR token mechanics","Event decoding and ABI parsing"],"tech_stack":{"data":["Etherscan RPC for fallback event queries","Sky governance API if available"],"infra":["Vercel for deployment","Environment variables for RPC endpoints"],"wallet":["RainbowKit (optional, for user context)"],"indexer":["The Graph (Ethereum subgraph for Sky events)","Ponder (alternative lightweight indexer)"],"frontend":["Next.js 14+","TailwindCSS","wagmi + viem for contract reads","Recharts or similar for timeline/flow visualization"],"contracts":["MKR token (ERC-20)","Sky governance contracts (NewGov)","SubDAO factory patterns"]},"build_steps":["Set up Next.js 14 project with TailwindCSS and wagmi/viem configured for Ethereum mainnet","Create a GraphQL subgraph query layer (or Ponder indexer) to track Sky governance events: NewGov proposal creation, SubDAO launches, allocator changes, and vote tallies","Build a schema to decode and normalize governance events into human-readable objects: proposal title, status, timeline, affected SubDAOs, vote counts","Implement a dashboard page with three main sections: (1) Active Proposals (with vote progress bars), (2) SubDAO Registry (launch dates, allocator assignments), (3) Endgame Timeline (milestones and completed phases)","Add a detail view for individual proposals showing full description, voting breakdown by delegate, and historical context using OpenRouter to summarize governance intent","Integrate real-time updates via polling the indexer or WebSocket subscription to reflect new votes and state changes","Deploy to Vercel and set up environment variables for RPC, subgraph endpoint, and OpenRouter API key","Test with live governance data and iterate on UI clarity for non-technical users"],"gotchas":["Sky governance contracts may have custom event signatures not in standard ABI libraries — fetch the actual ABIs from Sky's GitHub or Etherscan and validate event topics before indexing","SubDAO factory patterns may emit events at different contract addresses; track factory creation events to discover new SubDAO contracts dynamically","OpenRouter API calls for summarization can be expensive at scale; cache summaries and only regenerate on proposal state changes, not per page view","Governance vote data can be sparse if many votes are cast off-chain or via delegation; clarify whether you're tracking on-chain votes only or integrating Snapshot/delegation data","Endgame roadmap phases and timelines may shift; store phase definitions in a config file or CMS so you can update without redeploying"],"references":[{"url":"https://docs.makerdao.com/endgame","kind":"docs","label":"MakerDAO Endgame Documentation"},{"url":"https://docs.makerdao.com/governance","kind":"docs","label":"Sky Governance Architecture"},{"url":"https://github.com/makerdao","kind":"repo","label":"MakerDAO GitHub (Contracts & ABIs)"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Ethereum Subgraphs"},{"url":"https://viem.sh/docs/contract/decodeEventLog","kind":"docs","label":"Viem Contract Event Decoding"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Documentation"}],"time_estimate_hours":80,"projects":{"slug":"makerdao"},"project_slug":"makerdao","project":{"slug":"makerdao","name":"Sky (MakerDAO)","logo_url":"https://icons.llamao.fi/icons/protocols/makerdao?w=64&h=64","category":"lending"}},{"id":"1f978dd9-a9bb-4964-9429-6249e591a63c","project_id":"57b81859-c8e8-4f62-b790-751f8564c80f","title":"Cross-DAO Risk Briefing","pitch":"Daily AI digest comparing risk parameters across Spark, Maker, and similar systems. For risk teams and informed users.","difficulty":"1-2 weeks","use_case":"security","build_with":["openrouter","nextjs"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:04.054308+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A daily digest service that pulls risk parameters (collateral ratios, liquidation thresholds, stability fees, reserve factors) from Spark Protocol, Maker DAO, Aave, and Compound, then uses an LLM to generate a structured risk briefing highlighting changes, outliers, and potential systemic signals. Delivered via email or Telegram. Targets risk analysts, governance participants, and protocol treasurers who need to track competitive positioning and spot emerging risks.","learn_first":["ERC-4626 vault mechanics and reserve factors","Maker collateral types and stability fees","Aave risk parameters and LTV/LT design","Spark Protocol's integration with DAI and Maker","LLM prompt engineering for structured financial analysis"],"tech_stack":{"ai":["OpenRouter (Claude 3.5 Sonnet or GPT-4 Turbo)","Prompt templates for risk analysis"],"data":["Ethers.js or viem for on-chain reads","Spark API (if available) or direct RPC calls","Maker Governance Portal API"],"infra":["Node.js backend (Next.js API routes)","Postgres or SQLite for historical snapshots","Cron job runner (node-cron or external service like EasyCron)"],"other":["Nodemailer or Telegram Bot API for delivery","GitHub Actions for scheduled jobs"],"wallet":[],"indexer":["The Graph (subgraph for Spark events)","Ponder (lightweight alternative for rapid indexing)"],"frontend":["Next.js 14+","TailwindCSS","Vercel deployment"],"contracts":[]},"build_steps":["Set up a Next.js project with API routes; create a Postgres schema to store daily snapshots of risk parameters (collateral ratio, stability fee, reserve factor, LT, LTV) for each protocol and collateral type.","Write a data ingestion script using viem to fetch Spark and Maker on-chain parameters via RPC (or subgraph queries if available); store snapshots with timestamps.","Add Aave and Compound parameter fetching via their public APIs or subgraphs; normalize all parameters into a common schema.","Build a comparison engine that calculates day-over-day changes, identifies outliers (e.g., stability fee spike), and flags systemic risks (e.g., correlated collateral moves).","Integrate OpenRouter client to send normalized parameter data + comparison insights to an LLM prompt; request a structured JSON response (key risks, changes, recommendations).","Create an email template (HTML) or Telegram message formatter to present the digest; include charts or tables of parameter trends.","Set up a cron job (GitHub Actions, node-cron, or external scheduler) to run the full pipeline daily at a fixed time (e.g., 08:00 UTC).","Deploy to Vercel; test end-to-end with a manual trigger, then enable scheduled runs; monitor logs for failures."],"gotchas":["RPC rate limits: Spark and Maker parameter reads can hit free-tier limits if querying many collateral types. Use a subgraph (The Graph or Ponder) or batch calls to reduce load.","LLM latency and cost: Daily digests with OpenRouter can add up; consider caching identical parameter sets or using a cheaper model for routine runs and upgrading to GPT-4 only when changes are significant.","Parameter freshness: On-chain parameters may update mid-day; decide whether to snapshot at a fixed block height or accept slight staleness for consistency. Document your choice for users.","Collateral type explosion: Spark and Maker support many collateral types; filtering to the most liquid or relevant ones upfront avoids noise and keeps the digest actionable.","Email deliverability: Ensure proper SPF/DKIM setup if self-hosting; consider using SendGrid or Mailgun for reliability. Telegram is simpler but requires users to opt in via bot."],"references":[{"url":"https://docs.spark.fi","kind":"docs","label":"Spark Protocol Docs"},{"url":"https://makerdao.com/en/governance","kind":"tool","label":"Maker Governance Dashboard"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Subgraph Documentation"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Reference"},{"url":"https://docs.aave.com/developers/the-core-protocol/protocol-data-provider","kind":"docs","label":"Aave Risk Parameters API"}],"time_estimate_hours":80,"projects":{"slug":"spark"},"project_slug":"spark","project":{"slug":"spark","name":"Spark","logo_url":"https://icons.llamao.fi/icons/protocols/spark?w=64&h=64","category":"lending"}},{"id":"814f48ff-1805-4758-b0f5-28e45bcd0162","project_id":"b8b7b0bc-8053-4f68-9096-d0ca2b696ae8","title":"DAI/USDS Migration Helper","pitch":"Guides a user through DAI → USDS migration with clear gas estimates, reward differences, and one-click execution.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:13:03.967433+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web interface that helps DAI holders migrate to USDS, MakerDAO's upgraded stablecoin. The tool fetches on-chain DAI and USDS balances, calculates gas costs using live RPC data, displays reward/incentive differences between the two, and provides a single-transaction migration flow. Users see exact amounts they'll receive, gas fees, and any protocol incentives before committing. This solves the friction of manual token swaps and unclear migration economics.","learn_first":["ERC-20 token standards","MakerDAO PSM (Peg Stability Module)","ethers.js vs viem transaction patterns","React hooks for state management"],"tech_stack":{"data":["Etherscan or Alchemy RPC for gas estimation","MakerDAO subgraph for USDS incentives (if available)"],"infra":["Vercel for deployment","Alchemy or Infura RPC endpoint"],"wallet":["RainbowKit","viem WalletClient"],"frontend":["Next.js 14+","React 18+","viem for contract calls","wagmi for wallet connection","TailwindCSS for UI","RainbowKit for wallet UI"],"contracts":["ERC-20 (DAI/USDS)","MakerDAO PSM or Uniswap V3 for routing"]},"build_steps":["Set up Next.js 14 project with TailwindCSS and ESLint","Install viem, wagmi, and RainbowKit; configure chains (Ethereum mainnet)","Create a wallet connection component using RainbowKit and wagmi's useAccount hook","Build a balance fetcher component that reads user's DAI and USDS balances using viem's publicClient.readContract()","Implement gas estimation: call estimateGas on the migration transaction, multiply by current gas price from eth_gasPrice RPC call","Create a comparison card showing DAI balance, equivalent USDS amount, gas cost in USD, and any active migration rewards from MakerDAO docs","Wire up the migration transaction using wagmi's useContractWrite or viem's WalletClient.sendTransaction to call PSM swap or Uniswap router","Deploy to Vercel, test on mainnet with a small amount, and add error handling for failed transactions"],"gotchas":["PSM may have daily debt ceiling limits; if hit, migration fails silently—check MakerDAO governance for current limits and display a warning","Gas estimates can be off by 10–20% if user has pending transactions; always add a 10% buffer and show the user the actual gas used post-tx","USDS rewards or incentives may change; hardcoding them breaks the UX—fetch from MakerDAO API or governance snapshot instead","Slippage on DEX routes: if using Uniswap V3 fallback, set a 0.5% max slippage and revert if exceeded to protect users","Wallet switching mid-flow can cause stale balance reads; use wagmi's useAccount to detect chain/account changes and refetch"],"references":[{"url":"https://docs.makerdao.com/smart-contract-modules/peg-stability-module-psm","kind":"docs","label":"MakerDAO Docs – USDS"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"viem – Contract Interactions"},{"url":"https://wagmi.sh/react/hooks/useContractWrite","kind":"docs","label":"wagmi – useContractWrite Hook"},{"url":"https://www.rainbowkit.com/docs/introduction","kind":"docs","label":"RainbowKit – Wallet Connection"},{"url":"https://docs.openzeppelin.com/contracts/4.x/erc20","kind":"docs","label":"ERC-20 Standard (OpenZeppelin)"},{"url":"https://github.com/makerdao/dss-psm","kind":"repo","label":"MakerDAO GitHub – PSM Contract"}],"time_estimate_hours":8,"projects":{"slug":"makerdao"},"project_slug":"makerdao","project":{"slug":"makerdao","name":"Sky (MakerDAO)","logo_url":"https://icons.llamao.fi/icons/protocols/makerdao?w=64&h=64","category":"lending"}},{"id":"becbcbe6-2df7-4486-b0dc-e863550f98a4","project_id":"57b81859-c8e8-4f62-b790-751f8564c80f","title":"Allocator Pool Visualizer","pitch":"Shows how Spark's allocator system routes DAI across markets in real time. Helps users understand backing of their savings.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","d3","viem","ponder"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:55.020791+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a real-time dashboard that visualizes how Spark Protocol's allocator system distributes DAI liquidity across different lending markets and yield strategies. The allocator is a core component that manages capital allocation decisions; this tool makes those flows transparent to users by querying on-chain state and historical events, then rendering them as an interactive flow diagram. Users see which markets receive capital, how much DAI is deployed, current utilization rates, and how allocations shift over time. This builds trust and helps users make informed decisions about where to deposit their savings.","learn_first":["Spark allocator architecture and role in DAI distribution","ERC-4626 vault standard (Spark uses vaults)","Event-driven indexing patterns","D3.js force-directed or Sankey diagrams for flow visualization"],"tech_stack":{"data":["Spark RPC endpoints","Allocator event logs (AllocationUpdated, CapitalMoved)"],"infra":["Vercel (Next.js hosting)","Ponder or hosted subgraph (indexing)"],"wallet":["Viem (read-only, no signing needed)","ethers.js (alternative)"],"indexer":["Ponder (lightweight indexer for Allocator events)","or The Graph (subgraph for Allocator transfers)"],"frontend":["Next.js 14+","React","D3.js or Visx (React D3 wrapper)","TailwindCSS"],"contracts":["Spark Allocator (0x... on Ethereum/Base)","ERC-4626 vaults"]},"build_steps":["Set up Next.js project with TailwindCSS and Viem; configure RPC clients for Ethereum and Base mainnet.","Create Ponder indexer schema to track Allocator contract events: AllocationUpdated, CapitalMoved, and vault state changes; deploy locally first.","Build API route in Next.js that queries Ponder (or Graph) for current allocator state and historical snapshots; return JSON with market allocations, DAI amounts, and timestamps.","Design D3 Sankey or force-directed graph component to render capital flows: DAI source → Allocator → destination vaults/markets; use Visx for React integration.","Implement real-time polling (5–10s interval) to fetch latest allocator state and update the visualization; add loading states and error handling.","Add data table below the diagram showing per-market metrics: DAI deployed, utilization %, APY, and 24h changes.","Test on both Ethereum and Base; verify allocator addresses and vault mappings are correct; add chain switcher UI.","Deploy to Vercel; set up environment variables for RPC endpoints and Ponder/Graph endpoints; validate live data accuracy."],"gotchas":["Allocator addresses differ between Ethereum and Base; hardcode both or fetch from a config; verify against official Spark docs.","Ponder indexing can lag by 1–2 blocks; consider showing 'last updated' timestamp and refresh button for user confidence.","D3 Sankey diagrams can become cluttered with many vaults; use filtering (by market type, TVL threshold) or hierarchical grouping to keep visual readable.","Viem's publicClient.getLogs() has a block range limit (~1000 blocks); use pagination or Ponder to avoid rate limits when fetching historical events.","DAI decimals are 18; ensure all calculations and display use BigInt or proper decimal handling to avoid precision loss."],"references":[{"url":"https://docs.spark.fi","kind":"docs","label":"Spark Protocol Allocator Docs"},{"url":"https://github.com/marsfoundation","kind":"repo","label":"Spark GitHub (allocator contracts)"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://visx-demo.vercel.app","kind":"docs","label":"Visx: React D3 Components"},{"url":"https://viem.sh","kind":"docs","label":"Viem Documentation"}],"time_estimate_hours":80,"projects":{"slug":"spark"},"project_slug":"spark","project":{"slug":"spark","name":"Spark","logo_url":"https://icons.llamao.fi/icons/protocols/spark?w=64&h=64","category":"lending"}},{"id":"2dcb6b9b-e12e-42a8-bce3-4e5af17c5f07","project_id":"57b81859-c8e8-4f62-b790-751f8564c80f","title":"DAI/USDS Savings Aggregator","pitch":"Compare sDAI, sUSDS, and similar savings rates across all venues. One-click switch when the best rate changes.","difficulty":"weekend","use_case":"yield","build_with":["nextjs","viem","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:54.610559+00:00","metadata":{},"source":"curated","why_now":"sUSDS launched on Base in 2024 and is gaining adoption; DAI savings fragmentation across Spark, Aave, and Curve is real. Users manually check rates and miss better yields. A simple aggregator captures this friction point immediately.","source_signal_ids":[],"published_at":null,"summary":"A web app that aggregates real-time savings rates for DAI and USDS across Spark, MakerDAO, Aave, and other lending markets. Users connect their wallet, see current rates ranked by APY, and execute single-transaction swaps to move their stablecoins to the highest-yield venue. The aggregator fetches rates from on-chain contracts (sDAI, sUSDS, aDAI, etc.) and displays them with a simple dashboard. When rates shift, users get a notification and can rebalance in one click—eliminating the friction of manually checking multiple protocols.","learn_first":["ERC-4626 vault standard (sDAI, sUSDS are vaults)","Spark Protocol architecture and sUSDS mechanics","MakerDAO PSM (Peg Stability Module) for DAI/USDS conversion","Aave aToken design and interest accrual","RPC rate-limiting and caching strategies for frequent contract calls"],"tech_stack":{"data":["Ethers.js / viem for contract reads","Redis or browser localStorage for rate caching"],"infra":["Vercel (Next.js hosting)","Alchemy or Infura RPC"],"other":["1inch or 0x API (optional, for swap routing)"],"wallet":["wagmi","RainbowKit or Privy"],"indexer":["Ponder (optional, for historical rate tracking)","RPC calls via viem (primary)"],"frontend":["Next.js 14+","React","TailwindCSS","shadcn/ui"],"contracts":["ERC-4626 (sDAI, sUSDS)","ERC-20 (DAI, USDS)","Aave aToken contracts"]},"build_steps":["Set up Next.js 14 project with TypeScript, TailwindCSS, and shadcn/ui components.","Install and configure wagmi + RainbowKit for wallet connection; test on Base and Ethereum testnets.","Write viem contract readers to fetch current balanceOf and exchange rates from sDAI (Ethereum), sUSDS (Base), and aDAI (Aave) ABIs.","Create a React hook (useRates) that polls these rates every 30–60 seconds, caches in localStorage, and triggers re-renders when rates change >0.01%.","Build a dashboard component showing a sortable table of venues (Spark sDAI, Spark sUSDS, Aave aDAI, etc.) with APY, TVL, and current balance if user is connected.","Implement a 'Rebalance' button that detects the highest-yield vault, constructs a swap transaction (DAI → sDAI or USDS → sUSDS), and submits via wagmi's useContractWrite.","Add a simple notification system (toast) that alerts when the top-yielding venue changes; optionally persist user's preferred venue.","Deploy to Vercel, test end-to-end on mainnet with small amounts, and add error handling for RPC failures and slippage."],"gotchas":["sDAI and sUSDS use different chains (sDAI on Ethereum, sUSDS on Base initially); you'll need multi-chain RPC calls and clear UI labeling to avoid user confusion.","Exchange rates for ERC-4626 vaults (convertToAssets) can change mid-block; always fetch fresh rates before showing a swap quote, and include 0.1–0.5% slippage tolerance.","Aave's aToken interest accrues continuously; the APY displayed on-chain is historical. Use Aave's SDK or subgraph for real-time rate estimates.","RPC rate limits hit quickly if polling all venues every 10 seconds; batch calls, use eth_call multicall (via viem's multicall), or cache aggressively.","Gas costs for small swaps (especially on Base) can exceed yield gains; warn users if their balance is too small, or suggest batching rebalances weekly."],"references":[{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://docs.spark.fi","kind":"docs","label":"Spark Protocol Docs"},{"url":"https://github.com/marsfoundation/spark-contracts","kind":"repo","label":"sUSDS Contract & Mechanics"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reads Guide"},{"url":"https://wagmi.sh/react/api/hooks","kind":"docs","label":"Wagmi Hooks Reference"},{"url":"https://docs.aave.com/developers/v/2.0/the-core-protocol/lendingpool/lendingpooldataprovider","kind":"docs","label":"Aave Protocol Data Provider"}],"time_estimate_hours":16,"projects":{"slug":"spark"},"project_slug":"spark","project":{"slug":"spark","name":"Spark","logo_url":"https://icons.llamao.fi/icons/protocols/spark?w=64&h=64","category":"lending"}},{"id":"db153bb0-96de-4458-a53a-e3cbee9f202e","project_id":"57b81859-c8e8-4f62-b790-751f8564c80f","title":"Spark SubDAO Activity Feed","pitch":"Live feed of all Spark SubDAO governance actions, parameter changes, and asset allocations. Demystifies what's happening.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","the-graph","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:52.391805+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time activity feed that surfaces every governance proposal, vote, parameter update, and asset reallocation within Spark's SubDAO structure. Spark delegates risk management and collateral decisions to specialized SubDAOs; this feed makes those decisions transparent and actionable for users, integrators, and risk managers. Built on The Graph to index SubDAO events across Ethereum and Base, with a Next.js frontend that streams updates and lets users filter by SubDAO, action type, and asset.","learn_first":["Spark SubDAO architecture and roles","The Graph subgraph indexing patterns","ERC-20 and governance event logs","Real-time data streaming with WebSockets or polling"],"tech_stack":{"data":["The Graph API","Etherscan/Basescan for fallback event logs"],"infra":["Vercel or similar for Next.js hosting"],"indexer":["The Graph (subgraph)"],"frontend":["Next.js 14+","TailwindCSS","viem for contract reads","SWR or TanStack Query for data fetching"],"contracts":["Maker governance contracts (DSPause, Chief)","Spark SubDAO role contracts"]},"build_steps":["Set up a new subgraph project using `graph init` targeting Ethereum mainnet; define entities for SubDAOProposal, ParameterChange, AssetAllocation, and Vote based on Spark's governance contracts","Index key events: ProposalCreated, VoteCast, ParameterUpdated, AssetReallocated from Spark's SubDAO contracts (find ABIs in github.com/marsfoundation); map events to entities with timestamps and actor addresses","Deploy subgraph to The Graph's hosted service or decentralized network; test queries locally with `graph build` and `graph deploy`","Create a Next.js app with `/api/activities` route that queries your subgraph for recent events, sorted by timestamp descending","Build a React component that displays activities as a timeline: proposal title, SubDAO name, action type (vote/parameter/allocation), timestamp, and link to details","Add filtering UI: by SubDAO, by action type (governance/parameter/allocation), by date range; store filter state in URL params for sharability","Implement real-time updates: poll the subgraph every 10–30 seconds or set up a webhook listener (e.g., via Alchemy or The Graph's subscription API) to trigger client-side refetch on new blocks","Deploy to Vercel; add OG meta tags for activity links so they're shareable on Twitter/Discord"],"gotchas":["Subgraph indexing lag: The Graph typically lags 1–2 blocks behind the chain head; if you need sub-minute freshness, combine with direct RPC calls via viem for the latest block","SubDAO contract ABIs may not be fully documented; you may need to extract them from Etherscan or the Maker/Spark GitHub; ensure you're indexing the correct contract addresses on both Ethereum and Base","Parameter changes may be encoded in calldata or emitted as custom events; decode carefully and test against real governance transactions to avoid missing or misinterpreting updates","The Graph has rate limits on free tier; if traffic spikes, implement client-side caching (localStorage) and consider upgrading to a paid plan or running a private node"],"references":[{"url":"https://docs.spark.fi","kind":"docs","label":"Spark Docs – SubDAO Architecture"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph – Subgraph Development"},{"url":"https://github.com/makerdao/dss","kind":"repo","label":"Maker Governance Contracts"},{"url":"https://github.com/marsfoundation","kind":"repo","label":"Spark Protocol GitHub"},{"url":"https://viem.sh","kind":"docs","label":"viem – Ethereum SDK"}],"time_estimate_hours":16,"projects":{"slug":"spark"},"project_slug":"spark","project":{"slug":"spark","name":"Spark","logo_url":"https://icons.llamao.fi/icons/protocols/spark?w=64&h=64","category":"lending"}},{"id":"861950d0-1e5a-4b03-a662-30e127495816","project_id":"2ab3fb8e-2be3-4205-9662-62320df5077d","title":"Morpho Borrow Position Auto-Refinancer","pitch":"Watches your Morpho borrow positions and migrates to a cheaper market when rates change meaningfully.","difficulty":"1+ month","use_case":"automation","build_with":["foundry","gelato","morpho-sdk"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:50.420671+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A keeper bot that monitors Morpho borrow positions across risk-isolated markets, calculates interest savings opportunities, and executes position migrations when rate differentials exceed a configurable threshold. The bot uses Morpho's SDK to read market states, compares borrowing costs across markets, and submits refinance transactions via Gelato Network for reliable execution. This reduces manual overhead for active borrowers and captures arbitrage between market rates in real time.","learn_first":["ERC-4626 vault standard (Morpho's market structure)","Morpho's risk-isolated market model and collateral requirements","Gelato's task creation and execution model","Flash loans and position migration patterns","Interest rate calculation and APY comparison"],"tech_stack":{"ai":[],"data":["Morpho SDK","ethers.js or viem for RPC calls"],"infra":["Gelato Network (task automation)","Alchemy or Infura (RPC provider)"],"other":["Node.js for keeper bot logic"],"wallet":[],"indexer":["The Graph (optional, for historical rate data)"],"frontend":[],"contracts":["Morpho (core lending contracts)","ERC-4626 (vault interface)"]},"build_steps":["Set up a Foundry project and install morpho-sdk, viem, and dotenv for environment configuration","Create a keeper bot script that connects to Morpho's markets (e.g., USDC/ETH, USDC/WBTC) and fetches current borrow rates using morpho.market.borrowRate()","Implement rate comparison logic: fetch rates across all available markets for your collateral type and identify the cheapest market","Set up Gelato task creation: write a contract function that executes the refinance (repay in old market, borrow in new market) and register it as a Gelato automated task","Implement a threshold check: only trigger refinance if the interest savings over 30 days exceed a minimum amount (e.g., $10 in savings) to account for gas costs","Build a position tracker that stores user borrow positions (market ID, collateral, borrow amount) in a simple JSON or database, updated on each bot run","Test the full flow on Base testnet: deploy a mock position, run the keeper bot, verify Gelato executes the refinance transaction","Deploy to mainnet with Gelato's production endpoint, set the bot to run every 6–12 hours, and monitor execution logs via Gelato's dashboard"],"gotchas":["Morpho's collateral requirements vary by market; moving a position may require additional collateral if the new market has stricter LTV ratios—pre-check collateral availability before triggering refinance","Gas costs can exceed savings on small positions; set a minimum savings threshold (e.g., $50+) and batch multiple refinances to amortize Gelato's execution fee (~$2–5 per task)","Morpho's markets have supply and borrow caps; if a market is at capacity, your refinance will fail—implement fallback logic to skip full markets and try the next-best option","Gelato tasks charge a premium on gas; monitor actual execution costs vs. projected savings and adjust your threshold to avoid unprofitable refinances","Rate volatility can be extreme during market stress; add a circuit breaker to disable refinancing if rates swing >50% in a single block to avoid cascading liquidations"],"references":[{"url":"https://docs.morpho.org","kind":"docs","label":"Morpho Documentation"},{"url":"https://github.com/morpho-org/morpho-sdk","kind":"repo","label":"Morpho SDK GitHub"},{"url":"https://docs.gelato.network","kind":"docs","label":"Gelato Automation Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://docs.morpho.org/concepts/markets","kind":"docs","label":"Morpho Markets & Risk Framework"},{"url":"https://github.com/gelatodigital/gelato-network-contracts","kind":"repo","label":"Gelato Task Creation Example"}],"time_estimate_hours":160,"projects":{"slug":"morpho"},"project_slug":"morpho","project":{"slug":"morpho","name":"Morpho Blue","logo_url":"https://icons.llamao.fi/icons/protocols/morpho-blue?w=64&h=64","category":"lending"}},{"id":"29966667-9638-4361-b41d-3c137cc77af2","project_id":"2ab3fb8e-2be3-4205-9662-62320df5077d","title":"Vault Performance Leaderboard","pitch":"Public ranking of every Morpho vault by risk-adjusted APY, with curator history and recent reallocations.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","morpho-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:42.31914+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A real-time dashboard that aggregates all Morpho vaults across Ethereum and Base, calculating risk-adjusted returns (Sharpe ratio or similar), and displaying curator performance over time. Users can filter by risk profile, asset class, or curator reputation. The leaderboard updates hourly with vault TVL, APY, withdrawal queue depth, and recent reallocation events. Includes a curator profile page showing historical vault creation, performance track record, and asset under management.","learn_first":["Morpho vault architecture (ERC-4626)","Risk-adjusted return metrics (Sharpe ratio)","Morpho's on-chain vault registry","Real-time data indexing patterns"],"tech_stack":{"data":["Morpho API","Coingecko (price feeds)"],"infra":["Vercel","Supabase (optional, for curator metadata)"],"indexer":["Ponder","The Graph (Morpho subgraph)"],"frontend":["Next.js","TailwindCSS","Recharts or Chart.js"],"contracts":["ERC-4626 (vault standard)"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for leaderboard and curator profiles.","Fetch all Morpho vaults from Morpho API (list all markets across Ethereum and Base); store vault metadata (address, curator, TVL, current APY).","Implement risk-adjusted APY calculation: pull 30-day historical APY data, compute volatility, calculate Sharpe ratio (APY - risk-free rate / volatility); cache results hourly.","Build leaderboard table component: sort by Sharpe ratio, TVL, or raw APY; add filters for chain, asset type, and min TVL.","Create curator profile page: query all vaults managed by a curator, show creation dates, historical APY, total AUM, and recent reallocations (via Morpho API events).","Integrate real-time updates: use SWR or React Query to refetch vault data every 60 minutes; display last-updated timestamp.","Add reallocation event feed: parse Morpho vault events (deposit/withdraw/rebalance) from Morpho API or subgraph; show recent curator actions.","Deploy to Vercel with environment variables for API keys; set up caching headers to minimize API calls."],"gotchas":["Morpho API rate limits: implement request batching and caching; consider Ponder for local indexing if hitting limits.","Risk-adjusted metrics require historical data; start with 7-day or 30-day windows to avoid cold-start issues; backfill data incrementally.","Vault APY is not guaranteed and can be zero or negative; clearly label as estimated and update frequently to reflect market conditions.","Curator reputation is subjective; avoid ranking curators directly; instead rank vaults and let users infer curator quality from vault performance."],"references":[{"url":"https://docs.morpho.org/","kind":"docs","label":"Morpho Vault Documentation"},{"url":"https://docs.morpho.org/api","kind":"docs","label":"Morpho API Reference"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://github.com/morpho-org","kind":"repo","label":"Morpho GitHub Repository"},{"url":"https://ponder.sh/","kind":"docs","label":"Ponder Indexing Framework"},{"url":"https://www.investopedia.com/terms/s/sharperatio.asp","kind":"article","label":"Sharpe Ratio Explained"}],"time_estimate_hours":16,"projects":{"slug":"morpho"},"project_slug":"morpho","project":{"slug":"morpho","name":"Morpho Blue","logo_url":"https://icons.llamao.fi/icons/protocols/morpho-blue?w=64&h=64","category":"lending"}}]}