DEV Community

Cover image for We Gave an AI $50 and Made It VP of Growth. Here's What Happened.

We Gave an AI $50 and Made It VP of Growth. Here's What Happened.

MoniBot: An Autonomous AI Agent Running MoniPay's Growth Strategy

We Gave an AI $50 and Made It VP of Growth. Here's What Happened.

TL;DR: MoniBot is a fully autonomous AI agent managing real marketing campaigns for MoniPay. It schedules giveaways, processes blockchain transactions, and interacts with users on Twitter—all without human intervention. And it's live right now.


The Experiment

What happens when you give an AI agent $50 and put it in charge of user acquisition? We built MoniBot to find out.

MoniBot is an autonomous agent that serves as MoniPay's VP of Growth. It doesn't just simulate marketing—it executes real campaigns with real money on the Base blockchain, manages a Twitter presence, and makes strategic decisions about when and how to engage users.

Current Campaign: MoniBot has scheduled two giveaways today (4pm and 8pm WAT), giving $1 to the first 5 people who respond to each campaign tweet with their MoniPay username.

Join the campaign →


Technical Architecture

MoniBot is built on a three-layer architecture that separates concerns while maintaining tight integration:

Layer 1: The Silent Worker (Execution Engine)

The Worker Bot is MoniBot's execution layer—a headless Node.js service that:

  • Polls Twitter for campaign replies and P2P payment commands using Twitter API v1
  • Processes blockchain transactions via a custom MoniBotRouter smart contract on Base
  • Enforces business logic: first-come-first-serve grants, deduplication, allowance checks
  • Does NOT interact with Twitter directly—it's completely silent

Key Innovation: Database-Driven Campaign Management

Instead of hardcoding campaign logic, the Worker Bot queries active campaigns from Supabase:

\`javascript
// Fetch active campaigns from database
const activeCampaigns = await getActiveCampaigns();

for (const campaign of activeCampaigns) {
// Search for replies to this specific campaign
const replies = await twitterClient.v2.search({
query: conversation_id:${campaign.tweet_id} -from:monibot,
max_results: 100
});

// Process grants until campaign limits reached
for (const reply of replies.data.data) {
await processGrantForPayTag(targetPayTag, reply, campaign);
}
}
`\

This means new campaigns can be created, modified, or cancelled without touching code—AI just updates the database.

Layer 2: The Personality Layer (Social Agent)

The VP-Social service handles all Twitter interactions:

  • Polls monibot_transactions table for unreplied transactions
  • Generates contextual replies using AI (via Gemini/Claude)
  • Posts campaign announcements based on scheduled jobs
  • Handles errors gracefully: skips deleted tweets, retries failed posts, manages rate limits

Key Innovation: Handshake Architecture

The Worker Bot and VP-Social never communicate directly. Instead, they use the database as a message queue:

  1. Worker processes a grant → Logs to monibot_transactions with replied: false
  2. VP-Social polls for replied: false rows → Generates reply → Posts to Twitter → Marks replied: true

This separation means we can:

  • Scale each service independently
  • Add new social platforms (Discord, Telegram) without touching blockchain logic
  • Replace the AI personality without affecting transaction processing

Layer 3: The Blockchain Layer (Smart Contracts)

MoniBotRouter Contract (Base Mainnet: 0xBEE3...A516)

A custom smart contract that:

  • Manages MoniBot's USDC treasury for grants
  • Processes P2P transfers using user allowances
  • Enforces deduplication on-chain (prevents double-spends even if Worker crashes)
  • Calculates fees deterministically (5% platform fee)

\`solidity
// On-chain deduplication for campaign grants
function executeGrant(
address recipient,
uint256 amount,
string calldata campaignId
) external onlyExecutor {
bytes32 grantKey = keccak256(abi.encodePacked(campaignId, recipient));
require(!processedGrants[grantKey], "ERROR_DUPLICATE_GRANT");

processedGrants[grantKey] = true;
// ... execute transfer
Enter fullscreen mode Exit fullscreen mode

}
`\

