Mint site development: smart contract, allowlist, and gallery

A public mint under load often runs into an overloaded allowlist: some buyers leave, and the reserve goes to waste. We develop NFT mint sites turnkey — contract, gallery, and a managed allowlist that reduces losses at peak and keeps the launch under control.

Blockchain Development Services

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1375
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1349
  • B2B Advance company logo design
    B2B Advance company logo design
    794
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1087
  • AIDER company logo development
    AIDER company logo development
    1032
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1129

NFT landing page: where the mint breaks under load

An NFT landing page is not a showcase with images, but the entry point to writing on the blockchain: the page, wallet, contract, and gallery must converge into a single state. While traffic is steady, everything looks like a single “mint” button.

At peak, when hundreds of wallets hit the page at the same time, it is not the design that breaks but the flow — and that is where most launch participants are lost.

The first point of failure is an overloaded token issuance queue. The contract executes minting sequentially: during a spike, requests go into waiting, and the interface says nothing about it.

Without a queue number and protection against resubmission for the same address, a person presses the button a second and third time and sends transactions destined to revert. This is closed with an explicit queue, wallet-based idempotency, and a per-address limit.

The second is a desync between the gallery and the contract state. Cards request metadata before the transaction is confirmed on the Ethereum network and show empty previews.

The scheme that withstands load: ownership and metadata are read from confirmed state, and the optimistic display of the card is rolled back if confirmation does not arrive within the allotted window.

The third is a session break at the moment of confirmation: closed tab, lost connection, wallet reset. The operation has already gone to the network, but the person does not know about it.

Therefore, status is restored by wallet address, not by local session: mint history, re-checking state, and a clear outcome — confirmed or reverted.

Next, we break down how each of these points is closed in the contract, indexing, and client side.

What managed mint provides: access, speed, reserve

Managed mint is when the right to issue, its order, and failure handling live in the contract and an accompanying service, not in a single script on the page. Below is what an engineer checks before launching a stage and what measurable effect each item provides.

  • Access list. Membership is checked by the contract itself against a pre-collected set of addresses, not by a filter on the interface side. The class of failures “not on the list, but the transaction has already been sent” goes away, and bots do not pick apart the reserve of the first minutes.
  • Issuance speed. One wallet signature — one operation, without intermediate confirmations and queues on the client. Time to confirmation is kept within one block, and the share of successful issuances is 99% and above even at peak.
  • Backup circuit. A second Ethereum node and a separate signer are enabled if the primary provider returns errors. The stage does not stop because one network access provider goes down.
  • Idempotency. Resubmission does not create a second token: the contract remembers the address and issuance number. A user who refreshes the page at the moment of confirmation does not lose the right and does not get a duplicate.
  • Per-wallet limit. No more than a specified number of tokens per address — cuts off bulk buying from one key and evens out distribution among participants.
  • Observability. The gallery is built from contract events, not by polling the node for each visitor. The page does not degrade as traffic grows, and the discrepancy between issued and displayed is visible immediately.

Together, these items remove an entire class of failures: a stage that used to end in minutes, leaving half the participants with an error, turns into a predictable procedure.

Managed mint provides not only issuance speed but also a clear picture before and after — how many addresses were allowed, what share reached a token, and exactly where the rest dropped off.

NFT landing page formats: comparison of approaches

The mint mode determines the contract structure, permission checkpoints, and how the gallery receives data about issued tokens. Reworking after the fact means redeploying the contract, re-auditing the code, and losing addresses that have already made it into the access list. Below are four schemes most often chosen between.

Mode When it fits Limitations
Public mint Open start, maximum reach Need a per-wallet limit and bot protection; peak load on the node and gallery
Allowlist mint Priority for your community, predictable demand The list is fixed in advance; with thousands of addresses — a proof tree and careful issuance
Staged issuance Waves with different access conditions More complex contract state: timings, limits, and counters for each stage; risk of a stuck stage
Invite-only mint Closed access, control over composition Signature verification on the server, key rotation, launch dependency on service availability

