Complete step-by-step instructions to deploy PrepPulse with login, dual AI, and email reminders.
preppulse/
├── api/
│ ├── ai.js ← Dual AI proxy (Gemini + Groq)
│ └── reminder.js ← Daily email reminder cron job
├── src/
│ ├── main.jsx ← React entry point
│ ├── App.jsx ← Auth routing
│ ├── Login.jsx ← Login / Signup page
│ ├── Dashboard.jsx ← Main tracker app
│ ├── firebase.js ← Firebase config
│ └── data/
│ └── exams.js ← All exam subjects & topics
├── index.html
├── vite.config.js
├── vercel.json ← Cron job config
├── package.json
├── .env.example ← Copy this to .env.local
└── .gitignore ← Protects your keys
- Go to https://console.firebase.google.com
- Click "Add project" → name it "preppulse" → Create
- In the project dashboard, click "</> Web" to add a web app → name it "preppulse"
- Copy the config values shown (apiKey, authDomain, etc.)
- In Firebase console, go to Authentication → Sign-in method → Enable Email/Password
- Go to Firestore Database → Create database → Start in test mode → Choose a region
- Go to https://aistudio.google.com
- Sign in with Google
- Click "Get API Key" → "Create API key"
- Copy the key
- Go to https://console.groq.com
- Sign up with Google/email
- Go to API Keys → "Create API Key"
- Copy the key
- Go to https://resend.com
- Sign up → Verify your email
- Go to API Keys → "Create API Key"
- Copy the key
- Go to Domains → Add your domain OR use the test email for now
- Just make up any long random string yourself
- Example:
mySecretCron2024PrepPulse! - You'll use this exact string in Vercel
- In Firebase Console → Project Settings (gear icon) → Service Accounts
- Click "Generate new private key" → Download the JSON file
- Open the JSON file — you need 3 values:
project_id→ this is your FIREBASE_ADMIN_PROJECT_IDclient_email→ this is your FIREBASE_ADMIN_CLIENT_EMAILprivate_key→ this is your FIREBASE_ADMIN_PRIVATE_KEY (long string starting with -----BEGIN)
# 1. Install Node.js from nodejs.org if you haven't
# 2. Clone or download this project folder
# 3. Install dependencies
npm install
# 4. Copy the env template
cp .env.example .env.local
# 5. Fill in your keys in .env.local (open with any text editor)
# See .env.example for what each value means
# 6. Run locally to test
npm run dev
# Opens at http://localhost:5173# 1. Create a free account at github.com
# 2. Create a new repository called "preppulse" (make it Private)
# 3. In your project folder, run:
git init
git add .
git commit -m "Initial PrepPulse build"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/preppulse.git
git push -u origin main.gitignore includes .env.local — it does by default in this project.
- Go to https://vercel.com → Sign up with GitHub (free)
- Click "Add New Project" → Import your
preppulserepo - Framework: Vite (Vercel auto-detects this)
- Click "Environment Variables" and add ALL of these:
VITE_FIREBASE_API_KEY = (from Firebase web config)
VITE_FIREBASE_AUTH_DOMAIN = (from Firebase web config)
VITE_FIREBASE_PROJECT_ID = (from Firebase web config)
VITE_FIREBASE_STORAGE_BUCKET = (from Firebase web config)
VITE_FIREBASE_MESSAGING_SENDER_ID = (from Firebase web config)
VITE_FIREBASE_APP_ID = (from Firebase web config)
GEMINI_API_KEY = (from aistudio.google.com)
GROQ_API_KEY = (from console.groq.com)
RESEND_API_KEY = (from resend.com)
CRON_SECRET = (the random string you made up)
FIREBASE_ADMIN_PROJECT_ID = (from Firebase service account JSON)
FIREBASE_ADMIN_CLIENT_EMAIL = (from Firebase service account JSON)
FIREBASE_ADMIN_PRIVATE_KEY = (from Firebase service account JSON — paste the full -----BEGIN... string)
- Click Deploy → Wait 2-3 minutes
- Your app is live at
https://preppulse.vercel.app(or similar URL) 🎉
After deploying:
- In Resend dashboard → Domains → Add Domain
- Add your domain (e.g.,
yourdomain.com) - Follow Resend's DNS instructions to verify it
- Update the
from:address inapi/reminder.js:from: "PrepPulse <reminders@yourdomain.com>" - Redeploy:
git push(Vercel auto-redeploys)
No custom domain yet? You can use Resend's test mode — emails go to your own inbox only until you verify a domain. That's fine for testing!
| Step | Done? |
|---|---|
| Firebase project created with Email auth + Firestore | ☐ |
| Gemini API key from aistudio.google.com | ☐ |
| Groq API key from console.groq.com | ☐ |
| Resend API key from resend.com | ☐ |
| Firebase Admin service account JSON downloaded | ☐ |
| .env.local filled in locally | ☐ |
| npm run dev works locally | ☐ |
| Code pushed to GitHub | ☐ |
| All env vars added in Vercel | ☐ |
| Deployed on Vercel | ☐ |
"Firebase: No Firebase App" error → Check that all VITE_FIREBASE_* env vars are set in Vercel and start with VITE_
AI not working → Check GEMINI_API_KEY and GROQ_API_KEY are set in Vercel (not in .env.local for production)
Emails not sending → Check RESEND_API_KEY is set. Check the from: email uses a verified Resend domain.
Login not working → Make sure Email/Password auth is enabled in Firebase Console → Authentication
Data not saving → Make sure Firestore is created in Firebase Console and started in test mode
- Push any code change with
git push→ Vercel auto-redeploys in ~1 minute - View cron job logs in Vercel Dashboard → Your Project → Functions tab
- View Firestore data in Firebase Console → Firestore Database
- Monitor AI usage: Gemini at aistudio.google.com, Groq at console.groq.com