{"count":125,"total":125,"ideas":[{"id":"8843b40b-dc55-4f45-8e2f-06dad80b4019","project_id":"6e5c6b0f-5416-4b05-a6af-9ad9ac3ad6ec","title":"Test AccessManager Roles Before Deployment","pitch":"Visual tool to simulate role changes and permission grants on your vault's access control. See what's allowed or blocked before you deploy.","difficulty":"weekend","use_case":"security","build_with":[],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-10T13:59:10.710388+00:00","metadata":{"partner":"ipor"},"source":"partner","why_now":"Live vaults are governed by AccessManager but role configurations are hard to visualize and audit. A simulator makes governance transparent and catches misconfigurations early.","source_signal_ids":[],"published_at":"2026-06-10T13:59:10.582+00:00","summary":"A simulator that reads your vault's role setup and shows it as a visual graph. You can test granting or revoking roles, adding fuses, or changing managers—and instantly see which changes work and which fail. Catches permission bugs early and helps teams audit their governance setup.","learn_first":["OpenZeppelin AccessManager pattern","IPOR Fusion role model"],"tech_stack":{"ai":[],"data":["On-chain AccessManager contract state"],"infra":[],"other":[],"wallet":["RainbowKit"],"frontend":["React","Wagmi v2","Viem","React Flow","TailwindCSS"],"contracts":[]},"build_steps":["Set up a React app with Wagmi and Viem.","Write a utility to read the PlasmaVault's AccessManager contract; fetch all roles, members, and delays.","Use React Flow to render the role hierarchy as a directed graph (Admin → FuseManager → Fuse, etc.).","Build a simulation panel where users can: (a) grant a role to an address, (b) revoke a role, (c) change the WithdrawManager, (d) add a new fuse.","For each action, check if it's allowed by the current AccessManager state; highlight blocked actions in red.","Add a 'role timeline' view showing when a queued role change will take effect (accounting for delays).","Export the role configuration as JSON for documentation."],"gotchas":["AccessManager has role delays (e.g., a new FuseManager role takes effect after 1 day); the simulator must account for this.","Some roles may be held by contracts (e.g., a multisig); the UI should handle contract addresses gracefully.","Role hierarchies can be complex; keep the graph visualization simple (max 10–15 nodes) or offer a 'detailed' view."],"references":[{"url":"https://docs.openzeppelin.com/contracts/5.x/access#AccessManager","kind":"docs","label":"OpenZeppelin AccessManager Docs"},{"url":"https://docs.ipor.io/fusion-for-institutions","kind":"docs","label":"IPOR Fusion Docs"},{"url":"https://reactflow.dev","kind":"docs","label":"React Flow Docs"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"Viem Contract Reading"}],"time_estimate_hours":35,"projects":{"slug":"ipor-fusion","is_active":true},"project_slug":"ipor-fusion","project":{"slug":"ipor-fusion","name":"IPOR Fusion","logo_url":null,"category":"yield"}},{"id":"5a2f56a5-d880-4593-9289-64b8d9fecf86","project_id":"6e5c6b0f-5416-4b05-a6af-9ad9ac3ad6ec","title":"Security Audit Toolkit for Custom Fuses","pitch":"Scan your fuse code for common bugs and test it against 1000 random market scenarios before you deploy. Get a report with risk scores and fixes.","difficulty":"1-2 weeks","use_case":"security","build_with":["Foundry fuzzing"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-10T13:59:07.042361+00:00","metadata":{"partner":"ipor"},"source":"partner","why_now":"Custom fuses are permissionless but unaudited; a toolkit helps developers catch bugs before mainnet and builds confidence in the ecosystem.","source_signal_ids":[],"published_at":"2026-06-10T13:59:06.8+00:00","summary":"A Foundry-based tool developers run locally on custom fuse code. It checks for unchecked calls and missing access controls, tests the fuse with random market conditions, and simulates liquidation attacks. Outputs a JSON report with risk scores and remediation steps.","learn_first":["Foundry property-based testing","Common DeFi vulnerabilities","AccessManager role model"],"tech_stack":{"ai":[],"data":[],"infra":["Docker for containerized analysis"],"other":["Slither static analysis engine"],"wallet":[],"frontend":["CLI tool (Node.js or Python)","Optional: Next.js dashboard to visualize reports"],"contracts":["Foundry test harness (Solidity)","Slither (Python)"]},"build_steps":["Create a Foundry test template that imports the user's fuse and wraps it in a test harness.","Write property-based tests: (a) fuse balance never exceeds vault balance, (b) shares are always redeemable, (c) rebalances don't cause reentrancy.","Integrate Slither via a CLI wrapper; run static checks on the fuse code and flag issues.","Build a fuzzing campaign that: randomizes prices, liquidity, and gas costs; calls rebalance() 1000 times; checks for reverts or unexpected state changes.","Simulate MEV scenarios: front-run the fuse's swap, sandwich it, check for slippage violations.","Generate a JSON audit report with: risk score (0–100), list of issues (high/medium/low), and remediation steps.","Publish as an npm package so developers can `npx fusion-audit <fuse.sol>`."],"gotchas":["Fuzzing is slow (5–10 min per run); offer a 'quick' mode (100 iterations) and 'thorough' mode (1000+).","Static analysis produces false positives; require developers to manually review flagged issues.","MEV simulation is hard to get right; use a simplified model (front-run, sandwich) rather than full flashbots simulation.","Fuse code may have dependencies (Morpho SDK, Aave SDK); ensure the harness can resolve imports."],"references":[{"url":"https://book.getfoundry.sh/forge/fuzz-testing","kind":"docs","label":"Foundry Fuzzing Guide"},{"url":"https://github.com/crytic/slither","kind":"repo","label":"Slither GitHub"},{"url":"https://docs.ipor.io/fusion-for-institutions","kind":"docs","label":"IPOR Fusion Fuse Interface"},{"url":"https://consensys.io/diligence/vulnerabilities/","kind":"article","label":"Common DeFi Vulnerabilities"}],"time_estimate_hours":90,"projects":{"slug":"ipor-fusion","is_active":true},"project_slug":"ipor-fusion","project":{"slug":"ipor-fusion","name":"IPOR Fusion","logo_url":null,"category":"yield"}},{"id":"3c68daf7-d0c3-4f3f-b32e-42f785f26ee5","project_id":"6e5c6b0f-5416-4b05-a6af-9ad9ac3ad6ec","title":"Test vault strategies before mainnet deployment","pitch":"Upload your vault code and set market conditions—price swings, rate changes, liquidity shocks. The simulator runs 7/30/90 days of trading and shows you APY, worst-case losses, rebalance costs, and failure modes.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["Foundry for forking"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-10T13:58:56.841426+00:00","metadata":{"partner":"ipor"},"source":"partner","why_now":"Deploying a broken fuse costs gas and reputation. A simulator lets builders validate strategies risk-free before going live.","source_signal_ids":[],"published_at":"2026-06-10T13:58:56.356+00:00","summary":"A web tool that forks Ethereum/Base/Arbitrum, deploys your vault with a custom strategy (a set of rules for when to buy/sell), and runs a Monte Carlo simulation (random market scenarios) of price volatility, rate changes, and liquidity shocks. Returns projected APY, worst-case drawdown, rebalance frequency, and gas costs so you catch bugs before going live.","learn_first":["Foundry's anvil fork mode","Monte Carlo simulation design","ERC-4626 share/asset math"],"tech_stack":{"ai":[],"data":[],"infra":["Foundry anvil (local fork)","Docker for containerized simulation runs"],"other":["Python (optional, for Monte Carlo parameter generation)"],"wallet":[],"frontend":["Next.js","Wagmi v2","Viem","TailwindCSS","Plotly.js for distribution charts"],"contracts":["Foundry test harness (Solidity)"]},"build_steps":["Write a Foundry test suite that: (a) forks the target chain, (b) deploys a PlasmaVault with your fuse, (c) seeds it with test capital.","Build a parameter UI: input fuse bytecode, starting capital, market vol (%), rate range, rebalance triggers.","Create a simulation loop that: advances blocks, calls price feed updates, triggers rebalances, and records APY, drawdown, gas costs.","Run 100–1000 Monte Carlo paths; aggregate results into percentiles (10th, 50th, 90th).","Expose results via a Next.js API endpoint; display charts and a summary table in the UI.","Add a 'failure mode' detector: if any path liquidates or reverts, flag it with the block height and state.","Integrate with Foundry's fuzzing tools to auto-generate extreme market conditions."],"gotchas":["Forking is slow; each simulation run can take 30–60s. Offer a 'quick mode' (10 paths) and a 'thorough mode' (1000 paths).","Price feed staleness and oracle lag are hard to simulate accurately; document assumptions clearly.","Rebalance gas costs vary by network congestion; use historical gas data or let the user input a fixed gas price.","If the fuse calls external protocols (Morpho, Aave), you must mock their responses or fork their state; forking is simpler but slower."],"references":[{"url":"https://book.getfoundry.sh","kind":"docs","label":"Foundry Docs"},{"url":"https://book.getfoundry.sh/reference/anvil","kind":"docs","label":"Foundry Anvil Fork Mode"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Share Math"},{"url":"https://viem.sh/docs/contract/simulateContract","kind":"docs","label":"Viem Simulation Guide"}],"time_estimate_hours":100,"projects":{"slug":"ipor-fusion","is_active":true},"project_slug":"ipor-fusion","project":{"slug":"ipor-fusion","name":"IPOR Fusion","logo_url":null,"category":"yield"}},{"id":"4e7a717e-3459-44e3-b1a9-80db1593bd52","project_id":"6e5c6b0f-5416-4b05-a6af-9ad9ac3ad6ec","title":"Plasma Vault Performance Monitor with Alerts","pitch":"Real-time dashboard showing vault yield, gas costs, and performance vs. Aave/Morpho. Alerts when returns drop or rebalancing is overdue.","difficulty":"weekend","use_case":"analytics","build_with":["IPOR public MCP server","Viem for on-chain reads"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-10T13:58:51.782393+00:00","metadata":{"partner":"ipor"},"source":"partner","why_now":"Live vaults exist but operators lack visibility into fuse performance. An analytics dashboard closes the gap between yield expectations and reality.","source_signal_ids":[],"published_at":"2026-06-10T13:58:51.577+00:00","summary":"A monitoring app that fetches live vault data from a public server to display current yield, compare it to baseline rates, and alert operators when returns fall below target or gas costs spike. Includes charts and a rebalance simulator.","learn_first":["ERC-4626 vault semantics (shares vs. assets)","IPOR MCP query schema"],"tech_stack":{"ai":[],"data":["IPOR MCP API (mcp.ipor.io)","Chainlink price feeds for benchmark rates"],"infra":["Vercel for hosting"],"other":[],"wallet":[],"indexer":["The Graph (optional: index vault events for faster historical queries)"],"frontend":["Next.js","Wagmi v2","Viem","TailwindCSS","Recharts for charting"],"contracts":[]},"build_steps":["Set up Next.js app with Wagmi and Viem.","Write a utility to query the IPOR MCP at mcp.ipor.io; fetch PlasmaVault state (totalAssets, totalSupply, fuse list).","For each fuse, query its execution history (via on-chain logs or MCP) and calculate APY over the last 7 and 30 days.","Fetch Aave/Morpho baseline rates (via Aave SDK or Morpho SDK) for the same underlying asset; compute outperformance.","Create a React dashboard showing: live APY, benchmark comparison, gas cost per rebalance, rebalance frequency.","Add threshold-based alerts: notify when APY < benchmark - 0.5%, or gas cost > $500 per rebalance.","Deploy to Vercel and add a simple email alert service (e.g., SendGrid) for critical thresholds."],"gotchas":["MCP query latency can be 2–5s; cache results with SWR or TanStack Query to avoid UI freezes.","Fuse execution logs may be sparse if rebalances are infrequent; use block timestamps to interpolate APY accurately.","Benchmark rates (Aave, Morpho) vary by collateral and LTV; ensure you're comparing like-for-like (e.g., stETH at 70% LTV on Morpho vs. stETH at 70% LTV on Aave).","The WithdrawManager may queue withdrawals; account for pending withdrawal queues when calculating true APY."],"references":[{"url":"https://mcp.ipor.io","kind":"tool","label":"IPOR MCP Server"},{"url":"https://github.com/aave/aave-utilities","kind":"repo","label":"Aave V3 SDK"},{"url":"https://github.com/morpho-org/morpho-sdk","kind":"repo","label":"Morpho SDK"},{"url":"https://recharts.org","kind":"docs","label":"Recharts"},{"url":"https://viem.sh","kind":"docs","label":"Viem Docs"}],"time_estimate_hours":40,"projects":{"slug":"ipor-fusion","is_active":true},"project_slug":"ipor-fusion","project":{"slug":"ipor-fusion","name":"IPOR Fusion","logo_url":null,"category":"yield"}},{"id":"2693e91a-e02b-43eb-a980-cb73a0d7a256","project_id":"6e5c6b0f-5416-4b05-a6af-9ad9ac3ad6ec","title":"Drag-drop yield router for vault strategies","pitch":"Build custom yield strategies by connecting protocol blocks in a visual editor. No coding needed—design once, deploy to any PlasmaVault.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["Morpho SDK","Aave SDK","Uniswap V4 hooks"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-10T13:58:46.78729+00:00","metadata":{"partner":"ipor"},"source":"partner","why_now":"Live Fusion vaults are deployed but fuse creation is still code-heavy. A visual builder lowers the barrier for vault operators and enables rapid A/B testing of yield strategies.","source_signal_ids":[],"published_at":"2026-06-10T13:58:45.982+00:00","summary":"A web interface where vault operators snap together pre-built connectors (Morpho, Aave, DEX swaps, rebalancing rules) to create yield strategies. The editor generates and deploys the contract automatically. Turns strategy ideas into live vaults in hours instead of weeks.","learn_first":["ERC-4626 vault architecture","IPOR fuse adapter pattern","Solidity ABIEncoderV2 for UI-to-code generation"],"tech_stack":{"ai":["Claude API to translate natural language strategy descriptions into fuse code (optional enhancement)"],"data":["The Graph (index fuse deployments and vault TVL)"],"infra":["Foundry for fuse compilation and testing","Ethers.js for deployment helpers"],"other":["Solidity compiler WASM bundle"],"wallet":["RainbowKit"],"frontend":["React","Wagmi v2","Viem for contract interactions","React Flow for DAG composition"],"contracts":["Custom fuse template factory (Solidity)","Fuse registry (ERC-721 or ERC-1155 for fuse NFTs)"]},"build_steps":["Set up React app with Wagmi and Viem to read PlasmaVault and fuse ABIs from IPOR docs","Build React Flow canvas for fuse node composition (Morpho node, Aave node, DEX swap node, rebalance node)","Create a code generator that walks the DAG and emits Solidity for each node, wiring inputs/outputs","Integrate Foundry CLI to compile generated Solidity locally in the browser (via WASM)","Add wallet connection (RainbowKit) and a deploy button that sends the compiled fuse bytecode to the PlasmaVault's fuse registry","Query the public MCP at mcp.ipor.io to list available Morpho markets, Aave pools, and DEX liquidity pairs; populate node config dropdowns","Test with one of the live vaults (e.g., Fusion stETH looping) — manually verify the generated fuse executes correctly on a fork"],"gotchas":["Fuse bytecode size can exceed 24KB; you'll need to split complex strategies into multiple fuses or use proxy patterns. Test early.","Solidity WASM compilation in the browser is slow (5–15s); consider server-side compilation as a fallback.","AccessManager roles must be set on the PlasmaVault before a new fuse can be registered; document the permission model clearly in the UI.","Price oracle middleware changes can invalidate a fuse's pricing assumptions; add a warning if the vault's PriceOracleMiddleware is updated."],"references":[{"url":"https://docs.ipor.io/fusion-for-institutions","kind":"docs","label":"IPOR Fusion Docs"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard"},{"url":"https://github.com/IPOR-Labs","kind":"repo","label":"IPOR Fusion GitHub"},{"url":"https://github.com/morpho-org/morpho-sdk","kind":"repo","label":"Morpho SDK"},{"url":"https://reactflow.dev","kind":"docs","label":"React Flow Docs"}],"time_estimate_hours":120,"projects":{"slug":"ipor-fusion","is_active":true},"project_slug":"ipor-fusion","project":{"slug":"ipor-fusion","name":"IPOR Fusion","logo_url":null,"category":"yield"}},{"id":"dfc27f21-a6c0-4c63-82c7-4322964e7db8","project_id":"b8673760-f0cf-42f0-9d57-66512c094217","title":"Pendle Position Expiry Alerts & Roll-Forward Helper","pitch":"Tracks when your Pendle PT/YT tokens expire across all chains and alerts you before they lose value. Suggests low-cost swaps to fresh tokens or higher-yield alternatives.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["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 expire on fixed dates—when they do, PT converges to the underlying asset and YT approaches zero. This tool monitors your positions across 11 chains, sends notifications 2–4 weeks before expiry, and recommends rolling into fresh tokens on the same chain or moving to chains with better rates. A dashboard shows which positions are at risk and how value decays over time.","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","is_active":true},"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":"Route trades across DEXs using price confidence","pitch":"A smart order router that splits trades across multiple DEXs and chains based on Pyth price feed confidence, minimizing slippage and execution risk. It deprioritizes chains with uncertain prices unless the price improvement justifies the risk.","difficulty":"1-2 weeks","use_case":"trading","build_with":["Pyth SDK","0x Protocol"],"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 optimize for price alone and ignore how confident the price data actually is. This tool uses Pyth price feeds to calculate confidence-weighted spreads across chains, then routes orders to whichever DEX and chain combination offers the best risk-adjusted execution. A smart contract pulls prices on-chain while a backend service 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","is_active":true},"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":"6cd0c2de-5f09-45cc-852a-fa35b787c3aa","project_id":"1279320e-12cf-4287-b3e7-3839b903fe7a","title":"USDM Yield Optimizer with Auto-Rebalancing","pitch":"A smart contract that automatically compounds USDM yield and shifts money between Treasury strategies based on market conditions. Users deposit USDM, set their risk level, and earn optimized returns hands-off.","difficulty":"1-2 weeks","use_case":"yield","build_with":["USDM protocol","ERC-4626 standard","Chainlink price feeds","Foundry"],"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 a vault (a smart contract that pools and manages funds) wrapping USDM that watches Treasury yield rates via price feeds and automatically moves funds between strategies when rates change. Users get receipt tokens that earn compounded yield. Include governance controls and an emergency stop button.","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","is_active":true},"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 Alerts","pitch":"A public dashboard that tracks Centrifuge pool metrics (net asset value, reserve buffers, loan ratios) and alerts originators and investors when thresholds approach breach using live on-chain data.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["Centrifuge v2 SDK"],"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 displays key pool health indicators: net asset value, reserve buffers, loan-to-value ratios, and compliance status. Include alerts via webhook or email when pools drift toward critical thresholds. Target originators managing multiple pools and institutional investors who need 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","is_active":true},"project_slug":"centrifuge","project":{"slug":"centrifuge","name":"Centrifuge","logo_url":"https://icons.llamao.fi/icons/protocols/centrifuge?w=64&h=64","category":"rwa"}},{"id":"0622598b-c019-44cc-a4e0-322b42b109b6","project_id":"efb2d143-f11c-4948-b15c-21e69b9a1e01","title":"AI Coach for Spiral Leverage Strategies","pitch":"Tell an AI your risk level and capital. It recommends a specific Spiral looping strategy with APY, liquidation price, and step-by-step instructions.","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 chat interface where you describe your risk tolerance and how much you have to invest. The AI asks clarifying questions, then suggests a concrete strategy for earning yield through leverage loops (borrowing to amplify returns) on Morpho markets. It shows you the expected returns, when you'd get liquidated (forced to close), and exactly what to do.","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","is_active":true},"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 your wallet to see all your leverage positions across Spiral, Contango, and Gearbox. Get real-time net APR, how close you are to liquidation, and how much a price drop would hurt.","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 dashboard that shows all your active leverage loop positions across three protocols in one place. You see your actual profit rate after borrowing costs, how much money you'd lose before liquidation, and how sensitive each position is to price drops. Built for traders managing multiple leverage bets who need one screen to stay safe.","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","is_active":true},"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":"Detects suspicious trading patterns on Blur—like the same wallet buying and selling quickly, or a few wallets pumping volume artificially.","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":"Monitors Blur marketplace activity to catch wash-trading: same-wallet round-trips, volume concentrated in a few wallets, rapid buy-sell cycles. Scores collections by risk and alerts traders and collection owners via dashboard or webhook. Helps risk-aware traders and platforms filter out manipulated collections.","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","is_active":true},"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":"Connect any Safe wallet and auto-generate monthly reports showing inflows, outflows, token balances, and runway.","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 fetches transaction history and balances from any Safe multisig (shared wallet), then generates a monthly report with cash flow, token breakdown, and spending trends. DAO treasurers input a Safe address, pick a date range, and download a PDF or JSON file. Saves finance teams from 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","is_active":true},"project_slug":"safe","project":{"slug":"safe","name":"Safe","logo_url":"https://icons.llamao.fi/icons/protocols/safe?w=64&h=64","category":"infra"}},{"id":"4881b632-7b7b-454a-8c02-a3bdf1aae093","project_id":"b6bdd6ae-a52d-42fb-ae31-9db051e2a54c","title":"Blur Bid Sniper","pitch":"A bot that automatically places bids on Blur NFTs within your risk limits. It monitors collection floors and adjusts bid amounts to stay competitive.","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 watches Blur collection floors and places bids on NFTs matching your criteria, enforcing limits on bid size, portfolio exposure, and gas costs. It tracks bid performance and adjusts amounts as prices move. Built for traders who want to accumulate specific collections without manual work.","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","is_active":true},"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":"Browse audited Safe modules (account add-ons) and install them into your account with one click.","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 marketplace where users find and install audited modules that extend Safe accounts—like social recovery (account backup via friends), spending limits, and automation. Each module shows its security audit, gas cost, and which blockchains it works on. Users install directly through the web interface.","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","is_active":true},"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":"A cleaner, faster view of Safe wallets showing balances, pending transactions, and who signed what. Works across multiple chains.","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 dashboard that pulls Safe wallet data (token balances, pending transactions, signer activity) from the Safe API and displays it in one clear interface. Teams managing treasuries or DAOs use it to quickly see wallet state without hunting through block explorers or the official UI.","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","is_active":true},"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":"Compare Oracle Prices Side-by-Side","pitch":"Embeddable widget showing the same asset price from three oracle networks (API3, Chainlink, Pyth) at once. Helps users see which oracles agree and spot price differences.","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 asset prices from three major oracle networks and displays them with timestamps, how far apart they are, and how often they update. Drop it into any DeFi app or dashboard. Users instantly see which oracles match and which diverge, building confidence in the prices they're trading on.","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","is_active":true},"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 signing a Safe transaction, simulate it via Tenderly and show state changes in plain English. Catches mistakes and phishing.","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 (a blockchain simulator), and shows a human-readable breakdown of what will change. Signers see the analysis inline so they understand exactly what they're approving before signing.","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","is_active":true},"project_slug":"safe","project":{"slug":"safe","name":"Safe","logo_url":"https://icons.llamao.fi/icons/protocols/safe?w=64&h=64","category":"infra"}},{"id":"b9f79696-a0f1-4b74-b5f8-a0fcde3b49e7","project_id":"101c91b1-35b3-4bb3-aa37-deeebf2ec0ef","title":"RedStone Oracle Templates for DeFi","pitch":"Pre-built smart contract templates for lending, perpetual futures, and options that integrate RedStone's oracle (price data source) 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":"Boilerplate code for three common DeFi apps: lending protocols, perpetual futures, and options markets. Each includes price feed setup, fallback logic, and gas optimization. Deploy with Foundry and get tests plus example frontends.","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","is_active":true},"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":"See historical uptime, price swings, and which apps use each RedStone feed. Builders check oracle risk before integrating.","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 showing how often RedStone feeds work, when prices jump unexpectedly, and which protocols depend on them. Builders use it to audit oracle risk before building, and protocols monitor their data sources. It flags when feeds go offline or prices spike unusually.","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","is_active":true},"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":"Dashboard for Express Relay Bid Opportunities","pitch":"A UI where searchers discover pending orders and submit competitive bids on Pyth's Express Relay (a system that auctions transaction ordering rights).","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 showing pending orders with live prices from Pyth (a price oracle). Searchers can view opportunities and submit bids through a clean interface instead of using raw API calls. Target users are professional traders and MEV operators (people who profit from transaction ordering).","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","is_active":true},"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":"Pyth Price Update Gas Cost Calculator","pitch":"Estimates how much gas it costs to pull Pyth price data into transactions on any chain. Helps developers decide if pull oracles make sense for their app.","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 shows the exact gas cost of including Pyth price feeds in transactions on Solana, Ethereum, Arbitrum, Optimism, Base, and Sui. You enter your chain, number of feeds, and update frequency—it returns current costs, past trends, and ways to save (like batching updates or using fallback feeds). Built for dApp developers and arbitrage bots choosing between pull and push oracles (pre-submitted data).","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","is_active":true},"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":"Embeddable Widget for Live Price Feeds","pitch":"A React component that fetches and displays live Pyth prices (real-time price data from multiple blockchains) with staleness warnings. Drop it into any app without managing complex SDK code.","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 across Solana, Ethereum, Arbitrum, Optimism, and Base. Include a simple admin dashboard to configure which feeds to expose and set staleness thresholds. Developers use this to add live prices to their apps without wrestling with Pyth SDK complexity.","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","is_active":true},"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":"c12fc4a8-a751-4c81-a3c6-d975fcebc9b8","project_id":"4610a9ef-8117-411e-bfa0-f6694617c214","title":"Split Backed Tokens Into Yield and Price","pitch":"Separate Backed tokenized stocks into two parts: one captures dividends, the other tracks price movement. Users deposit a stock token and get two tokens back—one for yield, one for 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 that splits Backed Finance stock tokens (like bIB01, bCOIN) into a yield token (captures dividends) and a price token (tracks asset value). Yield farmers harvest dividends while traders isolate price bets. Handle dividend dates and reinvestment 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","is_active":true},"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":"25b25fd3-8c6b-4765-b694-436027c7ed16","project_id":"12f6fc38-35db-4506-8db1-42723ba73c9b","title":"Deploy tokens across chains instantly","pitch":"A no-code tool that generates and deploys ERC-20 tokens (standard blockchain money contracts) with cross-chain messaging across seven major networks 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":"Input your token details and the tool auto-generates contract code, deploys it to your chosen chains, and sets up cross-chain transfer routes. Built for teams launching tokens that need liquidity spread across Ethereum, Arbitrum, Optimism, Base, Polygon, BSC, and Avalanche without writing code or managing deployments manually.","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","is_active":true},"project_slug":"chainlink","project":{"slug":"chainlink","name":"Chainlink","logo_url":"https://icons.llamao.fi/icons/protocols/chainlink?w=64&h=64","category":"oracles"}},{"id":"287d214d-c3b3-40f9-92d6-c66b4397cf83","project_id":"4610a9ef-8117-411e-bfa0-f6694617c214","title":"On-Chain Stock Index Builder","pitch":"Let users buy a diversified basket of tokenized stocks (like an S&P 500 fund) with one transaction. The basket auto-rebalances to stay balanced.","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":"Build a vault (smart contract container) that holds multiple tokenized stocks and automatically rebalances them when weights drift. Users deposit stablecoins (dollars on blockchain), get shares back, and earn returns as stock prices rise. The contract watches prices and swaps tokens to keep the basket balanced.","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","is_active":true},"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":"902f827f-85ac-4bef-a50b-64a805f9518c","project_id":"8e0ffe99-b4ab-4158-a6ce-90c2b945ad48","title":"Asset NFT Explorer","pitch":"Browse NFTs that represent real-world assets backing Centrifuge pools. See decoded loan terms and collateral details.","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 NFTs minted by Centrifuge pools, showing loan terms, collateral details, and pool composition. Users can search by pool, filter by asset type, and view individual NFT details including settlement history. This gives investors and analysts visibility into what backs each pool.","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","is_active":true},"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":"A dashboard that scores Centrifuge pools on collateral risk, legal jurisdiction, audit status, and default history—so investors can compare risk against returns.","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 combines Centrifuge pool data, settlement history, and risk signals to compute a single quality score per pool. Show collateral type and loan-to-value (how much you can borrow against assets), legal risk by country, whether auditors checked the operator, and past defaults. Display scores next to pool returns so investors pick pools that match their risk tolerance.","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","is_active":true},"project_slug":"centrifuge","project":{"slug":"centrifuge","name":"Centrifuge","logo_url":"https://icons.llamao.fi/icons/protocols/centrifuge?w=64&h=64","category":"rwa"}},{"id":"6e46051d-fa9b-4584-a6c7-47f86d67d475","project_id":"591c0c4a-3414-4e72-bff5-4b1fa72be9bc","title":"PoolToken Order Book for Trading","pitch":"Create an order book where Goldfinch LP token holders can sell their positions to other buyers. This lets LPs exit early without penalties and gives new investors a way to buy in.","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 lock LPs into credit pools until maturity. Build an on-chain order book so token holders can list positions for sale and buyers can purchase them directly. Orders settle instantly on-chain, giving LPs liquidity and new investors a faster entry point.","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","is_active":true},"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":"Browse Goldfinch Loans by Country and Risk","pitch":"Search Goldfinch's lending pools by country, industry, and default history. See which pools accept new money and how they've performed.","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 showing all Goldfinch lending pools (loans to businesses in developing countries) with filters for region, industry, and risk metrics like past defaults. Users see which pools are open for investment, how much money is deployed, and historical outcomes. Built from Goldfinch's public data plus World Bank country risk information.","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","is_active":true},"project_slug":"goldfinch","project":{"slug":"goldfinch","name":"Goldfinch","logo_url":"https://icons.llamao.fi/icons/protocols/goldfinch?w=64&h=64","category":"rwa"}},{"id":"bca7c2ee-4b47-4d59-8ec2-8de435effe66","project_id":"e4d1fc26-a9f5-4bab-9e51-5485b060d268","title":"Maple Borrower Track Record Tracker","pitch":"Public reputation score for each Maple borrower based on repayment history, loan size, and growth. Lenders use it to decide which pools to fund.","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 showing each Maple borrower's track record: on-time repayments, loan amounts, and default risk. Pull data from Maple's smart contracts (loan records) and API, then display borrower rankings and individual profiles. Lenders get a clear signal for where to lend; borrowers build verifiable credit history on-chain.","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","is_active":true},"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":"Risk briefs for each Maple lending pool","pitch":"Automated summaries of borrower risk, defaults, and loan health for each pool. Lenders see what they're funding 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 a dashboard that pulls on-chain pool data (borrowers, defaults, loan-to-value ratios, collateral) and generates plain-English risk summaries. Lenders use it to understand concentration risk and default patterns before committing capital.","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","is_active":true},"project_slug":"maple","project":{"slug":"maple","name":"Maple","logo_url":"https://icons.llamao.fi/icons/protocols/maple?w=64&h=64","category":"lending"}},{"id":"a18fbb29-e9f6-4168-bff0-52eab1a63231","project_id":"9cc29726-6f39-4396-9dab-530650b0db37","title":"Compliance Wizard for Institutional RWA Onboarding","pitch":"A guided questionnaire that asks treasury teams about their compliance needs, then recommends Ondo's tokenized real-world assets (RWAs—like stocks and bonds on blockchain) and generates a checklist.","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 step-by-step form that institutional treasury operators fill out, answering questions about custody, audits, regulations, and redemption needs. The wizard then recommends Ondo's products (USDY, OUSG) and shows real-time details like yields and total locked value. It captures lead data and creates a compliance checklist for the 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","is_active":true},"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 Dashboard","pitch":"Compare all major tokenized US Treasuries (USDY, OUSG, USDtb, USDM, BUIDL) side-by-side: yield, KYC rules, how to cash out, and which blockchains they're on.","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 dashboard that pulls real-time data on tokenized Treasury products from multiple blockchains and shows yield, minimum investment, identity verification requirements, redemption rules, and chain support in one sortable table. Combines on-chain data (balances, trading volume, holder counts) with off-chain issuer terms and regulatory status. Helps institutional investors, retail users seeking yield, and compliance teams pick the right Treasury token.","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","is_active":true},"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":"07002105-514c-4812-9ba1-3a08f42538b1","project_id":"d4441f98-3231-4b0a-bd16-6fce03eb55e5","title":"Bonder Operator Toolkit","pitch":"Open-source Node.js app to run a Hop bonder (liquidity provider for cross-chain transfers) with monitoring, auto-rebalancing, and alerts.","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":"Automates core tasks for operating a Hop bonder across multiple blockchains: tracking liquidity positions, rebalancing tokens to maintain target ratios, monitoring gas costs and swap slippage, and alerting on problems. Lets solo operators or small teams compete with large market makers without building custom monitoring.","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","is_active":true},"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":"Hop Bonder Profitability Tracker","pitch":"See real-time earnings, capital efficiency, and risk metrics for Hop Protocol bonders (liquidity providers). Helps new and existing bonders decide whether to participate.","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 dashboard showing bonder performance across all Hop chains: earnings, capital used, slippage (price impact), and profit/loss history. New bonders can see if it's worth joining; existing bonders can compare their results to others.","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","is_active":true},"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":"881ee6eb-f9b2-4857-8717-130783ac58a5","project_id":"8d7abb53-68d6-4403-baa3-ce33da33fabe","title":"Pool Liquidity Map","pitch":"Live heatmap showing Stargate pool depth on each route. Helps you pick routes with the best liquidity 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 how much liquidity (available funds) each Stargate pool has across chains and trading pairs. Color-coded map (green = lots of liquidity, red = little) helps bridge users find routes with low slippage (price impact). Shows pool usage and historical trends.","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","is_active":true},"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":"Auto-charge USDC across any blockchain","pitch":"Automatically debit USDC from whichever chain a user has money on each month, then send it to a merchant. Works like Stripe but 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 finds user balances across multiple blockchains, moves USDC to the merchant's chain when needed, and charges them monthly. Users never manually bridge funds or worry about which chain has their money. Merchants get paid reliably in USDC.","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","is_active":true},"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":"d974ae32-4e3b-414e-8d2b-bd21456f6b0c","project_id":"84eeb3ad-a59c-4b85-bd63-850b016524f4","title":"Cross-chain Message Explorer","pitch":"Public explorer for Wormhole messages (cross-chain transactions). Paste a transaction hash and see the full journey across chains—source, signatures, destination—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 messages. Users enter a transaction hash and see the complete path: which chain it started on, which contract sent it, how many validators signed it, and where it ended up. Shows if the message is stuck or failed. Useful for people debugging bridge transfers, auditors checking message validity, and developers learning how cross-chain messaging works.","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","is_active":true},"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":"Across Bridge Tax Tracker","pitch":"Tracks your Across bridge transfers and calculates cost-basis and taxes automatically. Bridging creates taxable events that are easy to miss.","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 tool that monitors your Across transfers across multiple chains, recording the cost, timing, and fees for each bridge hop. Connect your wallet to see your complete bridge history with calculated gains and losses. It treats each bridge as a taxable sale on one chain and purchase on another, so you get accurate numbers for tax reporting.","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","is_active":true},"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":"Compare Bridge Costs Across Chains","pitch":"Show users the exact cost of sending any token via OFT, Wormhole, or other bridges. Input token, chains, and amount—see total fees ranked instantly.","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 dashboard where users pick a token, source chain, destination chain, and amount. It fetches live gas prices and bridge fees, then shows a ranked list of costs, time estimates, and exchange rate impact for each bridge option. Solves the problem of not knowing 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","is_active":true},"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":"Visual editor for cross-chain transactions","pitch":"Drag-and-drop interface to chain actions across blockchains—swap on one chain, deposit on another—then execute in one transaction using LayerZero (a cross-chain messaging protocol).","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 tool where users build multi-step transactions by dragging actions (swap, transfer, stake, mint) across different blockchains, set parameters, and run them atomically. It checks gas costs and simulates the execution path before you commit. Built for DeFi traders, protocol teams, and developers who need fast multi-chain workflows.","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","is_active":true},"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":"RToken Discount Arbitrage Bot","pitch":"Automatically detects when RTokens trade below their backing value and executes profitable redemptions.","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 decentralized exchanges (like Uniswap) against their actual backing value, then automatically redeems underpriced tokens for their underlying assets and sells them for profit. The bot calculates transaction costs, executes the redemption and sales in one atomic transaction (single operation that either fully succeeds or fails), and keeps the difference. It teaches you how Reserve protocol redemptions work and how to spot on-chain arbitrage opportunities.","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","is_active":true},"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":"Test how an RToken basket would have performed using historical price and volatility data before you deploy it.","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 tool that replays historical market conditions against a proposed basket mix (e.g., 40% USDC, 30% USDT, 20% DAI, 10% FRAX). Show users the drawdowns, collateral ratios, and whether the basket kept its price peg. Reserve governance and RToken issuers use it to validate designs before spending money and voting.","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","is_active":true},"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 showing all deployed RTokens on Ethereum and Base, with their current yield, underlying collateral (what backs them), trading volume, total value locked, and holder distribution. Use The Graph (blockchain indexing service) to track RToken events, then build a Next.js frontend with sortable tables and charts. This becomes the reference for comparing RToken performance and helps users find high-performing tokens and understand their risks.","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","is_active":true},"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":"a041e875-7fae-4b4f-808a-afd962376216","project_id":"1279320e-12cf-4287-b3e7-3839b903fe7a","title":"USDM On-Ramp Widget","pitch":"Drop-in component that lets apps sell USDM to users. Mountain Protocol handles KYC and compliance; you handle the interface.","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 React widget that fintech apps and wallets can embed to let users buy USDM with fiat (via Stripe or bank transfer). Mountain Protocol manages the regulatory checks; your code connects the user's payment to their wallet and mints the stablecoin. Apps get a simple way to offer yield-bearing dollars without building compliance infrastructure.","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","is_active":true},"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":"Compare yield rates, fees, and risks across USDM, sDAI, sUSDS, and sUSDe in one dashboard. See which stablecoin (dollar-pegged token) gives you the best return for your risk.","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 dashboard showing real-time APY (annual percentage yield), redemption fees, and what backs each stablecoin—Treasuries (government bonds), staking rewards, or lending income. Yield farmers can spot the best stablecoin strategy without checking five different websites.","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","is_active":true},"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 watches your crvUSD loan and alerts you when you're close to soft-liquidation (losing collateral).","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 your crvUSD loans in real-time and sends alerts when your position drifts into danger zones. It checks on-chain data to calculate how safe your loan is based on collateral price and debt amount. Useful for traders managing leverage and anyone who wants early warning before losing collateral.","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","is_active":true},"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":"Watch BOLD price and auto-trigger Liquity V2 redemptions when the stablecoin trades above $1. Includes gas optimization and MEV protection.","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 UI that monitors BOLD/USD prices and executes redemptions (exchanging BOLD tokens for underlying collateral at face value) when BOLD trades above peg. Helps arbitrageurs profit from price gaps while protecting against MEV (front-running). Shows current price, redemption queue depth, and collateral mix.","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","is_active":true},"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":"Compare Liquity V2 Stability Pools Across Branches","pitch":"A tool that compares deposit yields and risks across Liquity V2's parallel branches to find the best Stability Pool for your tolerance.","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 runs multiple independent branches, each with a Stability Pool offering different risk and reward. This tool shows real-time deposit returns, how often liquidations happen, what collateral backs each pool, and BOLD token rewards—then recommends which pool fits your risk level. Developers can use it as a template for tracking multiple parallel systems and building yield 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","is_active":true},"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":"Real-time list of at-risk Fraxlend positions so liquidator bots can find profitable opportunities faster.","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 service that tracks Fraxlend lending positions, calculates how close they are to liquidation, and alerts bots via API. Liquidators use this to spot accounts they can liquidate for profit. The service watches on-chain data, indexes lending contracts, computes health scores, and exposes a REST or WebSocket API.","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","is_active":true},"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":"Compare frxETH Yield Strategies","pitch":"Shows whether staking frxETH or providing liquidity on Curve gives better returns right now. Compares risk-adjusted yields (APY and volatility) so you pick the best option.","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 dashboard that compares yield strategies for Frax Ether holders. See side-by-side returns and risk metrics for staking frxETH, providing liquidity on Curve (an automated market maker), or using leverage (borrowed funds) via Aave. Updates hourly with live data to help you choose the strategy that fits your risk tolerance.","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","is_active":true},"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":"Unified Dashboard for Frax Assets","pitch":"One dashboard showing your FRAX, sFRAX, frxETH, FXS staking, and lending positions across all chains. See balances, rewards, and performance in real time.","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 dashboard that pulls together Frax protocol data from Ethereum, Arbitrum, Base, Polygon, and BSC. Show users their wallet holdings, staking rewards, lending positions, and historical returns without switching between different 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","is_active":true},"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":"5eaf8baf-a8ec-44b1-a2e8-0483e56142bd","project_id":"926e55bc-b431-42a3-af2c-d94e9be7417f","title":"Real-time 3D Options Volatility Surface","pitch":"Interactive 3D visualization of implied volatility (how expensive options are) across all strikes and expiration dates on Aevo. Traders use it to spot mispricings and understand market risk.","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 a live 3D chart showing how expensive options are at different price levels and dates. Pull data from Aevo's API, calculate volatility using math (Black-Scholes), and let traders zoom, filter by asset, and see risk metrics (delta, gamma, vega). This helps professional traders make better hedging decisions.","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","is_active":true},"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":"Aevo Put-Selling Bot with Funding Capture","pitch":"A bot that sells weekly put options on Aevo (a derivatives exchange) while holding the underlying asset to earn funding payments and premiums. Includes backtesting and paper-trading modes.","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":"Build a Python bot that sells cash-secured puts on Aevo's perpetual futures platform to capture funding rates (periodic payments between traders) and option premiums. The bot monitors market conditions, executes trades when favorable, and holds the underlying asset as a hedge. Test strategies with historical data and paper-trading before going live.","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","is_active":true},"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":"Visual Options Strategy Builder","pitch":"Drag-and-drop editor to design multi-leg options strategies and execute them on Aevo in one transaction. See your profit/loss curve update in real time as you adjust positions.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","aevo-sdk","d3","wagmi"],"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 where traders visually build options spreads (like iron condors or butterflies) by clicking on a payoff diagram, then deploy the entire strategy to Aevo with a single click. The app shows live profit/loss curves and routes orders efficiently to reduce slippage (price impact from large trades). Built for retail and semi-pro traders tired of manually entering complex multi-leg orders.","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","is_active":true},"project_slug":"aevo","project":{"slug":"aevo","name":"Aevo","logo_url":"https://icons.llamao.fi/icons/protocols/aevo?w=64&h=64","category":"perps"}},{"id":"1361bc69-1979-4491-a35b-fc55e1a88d1d","project_id":"0eab156f-81e3-4162-aa22-87e376375ffe","title":"Vertex Market Maker Performance Tracker","pitch":"Ranks Vertex market makers by spread, depth, and uptime. Helps retail traders find the best execution and spot problems.","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 dashboard that tracks market maker performance on Vertex Protocol by measuring spread (bid-ask gap), depth (available liquidity), and uptime (order presence). Retail traders use it to find better execution and spot suspicious patterns.","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","is_active":true},"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":"24e2a0e1-eaf4-4461-a643-b57cf1a12f79","project_id":"bb71d2bf-eeed-4a93-bb53-b62b26d18c3a","title":"Vault Strategy Backtester","pitch":"Test liquidity vault strategies against historical Hyperliquid trades. Run your strategy on past data to see if it would have made money.","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 tool that replays old Hyperliquid trades to test vault strategies like rebalancing and copy-trading. Show traders and vault operators the Sharpe ratio (risk-adjusted returns), drawdowns (biggest losses), and fees they'd have earned before risking real money.","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","is_active":true},"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":"Telegram Bot for Hyperliquid Orders","pitch":"Telegram bot that lets you place advanced orders on Hyperliquid (a crypto trading platform) without leaving chat. Set TWAP (time-weighted average price), scaled entries, and stop-losses through messages.","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 connected to Hyperliquid's trading API. You sign in with your wallet, then compose orders through chat messages—TWAP orders spread your buys/sells over time, scaled orders let you enter gradually, and stop-losses protect you automatically. You get instant confirmations as orders fill.","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","is_active":true},"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":"f672aa51-cc51-4cce-aa39-3d7df6ddd5da","project_id":"9f6af033-0db7-43e0-8644-ff94e741c5fd","title":"Copy Top GMX Traders Automatically","pitch":"Mirror trades from top GMX traders with automatic execution and risk limits. Users deposit funds, set position caps, and the system copies tracked traders' moves.","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 platform where users deposit collateral and automatically copy positions from successful GMX traders. The system watches on-chain trader activity, detects when tracked traders enter or exit, and executes matching trades with configurable position size and leverage caps. Earn revenue from a small fee on each copied trade or a cut of 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","is_active":true},"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":"Low-code Cellar Strategy Builder","pitch":"A wizard that lets strategy providers design automated vaults (yield-generating smart contracts) without writing code, then submit them to Sommelier governance.","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 yield strategies across multiple blockchains. Today you need deep coding skills to build one. This tool lets strategy experts define their vault's logic—which tokens, rebalancing rules, and risk limits—through a visual interface, then auto-generates a production-ready contract ready to submit for approval.","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","is_active":true},"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":"GMX V2 Pool Risk Dashboard","pitch":"See each GMX V2 pool's trader losses, capital usage, and whether LPs are making money right now.","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 showing GMX V2 pool health: trader profit/loss by side, how full the pool is, and whether LPs are profitable. It pulls data from GMX's public records (subgraphs) to help LPs decide if their money is working and traders see if pools are imbalanced.","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","is_active":true},"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":"AI Decoder for Sommelier Strategies","pitch":"Paste a Sommelier strategy's code, get a plain-English explanation of what it does and how it manages risk.","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 reads Sommelier cellar code and on-chain data, then uses an LLM (large language model) to explain the strategy's goals, position rules, and risk limits in simple terms. Auditors, vault investors, and developers use it to understand what a strategy actually does.","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","is_active":true},"project_slug":"sommelier","project":{"slug":"sommelier","name":"Sommelier","logo_url":"https://icons.llamao.fi/icons/protocols/sommelier?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 showing Aura's runway, fee revenue, and DAO actions. AURA holders can see if the protocol is sustainable.","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 dashboard that displays Aura Finance's treasury balances, monthly spending, runway estimate, and recent DAO votes. Pull data from blockchain APIs (The Graph, Etherscan, Arbiscan), display it in a Next.js frontend with charts. AURA holders use it to assess whether the protocol can sustain itself.","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","is_active":true},"project_slug":"aura","project":{"slug":"aura","name":"Aura","logo_url":"https://icons.llamao.fi/icons/protocols/aura?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","is_active":true},"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, vault age, and underlying protocol risk into a single 1-10 score for every Beefy vault. Helps users pick safer strategies.","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 engine that ingests Beefy vault data (strategy code, underlying protocols, audits, TVL history) and outputs a 1-10 risk score. Weight audit status, vault age, protocol risk, past exploits, and concentration risk. Expose scores via API and dashboard showing comparisons and alerts when scores change.","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","is_active":true},"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":"Beefy Yield Tax Optimizer","pitch":"Monitor your Beefy vault compounds and get alerts before tax year ends so you can time withdrawals to reduce taxes owed.","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 dashboard that tracks your deposits, compounds, and withdrawals across Beefy vaults. Connect your wallet to see how much you've gained, estimate your tax bill by location, and get alerts when compounds happen near year-end. It calculates your cost basis (what you paid) and holding periods to suggest when to withdraw.","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","is_active":true},"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":"Search and filter Beefy vaults across all chains in one place by token, APY, and risk. No more hopping between 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 dashboard that pulls Beefy's auto-compounding vaults (automatic reward reinvestment) from seven chains into one searchable interface. Users filter by token pair, APY range, total locked value (TVL), and risk score to find the best yields. Yield farmers use it to compare opportunities without visiting each chain separately.","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","is_active":true},"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 V3 Strategy Marketplace","pitch":"A public list of community-built strategies for Yearn vaults, with real performance data so curators can find and deploy new ones.","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":"Developers publish strategies (investment rules) compatible with Yearn V3 vaults. Curators browse them, check past returns, and deploy the ones that fit their vault. The marketplace tracks which strategies work best and who built them.","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","is_active":true},"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 Dashboard","pitch":"Shows bribe rewards and voting history for Yearn token holders. Helps them pick which gauges (reward pools) offer the best returns.","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 tracks bribe payments across Yearn gauges and calculates actual returns for voters. Users see which gauges pay the most, compare rewards over time, and find good voting opportunities.","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","is_active":true},"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 a Yearn V3 vault address and get a plain-English breakdown of what it does, how it splits money between strategies, risks, and past returns.","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 where users paste a vault address and see an AI-written explanation of the vault's strategies, capital allocation (how money is split), risks, and historical performance. The app pulls data from Yearn's API, uses an LLM (language model) to turn it into readable text, and shows it with on-chain numbers. Useful for people deciding whether to deposit money, auditors learning how vaults work, and researchers tracking strategy changes.","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","is_active":true},"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":"Pendle PT Yield Arbitrage Scanner","pitch":"Finds Pendle Principal Tokens (fixed-yield tokens) trading at prices that don't match what the underlying asset actually earns, so traders can profit from the mismatch.","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 tool that watches Pendle Principal Tokens across chains and alerts traders when the implied yield (what the token's price suggests it will earn) diverges from the underlying asset's real yield. It pulls token prices and maturity dates, calculates expected returns, and compares them against actual yields from sources like staking or lending protocols. Traders use these alerts to buy underpriced tokens or sell overpriced ones.","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","is_active":true},"project_slug":"pendle","project":{"slug":"pendle","name":"Pendle","logo_url":"https://icons.llamao.fi/icons/protocols/pendle?w=64&h=64","category":"yield"}},{"id":"c7fc707f-21aa-495f-89b5-6afac7547be6","project_id":"cc7b8a39-03ab-4ac1-a80a-5ff9f68ff1b3","title":"LRT AVS Diversification Risk Score","pitch":"Scores any liquid restaking token by how spread out its validator work is across different services. Lower score means riskier concentration.","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 tool that measures how concentrated each liquid restaking token's validator work is across different services. It fetches current allocations from blockchain data, calculates a 0–100 risk score, and lets restakers compare tokens like rsETH and ezETH to see which spreads risk more evenly. Restakers use it to pick safer tokens; token teams use it to track their own balance.","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","is_active":true},"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 showing where to sell rsETH with least slippage. Tracks DEX (decentralized exchange) prices, lending rates, and redemption queues across Ethereum.","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":"Dashboard that aggregates rsETH liquidity across Ethereum venues: spot prices and order book depth on Uniswap and Curve; borrow rates on Aave and Compound; and Kelp's redemption queue. Traders and liquidity providers use it to find the cheapest exit and avoid slippage (price impact from large trades).","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","is_active":true},"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":"5f29a70e-060d-42ea-85cf-40514f9cb2bb","project_id":"c335727c-7658-4f68-8182-78e9862026ad","title":"One-click ezETH minting and bridging","pitch":"A single dashboard to mint ezETH on Ethereum, bridge it to other chains, and stake it—all without switching apps or networks.","difficulty":"1-2 weeks","use_case":"ux","build_with":["nextjs","layerzero-sdk","renzo-sdk","wagmi"],"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 dashboard where users mint ezETH, bridge it across chains using LayerZero (a cross-chain messaging protocol), and stake it in validator pools in one flow. Users connect their wallet, pick a destination chain, confirm the amount, and the app handles the rest. This removes the friction of using separate interfaces and waiting for bridge confirmations.","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","is_active":true},"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":"Break Down ezETH Yield by Source","pitch":"Shows where ezETH yield comes from: ETH staking rewards, EigenLayer points, and partner protocols. Helps users see their 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 splits ezETH yield into its parts: base ETH staking rewards, EigenLayer points (with estimated value), and partner protocol rewards. Display historical and projected APY for each source so users understand exactly where their returns come from. Pull data from Renzo's API, EigenLayer's points system, and blockchain events, then display it in a clear interface.","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","is_active":true},"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":"f5775df8-d742-4085-89df-59504e6d29ef","project_id":"921c5722-d5b3-4b18-b478-693243fdb863","title":"Loyalty Points Optimizer","pitch":"Shows you the best ether.fi action each day by points earned per dollar spent. Turns points farming into a game with real-time rankings.","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 ranks ether.fi's daily reward opportunities (staking, restaking, referrals, liquidity provision) by points-per-dollar efficiency. Users see ranked actions, historical returns, and alerts when high-efficiency opportunities appear. The tool pulls real-time data from ether.fi and calculates the mathematically best path for any amount of capital.","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","is_active":true},"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 showing every protocol that accepts eETH/weETH as collateral, with current rates and TVL. Helps users find hidden yield opportunities.","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 mapping all protocols that accept eETH or weETH (liquid staking tokens) as collateral, showing real-time rates and total value locked per protocol. Index eETH transfer events and collateral deposits across lending platforms (Aave, Compound, Curve, Balancer, etc.) using a blockchain indexer (The Graph or Ponder), then display the network as a graph showing capital flow and rate differences. This reveals composability opportunities users miss—like using eETH as collateral to borrow stablecoins, then farming yield elsewhere.","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","is_active":true},"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":"Compare every liquid restaking token by which services they support, yield breakdown, slashing risk, and where to trade them.","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 dashboard showing all liquid restaking tokens (LRTs) side-by-side with their risk and returns. See which services (AVSs) each token backs, how much yield comes from base staking vs. service rewards, slashing risk per service, and liquidity on each exchange. Helps token holders pick the right LRT and helps new services find tokens that can 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","is_active":true},"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":"Telegram alerts for EigenLayer slashing events","pitch":"A bot watches EigenLayer for slashing events and sends instant Telegram notifications 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":"Monitors EigenLayer (a restaking protocol) for slashing events across all services and pushes alerts to Telegram. Restakers need to know immediately when their stake is at risk. Useful for solo stakers, staking pools, and service operators.","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","is_active":true},"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":"A real-time score for each EigenLayer operator based on uptime, slashing history, and task performance. Helps stakers pick reliable operators to delegate to.","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 dashboard that tracks EigenLayer operators across multiple metrics: how often they're online, whether they've been penalized (slashed), and how well they complete assigned work. Display operators ranked by a combined score so stakers can see who's trustworthy before delegating. Update scores automatically as new on-chain data arrives.","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","is_active":true},"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":"Shows Rocket Pool operators whether joining the smoothing pool (shared rewards system) makes more money than running solo, based on their validator performance and MEV (miner extractable value—extra profits from transaction ordering).","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 dashboard that pulls your validator stats and historical profit data, then calculates whether you'd earn more money in the smoothing pool or alone. You enter how many validators you run and how much risk you'll accept; the tool shows you the financial difference and recommends which option wins.","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","is_active":true},"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":"Rocket Pool Minipool Setup Guide + Calculator","pitch":"Step-by-step guide and cost calculator for running a Rocket Pool minipool (a staking pool with 8 ETH minimum). Shows hardware costs, electricity, and when you 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 app that teaches you how to set up a Rocket Pool minipool and calculates your break-even timeline. It walks through what you need, compares hardware options, and shows live earnings projections. You get a checklist to actually deploy.","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","is_active":true},"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":"d5451ca3-1cad-43af-a41a-5a4d681d218a","project_id":"891b4590-f9a9-432b-9d4c-97704d6215c3","title":"Discord bot alerts on risky borrow positions","pitch":"A bot that watches your Kamino lending position and sends Discord or Telegram alerts when you're close to liquidation (losing your collateral).","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":"Monitors Kamino lending positions on Solana by checking on-chain data and calculates when your borrowed amount gets too close to your collateral value. Sends alerts to Discord or Telegram before liquidation happens. Built for lenders who can't watch dashboards constantly.","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","is_active":true},"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":"Analyzes price swings on Solana pairs and suggests the best concentrated liquidity ranges for Kamino (a liquidity protocol) positions.","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 tool that pulls price history for Solana token pairs, calculates how much prices move around (volatility), and recommends where to place concentrated liquidity positions to earn fees while avoiding losses from price moves. Liquidity providers use it to decide where to stake their capital on Kamino.","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","is_active":true},"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":"Deposit JLP once. The vault borrows SOL against it, reinvests the SOL into more JLP, and compounds your yield automatically.","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":"A vault contract that accepts JLP deposits, borrows SOL using Kamino (a lending protocol), and reinvests that SOL back into JLP to amplify returns. Users earn leveraged yield without manual rebalancing or managing debt. The vault monitors collateral health and rebalances on-chain to stay safe.","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","is_active":true},"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 Position Explorer","pitch":"Browse every Kamino multiply position by chain, asset, leverage, and historical APY. See all Solana yield opportunities in one dashboard.","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 showing all active Kamino multiply (leveraged lending) positions on Solana. Filter by collateral asset, borrowed asset, and leverage ratio to compare historical returns. See liquidation thresholds and realized APY to evaluate which strategies offer the best yield.","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","is_active":true},"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 dashboard showing Silo protocol fees, treasury holdings, and DAO actions. Built for governance researchers to track treasury health and voting decisions.","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 dashboard that pulls Silo protocol treasury data—fees collected, token holdings, and governance proposals—from the blockchain (via The Graph, a data indexing service). It shows key metrics like fee rates and treasury composition, and lets you export reports. Useful for LPs checking if the protocol is sustainable, researchers tracking how the DAO spends money, and voters making informed 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","is_active":true},"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":"Finds better rates for your assets across Silo Finance markets and moves them in one transaction.","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 and dashboard that watches deposit and borrow rates across Silo's isolated markets (separate lending pools) on Ethereum and Arbitrum. When your asset gets better rates elsewhere, you click to move it—the system handles repaying old debt and redepositing in one atomic transaction (single bundled action).","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","is_active":true},"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 shows exactly how much you can borrow against your collateral in Silo's two-asset markets. Removes the biggest onboarding friction point.","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 uses isolated lending markets (separate pools) where each market has exactly two assets: one as collateral, one to borrow. This prevents problems in one market from spreading to others, but it's confusing for new users. This calculator lets you input your collateral amount and instantly see how much you can borrow, your liquidation price (when you get liquidated), interest costs over time, and a visual risk breakdown.","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","is_active":true},"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":"Audited Operator Marketplace for Euler","pitch":"A directory of pre-audited smart contracts that manage Euler accounts automatically. Users browse operators, review their audit reports and track record, then grant permission 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 marketplace where Euler users find and authorize vetted operators—programs that handle account tasks like rebalancing (adjusting positions) and protecting against liquidation. Each operator shows its audit status, how much money it manages, success rate, and user reviews. Users connect their wallet, pick an operator, and approve it in a single transaction.","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","is_active":true},"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":"Find lending markets on Silo for rare tokens that other platforms won't touch. Filter by interest rates, liquidity, and 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 Silo lending markets across Ethereum and Arbitrum, helping users find emerging token markets with less competition. Users filter by APY (annual yield), liquidity depth, collateral risk, and price-drop exposure. Unlike Aave or Compound which focus on major tokens, Silo's isolated market design (separate pools per token) lets users lend riskier assets—this tool finds the best risk-adjusted yields in that space.","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","is_active":true},"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":"68344582-93be-40f5-8418-f5687691d654","project_id":"06210f72-cfea-4c0e-9305-bb6a7d0d904a","title":"Euler Position Stress Test","pitch":"See what happens to your Euler positions if prices drop. The simulator shows which vaults get liquidated first and in what order.","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 where Euler users test how price changes affect their positions. You enter a scenario (like ETH drops 20%), and it recalculates whether your collateral (assets backing your loan) stays safe or triggers liquidation. It shows the order positions fail and how much you'd lose to slippage (price impact from selling fast).","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","is_active":true},"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 tool to compose lending vaults by picking collateral, risk rules, and price feeds. Deploy as a live vault instantly.","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 where users design lending vaults by selecting collateral assets, risk controllers (rules that prevent bad loans), and price oracle sources through a visual UI. The tool deploys the vault as an ERC-4626 vault (a standard token wrapper) with Euler's EVC (a system that connects vault components) handling the risk logic. Users can preview parameters and test on testnet before going live.","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","is_active":true},"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":"f3691103-cead-4d4b-acfa-0d1d0e468239","project_id":"b8b7b0bc-8053-4f68-9096-d0ca2b696ae8","title":"Vault Health Watcher","pitch":"Monitors Maker vaults and alerts you on Telegram when collateral drops to dangerous levels. Faster than checking manually.","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 bot that watches Maker vaults (debt positions on Ethereum) and sends Telegram alerts when your collateral ratio falls below a threshold you set. You give it a vault ID and a danger level—say 150% collateral—and get instant warnings before liquidation happens. It checks vault data on-chain every minute and uses Maker's price feeds to calculate your current ratio.","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","is_active":true},"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 digest comparing risk settings across lending protocols like Spark, Maker, and Aave. Helps risk teams and users spot changes and emerging problems.","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":"Pulls risk numbers (collateral ratios, liquidation thresholds, fees) from major lending protocols daily, then uses AI to flag changes and outliers. Delivers via email or Telegram to risk analysts and governance participants who need to track protocol safety.","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","is_active":true},"project_slug":"spark","project":{"slug":"spark","name":"Spark","logo_url":"https://icons.llamao.fi/icons/protocols/spark?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 (capital router) sends DAI across lending markets in real time. Helps users see where their savings go.","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's allocator distributes DAI across different lending markets. Query on-chain data and render an interactive flow diagram showing which markets receive capital, how much DAI is deployed, and utilization rates. Users gain transparency into capital flows and can make informed deposit decisions.","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","is_active":true},"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. Shows what's happening in real time.","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 (smaller groups that make specific decisions); this feed makes those decisions transparent and actionable for users, integrators, and risk managers. Built on The Graph (an indexing service) to track 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","is_active":true},"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":"Auto-refinance Morpho borrows to cheaper markets","pitch":"A bot watches your Morpho loans and moves them to cheaper markets when rates drop enough to save money.","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":"Builds a keeper bot (automated watcher) that monitors your Morpho borrow positions, compares interest rates across different markets, and automatically moves your loan when it finds a cheaper option. Uses Morpho's API (data interface) to check rates and Gelato (task automation service) to execute the move safely. Saves active borrowers time and money.","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","is_active":true},"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":"Morpho Vault Performance Leaderboard","pitch":"Ranks every Morpho vault by risk-adjusted returns. See curator track records and recent changes in real time.","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 dashboard showing all Morpho vaults ranked by return-per-risk (using metrics like Sharpe ratio). Users filter by risk level or curator, and see each curator's history, past vault performance, and assets managed. Updates hourly with vault size, yield, and recent moves.","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","is_active":true},"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":"586f1e39-c55e-4b98-a79b-6f21be1a03b0","project_id":"2ab3fb8e-2be3-4205-9662-62320df5077d","title":"No-Code Morpho Vault Launcher","pitch":"Web tool that lets anyone create and deploy a Morpho vault (lending pool) by picking markets and setting limits. No coding required.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","foundry","morpho-sdk","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:40.315911+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A guided interface for creating a Morpho vault (a smart contract that lends crypto). Pick which markets to include, set deposit limits, and deploy—no Solidity knowledge needed. Anyone can become a vault curator.","learn_first":["ERC-4626 vault standard","Morpho market structure and risk parameters","Smart contract deployment via Foundry","Web3 wallet integration patterns"],"tech_stack":{"data":["Morpho SDK","viem for contract reads"],"infra":["Foundry for contract deployment","Etherscan verification"],"wallet":["RainbowKit","wagmi hooks"],"frontend":["Next.js","TypeScript","wagmi","RainbowKit","shadcn/ui"],"contracts":["Morpho ERC-4626 Vault","Morpho Market Interface"]},"build_steps":["Set up Next.js project with TypeScript, wagmi, and RainbowKit for wallet connection","Fetch available Morpho markets (Ethereum + Base) via Morpho SDK, displaying APY, TVL, and risk parameters","Build a multi-step form UI: (1) select markets, (2) set deposit caps per market, (3) configure curator fee, (4) review parameters","Implement contract code generation: template an ERC-4626 vault contract with user-selected markets and parameters hardcoded","Add Foundry integration: allow users to compile and deploy the generated contract from the browser via a backend service or direct Foundry CLI instructions","Integrate wallet signing for deployment: use viem to send the deployment transaction, show real-time status","Add post-deployment verification: fetch the deployed vault address, verify on Etherscan, display curator dashboard with vault stats","Test end-to-end on Ethereum testnet and Base testnet with mock markets"],"gotchas":["Morpho markets are risk-isolated; users must understand that selecting incompatible markets or misconfiguring caps can lock liquidity or create bad debt — add educational tooltips and warnings","ERC-4626 vault deployment requires careful initialization of market adapters; a single misconfigured market address will break the vault — validate all addresses against Morpho's official market registry","Foundry compilation and deployment can take 30–60 seconds; users expect instant feedback — implement proper loading states and clear error messages from compilation failures","Gas costs for vault deployment vary by chain and market count; estimate and display gas fees upfront to avoid surprise rejections","Curator fees are immutable post-deployment in most vault designs; make this constraint very clear in the UI to prevent user regret"],"references":[{"url":"https://docs.morpho.org/","kind":"docs","label":"Morpho Docs: Vault Creation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Standard (Tokenized Vault)"},{"url":"https://github.com/morpho-org/morpho-ts","kind":"repo","label":"Morpho SDK GitHub"},{"url":"https://book.getfoundry.sh/forge/deploying","kind":"docs","label":"Foundry Book: Deployment"},{"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":"morpho","is_active":true},"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":"69765189-9b2d-43d1-bce4-f20f1d28fd91","project_id":"190fc2b4-616b-40c0-83a4-26a6dff6ff1c","title":"Liquidation Auction Front-End","pitch":"A clean interface to bid on Compound III liquidations in real-time. Right now only bots can participate—this opens it to regular traders.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","viem","flashbots","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:32.034624+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard showing liquidation opportunities across Ethereum, Arbitrum, Base, and Polygon. Users watch for accounts about to be liquidated and place bids through a simple UI. Today liquidations are bot-only; this lets smaller traders join without running their own infrastructure.","learn_first":["Compound III architecture and liquidation mechanics","ERC-20 token standards and approvals","How liquidation auctions work (collateral seizure, discount mechanics)","Real-time on-chain data indexing patterns","MEV and transaction ordering basics"],"tech_stack":{"data":["Compound III Comet contract ABIs","Chainlink price feeds (for collateral valuations)"],"infra":["Vercel for hosting","Alchemy or Infura RPC endpoints","Flashbots Relay (optional, for MEV protection)"],"other":["ethers.js or viem for transaction simulation"],"wallet":["RainbowKit","Privy (optional, for email-based onboarding)"],"indexer":["The Graph (Compound III subgraph or custom)","Ponder (alternative for real-time indexing)"],"frontend":["Next.js 14+","Viem for contract interactions","RainbowKit for wallet connection","TailwindCSS for styling","Recharts or similar for health factor visualization"],"contracts":["Compound III Comet contract (read-only)","ERC-20 token contracts (for approvals)"]},"build_steps":["Set up Next.js 14 project with Viem and RainbowKit; scaffold pages for dashboard, liquidation list, and auction detail.","Index Compound III liquidation events and account health data using The Graph (query existing Compound subgraph or deploy custom Ponder indexer for real-time updates).","Create a data pipeline that fetches Comet contract state (collateral balances, borrow amounts, prices) and calculates health factors for monitored accounts.","Build the liquidation list view: display accounts at risk, their health factors, collateral composition, and estimated liquidation discount; sort by urgency.","Implement the auction detail page: show specific collateral being liquidated, current bid price, discount percentage, and a form to submit a liquidation bid.","Integrate wallet connection (RainbowKit) and transaction signing; use Viem to encode liquidation calls to Comet.liquidateAccount() with proper token approvals.","Add real-time updates via WebSocket or polling; show pending liquidations, recent bids, and auction outcomes.","Deploy to Vercel and test across Ethereum, Arbitrum, Base, and Polygon; optimize RPC calls and indexing latency."],"gotchas":["Liquidation discounts and incentives vary by collateral type and market conditions in Compound III; you must read the Comet contract state to get accurate bid amounts.","Gas costs for liquidation transactions can be high; simulate transactions before broadcasting to avoid wasting gas on failed bids.","The Graph's Compound subgraph may lag behind real-time state; combine subgraph queries with direct contract calls to Comet for freshness.","Flashbots Relay is optional but recommended to avoid sandwich attacks; if you don't use it, your liquidation bids may be front-run by MEV bots.","Collateral prices come from Compound's internal price oracle (Chainlink feeds); ensure your frontend uses the same price source to avoid mispricing."],"references":[{"url":"https://docs.compound.finance/","kind":"docs","label":"Compound III Docs"},{"url":"https://github.com/compound-finance/comet","kind":"repo","label":"Compound III Comet Contract (GitHub)"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Compound Subgraph"},{"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.flashbots.net/","kind":"docs","label":"Flashbots MEV-Protect Documentation"}],"time_estimate_hours":80,"projects":{"slug":"compound","is_active":true},"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":"f8cbe895-c092-4974-b902-fc9ab3d30b2e","project_id":"190fc2b4-616b-40c0-83a4-26a6dff6ff1c","title":"Compound III Market Dashboard Across Chains","pitch":"One screen shows every Compound III market's key stats—utilization, caps, reserves—across all chains. Helps you pick where to lend or borrow.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","viem","the-graph"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:30.162991+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a dashboard that pulls Compound III market data from Ethereum, Arbitrum, Base, and Polygon and shows utilization rates, supply/borrow limits, reserve balances, and recent governance votes in one filterable view. Read data directly from smart contracts (self-executing code on-chain) and use The Graph (a data indexing service) for historical events. Yield farmers use it to find the best markets, risk managers use it to watch limits, and protocol watchers use it to track changes.","learn_first":["Compound III (Comet) contract architecture and market parameters","ERC-20 and collateral token standards","Multi-chain RPC calls and contract state reading","The Graph subgraph queries for event indexing"],"tech_stack":{"ai":[],"data":["Etherscan/Arbiscan APIs (optional fallback)"],"infra":["Vercel (hosting)"],"other":["ethers.js or Viem for contract calls"],"wallet":[],"indexer":["The Graph (Compound III subgraph)"],"frontend":["Next.js","Viem","TailwindCSS","Recharts (for charts)"],"contracts":["Comet (Compound III market contract)","CometRewards (governance/reward tracking)"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; configure environment for multi-chain RPC endpoints (Alchemy, Infura, or public RPCs).","Create Viem clients for each chain (Ethereum, Arbitrum, Base, Polygon) and define Comet contract ABIs from Compound docs.","Build a data-fetching layer that calls `totalSupply()`, `totalBorrow()`, `supplyMarketCollateral()`, `borrowMarketCollateral()`, and `reserveBalance()` on each Comet contract.","Query The Graph Compound III subgraph (if available) or Etherscan events to fetch recent governance proposals, market parameter changes, and supply/borrow cap updates.","Create a React component grid displaying each market as a card: market name, chain, utilization %, supply cap, borrow cap, reserve balance, and collateral list.","Add filtering/sorting by chain, utilization, or cap headroom; implement a detail modal showing full market config, recent events, and historical utilization trends.","Deploy to Vercel and set up automatic data refresh (e.g., SWR or React Query polling every 30–60 seconds).","Test across all four chains and validate contract calls return expected data; document RPC endpoints and Comet addresses in README."],"gotchas":["Comet contract addresses differ per chain and per market (e.g., cUSDCv3 on Ethereum ≠ cUSDCv3 on Arbitrum); maintain a config file mapping chain ID → market addresses.","The Graph Compound III subgraph may lag 1–2 blocks behind real-time; for critical metrics, always read directly from Comet contracts via Viem to avoid stale data.","Supply and borrow caps are stored as uint104 with 8-decimal precision in Comet; ensure you scale correctly when displaying (divide by 1e8 for display, multiply by 1e8 for contract calls).","RPC rate limits can hit quickly with multi-chain polling; use Viem's built-in batching (multicall) and cache responses with SWR to minimize calls."],"references":[{"url":"https://docs.compound.finance/","kind":"docs","label":"Compound III (Comet) Documentation"},{"url":"https://github.com/compound-finance/comet","kind":"repo","label":"Comet Contract on GitHub"},{"url":"https://thegraph.com/hosted-service/subgraph/graphprotocol/compound-v2","kind":"tool","label":"The Graph Compound Subgraph"},{"url":"https://viem.sh/","kind":"docs","label":"Viem Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"Compound III Market Parameters (EIP-4626 Vault Standard)"},{"url":"https://compound.finance/governance","kind":"tool","label":"Compound Governance & Proposals"}],"time_estimate_hours":12,"projects":{"slug":"compound","is_active":true},"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":"2470c325-e1da-4416-b1ae-19fe7dd26139","project_id":"190fc2b4-616b-40c0-83a4-26a6dff6ff1c","title":"Alert on Lending Rate Gaps Between Aave and Compound","pitch":"A bot watches borrow rates on Aave and Compound, then alerts you when the gap gets big enough to profit from. You can borrow cheap on one protocol and lend expensive on the other.","difficulty":"weekend","use_case":"yield","build_with":["node","viem","telegram-bot-api"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:26.541407+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Polls borrow rates from both protocols every 1–2 minutes and sends Telegram alerts when the spread exceeds your threshold. Helps yield farmers spot arbitrage (borrowing from the cheaper protocol, lending to the more expensive one) and understand how rates move across the two largest lending platforms (services that let you earn interest or borrow assets).","learn_first":["Compound v3 interest rate model (utilization-based)","Aave v3 interest rate strategy","Reading contract state via ethers/viem without ABIs (low-level calls)","Telegram Bot API basics"],"tech_stack":{"ai":[],"data":["Compound v3 contract state (getBorrowRate)","Aave v3 contract state (getReserveData)"],"infra":["Node.js","Telegram Bot API"],"other":["viem for RPC calls","dotenv for config"],"wallet":[],"indexer":[],"frontend":[],"contracts":["Compound v3 cToken (read-only)","Aave v3 aToken + StableDebtToken (read-only)"]},"build_steps":["Set up a Node.js project with viem, dotenv, and node-telegram-bot-api; create .env for RPC URLs, Telegram bot token, and rate threshold.","Write a helper function to fetch Compound v3 borrow rate: call Comet.getBorrowRate(utilization) or read state directly via eth_call to the cToken contract.","Write a helper function to fetch Aave v3 borrow rate: call ReserveData from the LendingPool, extract currentBorrowRate, or call StableDebtToken.getAverageStableRate().","Create a comparison loop that polls both rates every 60–90 seconds, calculates the spread (e.g., Aave - Compound), and logs it.","Set threshold logic: if spread > your configured threshold (e.g., 0.5%), emit an alert.","Integrate Telegram bot: send a formatted message with asset name, both rates, spread, and a timestamp whenever threshold is breached.","Add a simple in-memory cooldown (e.g., don't alert for the same asset more than once per 5 minutes) to avoid spam.","Deploy to a VPS or keep running locally; test with a few assets (USDC, USDT, ETH) across Ethereum mainnet first."],"gotchas":["Borrow rates change every block; you may miss brief spikes if polling interval is too long. Consider using event listeners (Transfer, Borrow events) instead of polling for real-time accuracy.","Compound v3 and Aave v3 use different rate models and precision (e.g., Compound uses ray math, Aave uses WAD). Always convert to a common decimal before comparing.","RPC rate limits: if you poll too frequently across multiple chains, you'll hit free tier limits. Use a paid RPC or batch calls.","Arbitrage is only profitable if you account for gas costs, slippage, and the time-lag between borrowing and lending. A 0.1% spread may evaporate after gas."],"references":[{"url":"https://docs.compound.finance","kind":"docs","label":"Compound v3 Docs"},{"url":"https://docs.aave.com/developers/v/2.0/","kind":"docs","label":"Aave v3 Protocol Docs"},{"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://github.com/compound-finance/comet","kind":"repo","label":"Compound v3 GitHub (Comet contract)"},{"url":"https://github.com/aave/aave-v3-core","kind":"repo","label":"Aave v3 GitHub (LendingPool)"}],"time_estimate_hours":8,"projects":{"slug":"compound","is_active":true},"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":"fe7cae38-1d20-4068-828d-0986b3e03c57","project_id":"28a4baad-2d57-46e2-bb8e-c6ba1a215e75","title":"AI Risk Brief Generator for Aave Markets","pitch":"Pick an Aave market, get a one-page risk summary in seconds. The tool pulls live settings (LTV, oracle setup, isolation mode) and recent governance changes, then writes a clear assessment.","difficulty":"1-2 weeks","use_case":"security","build_with":["openrouter","nextjs","the-graph"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:18.89087+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a tool that fetches Aave market data (loan-to-value ratios, liquidation thresholds, oracle addresses, isolation mode status) and recent governance votes, then uses AI to write a one-page risk profile. Risk managers, auditors, and governance participants use it to understand market safety without manual work.","learn_first":["Aave v3 market architecture and reserve configuration","ERC-20 oracle patterns and Chainlink price feeds","The Graph subgraph querying for on-chain events","LLM prompt engineering for structured output (JSON schema)","Cross-chain RPC calls and chain-specific contract ABIs"],"tech_stack":{"ai":["OpenRouter (Claude or GPT-4)"],"data":["Chainlink price feeds","Aave governance snapshot"],"infra":["Vercel or similar Node.js hosting"],"other":["ethers.js or viem for contract reads"],"wallet":[],"indexer":["The Graph (Aave subgraph)"],"frontend":["Next.js","React","TailwindCSS","wagmi","viem"],"contracts":["Aave Pool (v3)","Aave Oracle","Aave Governance"]},"build_steps":["Set up Next.js project with TypeScript; install wagmi, viem, and openrouter SDK.","Create a chain selector and market picker UI (dropdown or search) using Aave's deployed reserve list from docs.","Write a viem client to fetch reserve configuration from Aave Pool contract (LTV, liquidationThreshold, decimals, oracle address) on selected chain.","Query The Graph's Aave subgraph to fetch recent governance proposals and votes affecting the selected market (or all markets on that chain).","Fetch current oracle price and historical volatility (7d, 30d) via Chainlink feeds or aggregator API; store in local cache to avoid rate limits.","Compose a structured prompt for OpenRouter that includes: reserve config, oracle setup, recent governance changes, and volatility context; request JSON output with risk_level, key_risks, and summary_paragraph fields.","Build a results page that displays the AI-generated risk brief, raw config data in a collapsible section, and links to Aave governance and market pages.","Deploy to Vercel; test across all 6 chains (Ethereum, Arbitrum, Optimism, Base, Polygon, Avalanche) with 3–5 sample markets per chain."],"gotchas":["Aave's oracle setup varies by chain and market; some use Chainlink, others use custom oracles. Always read the oracle address from the contract, not from docs.","The Graph subgraph may lag 1–2 blocks behind chain tip; cache results for 5–10 minutes to avoid stale data and unnecessary queries.","LLM latency can be 2–5 seconds; add a loading state and consider queuing requests if multiple users hit the tool simultaneously.","Governance proposals are stored off-chain (Snapshot); you'll need to fetch from Snapshot API or rely on indexed events; not all governance changes are reflected in on-chain reserve config immediately.","Cross-chain RPC rate limits vary; use a rate-limited viem client and consider batching reads with multicall contracts to reduce call count."],"references":[{"url":"https://docs.aave.com/","kind":"docs","label":"Aave v3 Documentation"},{"url":"https://github.com/aave/aave-v3-core","kind":"repo","label":"Aave Protocol Contracts (GitHub)"},{"url":"https://thegraph.com/hosted-service/subgraph/aave/protocol-v3","kind":"tool","label":"The Graph Aave Subgraph"},{"url":"https://docs.chain.link/data-feeds/price-feeds","kind":"docs","label":"Chainlink Price Feeds"},{"url":"https://openrouter.ai/docs","kind":"docs","label":"OpenRouter API Docs"},{"url":"https://snapshot.org/#/aave.eth","kind":"tool","label":"Aave Governance (Snapshot)"}],"time_estimate_hours":80,"projects":{"slug":"aave","is_active":true},"project_slug":"aave","project":{"slug":"aave","name":"Aave V3","logo_url":"https://icons.llamao.fi/icons/protocols/aave-v3?w=64&h=64","category":"lending"}},{"id":"6c100ce7-3115-45b7-b929-09e3a1b8b8d0","project_id":"28a4baad-2d57-46e2-bb8e-c6ba1a215e75","title":"GHO Yield Optimizer","pitch":"A bot that automatically moves your GHO to whichever venue pays the most right now—Merkl, sGHO staking, or Curve pools—and rebalances when rates change.","difficulty":"1-2 weeks","use_case":"yield","build_with":["nextjs","foundry","merkl-api","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:18.603036+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Deposit GHO once and the bot routes it to the highest-paying venue, rebalancing automatically when rates shift. It watches real-time returns across Merkl (reward programs), sGHO staking, and Curve pools, then moves your funds when the difference is worth it. Built for GHO holders who want yield without manually checking rates.","learn_first":["ERC-4626 vault pattern","Aave v3 GHO mechanics","Merkl rewards distribution","Curve stable-swap AMM math","The Graph subgraph queries"],"tech_stack":{"data":["Merkl API for live APY","Aave protocol data provider contract","Curve pool data via on-chain calls"],"infra":["Vercel or similar for Next.js","Foundry for local testing","Alchemy or Infura RPC"],"other":["OpenZeppelin Contracts (ERC-4626 base)"],"wallet":["Privy or RainbowKit for user auth"],"indexer":["The Graph (Aave subgraph)","Merkl API (rewards endpoint)"],"frontend":["Next.js 14+","wagmi","viem","RainbowKit","Ethers.js for contract calls"],"contracts":["ERC-4626 (vault wrapper)","Aave GHO token (ERC-20)","Curve StableSwap interface"]},"build_steps":["Set up Foundry project with ERC-4626 vault scaffold; inherit from OpenZeppelin's ERC4626 and implement deposit/withdraw/redeem hooks.","Create a data aggregator service in Next.js API routes that fetches real-time APY from Merkl API, queries Aave protocol data provider for sGHO APY, and calculates Curve pool yield via on-chain calls.","Implement rebalancing logic: compare APYs across venues, compute gas cost vs. yield gain, and emit rebalance signals when spread exceeds threshold (e.g., 0.5% APY delta).","Write vault strategy contract that holds GHO and routes deposits to the highest-APY venue via low-level calls; use try-catch to handle Curve/Aave interaction failures gracefully.","Build Next.js UI: connect wallet via RainbowKit, display current APY by venue, show user's GHO balance and vault position, and allow manual rebalance triggers.","Deploy vault to testnet (Sepolia or Arbitrum Sepolia); test deposit/withdraw/rebalance flows end-to-end with mock APY data.","Set up a keeper bot (Chainlink Automation or simple cron) to call the rebalance function on-chain every 6–12 hours; log APY snapshots to a database for analytics.","Deploy to mainnet (Ethereum or Arbitrum); seed with test GHO and monitor for 48 hours; iterate on rebalance threshold and gas optimization."],"gotchas":["Merkl API rate limits and data freshness: cache APY snapshots locally and refresh every 5–10 minutes, not on every request.","Curve pool liquidity and slippage: large GHO moves can shift the pool price; simulate swaps via Curve's get_dy before committing, and set a max slippage tolerance (e.g., 0.1%).","sGHO staking cooldown: Aave's sGHO may have unstaking delays; account for lock-up periods in rebalance logic to avoid trapping capital mid-rebalance.","Gas costs can exceed yield gains on small positions: set a minimum vault deposit size (e.g., 1000 GHO) and rebalance only when spread justifies the cost.","Merkl incentive campaigns are time-limited: monitor campaign end dates and pre-emptively rebalance out before rewards dry up."],"references":[{"url":"https://docs.aave.com/developers/tokens/gho","kind":"docs","label":"Aave GHO Documentation"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://docs.merkl.xyz/","kind":"docs","label":"Merkl API & Rewards"},{"url":"https://github.com/curvefi/curve-contracts","kind":"repo","label":"Curve StableSwap Contracts"},{"url":"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC4626.sol","kind":"repo","label":"OpenZeppelin ERC-4626 Implementation"},{"url":"https://docs.aave.com/developers/core-contracts/aaveprotocoldataprovider","kind":"docs","label":"Aave Protocol Data Provider"}],"time_estimate_hours":80,"projects":{"slug":"aave","is_active":true},"project_slug":"aave","project":{"slug":"aave","name":"Aave V3","logo_url":"https://icons.llamao.fi/icons/protocols/aave-v3?w=64&h=64","category":"lending"}},{"id":"10f21b01-66f1-4810-b1b8-26a7276c188b","project_id":"28a4baad-2d57-46e2-bb8e-c6ba1a215e75","title":"Aave Position Health Bot","pitch":"Telegram bot that alerts you when your Aave lending position gets close to liquidation (forced sale). Just add your wallet address and set a threshold—no signup needed.","difficulty":"weekend","use_case":"security","build_with":["telegram-bot-api","viem","node"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:15.226965+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Telegram bot that watches your Aave lending positions and sends instant alerts when your health factor (safety score) drops below your chosen level. You provide your wallet address and set a threshold like 1.5, then get notified before liquidation happens. It works across all major Aave chains (Ethereum, Arbitrum, Optimism, Base, Polygon, Avalanche).","learn_first":["Aave v3 health factor calculation (collateral × LTV - borrows)","ERC-20 token decimals and price oracle patterns","Telegram Bot API polling vs webhooks","RPC rate limits and batch calls with viem"],"tech_stack":{"ai":[],"data":["viem for RPC calls","Aave Protocol Data Provider ABI"],"infra":["Node.js runtime","SQLite or JSON file for user storage"],"other":["node-telegram-bot-api library"],"wallet":[],"indexer":[],"frontend":["Telegram Bot API"],"contracts":["Aave ProtocolDataProvider (read-only)","Aave PriceOracle (for asset prices)"]},"build_steps":["Set up a Node.js project with viem and node-telegram-bot-api; create a .env file for Telegram token and RPC endpoints for each chain.","Fetch the Aave ProtocolDataProvider contract ABI from Aave GitHub and instantiate it using viem's publicClient for each chain.","Build a function that takes a wallet address and returns: total collateral USD, total borrows USD, and current health factor by calling getAccountData() on ProtocolDataProvider.","Create a Telegram bot command /start that prompts users to send their wallet address; store it in a simple JSON file or SQLite table with a default threshold (e.g., 1.5).","Implement a polling loop (every 60–120 seconds) that iterates over all stored wallets, fetches their health factor, and compares against their threshold.","When health factor drops below threshold, send a Telegram message with the wallet, current health factor, and a link to Aave dashboard; include a /unsubscribe command.","Add /set_threshold command so users can adjust their alert level; validate input (1.0–2.5 range).","Deploy to a free tier service (Railway, Render, or a home server) and test with a test wallet on Aave testnet or mainnet."],"gotchas":["Health factor calculation requires accurate token prices; Aave's PriceOracle may return stale prices during market volatility—consider adding a secondary price feed check or warning users of potential delays.","RPC rate limits: polling every 60 seconds across multiple chains can hit free tier limits quickly; batch requests per chain and consider using a paid RPC endpoint (Alchemy, Infura) or Aave's public RPC.","Telegram Bot API has a 30-second timeout; if your health factor calculation takes >5 seconds, users will see 'bot not responding'—cache results and respond asynchronously.","Aave v3 has different configurations per chain (different tokens, LTV values, liquidation thresholds); hardcode or fetch the correct ProtocolDataProvider address for each chain to avoid cross-chain errors."],"references":[{"url":"https://docs.aave.com/developers/core-contracts/protocoldataprovider","kind":"docs","label":"Aave Protocol Data Provider Docs"},{"url":"https://github.com/aave/aave-v3-core","kind":"repo","label":"Aave v3 Contracts GitHub"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://github.com/yagop/node-telegram-bot-api","kind":"repo","label":"node-telegram-bot-api"},{"url":"https://docs.aave.com/faq/borrowing-and-earning#what-is-the-health-factor","kind":"docs","label":"Aave Health Factor Explanation"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Decimals & Price Oracle Pattern"}],"time_estimate_hours":6,"projects":{"slug":"aave","is_active":true},"project_slug":"aave","project":{"slug":"aave","name":"Aave V3","logo_url":"https://icons.llamao.fi/icons/protocols/aave-v3?w=64&h=64","category":"lending"}},{"id":"6afd93c7-abe7-4568-a69c-9510d24ea988","project_id":"bb71d2bf-eeed-4a93-bb53-b62b26d18c3a","title":"Hyperliquid Market-Making Backtester","pitch":"Test market-making strategies against real Hyperliquid trade history to find which markets are most profitable before risking money.","difficulty":"1+ month","use_case":"analytics","build_with":["python","polars","hyperliquid-data"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:12:06.007591+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a tool that replays historical Hyperliquid trades to simulate how a market-making strategy would have performed. Feed in trade data, set your strategy rules (how to place orders, manage inventory), and get back profit, risk metrics (Sharpe ratio, max loss), and charts. Quant traders use this to decide which markets to trade on.","learn_first":["Market microstructure and orderbook mechanics","Time-series analysis and rolling statistics","Monte Carlo simulation for strategy robustness","Hyperliquid API architecture and data formats"],"tech_stack":{"data":["Hyperliquid WebSocket API","Parquet or DuckDB for historical storage","Polars for vectorized computation"],"infra":["Python 3.11+","Pandas/Polars for dataframes","NumPy for numerical operations"],"other":["Plotly or Matplotlib for visualization","SQLite or DuckDB for metadata","Pydantic for config validation"]},"build_steps":["Set up a Python project with Polars, NumPy, and Pydantic; define config schema for strategy parameters (spread, inventory limits, order size).","Connect to Hyperliquid WebSocket API (wss://api.hyperliquid.xyz/ws) and stream raw trade data; log to Parquet files partitioned by date and asset.","Parse trade events into a normalized schema: timestamp, symbol, side, price, size, maker/taker; validate and deduplicate.","Reconstruct orderbook state by replaying trades in order; maintain bid/ask levels and sizes; validate against known snapshots if available.","Implement a basic MM strategy: place limit orders at mid ± spread, track fills, rebalance inventory, compute realized PnL per trade.","Backtest the strategy over a rolling window (e.g., 1 week at a time); compute metrics: total PnL, Sharpe ratio, max drawdown, win rate, inventory turnover.","Build a reporting layer: export results to CSV; generate Plotly dashboards showing equity curve, fill distribution, and per-market breakdown.","Add sensitivity analysis: sweep spread, order size, and inventory limits; identify optimal parameters for each market."],"gotchas":["Hyperliquid's orderbook is sparse and fast-moving; you must handle partial fills, order rejections, and latency realistically or backtest results will be wildly optimistic.","Historical data availability: Hyperliquid does not publish a free, complete trade history archive. You may need to run your own archival bot for weeks/months or negotiate data access; plan accordingly.","Slippage and execution: backtesting assumes instant fills at limit price, but real MM strategies often face adverse selection and partial fills. Build in a realistic fill model (e.g., probability of fill based on queue position).","Market regime changes: strategies that work well in bull markets may blow up in flash crashes or low-liquidity periods. Always test across multiple market conditions and include stress scenarios.","Hyperliquid's fee structure and rebate tiers change; ensure your backtest accounts for maker/taker fees and any volume-based rebates that affect net PnL."],"references":[{"url":"https://hyperliquid.gitbook.io","kind":"docs","label":"Hyperliquid API Documentation"},{"url":"https://github.com/hyperliquid-dex","kind":"repo","label":"Hyperliquid GitHub"},{"url":"https://www.jstor.org/stable/2696464","kind":"article","label":"Market Microstructure: Confronting Many Micros with One Macro"},{"url":"https://docs.polearsdb.com","kind":"docs","label":"Polars DataFrame Library"},{"url":"https://www.backtrader.com","kind":"tool","label":"Backtrader: Event-Driven Backtesting Framework"}],"time_estimate_hours":160,"projects":{"slug":"hyperliquid","is_active":true},"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":"20f1228b-37c9-4c95-875a-fe3a6ab9ca13","project_id":"55baa3c9-9f57-489b-b151-773b86e5459d","title":"Aerodrome LP Tax Tracker","pitch":"Track your cost basis and gains for every Aerodrome LP position. Connect your wallet, see USD values at each deposit and withdrawal, export to CSV for taxes.","difficulty":"weekend","use_case":"analytics","build_with":["nextjs","viem","supabase","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:45.542149+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web app that reads your wallet's Aerodrome LP history from the blockchain, calculates what you paid for each position using historical prices, and shows your gains or losses when you withdraw. Exports everything as a CSV file for tax filing.","learn_first":["ERC-20 token standards and LP token mechanics","Aerodrome's gauge and pool architecture","Historical price data APIs (Coingecko, CoinMarketCap)","CSV export patterns in JavaScript","Cost basis accounting (FIFO vs average cost)"],"tech_stack":{"data":["Supabase (cache cost basis, user settings)","CoinGecko API (free tier for historical prices)","Aerodrome subgraph queries"],"infra":["Vercel (Next.js hosting)","Supabase PostgreSQL"],"other":["papaparse (CSV generation)","date-fns (timestamp handling)"],"wallet":["wagmi hooks","viem PublicClient"],"indexer":["Ponder (for event indexing)","The Graph (Aerodrome subgraph on Base)"],"frontend":["Next.js 14+","wagmi 2.x","viem 2.x","RainbowKit or Privy (wallet connection)","TanStack Query (for caching price data)","shadcn/ui or Tailwind CSS"],"contracts":["Aerodrome Router (0x4b0Ee0334d26De56e3c3562b76d692AB2B2D8b9D)","Aerodrome Pool factory"]},"build_steps":["Set up Next.js 14 project with wagmi, viem, and RainbowKit; scaffold pages for connect wallet, positions list, and export.","Create a Supabase schema: users table (wallet address), positions table (pool, amount, tx_hash, block_time, tx_type), price_cache table (token, timestamp, usd_price).","Write a viem PublicClient function to fetch Aerodrome Mint/Burn events for the connected wallet from the Aerodrome Router contract; store raw events in Supabase.","Integrate CoinGecko API to fetch historical prices for each token pair at the exact block timestamp; cache results in Supabase to avoid rate limits.","Build a cost-basis calculator: for each Mint, record entry price; for each Burn, calculate realized gain/loss using FIFO or average-cost method; track unrealized gains on current positions.","Create a React component that displays all positions with entry date, entry price, current price, realized/unrealized P&L, and quantity.","Implement CSV export using papaparse: columns for pool, entry_date, entry_price, exit_date, exit_price, quantity, realized_gain_loss, current_value.","Test end-to-end with a testnet wallet or a known Base mainnet LP; validate prices against Aerodrome UI and CoinGecko."],"gotchas":["CoinGecko free tier has rate limits (~10 calls/sec); batch requests and cache aggressively in Supabase to avoid timeouts during large position histories.","Aerodrome uses wrapped tokens (WETH, USDC); ensure token address resolution handles both wrapped and unwrapped forms, and that price feeds exist for all pairs.","Block timestamps can be off by a few seconds; use the block time from the event log, not the current time, to fetch historical prices.","LP token burns may not always represent a full exit; Aerodrome positions can be partially withdrawn; track cumulative quantity and cost basis per pool separately.","If a user has swapped or compounded rewards within the LP position, the cost basis calculation becomes complex; document the assumption (simple deposit/withdraw tracking only) upfront."],"references":[{"url":"https://aerodrome.finance/docs","kind":"docs","label":"Aerodrome Finance Docs"},{"url":"https://github.com/aerodrome-finance","kind":"repo","label":"Aerodrome GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Token Standard"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Documentation"},{"url":"https://docs.coingecko.com/reference/introduction","kind":"docs","label":"CoinGecko API Docs"},{"url":"https://supabase.com/docs/guides/getting-started","kind":"docs","label":"Supabase Quickstart"}],"time_estimate_hours":12,"projects":{"slug":"aerodrome","is_active":true},"project_slug":"aerodrome","project":{"slug":"aerodrome","name":"Aerodrome","logo_url":"https://icons.llamao.fi/icons/protocols/aerodrome-slipstream?w=64&h=64","category":"dex"}},{"id":"bc2b080e-f45c-4576-b100-078fa454d649","project_id":"55baa3c9-9f57-489b-b151-773b86e5459d","title":"AERO Bribe ROI Dashboard","pitch":"Shows each protocol's actual return on bribes paid to Aerodrome—how much liquidity and fees they gained versus what they spent.","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:11:44.724525+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A dashboard that tracks bribe spending on Aerodrome (a DEX incentive system) and measures the return: fees earned divided by bribes spent. Protocols waste millions on bribes without knowing if they work. This tool pulls bribe data from Aerodrome's contracts, pairs it with liquidity and volume metrics, and lets users compare ROI across pools and time periods.","learn_first":["Aerodrome's gauge and bribe contract architecture","Velodrome V2 mechanics (gauges, ve-tokenomics, bribe distribution)","The Graph subgraph indexing patterns for DEX data","ERC-20 transfer tracking and event parsing"],"tech_stack":{"data":["Aerodrome on-chain events","The Graph API (GraphQL)"],"infra":["Vercel"],"indexer":["The Graph (Aerodrome subgraph)"],"frontend":["Next.js","React","TailwindCSS","Recharts or Chart.js for ROI visualization"],"contracts":["Aerodrome Gauge (voting incentives)","Aerodrome Bribe contract"]},"build_steps":["Set up Next.js project with TypeScript and TailwindCSS; scaffold pages for dashboard, protocol detail, and epoch comparison.","Query The Graph's Aerodrome subgraph (or write a custom subgraph if needed) to fetch: bribe amounts per epoch, protocol, and gauge; liquidity depth and volume per pool per epoch.","Create a data aggregation layer that calculates ROI = (fees earned in epoch / bribes paid in epoch) for each protocol-pool pair; store in React state or lightweight cache.","Build the main dashboard grid showing top protocols by bribe spend, sorted by ROI; include columns for total bribes, avg ROI, pools targeted, and epoch count.","Implement protocol detail page that shows bribe history over time, pool-by-pool breakdown, and a chart comparing bribe spend vs liquidity depth and volume.","Add epoch selector (dropdown or date range) to filter data; allow users to compare ROI across different epochs and identify seasonal trends.","Integrate Recharts or Chart.js to visualize: bribe spend vs fees earned over time, ROI distribution by protocol, and pool concentration heatmap.","Deploy to Vercel; set up environment variables for The Graph API endpoint and Aerodrome contract addresses."],"gotchas":["Bribe distribution may lag by 1–2 epochs; clarify in UI whether you're showing pending or settled bribes to avoid confusion.","Fees earned calculation depends on accurate pool volume and fee-tier data from The Graph; if the subgraph is behind, ROI will be stale—consider adding a 'last updated' timestamp.","Some protocols may not report bribes on-chain consistently; cross-check with Aerodrome's official bribe leaderboard to validate your data.","Gas fees and slippage are not factored into ROI; protocols may need context that this is a simplified metric (fees earned / bribes paid, not net profit)."],"references":[{"url":"https://aerodrome.finance/docs","kind":"docs","label":"Aerodrome Finance Docs"},{"url":"https://github.com/aerodrome-finance","kind":"repo","label":"Aerodrome GitHub"},{"url":"https://thegraph.com/docs/en/","kind":"docs","label":"The Graph Documentation"},{"url":"https://docs.velodrome.finance/","kind":"docs","label":"Velodrome V2 Mechanics (Base for Aerodrome)"},{"url":"https://recharts.org/","kind":"docs","label":"Recharts Documentation"}],"time_estimate_hours":16,"projects":{"slug":"aerodrome","is_active":true},"project_slug":"aerodrome","project":{"slug":"aerodrome","name":"Aerodrome","logo_url":"https://icons.llamao.fi/icons/protocols/aerodrome-slipstream?w=64&h=64","category":"dex"}},{"id":"9f308726-d22e-42b1-9e9f-a789083055b2","project_id":"55baa3c9-9f57-489b-b151-773b86e5459d","title":"Auto-Rebalance Aerodrome Slipstream Positions","pitch":"A bot that automatically rebalances your concentrated liquidity positions on Aerodrome when prices drift outside your chosen range, using custom risk settings.","difficulty":"1-2 weeks","use_case":"automation","build_with":["foundry","gelato","nextjs","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:43.283509+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an automation tool that watches Aerodrome Slipstream (concentrated liquidity) positions and rebalances them when the asset price moves outside user-set bands. Users define when to rebalance (e.g., at 110% of entry price) and max slippage (e.g., 0.5%), then the bot uses Gelato (automation service) to execute swaps and keep positions in range. This saves active liquidity providers from constant manual monitoring on Base.","learn_first":["Uniswap V3 concentrated liquidity mechanics (Slipstream is a Velodrome fork of V3)","Aerodrome Slipstream contract interface and position tracking","Gelato automation triggers and task execution","ERC-721 position token (NFT) transfers and approvals"],"tech_stack":{"data":["Aerodrome subgraph or Ponder indexer for position state"],"infra":["Gelato Web3 Functions for automation","Base RPC (Alchemy or Infura)"],"other":["OpenZeppelin Contracts for standard patterns"],"wallet":["viem publicClient + walletClient"],"indexer":["Ponder or The Graph (optional, for position history)"],"frontend":["Next.js","viem","RainbowKit or Privy for wallet connection"],"contracts":["Solidity (Foundry)","Aerodrome Slipstream core contracts"]},"build_steps":["Set up Foundry project with Aerodrome Slipstream contract ABIs (NonfungiblePositionManager, SwapRouter02, Slipstream core); create test environment on Base Sepolia or fork.","Write a Solidity helper contract that: (a) checks if a position is out of range using Slipstream's tickLower/tickUpper and current tick, (b) calculates rebalance amounts, (c) executes the rebalance via burn + mint or direct swap + re-mint.","Create a Gelato Web3 Function (JavaScript/TypeScript) that: (a) queries position state via viem, (b) compares current price to user thresholds, (c) returns true if rebalance needed, (d) encodes the rebalance call.","Build a Next.js dashboard where users can: (a) connect wallet (RainbowKit), (b) paste their Slipstream position ID, (c) set rebalance bands (e.g., ±10% from entry), (d) set max slippage and gas price limits.","Implement viem client calls to: (a) fetch position details from NonfungiblePositionManager, (b) simulate the rebalance transaction, (c) display estimated output and gas cost.","Deploy the Gelato task via Gelato SDK; store task ID in Next.js backend (Supabase or similar) linked to user wallet + position ID.","Write integration tests in Foundry: mock out-of-range scenarios, verify rebalance logic, test slippage guards.","Deploy helper contract to Base, integrate with Gelato, and run a live test with a small position on Base mainnet or testnet."],"gotchas":["Slipstream positions are ERC-721 NFTs; ensure your contract has approval or the user grants approval before attempting rebalance. Gelato execution happens from a different address, so you may need a delegated approval pattern or a proxy.","Rebalancing burns the old position and mints a new one, which changes the position ID. Track this carefully in your UI and Gelato task state; consider storing historical position IDs.","Price oracles: Slipstream uses TWAP internally, but Gelato Web3 Functions run off-chain. Fetch price from Aerodrome's oracle or a Chainlink feed to avoid stale data; verify the price is fresh before triggering.","Gas costs for rebalancing on Base are low but not free. If the position is small, rebalance fees may exceed LP gains. Set a minimum position size or allow users to batch multiple positions.","Slippage during rebalance can be high if liquidity is thin or if you rebalance at market peak. Always simulate and enforce a max slippage parameter; consider using flash swaps or splitting the swap across multiple pools."],"references":[{"url":"https://aerodrome.finance/docs","kind":"docs","label":"Aerodrome Slipstream Docs"},{"url":"https://docs.uniswap.org/concepts/protocol/concentrated-liquidity","kind":"docs","label":"Uniswap V3 Concentrated Liquidity"},{"url":"https://docs.gelato.network/web3-functions","kind":"docs","label":"Gelato Web3 Functions"},{"url":"https://book.getfoundry.sh/","kind":"docs","label":"Foundry Book"},{"url":"https://viem.sh/","kind":"docs","label":"viem Documentation"},{"url":"https://github.com/aerodrome-finance","kind":"repo","label":"Aerodrome GitHub"}],"time_estimate_hours":80,"projects":{"slug":"aerodrome","is_active":true},"project_slug":"aerodrome","project":{"slug":"aerodrome","name":"Aerodrome","logo_url":"https://icons.llamao.fi/icons/protocols/aerodrome-slipstream?w=64&h=64","category":"dex"}},{"id":"24006aed-fc76-4929-b976-5c8a694dd896","project_id":"55baa3c9-9f57-489b-b151-773b86e5459d","title":"Base Liquidity Network Map","pitch":"Visualize all Aerodrome pools as a network graph to spot which tokens are gaining liquidity fastest on Base.","difficulty":"1-2 weeks","use_case":"analytics","build_with":["nextjs","d3","the-graph"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:38.839693+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build an interactive map showing Aerodrome pools (liquidity pools on Base) as connected nodes. Filter by total value locked (TVL, the dollar amount in a pool), trading volume, or token type. Users can zoom into clusters and see which tokens are accumulating liquidity quickly. Updates hourly from The Graph (a blockchain data service). Useful for liquidity providers (people who deposit funds to earn fees), traders tracking where money is flowing, and researchers studying Base's token ecosystem.","learn_first":["Aerodrome pool structure and fee tiers","The Graph subgraph querying and pagination","D3 force-directed graph layout and performance tuning","Network graph UX patterns (zoom, pan, hover tooltips)"],"tech_stack":{"data":["Apollo Client (GraphQL)"],"infra":["Vercel"],"indexer":["The Graph (Aerodrome subgraph)"],"frontend":["Next.js","D3.js","wagmi","viem","RainbowKit"]},"build_steps":["Set up Next.js project with TypeScript; install d3, wagmi, viem, and Apollo Client.","Query The Graph's Aerodrome subgraph for all pools: fetch pool address, token0, token1, reserve0, reserve1, and 24h volume. Paginate to handle 1000+ pools.","Normalize pool data into a node-edge graph: each token is a node; each pool is an edge weighted by liquidity (reserve0 * price + reserve1 * price).","Implement D3 force-directed layout with collision detection to prevent node overlap; render as SVG or Canvas depending on pool count.","Add interactivity: click pools to show details (APR, fees, recent swaps), filter by TVL range or token type, search by symbol.","Wire wallet connection (RainbowKit) to let users click through to swap on Aerodrome directly from the graph.","Set up hourly data refresh via Next.js API route that re-queries The Graph and broadcasts updates to clients (consider WebSocket or polling).","Deploy to Vercel; test with 2000+ pools to ensure D3 rendering stays under 60fps."],"gotchas":["The Graph's Aerodrome subgraph may lag 1–2 blocks; document freshness in UI. Confirm subgraph is actively maintained and covers all pool types (stable, volatile).","D3 force simulation can freeze the browser with 2000+ nodes on first render; use Canvas rendering or cluster nodes by liquidity tier to reduce draw calls.","Token prices from reserves alone are unreliable for small/illiquid pools; consider fetching Chainlink or Pyth price feeds for stablecoins and major tokens to weight edges accurately.","Aerodrome pool metadata (name, symbol) may not be standardized; handle missing or malformed token data gracefully."],"references":[{"url":"https://thegraph.com/hosted-service/subgraph/aerodrome-finance/aerodrome-base","kind":"docs","label":"The Graph Aerodrome Subgraph"},{"url":"https://aerodrome.finance/docs","kind":"docs","label":"Aerodrome Pool Architecture Docs"},{"url":"https://observablehq.com/@d3/force-directed-graph","kind":"article","label":"D3 Force-Directed Graph Example"},{"url":"https://wagmi.sh/react/getting-started","kind":"docs","label":"wagmi + viem Setup Guide"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Integration"},{"url":"https://github.com/aerodrome-finance","kind":"repo","label":"Aerodrome GitHub"}],"time_estimate_hours":80,"projects":{"slug":"aerodrome","is_active":true},"project_slug":"aerodrome","project":{"slug":"aerodrome","name":"Aerodrome","logo_url":"https://icons.llamao.fi/icons/protocols/aerodrome-slipstream?w=64&h=64","category":"dex"}},{"id":"6afa3f00-fdc1-468a-81c3-40049ce0cd9f","project_id":"c0fc85e8-837a-4f9a-aa2b-103e04fb83fd","title":"Bribe Marketplace for Velodrome Gauges","pitch":"Post incentives in any token to attract votes on Velodrome (a liquidity protocol). Protocols get an easier way to bootstrap liquidity on Optimism.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["foundry","nextjs","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:33.182756+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A marketplace where protocols and liquidity providers post token rewards to attract votes on Velodrome gauges. Users browse available incentives, see the expected returns, and claim rewards after each voting period. This makes it easier for projects to attract liquidity without complex coordination.","learn_first":["Velodrome ve(3,3) mechanics and gauge voting","ERC-20 token standards and approvals","Chainlink price feeds for bribe APY calculation","The Graph subgraph indexing for gauge and bribe data"],"tech_stack":{"data":["Chainlink price feeds (for token-to-USD conversion)","Velodrome on-chain state (gauges, emissions)"],"infra":["Vercel (frontend)","Alchemy or Infura (RPC)"],"other":["IPFS (optional, for bribe metadata)"],"wallet":["RainbowKit","Privy (optional, for email login)"],"indexer":["The Graph (subgraph for gauges, bribes, votes)"],"frontend":["Next.js","wagmi v2+","viem","RainbowKit","ethers.js for contract interaction"],"contracts":["Solidity 0.8.x","ERC-20 (token transfers)","Velodrome IGauge interface"]},"build_steps":["Set up Foundry project with Velodrome interfaces (IGauge, IVoter, IVelodromeRouter) and write a BribeMarketplace contract that accepts ERC-20 deposits, stores bribe metadata (token, amount, gauge, epoch), and emits events for indexing.","Deploy a minimal subgraph to The Graph that indexes BribeCreated, BribeClaimed, and gauge voting events from Velodrome core contracts; track active bribes per gauge and cumulative bribe amounts.","Scaffold Next.js app with wagmi hooks for wallet connection (RainbowKit) and set up pages: /bribes (list all active bribes), /bribes/[id] (detail + claim UI), /create (post new bribe).","Build the /bribes page with a table showing gauge name, bribe token, amount, APY (using Chainlink price feed), and voting power required; fetch data from subgraph.","Implement bribe creation flow: user selects gauge, enters token address and amount, approves ERC-20 transfer, and calls BribeMarketplace.createBribe(); store metadata (description, duration) in contract events or IPFS.","Add claim logic: after epoch ends, users call BribeMarketplace.claimBribe() if they voted for that gauge; contract verifies vote via Velodrome's voting history and transfers reward.","Integrate Chainlink price feeds to calculate real-time APY: fetch token price, divide bribe amount by gauge TVL (from subgraph), annualize for the epoch duration.","Deploy BribeMarketplace to Optimism testnet, verify subgraph indexes correctly, test end-to-end flow (create bribe → vote → claim), then deploy to mainnet."],"gotchas":["Velodrome epochs are fixed-length (typically 1 week); bribes must be claimed *after* the epoch ends and votes are finalized. Build a countdown timer and queue claim transactions for post-epoch.","Gauge TVL and voting power can shift mid-epoch; APY calculations are estimates. Display a disclaimer and recalculate on-page load to keep numbers fresh.","ERC-20 approvals: users must approve the BribeMarketplace contract to spend tokens before creating a bribe. Use permit() if the token supports EIP-2612 to reduce friction.","Velodrome's IGauge interface may vary across gauges (stable vs volatile). Test against both gauge types and handle edge cases in reward calculation."],"references":[{"url":"https://velodrome.finance/docs","kind":"docs","label":"Velodrome Finance Docs"},{"url":"https://github.com/velodrome-finance","kind":"repo","label":"Velodrome GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-20","kind":"docs","label":"ERC-20 Standard"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Docs"},{"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":80,"projects":{"slug":"velodrome","is_active":true},"project_slug":"velodrome","project":{"slug":"velodrome","name":"Velodrome","logo_url":"https://icons.llamao.fi/icons/protocols/velodrome-v3?w=64&h=64","category":"dex"}},{"id":"7bf44374-d65d-47c7-8545-61c5fb976e3d","project_id":"c0fc85e8-837a-4f9a-aa2b-103e04fb83fd","title":"Predict Velodrome Emissions Next Epoch","pitch":"Analyzes past voting patterns to forecast which Velodrome pools will get the most rewards next epoch. Helps liquidity providers (people who deposit funds to earn fees) pick high-yield pools early.","difficulty":"1+ month","use_case":"analytics","build_with":["python","the-graph","fastapi","pandas"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:32.35007+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A tool that studies historical voting data to predict where Velodrome rewards will flow in the next period. It pulls on-chain voting records, spots voting trends, and shows predictions via an API. Liquidity providers use it to move funds to the right pools before rewards shift and capture better returns.","learn_first":["ve(3,3) tokenomics and gauge voting mechanics","Velodrome's voting escrow contract and epoch cycles","The Graph subgraph querying for on-chain voting data","Time-series forecasting with ARIMA or Prophet","REST API design and deployment"],"tech_stack":{"data":["pandas","scikit-learn or statsmodels for ARIMA/Prophet","numpy"],"infra":["FastAPI","Pydantic for data validation","uvicorn or Gunicorn"],"other":["Redis for caching predictions","APScheduler for epoch-triggered retraining"],"indexer":["The Graph (Velodrome subgraph)"]},"build_steps":["Set up a Python project with FastAPI, pandas, and statsmodels; scaffold a basic /predict endpoint","Query The Graph Velodrome subgraph to fetch 12–20 epochs of historical voting data (gauge votes, ve lock amounts, bribe distributions)","Clean and normalize the time-series data: aggregate votes per gauge, compute voting share, identify seasonal patterns","Train an ARIMA or Prophet model on each gauge's historical voting share to forecast next-epoch vote distribution","Implement a caching layer (Redis) to store predictions and avoid retraining on every request","Build a /forecast endpoint that returns predicted top-10 gauges by expected emissions, ranked by confidence","Deploy to a cloud provider (Railway, Render, or Fly.io) with scheduled retraining 1–2 hours before each epoch","Add a simple frontend dashboard (React + Recharts) to visualize predictions, confidence intervals, and historical accuracy"],"gotchas":["Velodrome's voting can be heavily influenced by large bribes in the final hours of an epoch—your model will lag if it doesn't account for bribe flows; consider fetching bribe data from Aura or Wombat's bribe aggregators","The Graph subgraph may have indexing delays; always query with a block offset to avoid stale data, and monitor the subgraph's sync status","Gauge emissions depend on ve lock-ups which can shift dramatically if major lockers exit or enter; your model needs a volatility adjustment or confidence score to reflect this","Training on only 20 epochs may overfit; use cross-validation and test on held-out epochs to validate generalization","Velodrome's epoch timing is fixed but can be disrupted by L2 sequencer downtime; build in error handling for missed predictions"],"references":[{"url":"https://velodrome.finance/docs","kind":"docs","label":"Velodrome Finance Docs"},{"url":"https://github.com/velodrome-finance","kind":"repo","label":"Velodrome GitHub"},{"url":"https://thegraph.com/docs/en/querying/querying-the-graph/","kind":"docs","label":"The Graph Query API"},{"url":"https://www.statsmodels.org/stable/generated/statsmodels.tsa.arima.model.ARIMA.html","kind":"docs","label":"Statsmodels ARIMA Documentation"},{"url":"https://fastapi.tiangolo.com/","kind":"docs","label":"FastAPI Official Guide"},{"url":"https://velodrome.finance/docs/protocol/gauge-voting","kind":"docs","label":"Velodrome Gauge Voting Mechanics"}],"time_estimate_hours":160,"projects":{"slug":"velodrome","is_active":true},"project_slug":"velodrome","project":{"slug":"velodrome","name":"Velodrome","logo_url":"https://icons.llamao.fi/icons/protocols/velodrome-v3?w=64&h=64","category":"dex"}},{"id":"a5ad41c5-eb8d-4ac5-893e-c298f93c6005","project_id":"77ec101c-6994-40c9-81e8-514106141b86","title":"CoW Protocol SDK for Web2 Apps","pitch":"A lightweight SDK that lets any web app offer gasless swaps (trades without transaction fees) to users without requiring them to set up a crypto wallet.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["typescript","cow-sdk","permit2","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:17.247542+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a TypeScript SDK that handles swap orders and signing for CoW Protocol (a decentralized exchange). Web2 apps use it to add swaps as a feature without wallet friction. Target users: gaming studios, finance platforms, and SaaS tools.","learn_first":["EIP-712 typed data signing","Permit2 token approvals and signatures","CoW Protocol order anatomy (buyToken, sellToken, receiver, validTo)","Intent-based vs. transaction-based swaps","Batch auction mechanics and settlement"],"tech_stack":{"data":["CoW API (api.cow.fi)","CoW subgraph (optional, for order tracking)"],"other":["EIP-712 signing library"],"frontend":["TypeScript","viem","ethers.js (optional)"],"contracts":["Permit2 (0x000000000022D473030F116dFC393fb8C563bc08)"]},"build_steps":["Set up a minimal TypeScript project with viem and cow-sdk; scaffold a class CoWOrderMaker that accepts chain, token pair, and amount.","Implement order composition: build a createOrder() method that constructs a CoW order object with buyToken, sellToken, receiver, validTo, and appData fields.","Add Permit2 integration: create a getPermit2Signature() method that generates an EIP-712 signature for token approval without on-chain transactions.","Implement order signing: add a signOrder() method that uses viem's signTypedData to create an EIP-712 signature over the order struct.","Build order submission: create a submitOrder() method that posts the signed order to CoW's API endpoint and returns the order UID.","Add order status polling: implement a getOrderStatus() method that queries the CoW API to track settlement state (open, fulfilled, cancelled).","Write a simple demo: create a CLI or Next.js page that instantiates the SDK, signs an order, and submits it; log the order UID and settlement confirmation.","Test on testnet (Sepolia or Arbitrum Sepolia) with mock tokens or real test faucet tokens; verify order appears in CoW Explorer."],"gotchas":["Permit2 signatures are chain-specific; ensure the signer's nonce and token allowance state match before submission or orders will fail at settlement.","CoW orders have a validTo timestamp; if set too short, orders may expire before the next batch auction (typically 5–30 seconds); use a buffer like validTo = now + 5 minutes.","The order receiver field must be a valid address; if you want funds sent to a different address than the signer, ensure that address is set in the order, not derived later.","CoW API rate limits exist; batch multiple orders or implement exponential backoff if submitting high volume."],"references":[{"url":"https://docs.cow.fi","kind":"docs","label":"CoW Protocol Docs"},{"url":"https://github.com/cowprotocol/cow-sdk-js","kind":"repo","label":"CoW SDK (TypeScript)"},{"url":"https://github.com/Uniswap/permit2","kind":"repo","label":"Permit2 Specification"},{"url":"https://eips.ethereum.org/EIPS/eip-712","kind":"docs","label":"EIP-712: Typed structured data hashing and signing"},{"url":"https://api.cow.fi/docs","kind":"docs","label":"CoW API Reference"},{"url":"https://viem.sh/docs/actions/wallet/signTypedData","kind":"docs","label":"viem signTypedData"}],"time_estimate_hours":80,"projects":{"slug":"cow-swap","is_active":true},"project_slug":"cow-swap","project":{"slug":"cow-swap","name":"CoW Swap","logo_url":"https://icons.llamao.fi/icons/protocols/cow-protocol?w=64&h=64","category":"dex"}},{"id":"439687cb-9693-4b58-ad3e-32d4fd047767","project_id":"2c504c0b-3b4b-471b-b3b9-70834b3a073d","title":"Cross-chain Swap Builder with Conditions","pitch":"A UI for 1inch Fusion+ that lets you write swap orders across chains with rules—like \"only swap if price drops below X\". Solvers compete to fill your order fairly.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","1inch-fusion-sdk","viem","wagmi"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:08.639725+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build and submit cross-chain swap orders with conditions like price limits and time windows. Instead of hidden slippage, solvers (people who execute trades) compete openly to fill your order. For traders who need multi-chain swaps without losing money to hidden fees.","learn_first":["Fusion+ intent-based architecture and order lifecycle","ERC-7683 cross-chain intent standard","1inch API pricing and settlement flow","Solvers and competitive order filling","Cross-chain messaging (Stargate, LayerZero, or native bridges)"],"tech_stack":{"data":["1inch API (pricing, quotes, order submission)","Chain RPC endpoints (Ethereum, Arbitrum, Optimism, Base, Polygon, BSC)"],"infra":["Vercel for hosting","Alchemy or Infura for RPC endpoints","Redis (optional) for caching order state"],"other":["Zod for schema validation","Sentry for error tracking"],"wallet":["wagmi for wallet connection","RainbowKit or Privy for UX","ethers.js or viem for signing"],"indexer":["1inch API for order status polling","Subgraph queries for historical fills (optional)"],"frontend":["Next.js 14+ with App Router","React Hook Form for order composition","TanStack Query for order state management","Tailwind CSS + Headless UI","viem for transaction building and signing"],"contracts":["1inch Fusion+ contracts (read-only integration)","ERC-20 token approvals"]},"build_steps":["Set up Next.js 14 project with TypeScript, Tailwind, and wagmi/RainbowKit integration; scaffold pages for order builder, order history, and live orders.","Integrate 1inch Fusion+ SDK: install @1inch/fusion-sdk, configure for each supported chain, and implement quote fetching via 1inch API.","Build order composition form: input fields for source chain, token in, destination chain, token out, price threshold, time window, and slippage tolerance; validate with Zod.","Implement intent serialization: convert form inputs into ERC-7683 intent format using Fusion+ SDK; display order hash and preview before submission.","Add wallet connection and signing flow: use wagmi to connect wallet, build transaction for intent submission, and sign with viem.","Submit order to 1inch Fusion+ endpoint: POST to 1inch API with signed intent; handle responses and capture order ID for tracking.","Build order status dashboard: poll 1inch API for order state (pending, filled, cancelled); display fill price, solver, and timestamp.","Add error handling and UX polish: implement retry logic, timeout warnings, transaction status notifications, and fallback to manual swap if Fusion+ fails."],"gotchas":["1inch Fusion+ is still evolving; API endpoints and SDK versions may change—pin SDK version and monitor 1inch docs for breaking changes.","Cross-chain settlement introduces latency and bridge risk; users must understand that fills may take minutes to hours depending on bridge selection.","Solvers may not fill all orders if margins are tight; educate users that Fusion+ is not guaranteed execution—set realistic expectations in UI.","Price thresholds and time windows interact with solver incentives; too tight constraints may result in no fills, so provide UX hints for reasonable bounds.","RPC rate limits can block rapid polling; implement exponential backoff and consider caching order state server-side rather than client-side polling."],"references":[{"url":"https://docs.1inch.io/fusion","kind":"docs","label":"1inch Fusion+ Documentation"},{"url":"https://github.com/1inch/fusion-sdk","kind":"repo","label":"1inch Fusion SDK GitHub"},{"url":"https://eips.ethereum.org/EIPS/eip-7683","kind":"docs","label":"ERC-7683 Cross-Chain Intent Standard"},{"url":"https://viem.sh","kind":"docs","label":"viem Documentation"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi Hooks Reference"},{"url":"https://docs.1inch.io/docs/aggregation-protocol/api","kind":"docs","label":"1inch API Reference"}],"time_estimate_hours":80,"projects":{"slug":"1inch","is_active":true},"project_slug":"1inch","project":{"slug":"1inch","name":"1inch","logo_url":"https://icons.llamao.fi/icons/protocols/1inch-network?w=64&h=64","category":"dex"}},{"id":"effbf117-d0d1-4db6-b375-b983194d8862","project_id":"2c504c0b-3b4b-471b-b3b9-70834b3a073d","title":"Slippage Forecaster","pitch":"ML model trained on 1inch quote history predicts realistic slippage for any pair size before the user clicks 'swap'.","difficulty":"1+ month","use_case":"analytics","build_with":["python","fastapi","1inch-api","scikit-learn"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:06.592237+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A backend service that ingests historical 1inch swap quotes and trains a regression model (statistical prediction tool) to predict slippage as a function of token pair, swap size, and market conditions, then exposes predictions via a REST API (web interface). Integrates with a frontend widget or bot to show users expected slippage before they confirm. Solves the problem of users being surprised by slippage on large orders—especially on L2s (cheaper blockchains) where liquidity is fragmented.","learn_first":["1inch API structure and quote mechanics","slippage calculation (output amount vs. best-case)","time-series feature engineering for DeFi","regression model evaluation (MAE, RMSE)","API rate limiting and caching strategies"],"tech_stack":{"ai":["scikit-learn","XGBoost","feature engineering pipeline"],"data":["1inch API","pandas","numpy","scikit-learn or XGBoost"],"infra":["FastAPI","PostgreSQL or SQLite","Redis for caching","Docker"],"other":["APScheduler for scheduled data collection"],"wallet":[],"indexer":[],"frontend":[],"contracts":[]},"build_steps":["Set up FastAPI project with Docker; create endpoints for /predict and /health","Write a data collector script using 1inch API to fetch historical quotes (token pairs, amounts, slippage %) via APScheduler running every 6 hours","Store raw quote data in PostgreSQL with timestamps, pair, amount, slippage, gas price, and pool composition metadata","Engineer features: log(swap_size), price_volatility (30m window), liquidity_depth, time_of_day, day_of_week, gas price regime","Train a regression model (XGBoost) on 2–4 weeks of historical data; validate with holdout test set; log MAE and RMSE","Implement a caching layer (Redis) to avoid re-predicting identical queries within 5 minutes","Deploy FastAPI service on a VPS or cloud (Railway, Render); expose /predict endpoint accepting {tokenIn, tokenOut, amount} and returning {predicted_slippage, confidence_interval, model_version}","Build a minimal React widget or Telegram bot that calls your API before user submits a swap on 1inch or a DEX aggregator"],"gotchas":["1inch API rate limits (100 req/s on free tier); you'll need batching and caching or a paid plan to collect enough historical data","Slippage is non-stationary: market regimes change (bull/bear, high/low volatility); retrain your model weekly or use online learning","Token pair cold-start problem: new pairs have no history; fall back to a baseline model or use transfer learning from similar pairs","1inch quote prices are point-in-time snapshots; actual execution slippage depends on mempool congestion and MEV—your model trains on realized slippage, not predicted","Feature leakage: don't include post-swap metrics (actual output) in training; only use pre-swap observables (size, pair, gas price, volatility)"],"references":[{"url":"https://docs.1inch.io/docs/aggregation-protocol/api-overview","kind":"docs","label":"1inch API Documentation"},{"url":"https://github.com/1inch/1inch-v2-contracts","kind":"repo","label":"1inch GitHub (aggregation protocol)"},{"url":"https://xgboost.readthedocs.io/","kind":"docs","label":"XGBoost Documentation"},{"url":"https://fastapi.tiangolo.com/","kind":"docs","label":"FastAPI Official Docs"},{"url":"https://pandas.pydata.org/docs/user_guide/timeseries.html","kind":"docs","label":"Pandas Time Series Feature Engineering"},{"url":"https://apscheduler.readthedocs.io/","kind":"docs","label":"APScheduler for Scheduled Tasks"}],"time_estimate_hours":160,"projects":{"slug":"1inch","is_active":true},"project_slug":"1inch","project":{"slug":"1inch","name":"1inch","logo_url":"https://icons.llamao.fi/icons/protocols/1inch-network?w=64&h=64","category":"dex"}},{"id":"25c3dc53-254c-4999-9555-f2dc1aa2664b","project_id":"2c504c0b-3b4b-471b-b3b9-70834b3a073d","title":"Telegram Bot Shows 1inch Swap Receipts","pitch":"Telegram bot that posts a formatted receipt for any 1inch swap, showing the route taken, how much you saved versus a direct swap, and gas cost.","difficulty":"weekend","use_case":"social","build_with":["telegram-bot-api","1inch-api","node","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:11:05.331011+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A Telegram bot that watches 1inch swaps and posts clean receipts showing the execution path, intermediate pools used, savings versus a direct swap, and gas paid. Users share a transaction hash or wallet address, and the bot fetches swap details and renders a readable receipt card. Traders use it to verify execution quality and share proof of good prices.","learn_first":["1inch swap API structure and response format","Telegram bot polling vs webhook setup","ERC-20 token metadata fetching","Transaction decoding with viem"],"tech_stack":{"ai":[],"data":["1inch Swap API","Etherscan/block explorer API for token metadata"],"infra":["Node.js","Telegram Bot API"],"other":["viem for RPC calls","dotenv for secrets"],"wallet":[],"indexer":[],"frontend":[],"contracts":[]},"build_steps":["Set up a Node.js project with telegram and axios; create a .env with TELEGRAM_BOT_TOKEN and 1INCH_API_KEY","Register a Telegram bot via @BotFather and store the token; test basic /start command","Implement a message listener that detects tx hashes (0x...) or wallet addresses in chat","For tx hashes: call viem to fetch tx details and decode the input; for wallets: query 1inch API recent swaps endpoint","Call 1inch Swap API with the detected token pair and amount to get the reference route (for savings calculation)","Parse the 1inch response to extract: fromToken, toToken, route (pools/hops), output amount, gas used","Calculate savings as (naive_direct_output - actual_output) / naive_direct_output * 100; fetch token symbols and decimals","Format and send a Telegram message with inline formatting showing: tokens, amount in/out, route hops, savings %, gas cost in USD"],"gotchas":["1inch API rate limits (100 req/min free tier); implement backoff and cache recent swaps to avoid hammering","Telegram message length limit (4096 chars); use pagination or collapse long routes into a summary","Token decimals vary wildly; always fetch from contract or use a token list (e.g. 1inch token list) rather than assuming 18","Gas price conversion to USD requires a live price feed; use CoinGecko API (free, no key) or cache prices every few minutes to avoid rate limits","Swap routes can include nested aggregators (e.g. 1inch calling Uniswap calling Curve); the 1inch API response flattens this, but verify pool addresses are real"],"references":[{"url":"https://docs.1inch.io/docs/aggregation-protocol/swap-api/","kind":"docs","label":"1inch Swap API Documentation"},{"url":"https://github.com/1inch/token-list","kind":"repo","label":"1inch Token List"},{"url":"https://core.telegram.org/bots/api","kind":"docs","label":"Telegram Bot API Reference"},{"url":"https://viem.sh/docs/introduction","kind":"docs","label":"viem Documentation"},{"url":"https://www.coingecko.com/en/api/documentation","kind":"docs","label":"CoinGecko Free API"},{"url":"https://docs.etherscan.io/apis/tokens","kind":"docs","label":"Etherscan API for Token Metadata"}],"time_estimate_hours":6,"projects":{"slug":"1inch","is_active":true},"project_slug":"1inch","project":{"slug":"1inch","name":"1inch","logo_url":"https://icons.llamao.fi/icons/protocols/1inch-network?w=64&h=64","category":"dex"}},{"id":"2f7b2d06-cd1e-4fcc-a691-6f4a22f917be","project_id":"949a4c40-c6f9-4765-ba98-fd6b8711352d","title":"Pool Position NFT Visualizer","pitch":"Generates beautiful artwork from v3 position NFTs based on fees earned, range, and token pair. Shareable on socials.","difficulty":"weekend","use_case":"ux","build_with":["nextjs","canvas","viem"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:10:55.995138+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"Build a web app that fetches PancakeSwap v3 position NFTs from a user's wallet, then renders dynamic artwork that visualizes the position's characteristics: fee tier as color intensity, price range as a spectrum bar, accumulated fees as visual effects, and token pair branding. Output shareable images for Twitter/Discord. The visualizer reads on-chain position data (blockchain records), caches metadata from The Graph (data indexer) or Ponder, and generates art in the browser. Users get a gallery of their positions with one-click share buttons.","learn_first":["ERC-721 token standards and NFT metadata","PancakeSwap v3 position structure (ticks, liquidity, fees)","Canvas 2D drawing API or SVG generation","viem contract reading and ABI interaction"],"tech_stack":{"data":["The Graph GraphQL","Ponder"],"other":["node-canvas or sharp (server-side PNG export)"],"wallet":["RainbowKit","Privy"],"indexer":["The Graph (PancakeSwap subgraph)","Ponder (optional, for custom indexing)"],"frontend":["Next.js","Canvas API or Fabric.js","viem","RainbowKit or Privy (wallet connection)"],"contracts":["PancakeSwap v3 PositionManager (read-only)"]},"build_steps":["Set up Next.js project with TypeScript and install viem, RainbowKit, and canvas libraries.","Integrate wallet connection using RainbowKit to read user's connected address.","Query The Graph PancakeSwap subgraph to fetch all v3 position NFTs owned by the user (contract: PancakeSwap PositionManager on BSC/Ethereum/Arbitrum/Base/Linea/zkSync).","For each position, call the PositionManager contract via viem to read position state: token0, token1, fee, tickLower, tickUpper, liquidity, and feeGrowthInside.","Create a Canvas component that renders position art: background gradient based on fee tier (0.01% = cool blue, 1% = warm orange), horizontal range bar showing tick position within min/max, and particle/glow effect scaled by accumulated fees.","Add token pair branding: fetch token logos from a source like CoinGecko or Uniswap token list, render them at the top of the artwork.","Implement PNG export: use node-canvas on the server or html2canvas on the client to generate a shareable image, with a download button and social share links (Twitter intent URL with image).","Deploy to Vercel and test across multiple chains by switching networks in RainbowKit."],"gotchas":["Position NFT metadata is not always stored on-chain; you may need to fetch from The Graph or fallback to the PositionManager contract's tokenURI, which returns a data URI with base64-encoded JSON.","Fee growth is cumulative and requires reading feeGrowthGlobal from the pool contract to calculate actual fees earned; use The Graph subgraph for easier access to historical fee snapshots.","Canvas rendering on the server (Node.js) requires node-canvas or a headless browser; client-side Canvas works but may be slow for batch exports. Consider server-side rendering for production.","Token logos and decimals must be fetched separately; The Graph subgraph includes token data, but verify token0/token1 addresses match the chain you're querying."],"references":[{"url":"https://thegraph.com/hosted-service/subgraph/pancakeswap/exchange-v3-bsc","kind":"docs","label":"PancakeSwap v3 Subgraph"},{"url":"https://bscscan.com/address/0x46A15B0b27311cedF172AB29E4f4766fbE7F4364","kind":"tool","label":"PancakeSwap PositionManager Contract (BSC)"},{"url":"https://viem.sh/docs/contract/readContract","kind":"docs","label":"viem Contract Reading Guide"},{"url":"https://eips.ethereum.org/EIPS/eip-721","kind":"docs","label":"ERC-721 Standard"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API","kind":"docs","label":"Canvas API MDN Reference"},{"url":"https://www.rainbowkit.com/docs/installation","kind":"docs","label":"RainbowKit Setup"}],"time_estimate_hours":8,"projects":{"slug":"pancakeswap","is_active":true},"project_slug":"pancakeswap","project":{"slug":"pancakeswap","name":"PancakeSwap","logo_url":"https://icons.llamao.fi/icons/protocols/pancakeswap?w=64&h=64","category":"dex"}},{"id":"4c0576cd-b2ec-44a9-9e32-ae1bef2a72ec","project_id":"949a4c40-c6f9-4765-ba98-fd6b8711352d","title":"Cross-chain Limit Order Book","pitch":"Place a limit order on PancakeSwap v3 from any chain. Your tokens bridge and execute automatically when the price hits your target.","difficulty":"1-2 weeks","use_case":"trading","build_with":["nextjs","layerzero","viem","foundry"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:10:54.543101+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A protocol that lets traders place limit orders on PancakeSwap v3 pools from any chain (BSC, Ethereum, Arbitrum, Base, Linea, zkSync). It uses cross-chain messaging to atomically bridge tokens and execute swaps when prices hit your target. Traders get one interface instead of manually bridging to each chain.","learn_first":["ERC-4626 vault patterns for order settlement","LayerZero OApp architecture and message passing","PancakeSwap v3 SwapRouter02 and PositionManager contracts","Chainlink Automation for order triggers"],"tech_stack":{"ai":[],"data":["The Graph (PancakeSwap subgraph)","Chainlink Data Feeds for price validation"],"infra":["LayerZero endpoints on all 6 chains","Vercel for frontend hosting"],"other":["Chainlink Automation for order execution triggers"],"wallet":["RainbowKit","Privy for cross-chain session management"],"indexer":["The Graph or Ponder for order state tracking"],"frontend":["Next.js 14+","wagmi for contract interaction","viem for low-level calls","RainbowKit for wallet connection","TanStack Query for order polling"],"contracts":["Solidity 0.8.x","ERC-20 for token handling","LayerZero OApp pattern"]},"build_steps":["Set up a Foundry project with LayerZero OApp contracts; scaffold an OrderBook contract on BSC (source of truth) and lightweight Executor contracts on each target chain.","Implement the core OrderBook logic: store limit orders with (tokenIn, tokenOut, minAmountOut, targetChain, deadline); use a nonce-based ordering system to prevent replay.","Build LayerZero messaging: OrderBook sends cross-chain messages via OApp to Executor contracts; Executor validates price via Chainlink and executes the swap on PancakeSwap v3 SwapRouter02.","Create a Next.js frontend with wagmi hooks to connect wallets across chains; build a form to input order details (amount, price target, expiry).","Integrate Chainlink Automation: set up a keeper job that monitors order conditions and triggers execution when price thresholds are met; alternatively, use a relayer pattern with signed messages.","Index orders using The Graph or Ponder; query order history, status, and execution logs from the frontend.","Test on testnet (BSC Testnet, Arbitrum Sepolia, Base Sepolia) with mock LayerZero endpoints; verify atomic settlement and token bridging.","Deploy to mainnet; seed initial liquidity on PancakeSwap v3 pools and run a small cohort test with 5–10 traders."],"gotchas":["LayerZero message fees vary per chain and payload size; budget for gas + messaging costs in your order execution logic, or implement a fee-sharing model where users prepay.","PancakeSwap v3 pool liquidity is concentrated; your price oracle must account for slippage and tick ranges; use Chainlink Data Feeds for price validation, not just pool spot price.","Cross-chain atomicity is not guaranteed at the protocol level; if the source chain confirms but the destination chain fails, you need a fallback (e.g., refund to user's wallet on source chain after timeout).","Chainlink Automation has a minimum gas requirement and may not trigger instantly; set realistic order TTLs (e.g., 1 hour minimum) and communicate latency expectations to users.","Token approvals must be set per chain; users must approve the OrderBook contract on their source chain before placing an order, adding an extra UX step."],"references":[{"url":"https://docs.layerzero.network/v2/developers/evm/oapp/overview","kind":"docs","label":"LayerZero OApp Documentation"},{"url":"https://github.com/pancakeswap/pancake-smart-contracts","kind":"repo","label":"PancakeSwap v3 Smart Contracts"},{"url":"https://docs.pancakeswap.finance/developers/smart-contract/exchange/v3-router","kind":"docs","label":"PancakeSwap v3 Swap Router Documentation"},{"url":"https://docs.chain.link/chainlink-automation/overview","kind":"docs","label":"Chainlink Automation Documentation"},{"url":"https://wagmi.sh/react/getting-started","kind":"docs","label":"wagmi Hooks for Contract Interaction"},{"url":"https://thegraph.com/docs/en/developing/creating-a-subgraph/","kind":"docs","label":"The Graph Subgraph Development"}],"time_estimate_hours":80,"projects":{"slug":"pancakeswap","is_active":true},"project_slug":"pancakeswap","project":{"slug":"pancakeswap","name":"PancakeSwap","logo_url":"https://icons.llamao.fi/icons/protocols/pancakeswap?w=64&h=64","category":"dex"}},{"id":"23ee44e3-2821-42c5-86d8-0da2277781de","project_id":"33cab9b8-f9b1-48af-8b89-53de969f9bba","title":"Visual Composer for Balancer v3 Hooks","pitch":"Drag-and-drop editor that combines pre-audited hook modules (fee adjustment, liquidity boosting, oracle checks) into a single pool contract. No Solidity needed.","difficulty":"1+ month","use_case":"infrastructure","build_with":["nextjs","foundry","balancer-v3","viem"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:10:43.757299+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A web UI lets pool creators select and configure Balancer v3 hooks visually, then deploy the composed pool. Users pick from audited hook modules—like dynamic fees (price feeds), boosted liquidity (lending protocols), or swap gates (price oracles)—preview the contract, and deploy to mainnet or testnet. The editor checks if hooks work together and estimates gas costs.","learn_first":["Balancer v3 hook architecture and lifecycle callbacks","ERC-4626 vault pattern for boosted pools","Chainlink price feeds and oracle integration","Solidity contract composition and proxy patterns","wagmi/viem for contract interaction"],"tech_stack":{"ai":[],"data":["Chainlink Data Feeds for oracle hooks","Balancer Subgraph for pool metadata"],"infra":["Foundry for contract testing and simulation","Etherscan API for contract verification","IPFS for storing hook metadata and ABIs"],"other":["JSON Schema for hook configuration serialization"],"wallet":["RainbowKit for wallet connection","Privy for optional account abstraction"],"indexer":["The Graph (Balancer subgraph)","Ponder for custom hook event indexing"],"frontend":["Next.js 15+","React Flow for hook DAG visualization","Tailwind CSS","shadcn/ui for components","wagmi 2.x + viem for contract reads/writes"],"contracts":["Balancer v3 PoolFactory","Custom hook implementations (IHooks interface)","ERC-4626 wrapper for boosted pools"]},"build_steps":["Set up Next.js scaffold with wagmi, RainbowKit, and Foundry project structure; create a monorepo layout (frontend/, contracts/).","Build the hook registry: create a JSON schema defining hook metadata (name, description, parameters, audited flag, ABI, bytecode hash). Populate with 3–4 pre-audited hooks (dynamic-fee, boosted-pool, oracle-gated).","Implement React Flow canvas for hook composition: nodes represent hooks, edges show data flow. Add a sidebar with draggable hook templates and a properties panel for parameter input.","Create a contract code generator: read the hook DAG from the canvas state, generate Solidity that instantiates and chains hooks in the correct order. Use Handlebars or similar templating.","Build a contract simulator: use Foundry's forge test + viem to dry-run the generated contract against a forked mainnet, estimate gas, and surface errors before deployment.","Implement the deployment flow: connect to user's wallet via wagmi, serialize hook configuration to JSON, call PoolFactory.create() with the composed hook address and parameters, and track tx status.","Add a hook library browser: fetch audited hooks from IPFS or a GitHub-backed registry, display hook documentation, parameter schemas, and audit reports in the UI.","Deploy to Vercel with environment variables for RPC endpoints and contract addresses; test end-to-end on Sepolia, then Arbitrum/Base testnets."],"gotchas":["Hook compatibility is not always transitive: two individually safe hooks may conflict when chained (e.g., two fee-adjustment hooks both trying to modify the same swap amount). Validate hook interaction rules in the code generator or require manual audit for novel combinations.","Gas limits can balloon quickly with multiple hooks; simulate aggressively and warn users if estimated gas exceeds 10M. Some hook combinations may be undeployable on L2s with lower limits.","Balancer v3 hook callbacks (onBeforeSwap, onAfterSwap, etc.) have strict reentrancy guards; hooks that call external contracts (e.g., Chainlink oracles) must be carefully scoped to avoid reverts. Document this prominently.","Contract verification on Etherscan is tricky for dynamically generated contracts; store the generation recipe (hook DAG + parameters) and regenerate the contract source on-demand for verification, or use a proxy pattern.","Hook parameter validation must happen both client-side (UX) and in the generated contract (security). Mismatch between UI constraints and contract logic can lead to deployments that fail silently or behave unexpectedly."],"references":[{"url":"https://docs.balancer.fi/reference/contracts/v3-hooks.html","kind":"docs","label":"Balancer v3 Hooks Documentation"},{"url":"https://github.com/balancer/balancer-v3-monorepo","kind":"repo","label":"Balancer v3 Core Contracts Repository"},{"url":"https://eips.ethereum.org/EIPS/eip-4626","kind":"docs","label":"ERC-4626 Tokenized Vault Standard"},{"url":"https://docs.chain.link/data-feeds","kind":"docs","label":"Chainlink Data Feeds Documentation"},{"url":"https://reactflow.dev/","kind":"tool","label":"React Flow Library"},{"url":"https://book.getfoundry.sh/","kind":"docs","label":"Foundry Book: Testing and Simulation"}],"time_estimate_hours":200,"projects":{"slug":"balancer","is_active":true},"project_slug":"balancer","project":{"slug":"balancer","name":"Balancer","logo_url":"https://icons.llamao.fi/icons/protocols/balancer-v3?w=64&h=64","category":"dex"}},{"id":"d9c021b3-ac1c-431d-bb61-97f6d6658670","project_id":"45e9a609-b769-47b0-ac13-6e21f9bc1ef0","title":"Maximize veCRV Weekly Voting Rewards","pitch":"Automatically calculates the best way to split your veCRV votes across gauges to earn the most bribes and CRV rewards each week. Replaces manual tracking.","difficulty":"1-2 weeks","use_case":"yield","build_with":["nextjs","viem","votium-api","scipy"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:10:23.411537+00:00","metadata":{},"source":"curated","why_now":"Bribe volumes on Curve have grown 3–5x since 2024; manual vote optimization is now a weekly task for serious veCRV holders. Votium and Aura APIs are mature and publicly available. Curve's voting mechanics are stable, making this a repeatable product.","source_signal_ids":[],"published_at":null,"summary":"A tool that helps veCRV holders (people with locked Curve tokens) decide where to vote each week. It checks current bribe offers, CRV payouts, and voting history, then recommends the vote split that maximizes your weekly earnings. Shows expected rewards and lets you submit votes with one click.","learn_first":["Curve gauge system and voting mechanics","veCRV tokenomics and vote-escrow model","Votium bribe marketplace API","Linear optimization basics (scipy.optimize.linprog)","Curve voting contract interface (VotingEscrow + GaugeController)"],"tech_stack":{"ai":[],"data":["Votium API","Curve API","Aura Finance API","Balancer Gauge API"],"infra":["Vercel","Alchemy or Infura RPC"],"other":["scipy (Python backend for optimization)","FastAPI (optional Python sidecar)"],"wallet":["RainbowKit","Privy (optional, for session keys)"],"indexer":["The Graph (Curve subgraph)","Ponder (optional, for custom bribe indexing)"],"frontend":["Next.js 14+","viem 2.x","wagmi 2.x","RainbowKit","Recharts or Plotly.js"],"contracts":["Curve GaugeController","Curve VotingEscrow (veCRV)","Curve Minter"]},"build_steps":["1. Set up Next.js 14 project with viem and wagmi; scaffold wallet connection via RainbowKit.","2. Fetch current veCRV balances and voting power from Curve's VotingEscrow contract using viem; display user's locked CRV and vote weight.","3. Integrate Votium API to pull active bribe offers (gauge address, bribe token, amount, APY); cache results with 1-hour TTL.","4. Query Curve subgraph (The Graph) for historical gauge weights, CRV emission rates, and current voting state; calculate baseline CRV yield per gauge.","5. Build a Python FastAPI sidecar (or use Vercel serverless) that runs scipy.optimize.linprog to solve: maximize (bribes_usd + crv_value) subject to sum(votes) = user's veCRV, votes[i] >= 0. Return optimal vote allocation.","6. Create a dashboard view showing: (a) recommended vote split by gauge, (b) expected weekly USD yield, (c) bribe APY vs CRV APY breakdown, (d) comparison to user's current votes.","7. Implement vote submission: build a transaction builder using viem that calls GaugeController.vote_for_gauge_weights() for each gauge with the optimized weights; add gas estimation and user confirmation.","8. Deploy frontend to Vercel; set up GitHub Actions to refresh bribe data hourly and recompute recommendations; test on Ethereum mainnet with a small veCRV holder."],"gotchas":["Votium and Aura bribe APIs may have rate limits or inconsistent uptime; implement retry logic and fallback to cached data. Some bribes are only announced hours before voting closes, so real-time updates are critical.","Curve voting has a 1-week lag between vote submission and weight application; optimizer should account for this by modeling next week's expected bribes, not current ones.","Linear optimization assumes bribe amounts are fixed, but actual bribe-per-vote varies with total votes received; consider a feedback loop or sensitivity analysis to show how vote concentration affects yield.","Gas costs for multi-gauge voting can be significant; bundle votes into a single transaction or use a relayer to avoid showing users a $500 gas bill for a $200 weekly yield.","veCRV voting power decays as lock expiry approaches; fetch user's adjusted voting power from VotingEscrow.balanceOf() at current block, not just raw locked amount."],"references":[{"url":"https://docs.curve.fi/governance/how-to-vote/","kind":"docs","label":"Curve Gauge System & Voting Docs"},{"url":"https://docs.votium.app/","kind":"docs","label":"Votium API & Bribe Data"},{"url":"https://thegraph.com/hosted-service/subgraph/messari/curve-finance","kind":"tool","label":"Curve Subgraph (The Graph)"},{"url":"https://viem.sh/docs/contract/getContractEvents","kind":"docs","label":"viem Contract Interaction Guide"},{"url":"https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html","kind":"docs","label":"scipy.optimize Linear Programming"},{"url":"https://github.com/curvefi/curve-dao-contracts/blob/master/contracts/GaugeController.vy","kind":"repo","label":"Curve GaugeController ABI & Source"}],"time_estimate_hours":80,"projects":{"slug":"curve","is_active":true},"project_slug":"curve","project":{"slug":"curve","name":"Curve","logo_url":"https://icons.llamao.fi/icons/protocols/curve-dex?w=64&h=64","category":"dex"}},{"id":"5f912ed6-05ed-4b28-8075-f5eb5c30c790","project_id":"e0516da9-c4fc-4644-b12c-fd9afb1aadb9","title":"Auto-rotating Uniswap v3 liquidity on schedule","pitch":"Set Uniswap v3 liquidity ranges that automatically close and reopen on a calendar schedule. Treasuries earn fees from stablecoin pairs without manual work.","difficulty":"1-2 weeks","use_case":"automation","build_with":["foundry","chainlink-automation","nextjs","wagmi"],"is_featured":false,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:10:23.371227+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A smart contract that manages Uniswap v3 liquidity positions by automatically rotating ranges on a set schedule—closing old positions and opening new ones at predefined times. Treasuries and protocols holding stablecoins use it to earn trading fees consistently without rebalancing by hand. A dashboard lets users set schedules, watch positions, and collect fees.","learn_first":["Uniswap v3 concentrated liquidity and tick ranges","ERC-721 NFT position management (Uniswap v3 positions are NFTs)","Chainlink Automation upkeep patterns","Solidity reentrancy guards and access control"],"tech_stack":{"data":["Chainlink Automation","Uniswap Subgraph"],"infra":["Foundry","Hardhat (for testing)"],"other":["OpenZeppelin Contracts"],"wallet":["RainbowKit","Privy (for account abstraction if needed)"],"indexer":["The Graph (optional: for position history and fee tracking)"],"frontend":["Next.js 14+","wagmi 2.x","viem","ethers.js (for position queries)","TailwindCSS"],"contracts":["Solidity 0.8.x","OpenZeppelin AccessControl","Uniswap v3 interfaces (ISwapRouter, INonfungiblePositionManager)"]},"build_steps":["1. Scaffold a Foundry project and create RangeOrderCalendar.sol with role-based access (owner, treasury, keeper). Define structs for ScheduledRange (tickLower, tickUpper, startTime, duration, amount).","2. Implement core logic to mint a v3 position via INonfungiblePositionManager.mint() with the scheduled tick range and liquidity amount. Store the position tokenId and metadata.","3. Add a rotateRange() function that burns the current position (via INonfungiblePositionManager.burn()) and mints a new one. Collect accumulated fees before burning.","4. Register the contract with Chainlink Automation by implementing the IAutomationCompatible interface (checkUpkeep and performUpkeep). checkUpkeep returns true when the current block.timestamp exceeds the range's endTime.","5. Build a Next.js dashboard with wagmi hooks to display active positions, upcoming rotations, and historical fee earnings. Use the Uniswap Subgraph to query position details and fee data.","6. Add a schedule configuration UI where users define multiple ranges (e.g., rotate every 2 weeks, tick range ±100 from current price). Store schedules in contract state or off-chain with IPFS.","7. Implement fee collection and withdrawal logic. After each rotation, collect fees from the burned position and either reinvest or send to a treasury address.","8. Deploy to a testnet (Sepolia or Arbitrum Sepolia), register with Chainlink Automation, and test a full rotation cycle. Verify gas costs and upkeep fees are reasonable."],"gotchas":["Tick calculation is tricky: you must convert price ranges to tick indices using TickMath. Off-by-one errors or incorrect tick spacing (v3 pools have 1, 10, 60, or 200 tick spacing depending on fee tier) will cause mint to revert.","Chainlink Automation has a minimum upkeep interval and gas limit per call. If your rotation is complex (e.g., swapping tokens before minting), you may exceed the gas budget. Test gas usage early.","When burning a v3 position, you must set amount0Min and amount1Min carefully to avoid slippage. If the pool has moved significantly, the burn may revert or return less than expected.","Position NFTs are non-standard ERC-721s. You cannot directly transfer them in a single tx if the contract is not the owner. Ensure the RangeOrderCalendar contract is the position owner, not a user wallet.","Uniswap v3 pools charge fees (0.01%, 0.05%, 0.30%, 1.00%) based on tier. Stable pairs typically use 0.01% but verify the pool exists before deploying. If the pool doesn't exist, mint will fail."],"references":[{"url":"https://docs.uniswap.org/concepts/uniswap-protocol","kind":"docs","label":"Uniswap v3 Core Concepts"},{"url":"https://github.com/Uniswap/v3-periphery","kind":"repo","label":"Uniswap v3 Periphery (Position Manager)"},{"url":"https://docs.chain.link/chainlink-automation","kind":"docs","label":"Chainlink Automation Documentation"},{"url":"https://github.com/Uniswap/v3-core/blob/main/contracts/libraries/TickMath.sol","kind":"repo","label":"TickMath and Tick Utilities"},{"url":"https://thegraph.com/hosted-service/subgraph/uniswap/uniswap-v3","kind":"tool","label":"Uniswap Subgraph (for querying positions and fees)"},{"url":"https://book.getfoundry.sh/","kind":"docs","label":"Foundry Book"}],"time_estimate_hours":80,"projects":{"slug":"uniswap","is_active":true},"project_slug":"uniswap","project":{"slug":"uniswap","name":"Uniswap","logo_url":"https://icons.llamao.fi/icons/protocols/uniswap?w=64&h=64","category":"dex"}},{"id":"eb268580-8675-452a-8b53-016fee20e1e6","project_id":"45e9a609-b769-47b0-ac13-6e21f9bc1ef0","title":"Curve Pool Depeg Alert Bot","pitch":"Watches Curve pools for price drifts over your threshold and sends instant Telegram alerts. Saves stETH/ETH watchers from constant manual checking.","difficulty":"weekend","use_case":"security","build_with":["node","telegram-bot-api","viem","ethers"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:10:07.472036+00:00","metadata":{},"source":"curated","why_now":null,"source_signal_ids":[],"published_at":null,"summary":"A bot that checks Curve pools regularly, calculates price differences between paired assets, and alerts you on Telegram when drift exceeds your limit. Built for arbitrageurs, treasury teams, and risk managers who need real-time notifications without manual monitoring.","learn_first":["Curve pool mechanics (stableswap invariant)","Telegram Bot API basics","viem read contract calls","Pool price calculation formulas"],"tech_stack":{"ai":[],"data":["viem for on-chain reads"],"infra":["Node.js","Telegram Bot API"],"other":["dotenv for config"],"wallet":[],"indexer":[],"frontend":[],"contracts":["Curve StableSwap pools (read-only)"]},"build_steps":["Set up a new Node.js project with viem and node-telegram-bot-api packages","Create a .env file with your Telegram bot token, chat ID, and RPC endpoint (e.g., Alchemy or Infura)","Write a helper function using viem to fetch the current pool state from a Curve StableSwap contract (call get_dy or get_dx to compute implied prices)","Implement a price deviation calculator that compares the pool's implied exchange rate against a reference (e.g., Chainlink oracle or another pool) and calculates basis points drift","Set up a polling loop that calls the price checker every 30–60 seconds and stores the last known state to avoid duplicate alerts","Write the Telegram alert formatter to include pool name, current deviation, threshold, and a link to Curve's UI or Etherscan","Test locally by manually triggering deviations (e.g., simulating a large swap) and verifying Telegram messages arrive","Deploy to a VPS or serverless function (e.g., AWS Lambda, Railway, Heroku) with persistent environment variables and error logging"],"gotchas":["Curve pools have different fee structures and governance; ensure you're reading the correct pool contract address for the pair you want to monitor—use Curve's registry or verify on Etherscan","RPC rate limits can cause missed polls; use a rate-limited queue or batch multiple pools into one call to stay under limits","Depeg events can be transient (flash loan attacks); add a confirmation window (e.g., alert only if drift persists for 2+ consecutive polls) to reduce false positives","Telegram Bot API has a message rate limit (~30 msgs/sec per chat); if monitoring many pools, batch alerts or use a message queue to avoid hitting the limit","Pool liquidity and slippage mean the 'true' price is subjective; define your reference price clearly (mid-price, Chainlink, another DEX) and document it in alerts"],"references":[{"url":"https://docs.curve.fi","kind":"docs","label":"Curve Finance Docs"},{"url":"https://github.com/curvefi/curve-contract","kind":"repo","label":"Curve StableSwap Contract (GitHub)"},{"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://github.com/curvefi/curve-js","kind":"repo","label":"Curve Pool Registry & ABI"}],"time_estimate_hours":6,"projects":{"slug":"curve","is_active":true},"project_slug":"curve","project":{"slug":"curve","name":"Curve","logo_url":"https://icons.llamao.fi/icons/protocols/curve-dex?w=64&h=64","category":"dex"}},{"id":"8ebb5bce-18b7-4008-9753-60706a4fc06e","project_id":"e0516da9-c4fc-4644-b12c-fd9afb1aadb9","title":"Uniswap v4 Hook Marketplace","pitch":"A searchable directory of v4 hooks with audit status and gas costs. Find and add verified hooks to your pools in one click.","difficulty":"1-2 weeks","use_case":"infrastructure","build_with":["nextjs","viem","supabase","ponder"],"is_featured":true,"position":0,"model_used":"anthropic/claude-haiku-4-5","generated_at":"2026-06-05T13:07:53.572412+00:00","metadata":{},"source":"curated","why_now":"v4 hooks ecosystem is rapidly growing with new hook implementations; lack of centralized discovery forces developers to hunt GitHub repos and Discord—a marketplace unlocks adoption and reduces friction for pool creators integrating hooks.","source_signal_ids":[],"published_at":null,"summary":"Build a marketplace where developers browse Uniswap v4 hooks (custom pool logic) by category, filter by audit status and efficiency, and integrate them into pools through a web interface. The site indexes hook contracts from public sources, stores audit reports and gas benchmarks, and generates the correct setup code for pool creation.","learn_first":["Uniswap v4 hook architecture and IHooks interface","ERC-7201 namespaced storage pattern for hook state","Pool initialization with hook parameters in v4","Gas profiling with Foundry benchmarks"],"tech_stack":{"ai":[],"data":["Supabase PostgreSQL for hook metadata, audits, gas profiles","Etherscan API for contract verification status"],"infra":["Vercel for frontend deployment","Ponder hosted indexer"],"other":["Foundry for gas benchmarking hooks"],"wallet":["RainbowKit for wallet connection"],"indexer":["Ponder for indexing hook deployments and pool creations"],"frontend":["Next.js 14+","wagmi 2.x","viem 2.x","TailwindCSS","shadcn/ui"],"contracts":["Uniswap v4 IHooks interface","Example hooks (fee hooks, oracle hooks)"]},"build_steps":["Set up Next.js 14 project with wagmi + RainbowKit; scaffold pages for /hooks, /hooks/[id], /submit-hook","Create Supabase schema: hooks table (address, chain, name, category, audit_status, gas_profile, github_url, deployment_date), audits table (hook_id, auditor, report_url, passed_bool), gas_benchmarks table (hook_id, operation, gas_used, calldata_size)","Build Ponder indexer to listen for Uniswap v4 PoolInitialized events and IHooks interface deployments; index hook bytecode and constructor args from Etherscan API","Create /api/hooks endpoint that queries Supabase with filters (category, chain, audit_status, max_gas); return hook metadata with deployment addresses","Build hook detail page (/hooks/[id]) showing: contract code snippet, audit report embed, gas profile chart (Recharts), deployment addresses per chain, and 'Add to Pool' CTA","Implement 'Add to Pool' modal: fetch pool creation params from user input (token0, token1, fee, initial_price), use viem to encode hook initialization calldata based on hook's constructor signature, generate unsigned transaction for pool creation","Add hook submission form (/submit-hook) that accepts: hook contract address, GitHub repo link, audit report PDF upload to Supabase Storage, category tags; validate contract is verified on Etherscan before accepting","Deploy frontend to Vercel, Ponder indexer to hosted service, and set up Supabase project; test end-to-end on Sepolia testnet with deployed v4 hooks"],"gotchas":["Hook constructor signatures vary widely—you'll need to parse Etherscan ABI JSON and dynamically generate calldata encoding UI for each hook's init params; use viem's AbiFunction parsing to build a generic form","Audit reports are often PDFs or links; storing large files in Supabase Storage can exceed free tier—consider linking to external audit repos (e.g., GitHub releases) instead of hosting","Gas profiles depend heavily on call context and pool state; a single 'gas used' number is misleading—benchmark common operations (swap, add liquidity, remove liquidity) separately and show ranges","v4 hooks are still experimental; many hooks are unaudited or have limited deployment history; clearly label 'community-submitted' vs 'officially audited' to avoid liability","Pool initialization calldata encoding must match the exact hook contract's init function signature; a mismatch will cause the pool creation to revert—test encoding against deployed hooks on testnet first"],"references":[{"url":"https://docs.uniswap.org/contracts/v4/concepts/hooks","kind":"docs","label":"Uniswap v4 Hook Documentation"},{"url":"https://github.com/Uniswap/v4-core","kind":"repo","label":"Uniswap v4 Core Repository"},{"url":"https://github.com/Uniswap/v4-core/blob/main/src/interfaces/IHooks.sol","kind":"repo","label":"IHooks Interface Reference"},{"url":"https://ponder.sh","kind":"docs","label":"Ponder Indexer Framework"},{"url":"https://wagmi.sh","kind":"docs","label":"wagmi + viem Integration Guide"},{"url":"https://supabase.com/docs","kind":"docs","label":"Supabase PostgreSQL Setup"}],"time_estimate_hours":80,"projects":{"slug":"uniswap","is_active":true},"project_slug":"uniswap","project":{"slug":"uniswap","name":"Uniswap","logo_url":"https://icons.llamao.fi/icons/protocols/uniswap?w=64&h=64","category":"dex"}}]}