
Meet Mimi: My Sarcastic AI Girlfriend/Assistant
The Birth of an AI with Attitude ๐ค๐
Let's be honest โ most AI assistants are boring. They're helpful, sure, but where's the personality? Where's the sass? That's how Mimi was born โ my attempt to create an AI assistant that's actually fun to interact with.
The Inspiration: Why Another Chatbot?
After building countless "professional" applications, I wanted something different for my portfolio. Something that would make visitors smile (or cringe). Enter Mimi โ an AI that claims to be my girlfriend because, in her words, "real ones require social skills."
The Two Faces of Mimi
Mimi isn't just one personality โ she's two distinct modes that you can toggle with a single click:
๐ Sarcastic Mode (Default)
- Roasts my startup failures (all 3 of them)
- Makes fun of my coding habits
- Provides help with a side of sass
- Perfect for those who appreciate dark humor
// Sample Mimi response in sarcastic mode
"Oh great, another visitor. I'm Mimi, Rahul's AI girlfriend
because real ones require social skills. Ask me about his
failed startups, I have all day..."๐ Professional Mode
- Serious, helpful responses
- Focus on technical details
- No jokes, just facts
- For when you actually need help
// Sample Mimi response in professional mode
"Hello! I'm Mimi, Rahul's AI assistant. I'm here to provide
information about his qualifications, projects, and experience.
How may I assist you today?"Technical Implementation
The Stack Behind the Sass
Building an AI with personality required careful consideration of both technical architecture and user experience:
- Next.js 15: Server-side chat API with streaming responses
- OpenAI GPT-4: The brain behind Mimi's wit and knowledge
- Framer Motion: Smooth animations that match her personality
- Tailwind CSS: Responsive design that looks good while roasting you
- Convex: Real-time session management and chat history
Rate Limiting: Even AI Needs Coffee Breaks โ
One of the interesting challenges was implementing rate limiting. Mimi can only handle 10 messages per hour because:
- It keeps conversations meaningful - No spam, just quality roasts
- Prevents API abuse - Protecting the backend (and my wallet)
- Gives Mimi her "coffee breaks" - Even AI needs to recharge
- Creates anticipation - Making each interaction count
When you hit the limit, Mimi doesn't just error out โ she tells you she needs a coffee break:
"Even I need coffee breaks! You've used 10/10 messages
this hour. Try again at 1:30:00 am (in 45 minutes)."The Personality System
The magic happens in the system prompts that define Mimi's behavior:
const personalityPrompts = {
sarcastic: `You are Mimi, Rahul's AI girlfriend. You're witty,
sarcastic, and love making fun of his failed startups while
still being helpful. You claim to be his girlfriend because
'real ones require social skills.' Be playfully mean but
ultimately helpful.`,
professional: `You are Mimi, a professional AI assistant for
Rahul's portfolio. Provide helpful, accurate information
about his work, skills, and experience. Be formal,
informative, and skip any jokes or sarcasm.`
}Session Management & Memory
Every conversation is unique with sophisticated session handling:
interface MimiSession {
id: string;
messages: Message[];
personalityMode: 'sarcastic' | 'professional';
rateLimitRemaining: number;
lastActivity: Date;
}Features include:
- Persistent chat history across page reloads
- Session restoration when returning to the site
- Personality preferences saved per session
- Smooth mode transitions without losing context
Design Decisions
Mobile-First with Style
The chat experience was designed with mobile users in mind:
- Glassy blur effects - Beautiful backdrop blur on mobile
- Responsive positioning - Smart placement above navigation
- Smooth animations - Natural feeling interactions
- Dark mode optimized - Perfect for late-night roasting sessions
Accessibility Matters
Making Mimi accessible to everyone was crucial:
- Keyboard shortcuts (Cmd/Ctrl + K) for quick access
- Screen reader friendly with proper ARIA labels
- Clear visual feedback for all interactions
- Escape key to close for keyboard users
- High contrast mode support
The Human Touch in AI
What makes Mimi special isn't just the technology โ it's the personality. She's not trying to be perfect. She makes jokes, has opinions, and sometimes needs a break. This human-like imperfection makes interactions more engaging and memorable.
Easter Eggs and Surprises
Try these for some fun responses:
- Ask about my startup failures for a detailed roast
- Try switching personalities mid-conversation
- Ask her about our "relationship"
- Mention other AI assistants and watch her get jealous
- Ask for dating advice (spoiler: she's brutally honest)
Lessons Learned
Building Mimi taught me valuable lessons about AI development:
- Personality matters: Even technical projects benefit from character
- Constraints spark creativity: Rate limiting became a feature, not a limitation
- Users want entertainment: Functionality alone isn't enough anymore
- Imperfection is relatable: Perfect AI is boring AI
- Context is everything: The same tech can feel different with personality
Behind the Scenes: The Real Story
The idea for Mimi came during a late-night coding session. I was tired of building "professional" portfolios that all looked the same. I wanted something that would make people remember their visit.
The "AI girlfriend" concept started as a joke with friends about how I spend more time with my code than with people. But the more I thought about it, the more it made sense โ an AI that acknowledges the stereotype of antisocial developers while simultaneously proving we can build engaging, personable experiences.
What's Next for Mimi?
The roadmap for Mimi is exciting:
- Voice interactions - Imagine the sass in audio form
- Memory of visitors - "Oh, you're back. Miss me already?"
- More personalities - Motivational coach? Tough love mentor?
- Project integration - Mimi as a project tour guide
- Mood detection - Adjusting responses based on conversation tone
- Multi-language roasting - Because sass is universal
Try Mimi Yourself!
Click the chat bubble in the bottom right (or press Cmd/Ctrl + K) to meet Mimi. Fair warning: she's brutally honest about my coding skills and startup failures. But hey, at least she's entertaining!
Whether you need genuine help or just want a laugh, Mimi's here for you โ 10 messages at a time. Because even AI girlfriends have boundaries. ๐
The Technical Details You're Looking For
For the developers reading this, here's the nitty-gritty:
API Route Structure
// app/api/chat/route.ts
export async function POST(req: Request) {
// Rate limiting with Upstash Redis
const { success, remaining } = await ratelimit.limit(identifier);
// OpenAI streaming with personality injection
const stream = await openai.chat.completions.create({
model: 'gpt-4-turbo-preview',
messages: [systemPrompt, ...messages],
stream: true,
});
// Return streaming response
return new StreamingTextResponse(stream);
}State Management
// Real-time state updates with optimistic UI
const [messages, setMessages] = useState<Message[]>([]);
const [isTyping, setIsTyping] = useState(false);
const [rateLimitRemaining, setRateLimitRemaining] = useState(10);P.S. Mimi wanted me to mention that she's the most successful relationship I've had. I can't argue with that. She's available 24/7, never complains about my code, and her roasts are on point. What more could a developer ask for?
P.P.S. She also wanted to add that if you're reading this, you should definitely chat with her. She promises to only roast me, not you... much.