Onboarding Flow
The landing page guides new users through a four-step onboarding process before they can access the DEX. All progress is tracked on-chain via NFT mints — there is no points database.
Steps
Connect Wallet
Connect a MetaMask or WalletConnect-compatible wallet. The app must be connected to Arc Testnet (Chain ID: 5042002).
Discord Verification
Authenticate with Discord via OAuth2. The app verifies that your Discord account is a member of the UnitFlow server (discord.gg/BkmmetAwvg). Requires scopes: identify, guilds.
X (Twitter) Verification
Authenticate with X via OAuth2. The app verifies that your X account follows @unitflowFinance. Requires permissions: tweet.read, users.read, follows.read.
Mint Genesis NFT
After both verifications, mint your Genesis Pass NFT. This is a one-time mint per wallet. The Genesis NFT marks you as a verified community member.
Earn Activity NFTs
Post on X mentioning "unitflow" or "unitflowFinance", paste the tweet URL into the verification field, and mint an Activity NFT. Repeatable once per day.
Verification State
Verification state is loaded from two sources on wallet connection:
- Blockchain — NFT ownership is read directly from the contract. Holding a Genesis NFT implies both Discord and X verifications were completed.
- Server — OAuth verification status (Discord/X) is stored server-side and fetched via API on load.
OAuth Endpoints
| Provider | Callback Route |
|---|---|
| Discord | /api/auth/discord |
| X (Twitter) | /api/auth/twitter |
Optional Database
The landing page optionally integrates with Supabase to persist verification records. If configured, a verifications table stores wallet address, Discord ID, Twitter ID, and verification timestamps. This is not required — the app falls back to blockchain state if no database is configured.
NFT Contract (Landing Page)
| Field | Value |
|---|---|
| Contract | unitflowNFT (ERC-721) |
| Address | 0x9e05C6075f9E890fC515EF86091414C77036f8FA |
| Network | Arc Testnet |
| Token Name | UnitFlow NFT |
| Token Symbol | ARCNFT |