405 lines
9.4 KiB
Markdown
405 lines
9.4 KiB
Markdown
# 📥 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:**
|
|
1. Accepts conversation ID + OpenAI API key
|
|
2. Fetches conversation from OpenAI
|
|
3. Parses and formats messages
|
|
4. Stores in Firestore (`chatgptImports` collection)
|
|
5. Links to project (if provided)
|
|
|
|
### **3. Firestore Storage**
|
|
**Collection:** `chatgptImports`
|
|
|
|
```typescript
|
|
{
|
|
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**
|
|
1. User goes to: https://platform.openai.com/api-keys
|
|
2. Clicks "Create new secret key"
|
|
3. Copies the key: `sk-...`
|
|
|
|
### **Step 2: Find Conversation ID**
|
|
1. User opens ChatGPT conversation
|
|
2. Looks at URL in browser:
|
|
```
|
|
https://chat.openai.com/c/abc-123-xyz
|
|
```
|
|
3. Copies either:
|
|
- **Full URL:** `https://chat.openai.com/c/abc-123-xyz`
|
|
- **Just ID:** `abc-123-xyz`
|
|
|
|
### **Step 3: Import in Vibn**
|
|
1. Goes to: `/your-workspace/connections`
|
|
2. Scrolls to "Import ChatGPT Conversations" card
|
|
3. Clicks: **"Import Conversation"**
|
|
4. Enters OpenAI API key
|
|
5. Pastes conversation URL or ID
|
|
6. 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:**
|
|
```javascript
|
|
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:**
|
|
```bash
|
|
# 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:**
|
|
1. Go to `/your-workspace/connections`
|
|
2. Click "Import Conversation"
|
|
3. Use a real ChatGPT conversation ID
|
|
4. Check Firestore to see imported data
|
|
|
|
---
|
|
|
|
## 📊 Data Format
|
|
|
|
### **What Gets Imported:**
|
|
|
|
**From OpenAI API:**
|
|
```json
|
|
{
|
|
"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:**
|
|
```json
|
|
{
|
|
"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:**
|
|
```typescript
|
|
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:**
|
|
```typescript
|
|
{
|
|
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:**
|
|
|
|
1. **Get your OpenAI API key:**
|
|
- Visit: https://platform.openai.com/api-keys
|
|
- Create a new key
|
|
- Copy it
|
|
|
|
2. **Find a conversation to import:**
|
|
- Open ChatGPT
|
|
- Find a project-related conversation
|
|
- Copy the URL
|
|
|
|
3. **Import in Vibn:**
|
|
- Go to: `/your-workspace/connections`
|
|
- Click "Import Conversation"
|
|
- Paste your API key and conversation URL
|
|
- Click import
|
|
|
|
4. **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"
|
|
|