Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 

Repository files navigation

🎨 Minty - Web3 NFT Platform on Stellar

Minty Banner

Minty is a production-ready Web3 NFT platform built on the Stellar blockchain using Soroban smart contracts. Users can mint NFTs as proofs of participation, achievements, or community membership, and use them as verifiable access tokens across the Web3 ecosystem.

CI/CD License: MIT


🌟 Features

✨ Mint NFTs - Create unique NFTs with custom metadata stored on IPFS
πŸ”— Wallet Integration - Seamless Freighter wallet connection
🎨 NFT Gallery - View all your minted NFTs in a beautiful gallery
πŸ” Access Proofs - Use NFTs as verifiable credentials across dApps
⚑ Stellar Blockchain - Fast, low-cost transactions on Stellar
πŸ§ͺ Testnet Ready - Full testnet deployment for safe testing


πŸ—οΈ Architecture

graph TB
    subgraph "Frontend (Next.js 14)"
        UI[User Interface]
        Wallet[Wallet Integration]
        API[API Routes]
    end
    
    subgraph "Blockchain Layer"
        NFT[MintyNFT Contract]
        Access[AccessProof Contract]
        Stellar[Stellar Testnet]
    end
    
    subgraph "Storage Layer"
        IPFS[IPFS/Pinata]
    end
    
    UI --> Wallet
    Wallet --> NFT
    UI --> API
    API --> IPFS
    NFT --> Stellar
    Access --> NFT
    Access --> Stellar
Loading

πŸ› οΈ Tech Stack

Frontend

  • Framework: Next.js 14 (App Router)
  • Styling: TailwindCSS
  • State Management: Zustand
  • Data Fetching: TanStack Query
  • Wallet: Freighter SDK
  • Blockchain: Stellar SDK, Soroban RPC

Smart Contracts

  • Language: Rust
  • Framework: Soroban SDK
  • Blockchain: Stellar (Soroban)

Storage

  • Metadata: IPFS (Pinata)
  • Images: IPFS (Pinata)

DevOps

  • CI/CD: GitHub Actions
  • Frontend Hosting: Vercel
  • Version Control: Git

πŸ“¦ Repository Structure

minty/
β”œβ”€β”€ frontend/               # Next.js 14 application
β”‚   β”œβ”€β”€ app/               # App Router pages
β”‚   β”œβ”€β”€ components/        # React components
β”‚   β”œβ”€β”€ hooks/            # Custom React hooks
β”‚   β”œβ”€β”€ services/         # Business logic
β”‚   └── utils/            # Utility functions
β”œβ”€β”€ contracts/             # Soroban smart contracts
β”‚   β”œβ”€β”€ minty_nft/        # Main NFT contract
β”‚   β”œβ”€β”€ access_proof/     # Access verification contract
β”‚   └── shared/           # Shared utilities
β”œβ”€β”€ scripts/              # Deployment & utility scripts
β”œβ”€β”€ tests/                # Integration tests
β”œβ”€β”€ docs/                 # Documentation
└── .github/workflows/    # CI/CD pipelines

πŸš€ Quick Start

Prerequisites

Installation

  1. Clone the repository
git clone https://github.com/jrcity/minty.git
cd minty
  1. Install dependencies
npm install
cd frontend && npm install
  1. Setup environment variables
cp .env.example .env.local
# Edit .env.local with your configuration
  1. Build smart contracts
cd contracts
cargo build --target wasm32-unknown-unknown --release
  1. Deploy contracts to testnet
./scripts/deploy-contracts.sh
  1. Start the development server
cd frontend
npm run dev

Visit http://localhost:3000 πŸŽ‰


πŸ§ͺ Development Workflow

Run Smart Contract Tests

cd contracts
cargo test --all

Run Frontend Tests

cd frontend
npm test

Lint Code

npm run lint

Build for Production

# Build contracts
cd contracts
./build.sh

# Build frontend
cd frontend
npm run build

πŸ“ Smart Contracts

MintyNFT Contract

The main NFT contract handles minting, ownership, and metadata management.

Key Functions:

  • initialize(admin: Address) - Initialize contract
  • mint(to: Address, metadata_cid: String) -> u64 - Mint new NFT
  • balance_of(owner: Address) -> u32 - Get NFT balance
  • owner_of(token_id: u64) -> Address - Get token owner
  • token_uri(token_id: u64) -> String - Get metadata CID

See Smart Contracts Documentation for full API reference.

AccessProof Contract

Verifies NFT ownership and generates access proofs for external dApps.

Key Functions:

  • verify_nft(user: Address, nft_contract: Address, token_id: u64) -> bool
  • get_nft_balance(user: Address, nft_contract: Address) -> u32
  • generate_access_proof(user: Address, nft_contract: Address) -> Proof

🌐 Deployment

Deploy to Stellar Testnet

  1. Fund your account
./scripts/fund-account.sh YOUR_PUBLIC_KEY
  1. Deploy contracts
./scripts/deploy-contracts.sh
  1. Update contract IDs in .env.local

  2. Deploy frontend to Vercel

cd frontend
vercel deploy

See Deployment Guide for detailed instructions.


πŸ“š Documentation


πŸ§ͺ Testing

Minty includes comprehensive test coverage:

  • Smart Contract Tests: Rust unit tests for all contract logic
  • Frontend Unit Tests: React Testing Library for components
  • Integration Tests: E2E tests for complete user flows
# Run all tests
npm test

# Run contract tests only
cd contracts && cargo test

# Run frontend tests only
cd frontend && npm test

πŸ” Security

  • βœ… Input sanitization on all user inputs
  • βœ… Rate limiting on API endpoints
  • βœ… Wallet signature verification
  • βœ… Contract-level access control
  • βœ… Testnet isolation for safe testing

Security Audit: Community review welcome! See SECURITY.md


🀝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™ Acknowledgments


πŸ“ž Support


Built with ❀️ on Stellar

About

**Minty** is a production-ready Web3 NFT platform built on the Stellar blockchain using Soroban smart contracts. Users can mint NFTs as proofs of participation, achievements, or community membership, and use them as verifiable access tokens across the Web3 ecosystem.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors