← Phase 4 / M23 — Récompenses & Loyalty Web3

🏅 Récompenses & Loyalty Web3

Programme de fidélité nouvelle génération : NOMIIQPoints gagnés par actions, badges NFT vérifiables on-chain (Polygon ERC-721), wallet in-app sans complexité crypto, échange points contre réductions Premium et partenariats miles aériens & cashback hôtels.

Polygon
Blockchain low-cost
ERC-721
Badges NFT standard
2M+
NFT mintés cibles
14
User Stories

📋 14 User Stories — M23

US23.1 Must En tant qu'utilisateur, je gagne des NOMIIQPoints automatiquement : post publié (+10), lieu tagué (+5), itinéraire partagé (+25), review food (+8).
US23.2 Must En tant qu'utilisateur, je peux voir mon solde NOMIIQPoints et mon historique de gains/dépenses dans mon profil.
US23.3 Must En tant qu'utilisateur, je peux échanger mes points contre des réductions : 100pts = -1€ sur Premium, 500pts = 1 mois Premium offert.
US23.4 Must En tant qu'utilisateur, mes badges vérifiés (Pionnier, Explorateur, Safety Hero…) sont mintés automatiquement sur Polygon ERC-721.
US23.5 Must En tant qu'utilisateur, je dispose d'un wallet in-app (Thirdweb) sans seed phrase ni complexité crypto — juste mon compte NOMIIQ.
US23.6 Must En tant qu'utilisateur, je peux voir ma galerie de NFT/badges on-chain dans mon profil et les partager sur les réseaux sociaux.
US23.7 Should En tant qu'utilisateur, je reçois un badge NFT "First Visitor" si je suis le premier à taguer un lieu dans NOMIIQ.
US23.8 Should En tant qu'utilisateur, je reçois un NFT "Pays Visité" (collection drapeau) pour chaque pays vérifié dans mon historique NOMIIQ.
US23.9 Should En tant qu'utilisateur, je peux connecter mon Metamask ou Coinbase Wallet pour recevoir mes NFT dans mon wallet externe (opt-in).
US23.10 Should En tant qu'utilisateur, je peux vendre ou transférer mes badges NFT sur un marketplace secondary (OpenSea, Blur) si le créateur l'autorise.
US23.11 Should En tant qu'utilisateur, mes points sont convertibles en miles aériens partenaires (Air France KLM Flying Blue, Lufthansa Miles & More).
US23.12 Could En tant qu'utilisateur, des NFT en édition limitée sont émis pour les events NOMIIQ (ex : "Bêta Fondateur 2025").
US23.13 Could En tant que créateur, je peux émettre des NFT exclusifs pour les acheteurs de mes itinéraires premium.
US23.14 Could En tant qu'admin, je peux configurer des campagnes de double-points (ex : "Semaine Asie : x2 points sur posts en Asie").

⛓️ Stack Blockchain — Wallet Abstraction

Smart Contracts
NOMIIQBadge.sol
ERC-721 — badges non-transférables (soulbound)
NOMIIQCollect.sol
ERC-721 — collectibles transférables (pays, events)
NOMIIQPoints.sol
ERC-20 — points de fidélité on-chain (opt-in)
Audit CertiK
Avant déploiement mainnet Polygon
Infrastructure
Thirdweb Engine
Wallet-as-a-Service, pas de seed phrase visible
Polygon POS
Mainet — frais gaz < 0.001€ par mint
Alchemy RPC
Node Polygon fiable, webhooks events
IPFS + Arweave
Stockage permanent des métadonnées NFT
OpenZeppelin Defender
Multi-sig admin, monitoring smart contracts
Expérience Utilisateur
Wallet in-app
Compte NOMIIQ = wallet (aucune clé privée visible)
Export optionnel
Exporter vers Metamask/Coinbase en 1 tap
Gas abstraction
NOMIIQ paie le gaz pour les mints utilisateurs
Gasless relay
Transactions signées côté serveur (meta-tx)
Fallback off-chain
Si blockchain down, badges stockés en DB avec flag

🗄️ Tables Loyalty & Web3

⭐ Table loyalty_points

id UUID PRIMARY KEY
user_id UUID → users
balance INT DEFAULT 0
lifetime_earned INT DEFAULT 0
lifetime_spent INT DEFAULT 0
updated_at TIMESTAMPTZ

📜 Table points_transactions

id UUID PRIMARY KEY
user_id UUID → users
type ENUM(earn,spend,expire,bonus)
amount INT NOT NULL
reason TEXT -- 'post_created','premium_redeem'
entity_id UUID -- post_id, etc.
occurred_at TIMESTAMPTZ

🏅 Table nft_badges

id UUID PRIMARY KEY
user_id UUID → users
badge_type TEXT -- 'pioneer','country_fr','first_visitor'
contract_type ENUM(soulbound,collectible)
token_id BIGINT
contract_address TEXT
chain TEXT DEFAULT 'polygon'
metadata_uri TEXT -- IPFS CID
tx_hash TEXT
mint_status ENUM(pending,minted,failed)
minted_at TIMESTAMPTZ