9.4 KiB
📥 Import ChatGPT Conversations into Vibn
✅ What I Built
A complete system to import ChatGPT conversations into Vibn using OpenAI's official Conversations API!
🎯 What It Does
Import your ChatGPT project planning into Vibn:
- Pull full conversation history from ChatGPT
- Store all messages and context
- Connect conversations to specific projects
- Reference ChatGPT discussions in Vibn's AI
- Keep project planning synced with actual coding
🏗️ Architecture
1. OpenAI Conversations API
Endpoint: GET /v1/conversations/{conversation_id}
What we fetch:
- Full conversation history
- All messages (user + assistant)
- Conversation title
- Timestamps
- Metadata
2. Vibn Import API
Endpoint: POST /api/chatgpt/import
What it does:
- Accepts conversation ID + OpenAI API key
- Fetches conversation from OpenAI
- Parses and formats messages
- Stores in Firestore (
chatgptImportscollection) - Links to project (if provided)
3. Firestore Storage
Collection: chatgptImports
{
userId: string,
projectId: string | null,
conversationId: string,
title: string,
createdAt: string,
importedAt: string,
messageCount: number,
messages: [
{
role: 'user' | 'assistant',
content: string,
timestamp: string
}
],
rawData: object // Full OpenAI response
}
4. UI Component
Component: ChatGPTImportCard
Features:
- Dialog modal for import
- OpenAI API key input (with show/hide)
- Conversation URL or ID input
- Smart URL parsing
- Success feedback
- Import history display
📋 User Flow
Step 1: Get OpenAI API Key
- User goes to: https://platform.openai.com/api-keys
- Clicks "Create new secret key"
- Copies the key:
sk-...
Step 2: Find Conversation ID
- User opens ChatGPT conversation
- Looks at URL in browser:
https://chat.openai.com/c/abc-123-xyz - Copies either:
- Full URL:
https://chat.openai.com/c/abc-123-xyz - Just ID:
abc-123-xyz
- Full URL:
Step 3: Import in Vibn
- Goes to:
/your-workspace/connections - Scrolls to "Import ChatGPT Conversations" card
- Clicks: "Import Conversation"
- Enters OpenAI API key
- Pastes conversation URL or ID
- Clicks: "Import Conversation"
Step 4: Success
Toast notification shows:
Imported: "My App Planning" (42 messages)
Conversation is now stored in Vibn!
🔐 Security & Privacy
API Key Handling:
- ✅ User's OpenAI API key is NOT stored
- ✅ Key is only used during import request
- ✅ Sent directly from user's browser to OpenAI
- ✅ Never logged or persisted
Data Storage:
- ✅ Conversations stored in user's own Firestore
- ✅ Scoped to userId (can't see other users' imports)
- ✅ User can delete imported conversations anytime
- ✅ Raw data preserved for future reference
Firestore Rules:
match /chatgptImports/{importId} {
// Users can read their own imports
allow read: if userId == request.auth.uid;
// Only server can create (via Admin SDK)
allow create: if false;
// Users can update/delete their imports
allow update, delete: if userId == request.auth.uid;
}
🎯 Use Cases
1. Connect Project Planning with Coding
- Scenario: You planned your app architecture in ChatGPT
- Solution: Import that conversation into Vibn
- Benefit: Vibn's AI can reference your original vision
2. Product Requirements Sync
- Scenario: You discussed features and requirements in ChatGPT
- Solution: Import the conversation to your Vibn project
- Benefit: Link requirements to actual coding sessions
3. Design Decision History
- Scenario: You made key architecture decisions with ChatGPT
- Solution: Import those conversations
- Benefit: Track why you made certain choices
4. Brainstorming Sessions
- Scenario: You brainstormed ideas with ChatGPT
- Solution: Import the creative discussion
- Benefit: Keep all project context in one place
🧪 Testing
Test the API Directly:
# Get your Firebase ID token (from browser console)
const token = await firebase.auth().currentUser.getIdToken();
# Import a conversation
curl -X POST https://vibnai.com/api/chatgpt/import \
-H "Authorization: Bearer YOUR_FIREBASE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"conversationId": "abc-123-xyz",
"openaiApiKey": "sk-...",
"projectId": "your-project-id"
}'
Test in UI:
- Go to
/your-workspace/connections - Click "Import Conversation"
- Use a real ChatGPT conversation ID
- Check Firestore to see imported data
📊 Data Format
What Gets Imported:
From OpenAI API:
{
"conversation_id": "abc-123",
"title": "My App Planning",
"created_at": "2024-11-01T10:00:00Z",
"messages": [
{
"role": "user",
"author": { "role": "user" },
"content": { "parts": ["How do I build a web app?"] },
"create_time": "2024-11-01T10:00:00Z"
},
{
"role": "assistant",
"author": { "role": "assistant" },
"content": { "parts": ["Here's how to build a web app..."] },
"create_time": "2024-11-01T10:01:00Z"
}
]
}
Stored in Vibn:
{
"userId": "firebase-user-123",
"projectId": "project-abc",
"conversationId": "abc-123",
"title": "My App Planning",
"createdAt": "2024-11-01T10:00:00Z",
"importedAt": "2024-11-14T15:30:00Z",
"messageCount": 2,
"messages": [
{
"role": "user",
"content": "How do I build a web app?",
"timestamp": "2024-11-01T10:00:00Z"
},
{
"role": "assistant",
"content": "Here's how to build a web app...",
"timestamp": "2024-11-01T10:01:00Z"
}
],
"rawData": { /* Full OpenAI response for reference */ }
}
🔄 URL Parsing
The system automatically extracts conversation IDs from various URL formats:
Supported formats:
https://chat.openai.com/c/abc-123-xyz
https://chatgpt.com/c/abc-123-xyz
https://chat.openai.com/share/abc-123-xyz
abc-123-xyz (just the ID)
Regex patterns:
const patterns = [
/chat\.openai\.com\/c\/([a-zA-Z0-9-]+)/,
/chatgpt\.com\/c\/([a-zA-Z0-9-]+)/,
/chat\.openai\.com\/share\/([a-zA-Z0-9-]+)/,
];
🎨 UI Components
ChatGPTImportCard
Location: components/chatgpt-import-card.tsx
Features:
- ✅ Import dialog modal
- ✅ OpenAI API key input (masked)
- ✅ Show/hide key toggle
- ✅ Conversation URL/ID input
- ✅ Smart URL parsing
- ✅ Loading states
- ✅ Success feedback
- ✅ Error handling
- ✅ Import history display
- ✅ Links to OpenAI docs
Props:
{
projectId?: string; // Optional project to link import to
onImportComplete?: (data) => void; // Callback after successful import
}
📁 Files Created/Modified
New Files:
app/api/chatgpt/import/route.ts ← Import API endpoint
components/chatgpt-import-card.tsx ← UI component
CHATGPT_IMPORT_GUIDE.md ← This file
Modified Files:
app/[workspace]/connections/page.tsx ← Added import card
firestore.rules ← Added chatgptImports rules
🚀 What's Live
✅ Import API: /api/chatgpt/import
✅ UI Component: ChatGPTImportCard
✅ Connections Page: Import card visible
✅ Firestore Rules: Deployed
✅ Security: API key not stored
✅ Data: Full conversation preserved
💡 Future Enhancements
Potential additions:
- List view: Show all imported conversations
- Search: Find messages across imports
- Highlights: Mark important messages
- Export: Download imported data
- Sync: Auto-update conversations
- AI Integration: Let Vibn AI reference imports
- Batch Import: Import multiple conversations at once
🎯 Next Steps for Users
To Use This Feature:
-
Get your OpenAI API key:
- Visit: https://platform.openai.com/api-keys
- Create a new key
- Copy it
-
Find a conversation to import:
- Open ChatGPT
- Find a project-related conversation
- Copy the URL
-
Import in Vibn:
- Go to:
/your-workspace/connections - Click "Import Conversation"
- Paste your API key and conversation URL
- Click import
- Go to:
-
View imported data:
- Check Firestore console
- Or build a "View Imports" page
🆚 MCP vs Import
MCP (Export Vibn → ChatGPT):
- ChatGPT queries Vibn data
- Real-time access
- For ChatGPT power users
Import (ChatGPT → Vibn):
- Vibn pulls ChatGPT conversations
- One-time import (can re-import)
- For consolidating project context
Both are useful for different workflows!
🎉 Benefits
For Users:
- ✅ All project context in one place
- ✅ Link planning with actual work
- ✅ Reference past decisions
- ✅ Track project evolution
For Vibn AI:
- ✅ More context = better suggestions
- ✅ Understand user's original vision
- ✅ Reference requirements accurately
- ✅ Provide more personalized help
For Projects:
- ✅ Complete history (planning + coding)
- ✅ Better documentation
- ✅ Easier onboarding for team
- ✅ Audit trail of decisions
Built and ready to use! 🚀
Try it: Visit http://localhost:3000/your-workspace/connections and click "Import Conversation"