In practice, modes are combined: the first waves go by allowlist, then public mint opens. The ERC-721 base with metadata in external storage does not change — only the check before token issuance differs. That is why we put all branches into one contract and enable the needed one without redeployment.

Before launch, we run a load scenario: how many wallets mint simultaneously, how the gallery behaves under mass requests, and what happens if the allowlist issuance service is unavailable.

Implementation stages: from task audit to handover

The work route for an NFT landing page is the same for public mint and for a closed allowlist: first we fix the issuance logic, then assemble the contract, and only after that — the interface. The reverse order forces the gallery to be redone after every scheme change.

  1. Mint logic audit. How many tokens, how many rounds, how the allowlist is distributed, whether there is a per-wallet limit, whether a hidden buy with later reveal is needed. The output is a list of rules, not a presentation.
  2. Contract scheme. We choose the standard for the scenario — unique instances or replicated copies — and fix where metadata is stored, how mint permission is signed, and what the wallet sees on a retry.
  3. Contract assembly. Rounds, limits, administrator roles, pause, team reserve. Checks are at the boundaries: the last token of a round, an exhausted allowlist, an attempt to buy outside the window.
  4. Gallery setup. Wallet connection, metadata loading, states before and after reveal, display of already issued tokens. We look at it on a slow mobile connection, not only on desktop.
  5. Testing on a test environment. Rejected transaction, break during confirmation, wallets racing for the last token, simultaneous connections under load.
  6. Project handover. Repository, issuance scheme, contract addresses, accesses, pause and emergency mode regulations, plus a walkthrough with your team.
  7. Launch duty. An engineer is in touch at the moment of opening — adjusting round parameters and handling incidents without waiting for a response.

Deliverables: contracts, schemes, regulations

The work ends not with a demonstration but with handover of a working package: a repository with source code, deployed addresses, a description of issuance parameters, and regulations.

An NFT landing page without this remains a black box — the client cannot change stage conditions, onboard a new team, or explain to a contractor how issuance works.

  • Smart contract source code — the code of the mint, gallery, and service modules with comments for each function, so the logic does not have to be reconstructed from memory.
  • Issuance parameters description — price and per-address limit, stage windows, batch size, metadata reveal rules: everything is moved into settings and changes without rewriting the contract.
  • Access policies — administrator roles and their powers, the procedure for replenishing the allowed address list, conditions for emergency stopping of issuance.
  • Integration schemes — how the site, wallet, and network exchange data, where the access signature is verified, and at what moment the result is recorded.
  • Contract documentation — purpose of public functions, list of events, and a state table that shows the current issuance stage.
  • Launch regulations — checklist before publication, sequence of opening stages, rollback plan in case of failure.
  • Control transfer procedure — what and in what order is transferred to the client’s keys after release.

Package designed so that any team familiar with the network can run the project further — without our support.

Case: mint platform with managed allowlist

Mint platform case: a collection of 10,000 images, managed allowlist — an address got into the allowlist by wallet signature; outside the list, the contract rejected the transaction before gas was spent.

Measurements were taken twice: on a load run a week before launch and from logs on mint day, when the real peak of requests arrived.

Before changes

Gallery pulled metadata and previews with a separate request for each token — at 600 simultaneous requests the cache could not cope, and some tiles remained empty.

The share of failed issuances reached 18%: this included both transactions rejected by the contract due to the race for the allowlist and an outdated gas price in the wallet. Median confirmation at peak stretched to four minutes, and some buyers sent the transaction again.

What was changed

The contract was assembled on audited OpenZeppelin libraries: signature and per-address limit verification was performed before state write, so rejection came without gas loss.

Metadata was moved to decentralized storage and covered with a caching layer; the gallery switched to batch preloading instead of a request for each token.

After

