by EmpowerTours
The launchpad to NITRO.
Train. Build. Fund.
TURBO is EmpowerTours' intensive 12-month program designed for aspiring Web3 founders in Latin America. Go from idea to product — with mentorship, community, and real support behind you.
The end goal? Graduates emerge ready to apply for Monad's NITRO, which awards $500,000 USD per team. TURBO is the training ground. NITRO is the destination.
Every tier gets you closer to NITRO. Your monthly contribution fuels the community pool that funds graduating founders.
TURBO is not venture-backed. It's collectively funded by its own members. Every monthly payment feeds the Founders Club pool.
Each graduating founder receives ~100,000 MXN from the community pool to launch their project.
TURBO runs on a verified smart contract on Monad. All payments, pool balances, and founder distributions are publicly auditable. No trust required — just code.
Monthly WMON payment via payMonthly(). Soulbound NFT membership card minted on first payment.
95% goes to the Community Pool held in the contract. 5% goes to the EmpowerTours treasury.
After 12 months, graduating founders are selected and receive WMON directly from the pool.
function payMonthly(Tier tier) external nonReentrant {Entry point for all payments. nonReentrant prevents reentrancy attacks.
require(c.active, "no active cohort");Can only pay during an active cohort period.
require(!m.banned, "member banned");Banned members are blocked from further payments.
if (m.tier == Tier.None) {First-time payer? Auto-register them as a new member.
m.tier = tier;Their chosen tier (Explorer/Builder/Founder) is locked in.
require(m.monthsPaid < MAX_PAYMENTS, "max payments reached");Hard cap at 12 monthly payments. Contract enforced — no overpaying.
require(block.timestamp >= m.lastPaymentTime + MIN_PAYMENT_INTERVAL,25-day minimum between payments prevents double-charging.
uint256 public constant TREASURY_FEE_BPS = 500; // 5%Treasury fee is hardcoded at 5%. Cannot be changed — ever.
uint256 price = tierPrice[m.tier];Reads the current WMON price for the member's tier.
require(price > 0, "tier price not set");Safety check — prevents payments if prices aren't configured.
uint256 fee = (price * TREASURY_FEE_BPS) / BPS_DENOMINATOR;Calculates 5% treasury fee. e.g. 139 WMON × 5% = 6.95 WMON.
uint256 toPool = price - fee;Remaining 95% goes to the community pool. e.g. 132.05 WMON.
wmon.safeTransferFrom(msg.sender, treasury, fee);5% sent to treasury wallet. SafeERC20 ensures transfer succeeds.
wmon.safeTransferFrom(msg.sender, address(this), toPool);95% locked in the contract. Held until founder distribution.
uint256 mintedTokenId = 0;NFT only minted on first payment — one card per member.
if (m.tokenId == 0) {Check if member already has a card. No duplicates.
_nextTokenId++;Sequential token IDs. Each card is unique.
_mint(msg.sender, mintedTokenId);Uses _mint (not _safeMint) — soulbound, no callback needed.
require(from == address(0) || to == address(0), "soulbound: non-transferable");Cards cannot be transferred or sold. Yours forever on Monad.
function tokenURI(uint256 tokenId) public view override returns (string memory) {On-chain SVG art. No IPFS dependency — fully on Monad.
function selectFounders(uint256 cohortId, address[] calldata founders, uint256[] calldata amounts)Owner selects graduating founders and how much each receives.
require(!c.active, "cohort still active");Distribution only after the cohort ends. No early withdrawals.
require(m.monthsPaid > 0, "never paid");Only members who actually paid can be selected as founders.
require(!m.isFounder, "already selected");Each founder can only be selected once. No double-dipping.
require(amount <= c.poolBalance, "exceeds pool balance");Cannot distribute more than what's in the pool.
c.poolBalance -= amount;Pool balance decremented. On-chain accounting.
wmon.safeTransfer(founders[i], amount);WMON sent directly from contract to founder's wallet.
import "@openzeppelin/contracts/access/Ownable2Step.sol";2-step ownership transfer. Prevents accidental owner change.
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";Blocks reentrancy attacks on payment and distribution functions.
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";Safe token transfers that revert on failure instead of returning false.
uint256 public constant MAX_TIER_PRICE = 2000 ether;Price cap at 2000 WMON. Prevents owner from setting absurd prices.
require(explorer <= builder && builder <= founder, "invalid tier ordering");Enforces Explorer < Builder < Founder pricing. Always.
// Update state BEFORE external calls (checks-effects-interactions)State updated before any token transfer. Industry-standard security pattern.
uint256 public constant GOVERNANCE_COHORT_THRESHOLD = 2;Council governance kicks in at Cohort 2. Cohort 1 uses admin direct selection.
function createProposal(uint256 cohortId, address[] calldata founders, uint256[] calldata amounts)Council members propose a founder slate with funding amounts. One active proposal per cohort.
require(founders.length > 0 && founders.length <= MAX_SLATE_SIZE, "invalid slate size");Max 10 founders per proposal. Prevents bloated slates.
p.endTime = block.timestamp + VOTING_PERIOD;7-day voting window. Starts immediately when proposal is created.
require(activeProposalForCohort[cohortId] == 0, "active proposal exists");Only one active proposal per cohort — prevents vote splitting.
function vote(uint256 proposalId, bool support) external onlyCouncilMember {Only council members can vote. Each member gets one vote per proposal.
require(!hasVoted[proposalId][msg.sender], "already voted");No double voting. One address, one vote.
if (totalVotes >= quorum && p.yesVotes > p.noVotes) {60% of council must vote AND yes > no for the proposal to pass.
function executeProposal(uint256 proposalId) external nonReentrant {Anyone (admin or council) can execute a passed proposal. Funds distribute on-chain.
_addFoundersToCouncil(p.founders);New graduating founders automatically join the council. It grows every cohort.
function vetoProposal(uint256 proposalId) external onlyOwner {Emergency veto — admin can block any active or passed proposal.
require(p.status == ProposalStatus.Active || p.status == ProposalStatus.Passed,Can veto during voting or after passing, but not after execution.
function selectFoundersDirect(uint256 cohortId, ...)Cohort 1 only: admin selects founders directly. Auto-adds them to council.
require(cohortId < GOVERNANCE_COHORT_THRESHOLD, "use governance for this cohort");Hard-coded: Cohort 2+ MUST use council governance. No admin override.
function renounceOwnership() public pure override { revert("renounce disabled"); }Admin cannot abandon the contract. Prevents accidental lockout.
require(amount <= c.poolBalance, "exceeds pool balance");Founder payouts are deducted from the pool. Any remainder stays in the contract.
c.poolBalance -= amount;Pool balance is tracked per cohort. After all founders are paid, leftover stays on-chain.
function withdrawRemainingPool(uint256 cohortId, address to, uint256 amount) external onlyOwner {Admin can withdraw leftover funds — roll into next cohort, refund members, or fund operations.
function quorumRequired() public view returns (uint256) {Council grows each cohort. Cohort 3 needs 60% of ~10 members (6 votes). Cohort 4 needs 60% of ~15 (9 votes).
if (_council.add(founders[i])) { emit CouncilMemberAdded(founders[i]); }New founders auto-join the council. The council never shrinks — only grows with each cohort.
Both contracts verified on Monad · Ownable2Step · ReentrancyGuard
TURBO is governed by smart contracts on Monad. Graduating Founder selection progressively decentralizes through a growing council of past winners.
Earvin selects ~5 Graduating Founders directly from any tier. Selected members are automatically added to the Founders Council.
Past Graduating Founders propose and vote on new Graduating Founder slates. 60% quorum, 7-day voting period. Admin retains emergency veto.
A council member submits a Graduating Founder slate — members from any tier — with proposed funding amounts.
Council members vote yes or no over a 7-day voting period. 60% quorum required.
If passed, anyone can execute. Funds distribute on-chain. New Graduating Founders join the council.
Becoming a TURBO candidate is simple. Complete these steps and you're in the pipeline.
Create your Bybit account using our referral code to become a TURBO candidate.
Use code: BPYPARJEnter the EmpowerToursEdu channel — your hub for updates, community, and resources.
Join channelFill out the application form and tell us what you want to build. We'll take it from there.
Scroll to applyAspiring Web3 founders in Latin America who want structured mentorship, community, and a path to building real products. Whether you're a developer, designer, or business mind — if you want to build on Monad, TURBO is your launchpad.
Graduates will be well-prepared to apply for Monad's NITRO, which provides $500,000 USD per team. TURBO gives you the skills, portfolio, and network to stand out.
Step 1: Register on Bybit using referral code BPYPARJ. Step 2: Join the EmpowerToursEdu Telegram channel. Step 3: Fill out the application form on this page.
Primary content is in Spanish with English resources available. Mentorship sessions can be in either language. We believe in building bridges between LATAM and global Web3.
TURBO is the training ground. NITRO is the destination. TURBO (by EmpowerTours) builds your skills and community over 12 months. NITRO (by Monad) is a 3-month elite program with $500K USD for 15 selected teams.
No. TURBO is designed to take you from zero to builder. With AI-powered vibe coding, anyone with drive can build real products. We'll teach you everything you need.
After Graduating Founders are selected and paid, any remaining WMON stays in the contract. The admin can roll leftover funds into the next cohort's pool as a head start, distribute pro-rata refunds to members, or allocate to program operations. The withdrawRemainingPool function is onlyOwner — fully transparent and auditable on-chain.
Yes. Every Graduating Founder is automatically added to the Founders Council when selected. The council grows with every cohort — Cohort 1 founders vote in Cohort 2, Cohort 1+2 founders vote in Cohort 3, and so on. Governance becomes increasingly decentralized over time.
Cohort 1 applications are open. Limited spots.