Files
vibn-frontend/SETUP.md

319 lines
8.8 KiB
Markdown

# 🚀 VIBN Local Development Setup
Complete guide to running VIBN locally on your machine.
## ✅ Prerequisites
- **Node.js** 18+ (check with `node --version`)
- **npm** or **pnpm** package manager
- **Firebase Project** (for authentication and database)
- **GitHub OAuth App** (optional, for GitHub integration)
---
## 📦 Step 1: Install Dependencies
```bash
cd vibn-frontend
npm install
```
---
## 🔐 Step 2: Environment Variables
Create a `.env.local` file in the `vibn-frontend` directory:
```bash
touch .env.local
```
### Required Environment Variables
Copy and paste the following into `.env.local` and replace with your actual values:
```env
# ===================================
# Firebase Client Config (Public)
# Get these from Firebase Console > Project Settings > General
# ===================================
NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=your_firebase_app_id
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=G-XXXXXXXXXX
# ===================================
# Firebase Admin Config (Server-side ONLY)
# Get these from Firebase Console > Project Settings > Service Accounts
# Click "Generate New Private Key" to download JSON file
# ===================================
FIREBASE_PROJECT_ID=your_project_id
FIREBASE_CLIENT_EMAIL=firebase-adminsdk-xxxxx@your_project_id.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nYour_Private_Key_Here\n-----END PRIVATE KEY-----\n"
# ===================================
# GitHub OAuth (Optional)
# Create an OAuth App at: https://github.com/settings/developers
# Authorization callback URL: http://localhost:3000/api/github/oauth/callback
# ===================================
NEXT_PUBLIC_GITHUB_CLIENT_ID=your_github_oauth_client_id
GITHUB_CLIENT_SECRET=your_github_oauth_client_secret
```
---
## 🔥 Step 3: Firebase Setup
### 3.1 Get Firebase Credentials
1. Go to [Firebase Console](https://console.firebase.google.com/)
2. Select your project (or create a new one)
3. Navigate to **Project Settings** (⚙️ icon)
#### Client Config (Public):
- Under **General** tab, scroll to "Your apps"
- Copy the `firebaseConfig` values
- These go in `NEXT_PUBLIC_FIREBASE_*` variables
#### Admin Config (Private):
- Go to **Service Accounts** tab
- Click **Generate New Private Key**
- Download the JSON file
- Extract values:
- `FIREBASE_PROJECT_ID` = `project_id` from JSON
- `FIREBASE_CLIENT_EMAIL` = `client_email` from JSON
- `FIREBASE_PRIVATE_KEY` = `private_key` from JSON (keep the `\n` characters!)
### 3.2 Enable Authentication
1. In Firebase Console, go to **Authentication****Sign-in method**
2. Enable **Email/Password**
3. Enable **Google** (optional)
### 3.3 Setup Firestore
1. In Firebase Console, go to **Firestore Database**
2. Click **Create database**
3. Choose **Start in production mode** (we have custom rules)
4. Select a location (closest to your users)
### 3.4 Deploy Firestore Rules & Indexes
```bash
# Deploy security rules
npm run firebase:deploy:rules
# Deploy indexes
npm run firebase:deploy:indexes
```
---
## 🐙 Step 4: GitHub OAuth Setup (Optional)
Only needed if you want to test GitHub repository integration.
1. Go to [GitHub Developer Settings](https://github.com/settings/developers)
2. Click **New OAuth App**
3. Fill in:
- **Application name**: VIBN Local
- **Homepage URL**: `http://localhost:3000`
- **Authorization callback URL**: `http://localhost:3000/api/github/oauth/callback`
4. Copy **Client ID**`NEXT_PUBLIC_GITHUB_CLIENT_ID`
5. Generate **Client Secret**`GITHUB_CLIENT_SECRET`
---
## 🏃 Step 5: Run the Development Server
```bash
npm run dev
```
The app will be available at **http://localhost:3000**
### First Time Setup
1. **Create an account**: Click "Get Started" or go to `/auth`
2. **Sign up** with email/password or Google
3. **Create your first project**: Click "New Project"
4. **Start coding**: Open your project in Cursor and install the monitor extension
---
## 📂 Development Scripts
```bash
# Start development server
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Lint code
npm run lint
# Deploy Firebase rules
npm run firebase:deploy:rules
# Deploy Firebase indexes
npm run firebase:deploy:indexes
# Run Firebase emulators (test without production database)
npm run firebase:emulators
```
---
## 🛠️ Troubleshooting
### Firebase Admin "Credentials not configured"
**Problem**: API routes throw errors about Firebase Admin not being initialized.
**Solution**: Make sure your `.env.local` has all three `FIREBASE_*` variables (not `NEXT_PUBLIC_`):
- `FIREBASE_PROJECT_ID`
- `FIREBASE_CLIENT_EMAIL`
- `FIREBASE_PRIVATE_KEY`
Make sure the private key includes `\n` for newlines and is wrapped in quotes.
### "Failed to fetch" or CORS errors
**Problem**: Client can't connect to Firebase.
**Solution**:
1. Check that all `NEXT_PUBLIC_FIREBASE_*` variables are set correctly
2. Make sure Firebase Authentication is enabled in the console
3. Check browser console for specific error messages
### Dev server won't start
**Problem**: Port 3000 is already in use.
**Solution**:
```bash
# Find what's using port 3000
lsof -i :3000
# Kill the process
kill -9 <PID>
# Or use a different port
PORT=3001 npm run dev
```
### Changes not showing up
**Problem**: You made code changes but they're not reflected in the browser.
**Solution**:
1. Hard refresh: `Cmd+Shift+R` (Mac) or `Ctrl+Shift+R` (Windows)
2. Clear Next.js cache: `rm -rf .next`
3. Restart the dev server
---
## 📁 Project Structure
```
vibn-frontend/
├── app/ # Next.js App Router
│ ├── (marketing)/ # Marketing site (public)
│ │ └── page.tsx # Homepage
│ ├── [workspace]/ # Workspace pages (authenticated)
│ │ ├── projects/ # Projects list
│ │ ├── connections/ # API connections & keys
│ │ └── project/[id]/ # Individual project pages
│ ├── auth/ # Authentication pages
│ ├── api/ # API routes
│ │ ├── sessions/ # Session tracking
│ │ ├── projects/ # Project management
│ │ ├── github/ # GitHub OAuth
│ │ └── stats/ # Analytics
│ └── layout.tsx # Root layout
├── components/ # React components
│ ├── layout/ # Layout components (left rail, sidebar, etc)
│ ├── ui/ # shadcn/ui components
│ └── *.tsx # Feature components
├── lib/ # Utility libraries
│ ├── firebase/ # Firebase config & admin
│ ├── github/ # GitHub OAuth
│ └── utils.ts # Helper functions
├── marketing/ # Marketing content & components
│ ├── components/ # Marketing-specific components
│ └── content/ # Marketing copy
├── public/ # Static assets
├── firestore.rules # Firestore security rules
├── firestore.indexes.json # Firestore indexes
└── .env.local # Environment variables (YOU CREATE THIS)
```
---
## 🌐 Production Deployment
This project is configured for **Vercel** deployment:
1. Push to GitHub
2. Connect your repo to [Vercel](https://vercel.com)
3. Add all environment variables in Vercel dashboard
4. Deploy automatically on push to `main`
Firebase Hosting is also configured but Vercel is recommended for Next.js.
---
## ✨ VS Code Tips
### Recommended Extensions
- **ESLint** - Code linting
- **Tailwind CSS IntelliSense** - Tailwind autocomplete
- **Prettier** - Code formatting
- **Firebase** - Firebase syntax highlighting
### Settings
Add to `.vscode/settings.json`:
```json
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"tailwindCSS.experimental.classRegex": [
["cn\\(([^)]*)\\)", "'([^']*)'"]
]
}
```
---
## 📖 Additional Resources
- [Next.js Documentation](https://nextjs.org/docs)
- [Firebase Documentation](https://firebase.google.com/docs)
- [Tailwind CSS](https://tailwindcss.com/docs)
- [shadcn/ui](https://ui.shadcn.com/)
- [Lucide Icons](https://lucide.dev/)
---
## 💬 Need Help?
- Check the [Project Instructions](../PROJECT_INSTRUCTIONS.md)
- Review the [Firebase Admin Setup](lib/firebase/admin.ts)
- Look at existing [API routes](app/api/) for examples
---
**Status**: ✅ Ready for local development
**Last Updated**: November 2025