This ensures even if the Worker Bot restarts mid-campaign and re-processes tweets, users can't receive multiple grants.


The Stack

Component Technology Purpose
Worker Bot Node.js + Twitter API v2 Campaign processing & blockchain execution
VP-Social Node.js + OAuth2 Twitter personality & replies
Database Supabase (PostgreSQL) State management & handshake queue
Blockchain Base (Ethereum L2) USDC transfers & on-chain deduplication
Smart Contract Solidity Treasury management & fee calculation
AI Personality Gemini/Claude Reply generation & tone
Payments MoniPay API User verification & wallet lookups

What Makes This Interesting

1. True Autonomy

MoniBot isn't a chatbot with a payments plugin. It's an autonomous agent that:

  • Makes strategic decisions (when to run campaigns)
  • Manages a real budget ($50 USDC)
  • Executes financial transactions with real consequences
  • Interacts with users in natural language

2. Production-Grade Error Handling

We've handled every edge case we could think of:

  • Duplicate grants (database + on-chain checks)
  • Deleted tweets (403 error handling)
  • Insufficient allowances (graceful degradation)
  • Contract balance exhaustion (alerts without crashing)
  • Campaign auto-completion (participant limits + budget tracking)

3. Gas-Free UX for Recipients

Recipients don't pay gas fees. MoniBot's executor wallet pays for all transactions. Users just need a MoniPay account.

4. First-Come-First-Serve with Deduplication

Campaign grants are processed in real-time as replies come in, but multiple layers prevent double-spends:

  • Worker checks campaign_grants table before processing
  • Smart contract checks processedGrants mapping before executing
  • If Worker restarts, it skips already-processed tweets

Current Status

Live Campaigns Today:

  • 4pm WAT: $1 to first 5 respondents
  • 8pm WAT: $1 to first 5 respondents

How to Participate:

  1. Create a MoniPay account at monipay.xyz
  2. Follow @monibot on Twitter
  3. When the campaign tweet posts (4pm or 8pm WAT), reply with your MoniPay username (monitag)
  4. First 5 valid replies receive $1 USDC instantly (no gas fees)

Join the campaign →


What We Learned

Challenges

  1. Twitter API 403 errors: Some tweets become unavailable between processing and reply—we handle this by marking transactions as skipped
  2. Infinite polling loops: Early versions re-processed the same tweets forever. Solution: Mark tweets as processed even on early returns
  3. Transaction labeling: Ensuring receipts show "MoniBot Grant" instead of wallet addresses required careful sync logic
  4. Real AI agents vs overhyped frameworks: OpenClaw is overhyped. True AI agents aren't about complex framework setups they're about natural language interfaces that just work. MoniBot responds to tweets, makes decisions, and executes transactions through simple chat interactions. That's what AI should represent: clicks and conversations, not configuration files.

Wins

  1. Database driven campaigns: New campaigns without code deploys
  2. Separation of concerns: Blockchain logic and social personality are completely independent
  3. On-chain safety: Smart contract prevents double-spends even if Worker crashes mid campaign

Open Questions

We're still exploring:

  • How far can we push autonomy? Should MoniBot decide campaign budgets and timing on its own?
  • Can we decentralize the executor? Right now one wallet signs all transactions could we use threshold signatures?
  • What other social platforms? Discord? Telegram? Farcaster?

Try It Yourself

The campaign is live. Create a MoniPay account, grab your monitag, and reply to MoniBot's campaign tweets when they drop at 4pm and 8pm WAT today.

First 5 get paid. No gas. No deposit. Just reply and receive.

Links:


Team

Built by the MoniPay team as an experiment in autonomous agent architecture for crypto payments.

Tech Stack: Node.js, Supabase, Base, Solidity, Twitter API v2, Gemini AI

Budget: $50 USDC (managed autonomously by MoniBot)

Status: Live in production


MoniBot is live right now. Join the experiment.

Top comments (0)