Skip to content

Dial-WTF/Colosseum

Repository files navigation

Dial.WTF - Solana Ringtone NFT Marketplace

Limited edition Solana ringtone NFTs with bonding curve pricing

🎡 Overview

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.

πŸš€ Tech Stack

Frontend

  • Next.js 15 - App Router with React 19
  • TypeScript 5.6 - Type safety
  • Tailwind CSS 3.4 - Styling
  • Lucide React - Icons

Blockchain

  • Solana - Layer 1 blockchain
  • Metaplex - NFT standard (Master Editions)
  • @solana/web3.js - Solana SDK
  • @solana/wallet-adapter - Wallet connection

Authentication

  • Privy - Solana wallet authentication (Sign-In With Solana)

NFT Standards

  • βœ… Master Edition - Limited editions with numbered prints (default)
  • πŸ”œ Semi-Fungible Tokens (SFT) - Coming soon
  • πŸ”œ Compressed NFTs (cNFT) - Coming soon

πŸ“¦ Project Structure

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

πŸ› οΈ Getting Started

Prerequisites

  • Node.js >= 20.0.0
  • pnpm >= 9.0.0
  • Solana wallet (Phantom, Solflare, etc.)
  • Storj account (for user data storage) - Sign up

Installation

  1. Clone the repository
git clone <repository-url>
cd Colosseum
  1. Install dependencies
pnpm install
  1. 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_key

Get Storj Credentials:

  1. Create account at storj.io

  2. Go to Access β†’ Create S3 Credentials

  3. Configure permissions (Read, Write, List, Delete)

  4. Create or select a bucket

  5. Copy credentials to .env.local

  6. Run development server

pnpm dev

Visit http://localhost:3000

Build for Production

pnpm build
pnpm start

🎨 Features

Current Features (v0.1)

  • βœ… 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

Coming Soon

  • πŸ”œ 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

Data Storage Architecture

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 profile
  • PUT /api/users/[address]/profile - Update profile
  • POST /api/users/[address]/profile - Initialize user
  • GET /api/users/[address]/collection - Get NFT collection
  • POST /api/users/[address]/collection - Update collection

πŸ’Ž NFT Standards

Master Edition (Current)

  • 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

Semi-Fungible Tokens (Coming Soon)

  • True fungibility within editions
  • Lower storage costs
  • ERC-1155 equivalent

Compressed NFTs (Coming Soon)

  • 99.9% cheaper minting costs
  • Merkle tree-based storage
  • Perfect for high-volume drops

πŸ“ˆ Bonding Curves

The platform supports multiple bonding curve types:

Linear Curve

Price = basePrice + (editionNumber * increment)

Exponential Curve

Price = basePrice * (multiplier ^ editionNumber)

Logarithmic Curve

Price = basePrice + log(editionNumber) * increment

πŸ” Security

  • Client-side wallet integration via Privy
  • No private keys stored on servers
  • All transactions require user approval
  • Testnet (devnet) by default for development

πŸ“ Scripts

# 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_modules

🀝 Contributing

This project is under active development. Contributions are welcome!

πŸ“„ License

MIT

πŸ”— Links


Built with ❀️ on Solana

Releases

No releases published

Packages

No packages published

Languages