**TL;DR:** I built a system that manages fan chats across 4 Fanvue creator accounts completely autonomously. No VAs, no manual work. It runs on a $24/month VPS, handles conversations 24/7, sends PPV at optimal times, auto-welcomes new subs, runs win-back sequences on expired ones, and has a live dashboard I check from my phone. Total build cost was about 3 weeks of development. Now it just... runs.
I'm not selling anything in this post. I'm sharing what I built, how it works, and the results so far because I've seen a lot of people on here asking about AI chatting and most of the answers are "use ChatGPT in a Chrome extension" which is... not it.
---
## The Problem I Was Solving
I manage 4 AI influencer accounts on Fanvue. The content generation side was automated (AI images, AI video, automated posting across IG/Threads/Twitter), but the CHATTING was still manual. I was either doing it myself or paying people.
The math wasn't working:
- A decent chatter costs $15-25/hr
- For 24/7 coverage you need 3 shifts minimum
- That's $1,200-2,000/week PER CREATOR
- Across 4 creators: $5K-8K/month just in chatter labor
- Quality was inconsistent — some chatters close $500/day, others $50
- Overnight shifts were impossible to fill reliably
- Every time a chatter quit, I lost 2-3 weeks training a replacement
So I built the whole thing from scratch.
---
## What The System Actually Does
This isn't a Chrome extension that suggests replies. This is a fully autonomous system that runs on a server with zero human involvement.
### Per-Creator AI Chatbot
Each creator has their own AI persona. Not just "respond like a hot girl" — it's trained on:
- The creator's actual messaging style (slang, emoji patterns, sentence structure)
- Revenue strategy (when to tease, when to push PPV, when to pull back)
- Fan tier awareness (free followers get different treatment than $50/month subs)
- Conversation memory (remembers previous chats, fan preferences, what they've bought)
The AI doesn't just reply — it follows a full revenue maximization strategy:
**Fan Tiering:**
- New subscriber → Welcome sequence → Build rapport → First PPV offer
- Active buyer → Drip exclusive content → Upsell bundles
- Dormant fan → Re-engagement sequence → Win-back offer
- Free follower → 10 message engagement limit → Push to subscribe
**PPV Dripping:**
The AI sends locked content at optimal times based on when each fan is most active. Not a blast to everyone at 3 PM — individualized timing.
### Auto-Welcome
Every new subscriber gets a personalized welcome within 60 seconds. The first message sets the tone and gets them engaged before they forget they subscribed. I tested this vs manual welcome (1-4 hour delay) and the conversion to first reply was 3x higher with instant welcome.
### Win-Back Sequences
When a subscription expires, the system runs a 4-step win-back campaign over 2 weeks:
1. Day 0: Casual "miss you" message
2. Day 3: Exclusive offer / tease
3. Day 7: FOMO trigger
4. Day 13: Final attempt with a deal
Each step has 3-4 message variants so it doesn't feel templated.
### Live Dashboard
I built a real-time dashboard that shows:
- Messages sent per creator per hour
- Fan engagement rates
- Token health status (more on this below)
- Revenue tracking per creator
- System health monitoring
I check it from my phone once a day. Usually everything is green.
### Token Management
This was the hardest part. Fanvue uses Ory Hydra with one-time-use refresh tokens. If you use a refresh token twice, it permanently dies. I've seen other people's systems break because they had two processes trying to refresh the same token.
My solution: a single Docker container that handles ALL token refreshes on a 15-minute cycle. Nothing else touches the tokens. It's been running for weeks without a single token death.
---
## The Tech Stack
Not going to gatekeep the architecture:
- **Server:** $24/month Vultr VPS (Ubuntu, Docker)
- **Orchestration:** n8n (self-hosted, workflow automation)
- **AI:** Mistral via OpenRouter for conversation generation (best price-to-quality ratio for this use case)
- **Database:** MySQL (fan records, conversation state, purchase history)
- **Token Refresh:** Custom Python script in Docker container
- **Dashboard:** Custom Python web app behind Cloudflare
- **Monitoring:** Health check workflow runs every 10 minutes, alerts me on Telegram if anything breaks
Each creator runs as a separate n8n workflow on a staggered timer (67s, 71s, 73s, 79s — all prime numbers so they never overlap). This prevents rate limiting and ensures only one API call happens at a time.
---
## What I Learned (The Hard Way)
**1. Fanvue's API is undocumented and full of gotchas.**
- Chat objects have NO uuid field — the fan UUID is at `chat.user.uuid`
- GET endpoint for messages is plural (`/messages`), POST endpoint for sending is singular (`/message`)
- Messages come newest-first. If you don't reverse them before sending to AI, the conversation is backwards and the AI gives nonsensical replies
- No `is_creator` field on messages — you have to check `sender.handle` to figure out who sent what
**2. Token management is life or death.**
If your refresh token gets used twice (race condition between two processes), it's permanently dead. You have to re-authenticate through the browser. I lost 3 days debugging this before I realized the solution was radical simplicity: ONE process refreshes tokens. Period.
**3. The AI needs guardrails, not freedom.**
Early versions would occasionally go off-script — promising things the creator doesn't offer, being too aggressive with PPV, or switching personality mid-conversation. The fix was strict system prompts with explicit boundaries and a "humanization" layer that adds natural imperfections (typos, delayed responses, varied message lengths).
**4. Free followers are a time sink.**
Unlimited free messaging = the AI spending all its time on people who will never pay. I added a 10-message limit for free followers, then a gentle push to subscribe. Revenue went up immediately.
---
## Results So Far
The system has been running autonomously for several weeks now. Key numbers:
- **Response time:** Under 60 seconds, 24/7 (vs 1-4 hours with VAs)
- **Uptime:** 99.9% (one restart in 3 weeks, auto-recovered)
- **VA cost eliminated:** $0/month (was projecting $3-5K/month)
- **Server cost:** $24/month
- **Messages per day:** 200-400 across all creators
- **No fan complaints** about AI detection (persona training works)
The system handles the entire fan lifecycle — from new subscriber welcome to dormant win-back — without me touching anything. I check the dashboard once a day, usually for 2 minutes.
---
## What's Next
I'm expanding the system to handle:
- Automatic PPV content creation (AI-generated images sent as locked messages)
- Cross-platform fan tracking (same fan on multiple platforms)
- Revenue prediction per fan (predict who will buy next and prioritize them)
---
## Questions?
Happy to answer technical questions about the architecture, Fanvue API, token management, or anything else. I'm NOT going to share the actual code or system prompts, but I'll answer "how did you solve X" type questions.
If anyone is running a similar setup or considering building one, I'm curious what your biggest bottleneck is. For me it was 100% the token management — everything else was straightforward once that was solved.
I'm not selling anything in this post. I'm sharing what I built, how it works, and the results so far because I've seen a lot of people on here asking about AI chatting and most of the answers are "use ChatGPT in a Chrome extension" which is... not it.
---
## The Problem I Was Solving
I manage 4 AI influencer accounts on Fanvue. The content generation side was automated (AI images, AI video, automated posting across IG/Threads/Twitter), but the CHATTING was still manual. I was either doing it myself or paying people.
The math wasn't working:
- A decent chatter costs $15-25/hr
- For 24/7 coverage you need 3 shifts minimum
- That's $1,200-2,000/week PER CREATOR
- Across 4 creators: $5K-8K/month just in chatter labor
- Quality was inconsistent — some chatters close $500/day, others $50
- Overnight shifts were impossible to fill reliably
- Every time a chatter quit, I lost 2-3 weeks training a replacement
So I built the whole thing from scratch.
---
## What The System Actually Does
This isn't a Chrome extension that suggests replies. This is a fully autonomous system that runs on a server with zero human involvement.
### Per-Creator AI Chatbot
Each creator has their own AI persona. Not just "respond like a hot girl" — it's trained on:
- The creator's actual messaging style (slang, emoji patterns, sentence structure)
- Revenue strategy (when to tease, when to push PPV, when to pull back)
- Fan tier awareness (free followers get different treatment than $50/month subs)
- Conversation memory (remembers previous chats, fan preferences, what they've bought)
The AI doesn't just reply — it follows a full revenue maximization strategy:
**Fan Tiering:**
- New subscriber → Welcome sequence → Build rapport → First PPV offer
- Active buyer → Drip exclusive content → Upsell bundles
- Dormant fan → Re-engagement sequence → Win-back offer
- Free follower → 10 message engagement limit → Push to subscribe
**PPV Dripping:**
The AI sends locked content at optimal times based on when each fan is most active. Not a blast to everyone at 3 PM — individualized timing.
### Auto-Welcome
Every new subscriber gets a personalized welcome within 60 seconds. The first message sets the tone and gets them engaged before they forget they subscribed. I tested this vs manual welcome (1-4 hour delay) and the conversion to first reply was 3x higher with instant welcome.
### Win-Back Sequences
When a subscription expires, the system runs a 4-step win-back campaign over 2 weeks:
1. Day 0: Casual "miss you" message
2. Day 3: Exclusive offer / tease
3. Day 7: FOMO trigger
4. Day 13: Final attempt with a deal
Each step has 3-4 message variants so it doesn't feel templated.
### Live Dashboard
I built a real-time dashboard that shows:
- Messages sent per creator per hour
- Fan engagement rates
- Token health status (more on this below)
- Revenue tracking per creator
- System health monitoring
I check it from my phone once a day. Usually everything is green.
### Token Management
This was the hardest part. Fanvue uses Ory Hydra with one-time-use refresh tokens. If you use a refresh token twice, it permanently dies. I've seen other people's systems break because they had two processes trying to refresh the same token.
My solution: a single Docker container that handles ALL token refreshes on a 15-minute cycle. Nothing else touches the tokens. It's been running for weeks without a single token death.
---
## The Tech Stack
Not going to gatekeep the architecture:
- **Server:** $24/month Vultr VPS (Ubuntu, Docker)
- **Orchestration:** n8n (self-hosted, workflow automation)
- **AI:** Mistral via OpenRouter for conversation generation (best price-to-quality ratio for this use case)
- **Database:** MySQL (fan records, conversation state, purchase history)
- **Token Refresh:** Custom Python script in Docker container
- **Dashboard:** Custom Python web app behind Cloudflare
- **Monitoring:** Health check workflow runs every 10 minutes, alerts me on Telegram if anything breaks
Each creator runs as a separate n8n workflow on a staggered timer (67s, 71s, 73s, 79s — all prime numbers so they never overlap). This prevents rate limiting and ensures only one API call happens at a time.
---
## What I Learned (The Hard Way)
**1. Fanvue's API is undocumented and full of gotchas.**
- Chat objects have NO uuid field — the fan UUID is at `chat.user.uuid`
- GET endpoint for messages is plural (`/messages`), POST endpoint for sending is singular (`/message`)
- Messages come newest-first. If you don't reverse them before sending to AI, the conversation is backwards and the AI gives nonsensical replies
- No `is_creator` field on messages — you have to check `sender.handle` to figure out who sent what
**2. Token management is life or death.**
If your refresh token gets used twice (race condition between two processes), it's permanently dead. You have to re-authenticate through the browser. I lost 3 days debugging this before I realized the solution was radical simplicity: ONE process refreshes tokens. Period.
**3. The AI needs guardrails, not freedom.**
Early versions would occasionally go off-script — promising things the creator doesn't offer, being too aggressive with PPV, or switching personality mid-conversation. The fix was strict system prompts with explicit boundaries and a "humanization" layer that adds natural imperfections (typos, delayed responses, varied message lengths).
**4. Free followers are a time sink.**
Unlimited free messaging = the AI spending all its time on people who will never pay. I added a 10-message limit for free followers, then a gentle push to subscribe. Revenue went up immediately.
---
## Results So Far
The system has been running autonomously for several weeks now. Key numbers:
- **Response time:** Under 60 seconds, 24/7 (vs 1-4 hours with VAs)
- **Uptime:** 99.9% (one restart in 3 weeks, auto-recovered)
- **VA cost eliminated:** $0/month (was projecting $3-5K/month)
- **Server cost:** $24/month
- **Messages per day:** 200-400 across all creators
- **No fan complaints** about AI detection (persona training works)
The system handles the entire fan lifecycle — from new subscriber welcome to dormant win-back — without me touching anything. I check the dashboard once a day, usually for 2 minutes.
---
## What's Next
I'm expanding the system to handle:
- Automatic PPV content creation (AI-generated images sent as locked messages)
- Cross-platform fan tracking (same fan on multiple platforms)
- Revenue prediction per fan (predict who will buy next and prioritize them)
---
## Questions?
Happy to answer technical questions about the architecture, Fanvue API, token management, or anything else. I'm NOT going to share the actual code or system prompts, but I'll answer "how did you solve X" type questions.
If anyone is running a similar setup or considering building one, I'm curious what your biggest bottleneck is. For me it was 100% the token management — everything else was straightforward once that was solved.