Tech stack

  • Frontend: Vanilla JS, CSS animations, canvas-based particle effects
  • OASIS WEB4: Avatar SSO, NFT minting (Solana + Ethereum), Wallet, Karma awards for founders
  • npm: @oasisomniverse/web4-api

Step 1 — Avatar Login

auth.js
import { OasisWeb4Client } from '@oasisomniverse/web4-api';

const oasis4 = new OasisWeb4Client({ baseUrl: 'https://api.web4.oasisomniverse.one' });

export async function loginOrRegister(email, password, isNew) {
  const fn = isNew ? oasis4.avatar.register : oasis4.avatar.authenticate;
  const { result, isError, message } = await fn.call(oasis4.avatar, { email, password });
  if (isError) throw new Error(message);
  oasis4.auth.setToken(result.token);
  return result.avatar;
}

Step 2 — Whitelist Check

whitelist.js
async function checkWhitelist(avatarId) {
  // Whitelist is a private Holon containing allowed avatar IDs
  const { result: wl } = await oasis4.data.loadHolonByCustomKey({ key: 'founder-whitelist' });
  const isWhitelisted = wl.customData.avatarIds.includes(avatarId);

  // Also check if they've already claimed
  const { result: wallet } = await oasis4.nft.getWallet({ avatarId });
  const alreadyClaimed = wallet.nfts.some(n => n.collectionId === 'founder-2025');

  return { isWhitelisted, alreadyClaimed };
}

Step 3 — Mint the Founder NFT

mint.js
async function claimFounderNFT(avatarId) {
  const { isWhitelisted, alreadyClaimed } = await checkWhitelist(avatarId);
  if (!isWhitelisted) throw new Error('Not whitelisted');
  if (alreadyClaimed)  throw new Error('Already claimed');

  const { result: nft } = await oasis4.nft.mint({
    avatarId,
    collectionId:  'founder-2025',
    title:         'OASIS Founder — Genesis Edition',
    description:   'One of 1,000 original OASIS Founders. Grants lifetime Luminary karma tier access.',
    imageUrl:      'https://cdn.oasisomniverse.one/nft/founder-genesis.mp4',
    providerType:  'SolanaOASIS',
    attributes: [
      { trait: 'Edition',    value: 'Genesis' },
      { trait: 'Year',       value: '2025' },
      { trait: 'Access',     value: 'Luminary' },
    ],
  });

  // Award founding karma — unlocks Luminary WEB6 AI tier
  await oasis4.karma.award({ avatarId, amount: 250000, reason: 'Founder NFT claimed' });

  return nft;
}

Step 4 — Displaying the Wallet

wallet-display.js
async function renderWallet(avatarId) {
  const { result: wallet } = await oasis4.nft.getWallet({ avatarId });
  const grid = document.querySelector('#nft-grid');

  wallet.nfts.forEach(nft => {
    const card = document.createElement('div');
    card.className = 'nft-card';
    card.innerHTML = `
      <video src="${nft.imageUrl}" autoplay loop muted></video>
      <div class="nft-title">${nft.title}</div>
      <div class="nft-chain">${nft.providerType}</div>
    `;
    grid.appendChild(card);
  });
}
💡
Source code

Browse the full Founder NFT site at github.com/NextGenSoftwareUK/OASIS/tree/master/NFTFoundersLandingPage ↗