Limited edition Solana ringtone NFTs with bonding curve pricing
Dial.WTF is a Solana-based NFT marketplace for limited edition ringtones. Built with Next.js 15, React 19, and Metaplex, it allows users to mint, collect, and trade unique ringtone NFTs as Master Editions with dynamic bonding curve pricing.
- Next.js 15 - App Router with React 19
- TypeScript 5.6 - Type safety
- Tailwind CSS 3.4 - Styling
- Lucide React - Icons
- Solana - Layer 1 blockchain
- Metaplex - NFT standard (Master Editions)
- @solana/web3.js - Solana SDK
- @solana/wallet-adapter - Wallet connection
- Privy - Solana wallet authentication (Sign-In With Solana)
- β Master Edition - Limited editions with numbered prints (default)
- π Semi-Fungible Tokens (SFT) - Coming soon
- π Compressed NFTs (cNFT) - Coming soon
Colosseum/
βββ apps/
β βββ web/ # Next.js 15 web application
β βββ src/
β β βββ app/ # App router pages
β β β βββ (routes)/ # Client pages
β β β β βββ marketplace/
β β β β βββ mint/
β β β β βββ my-collection/
β β β βββ layout.tsx
β β β βββ page.tsx
β β βββ components/ # React components
β β β βββ home/
β β β βββ layout/
β β β βββ marketplace/
β β β βββ mint/
β β β βββ wallet/
β β βββ lib/ # Utilities
β βββ next.config.ts
β βββ tailwind.config.ts
β βββ package.json
βββ packages/
β βββ bonding-curve/ # Bonding curve calculations
β β βββ src/ # Calculator and advanced features
β βββ shared/ # Shared utilities and types
β β βββ src/
β β β βββ types/ # TypeScript types
β β β βββ constants/ # Constants
β β β βββ utils/ # Shared utilities
β β βββ package.json
β βββ types/ # TypeScript type definitions
β β βββ src/ # NFT and project types
β βββ worm/ # S3WORM data storage layer
β βββ src/
β β βββ client.ts # Storj client configuration
β β βββ entities/ # Entity definitions
β β βββ repositories/ # Data access layer
β βββ package.json
βββ pnpm-workspace.yaml
βββ package.json
- Node.js >= 20.0.0
- pnpm >= 9.0.0
- Solana wallet (Phantom, Solflare, etc.)
- Storj account (for user data storage) - Sign up
- Clone the repository
git clone <repository-url>
cd Colosseum- Install dependencies
pnpm install- Set up environment variables
Create apps/web/.env.local:
# Privy Configuration
NEXT_PUBLIC_PRIVY_APP_ID=your_privy_app_id_here
# Solana Configuration
NEXT_PUBLIC_SOLANA_NETWORK=devnet
NEXT_PUBLIC_SOLANA_RPC_URL=https://api.devnet.solana.com
# AI Generation APIs
REPLICATE_API_TOKEN=your_replicate_token
ELEVENLABS_API_KEY=your_elevenlabs_key
SUNO_API_KEY=your_sunoapi_org_key # For Suno Flow Jockey music generation
# Storj S3 Configuration (User Data Storage)
STORJ_ENDPOINT=https://gateway.storjshare.io
STORJ_BUCKET=dial-wtf-users
STORJ_ACCESS_KEY=your_storj_access_key_id
STORJ_SECRET_KEY=your_storj_secret_access_keyGet Storj Credentials:
-
Create account at storj.io
-
Go to Access β Create S3 Credentials
-
Configure permissions (Read, Write, List, Delete)
-
Create or select a bucket
-
Copy credentials to
.env.local -
Run development server
pnpm devVisit http://localhost:3000
pnpm build
pnpm start- β Next.js 15 with React 19
- β Privy wallet authentication
- β Solana wallet adapter integration
- β Master Edition NFT type selector
- β Bonding curve price calculations
- β Marketplace preview
- β Mint interface with pack selection
- β Responsive UI with Tailwind CSS
- β
User data storage with Storj (via
@dial/worm)- User profiles organized by wallet address
- NFT collection tracking
- Activity logging
- User settings and preferences
- π Actual NFT minting (Metaplex integration)
- π Smart contract deployment (Anchor)
- π Semi-fungible token support
- π Compressed NFT support
- π Audio preview player
- π Secondary marketplace trading
- π React Native mobile app
User data is stored in Storj (decentralized S3-compatible storage) using the @dial/worm package:
users/
βββ [wallet-address]/
βββ profile.json # User profile
βββ collection.json # NFT collection
βββ activity.json # Activity log
βββ settings.json # User settings
API Routes:
GET /api/users/[address]/profile- Get user profilePUT /api/users/[address]/profile- Update profilePOST /api/users/[address]/profile- Initialize userGET /api/users/[address]/collection- Get NFT collectionPOST /api/users/[address]/collection- Update collection
- Each ringtone pack is a Master Edition NFT
- Limited supply with numbered prints (e.g., #1/100, #2/100)
- Bonding curve pricing for fair distribution
- Full Metaplex marketplace support
- Built-in royalty enforcement
- True fungibility within editions
- Lower storage costs
- ERC-1155 equivalent
- 99.9% cheaper minting costs
- Merkle tree-based storage
- Perfect for high-volume drops
The platform supports multiple bonding curve types:
Price = basePrice + (editionNumber * increment)
Price = basePrice * (multiplier ^ editionNumber)
Price = basePrice + log(editionNumber) * increment
- Client-side wallet integration via Privy
- No private keys stored on servers
- All transactions require user approval
- Testnet (devnet) by default for development
# Development
pnpm dev # Start dev server
# Build
pnpm build # Build for production
pnpm start # Start production server
# Utilities
pnpm lint # Run ESLint
pnpm type-check # TypeScript type checking
pnpm clean # Clean node_modulesThis project is under active development. Contributions are welcome!
MIT
Built with β€οΈ on Solana