2025-12-21 17:37:18 +01:00
2025-12-21 17:36:44 +01:00
2025-12-21 17:36:44 +01:00
2025-12-21 07:51:51 +01:00
2025-12-20 10:32:36 +05:30
2025-12-21 12:46:27 +01:00
2025-12-21 12:46:27 +01:00
2025-12-20 10:32:36 +05:30
2025-12-20 10:32:36 +05:30
2025-12-20 19:00:42 +01:00
2025-12-20 19:00:42 +01:00
2025-12-21 09:56:59 +01:00
2025-12-21 07:51:51 +01:00
2025-12-20 10:32:36 +05:30

420Deals.ch

A premium collective buying platform for CBD in Switzerland.

Setup

Database

  1. Create the database using the provided SQL file:
mysql -u root -p < cbd420.sql
  1. Run the migration to add image support (optional but recommended):
mysql -u root -p cbd420 < migrations/add_image_url.sql
  1. Create a .env.local file in the root directory:
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=cbd420

# NOWPayments Configuration
# For testnet/sandbox testing:
NOWPAYMENTS_TESTNET=true
NOWPAYMENTS_SANDBOX_API_KEY=your_sandbox_api_key_here
NOWPAYMENTS_CURRENCY=usd  # Sandbox doesn't support CHF, use USD or other supported currency
# For production:
# NOWPAYMENTS_TESTNET=false
# NOWPAYMENTS_API_KEY=your_production_api_key_here
# NOWPAYMENTS_CURRENCY=chf  # Default is CHF for production

# IPN Callback URL (your external Node.js service that handles IPN callbacks)
IPN_CALLBACK_URL=http://your-ipn-service.com/api/payments/ipn-callback

# Payment Currency (crypto currency for payments, e.g. btc, eth, usdt)
# Default: btc
NOWPAYMENTS_PAY_CURRENCY=btc

# Use Fixed Rate (optional, true/false)
# If true, exchange rate is frozen for 20 minutes. Payment expires if not paid within 20 minutes.
# Default: false
NOWPAYMENTS_FIXED_RATE=false

# Base URL (use your domain in production)
NEXT_PUBLIC_BASE_URL=http://localhost:3420

Installation

npm install

Development

npm run dev

Visit http://localhost:3000 for the main site and http://localhost:3000/admin for the admin panel.

Admin Panel

Access the admin panel at /admin to:

  • Create new drops
  • View all drops
  • Monitor drop progress and sold out status

Creating a Drop

  1. Navigate to /admin
  2. Fill in the form:
    • Product Name: e.g., "Harlequin Collective Drop"
    • Batch Size: Total amount (e.g., 1000)
    • Unit: Custom unit (e.g., g, kg, ml, etc.)
    • Price Per Gram: Price in CHF (e.g., 2.50)
    • Product Image: Optional product image upload (JPEG, PNG, WebP, max 5MB)
  3. Click "Create Drop"

Payment Integration (NOWPayments)

Testnet/Sandbox Setup

  1. Create a Sandbox Account: Register at https://sandbox.nowpayments.io/

  2. Generate Sandbox API Key:

    • Log in to your sandbox dashboard
    • Navigate to Settings > Payments > API keys
    • Generate a test API key
  3. Configure Environment Variables:

    NOWPAYMENTS_TESTNET=true
    NOWPAYMENTS_SANDBOX_API_KEY=your_sandbox_api_key_here
    
  4. Run Pending Orders Migration:

    mysql -u root -p cbd420 < migrations/create_pending_orders.sql
    
  5. Test Payments:

    • Create test payments through the application
    • Payments will use the sandbox environment
    • No real money will be charged

Production Setup

  1. Get Production API Key from NOWPayments Dashboard

  2. Update Environment Variables:

    NOWPAYMENTS_TESTNET=false
    NOWPAYMENTS_API_KEY=your_production_api_key_here
    NEXT_PUBLIC_BASE_URL=https://yourdomain.com
    

Project Structure

  • app/ - Next.js app directory
    • api/drops/ - API routes for drop management
    • api/payments/ - Payment integration endpoints
    • admin/ - Admin panel page
    • components/ - React components
  • lib/db.ts - Database connection pool
  • lib/nowpayments.ts - NOWPayments API configuration
  • cbd420.sql - Database schema
  • migrations/ - Database migration files
Description
No description provided
Readme 317 KiB
Languages
TypeScript 93.1%
HTML 4.4%
CSS 2.4%