At 1,200 simultaneous requests, tiles were served without empty spots, and time to first render stayed within two seconds. The share of failed issuances dropped to 0.6%, median confirmation at peak was about 30 seconds, and resubmissions almost disappeared. The peak of requests was survived without manual intervention and without stopping the mint.

How does an allowlist differ from a public mint?

An allowlist is a mode in which the right to mint is confirmed in advance: the wallet receives a signature from the server or gets into an access tree, and the contract accepts the transaction only with valid confirmation. Public mint does not check: a flag is enabled, and any address that pays the fee can mint.

Load on issuance differs by an order of magnitude. Public mint gathers everyone in the first second of launch — a spike in requests to the node, a fight for a place in the block, rising fees, and drop-offs due to waiting.

An allowlist spreads minting across windows or waves: the peak is lower, and the number of simultaneous confirmations is calculated in advance.

Bot risk is different too. Scripts work against public mint: they deploy hundreds of wallets, bypass simple checks, and buy up the limit in the first blocks, while the share of live participants falls.

In an allowlist, a bot is useless — the signature is tied to a specific address, and the per-wallet quota is set by the contract.

Gallery integration depends on whether the final collection volume is known. After an allowlist, it is determined in advance: metadata and previews are prepared in a batch, and the gallery serves the assembled issuance immediately.

With public mint, the outcome is unknown until closing — the gallery is built on a query sample, and metadata reveal is postponed.

In practice, modes are combined: first a wave by allowlist, then a public stage with a per-wallet limit. The scheme cuts the peak, removes most bot risk, and leaves the gallery with a predictable issuance load.

Common technical doubts about mint logic

The client’s technical side asks not about page design but about how the logic behaves after launch: what can be changed, what happens if the interface fails, and who will confirm that the rules are fair. Below are five questions we work through before starting.

Can the allowlist be changed after launch?

Yes, if access is stored in a separate registry rather than in the page markup. Adding or removing an address is one transaction; already issued tokens and the mint price do not change.

What happens if the site goes down at the moment of launch?

The page is only the interface: the logic itself lives on the network, so minting continues via a direct call. We prepare a backup static copy on an independent platform in advance so that access to minting is not lost.

Do you reveal the contract code?

Yes. The source is published in the network explorer and verified against the bytecode — anyone can check the limits, distribution, and administrator rights. This closes the trust question for both you and your audience.

Can the mint be moved to another date?

The start date is a parameter, not a hardcoded value. The move is performed with one transaction, the marked allowlist is preserved, and no page rework is required.

Who can withdraw funds or change the rules?

Administrative functions are limited to a separate role and described in the documentation. No hidden paths for changing logic after launch remain in the contract.

Let’s discuss the task: what to send for an estimate

So that the estimate and work plan are based on facts rather than assumptions, we need project inputs. Below is the minimum from which the technical scheme and stage order are assembled.

If something is not there yet, it is not a blocker: we can calmly agree on some decisions along the way.

  • Network and token: which network the mint takes place on, which fungible token standard you use, whether your own collection is planned or integration with an existing one.
  • Supply and stages: how many tokens in total, how many waves the issuance is divided into, by what criterion an address gets into the next wave.
  • Allowlist rule: how the list is formed (manual upload, subscription to a third-party service, staking), whether protection against address substitution and duplicates is needed.
  • Gallery: mint page and card mockups, whether rarity traits are needed, “minted” status, filters, and links to external catalogs.
  • Issuance management: which wallet holds control, who signs transactions, whether multisig and role separation are needed.
  • Fault tolerance: what we show during network overload or wallet failure, who handles requests, and how quickly a response is needed.
  • Constraints: announcement date, requirements for supported wallets and domain, repository and hosting accesses.

Send this in any convenient form — a table, links to mockups, or text. We will review the inputs and return with an estimate and work plan: contract scheme, stage order, timeline, and responsibility boundary — what we do and what remains on your side. We can discuss the task on a call if the details are easier to talk through by voice.