DOOM INDEX is a Cloudflare-first generative art project. It turns live crypto market context into paintings, stores the resulting image on Arweave via ArDrive Turbo during recurring generation, and uploads the framed GLB plus NFT metadata only when a mint happens. D1 indexes the artwork and caches mint-time GLB refs for the web UI, archive, OGP, and mint flow.
- Frontend: Next.js 16 App Router
- Runtime: Cloudflare Workers via OpenNext
- Storage: Arweave for artwork assets, D1 for searchable metadata
- Generation inputs: CoinGecko, Fear & Greed, Tavily, Runware
- Minting: custom Doom NFT program on Solana
Historical items uploaded from the current DOOM INDEX Arweave address:
- Address:
w-0BSqoDiZoct2ISCa1uSCgjm374kFE9hJwKMzAKJ-s - ViewBlock: https://viewblock.io/arweave/address/w-0BSqoDiZoct2ISCa1uSCgjm374kFE9hJwKMzAKJ-s?tab=items
Install dependencies:
bun installCopy .example.vars to .dev.vars, then fill in the required values:
cp .example.vars .dev.varsMinimum local env:
NEXT_PUBLIC_BASE_URL=http://localhost:8787 RUNWARE_API_KEY=your_runware_api_key ARDRIVE_TURBO_SECRET_KEY='{"kty":"RSA", ...}'Common optional env:
COINGECKO_API_KEY=your_coingecko_api_key TAVILY_API_KEY=your_tavily_api_key ARWEAVE_GATEWAY_BASE_URL=https://permagate.iobun run dev uses Next.js' native .env.local loading. Point .env.local at .dev.vars so Next.js and the Bun scripts share the same values:
ln -s .dev.vars .env.localRun the Next.js app:
bun run devRun the Cloudflare preview build:
bun run build:cf bun run previewTrigger the cron loop locally:
bun run watch-cronGenerate a painting locally:
bun run generateGenerate the framed GLB directly:
bun run generate:framed-glb --image ./out/example.webp --out ./out/framed.glbUpload an explicit image + GLB bundle to Arweave:
bun --env-file=.dev.vars scripts/upload-metadata-ardrive.ts \ --token-id 1 \ --thumbnail ./out/example.webp \ --glb ./out/framed.glbUpload the built-in placeholder fixture bundle:
bun --env-file=.dev.vars scripts/upload-metadata-ardrive.ts \ --token-id 1 \ --fixtureGenerate and apply Drizzle migrations:
bun run db:generate bun run db:migrateProduction migration and deployment commands:
bun run db:migrate:prod bun run deploybun run lint bun run typecheck bun run testFocused test commands:
bun run test:unit bun run test:integration