Monorepo for the Scapes ecosystem — an onchain indexer and website tracking PunkScapes, Scapes, and TwentySevenYearScapes NFT collections.
indexer/— Ponder indexer with Hono API, Drizzle ORM, and PostgreSQL.website/— Nuxt 4 (Vue 3) frontend.abis/— Shared contract ABIs.
- Node.js >= 18.14
- pnpm
- Docker (for the dev database)
pnpm installCopy the example env files and fill in your values:
# Indexer — needs at minimum an Ethereum RPC URL and database connection
cp indexer/.env.local.example indexer/.env.local
# Website
cp website/.env.example website/.envRequired indexer variables:
PONDER_RPC_URL_1— Ethereum RPC endpointDATABASE_URL— PostgreSQL connection string (default:postgresql://ponder:ponder@localhost:5433/ponder)
Start a local PostgreSQL instance:
docker compose -f indexer/docker-compose.yml up -d# Run the indexer (hot reload)
pnpm dev
# Run the website (port 3311)
pnpm --filter @scapes-studio/website devGET/POST /graphql— GraphQL APIGET /sql/*— SQL over HTTPGET /profiles/:address— ENS profileGET /seaport/sales/:slug— Sales by collectionGET /seaport/stats/volume/:slug— Volume statsGET /scapes/:tokenId/history— Transfer history with sales
# Typecheck all packages
pnpm typecheck
# Lint the indexer
pnpm --filter @scapes-studio/indexer lintBoth packages deploy via Kamal. Deployment config lives in indexer/config/deploy.yml and website/config/deploy.yml, and reads infrastructure details from environment variables.
# Indexer
pnpm --filter @scapes-studio/indexer kamal:deploy
# Website
pnpm --filter @scapes-studio/website kamal:deploy