# Getting Started

Welcome to the Frensei Launchpad documentation. Frensei is a creator-first launchpad on the Sei Network, designed to simplify NFT launches while offering advanced configurability and scalability. This documentation outlines the Frensei smart contract functionality, platform features, and best practices for creators.

***

### 1. Overview

Frensei is a platform built by [Diddybread](https://x.com/diddybread), as part of the [On-Chain Orbiters](https://x.com/OrbitersNFT) roadmap, the first fully on-chain NFT on Sei. Designed for NFT project creators, Frensei offers:

* A powerful ERC721A-based smart contract
* On-chain royalties
* Burnable NFTs
* Dynamic minting phases with allowlists
* An intuitive creator portal

The platform is entirely free to use. However, it assumes a baseline understanding of NFTs and EVM-contracts.

***

### 2. Key Features

#### ✅ Scalable Launchpad

Automatically adjusts to accommodate increasing traffic.

#### ✅ Responsive Design

Optimized for all screen sizes, including mobile.

#### ✅ Allowlist Manager

Supports CSV-based allowlists with optional mint quantities per address.

#### ✅ Dynamic Mint Allocations

Allow different users to mint different quantities in allowlisted phases.

#### ✅ Wallet Checker

Integrated on the collection page to ensure wallets are mint-ready.

#### ✅ Creator Portal

Manage mints, set token URIs, configure mint phases, and withdraw funds directly from the UI.

#### ✅ On-Chain Royalties

Native support for ERC2981 royalty standard.

#### ✅ Burn Support

Built-in burnable functionality using ERC721ABurnable.

***

### 3. Smart Contract Functionality

#### Contract Name: `Frensei`

* Standard: ERC721A
* Inherits: `ERC721A`, `ERC721ABurnable`, `ERC2981`, `Ownable`, `ReentrancyGuard`

#### Core Concepts

**Mint Phases**

Each phase includes:

* `startTime` / `endTime`
* `price`
* `merkleRoot` (for allowlists)
* `maxMintPerWallet` (0 = unlimited)
* `mintableSupply` (0 = remaining global supply)

Multiple phases can be active concurrently.

**Minting**

* `mint()` function validates phase, proof (if needed), supply limits, and processes payment (Sei or ERC20).
* Dynamic allowlists via Merkle trees allow different mint quantities per address.

**Token URI Management**

* `baseTokenURI` + optional iterative suffixing (e.g., `/1.json`, `/2.json`, etc.)
* `setTokenURI()` allows override per-token

**Royalties**

* Configurable receiver and percentage (in basis points)
* Uses ERC2981

**Payments**

* Supports Sei or ERC20
* Configurable before minting begins
* Collected funds can be withdrawn via `withdrawFunds()`

***

### 4. Creator Responsibilities

#### Metadata Standards

Creators are responsible for producing valid token metadata. Follow the OpenSea metadata standard: <https://docs.opensea.io/docs/metadata-standards>

#### Token URI Setup

1. **Base URI**: A static string like `https://mycdn.com/metadata/`
2. **Iterative URIs**: Add numbered suffix like `/1.json`
3. **Per-token URI**: Use `setTokenURI()` to override

#### Allowlist CSV Formats

* Simple:

  ```
  0xabc...
  0xdef...
  ```
* With quantity:

  ```
  0xabc...,2
  0xdef...,1
  ```
* Default quantity is 1 if not specified.

***

### 5. Common Errors and Troubleshooting

| Error                      | Meaning                                       |
| -------------------------- | --------------------------------------------- |
| `NotEnoughSupplyAvailable` | Supply limit reached (phase or global)        |
| `InvalidPhase`             | Phase index out of bounds or not active       |
| `InvalidProof`             | Merkle proof incorrect                        |
| `MintAllowanceExceeded`    | Wallet mint limit exceeded                    |
| `InsufficientPayment`      | Sei/Token sent does not match required amount |
| `NonExistingToken`         | Token URI called on a non-minted token        |
| `InvalidPaymentToken`      | ERC20 token address is invalid or zero        |
| `FundTransferFailed`       | Sei withdrawal failed                         |

***

### 6. Advanced Configuration

#### Switching Payment Type

Use `setPaymentToken()` to configure Sei vs ERC20 payment. Must be set before minting starts.

#### Updating Mint Phases

Use `setMintPhases()` with an array of phases. Replaces all existing phases.

#### Freezing or Unfreezing Minting

Use `setMintable(true|false)` to toggle.

***

### 7. Security Considerations

* Uses `ReentrancyGuard` on mint and withdraw
* Validates Merkle proofs on-chain
* Owner-only functions clearly scoped
* Tokens use `_exists()` checks for URI safety

***

### 8. FAQ

**Q: How do I start a mint?**

* Set, save and sync mint phases and token URI
* Toggle `mintable` to true

**Q: How do I check if a user is on the allowlist?**

* Each collection on Frensei has a dedicated whitelist checker which can be found at <mark style="color:purple;"><https://frensei.io/collections/{your-collection-slug}/allowlist></mark>

**Q: Can I change the metadata after mint?**

* Yes, using `setTokenURI(tokenId, newUri)` for specific tokens or `setBaseURI(baseURI, extension, iterative)` for the entire collection

**Q: Can I limit users differently?**

* Yes, by setting different `allowedMints` in your Merkle tree

**Q: Is there a platform fee?**

* No. Frensei is free to use.

***

### 9. Contact & Support

The platform is free to use and we offer no direct support services.

For bug reports or feature requests, join our [Discord](https://discord.gg/rwTVENewZk).

***

Happy minting 🚀


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://frensei-io.gitbook.io/frensei/getting-started.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
