- Go to https://vercel.com and sign in with GitHub
- Click 'Add New Project' → import deoxyforge/UniSphere
- Set Root Directory: client
- Framework: Vite (auto-detected)
- Build Command: npm run build
- Output Directory: dist
- Add Environment Variable: VITE_API_URL = https://unisphere-server.onrender.com/api
- Deploy
- Go to https://render.com and sign in with GitHub
- New Web Service → connect deoxyforge/UniSphere
- Root Directory: server
- Runtime: Node
- Build Command: npm install
- Start Command: node server.js
- Add Environment Variables:
- MONGODB_URI = your MongoDB Atlas connection string
- JWT_SECRET = a long random secret key
- FRONTEND_URL = https://your-vercel-url.vercel.app
- NODE_ENV = production
- PORT = 10000 (Render default)
- Deploy
- Copy your Render URL (https://xxx.onrender.com)
- Go back to Vercel and update VITE_API_URL with the Render URL + /api
- Atlas cluster already configured
- Ensure Network Access allows 0.0.0.0/0 (or Render's IPs)
- Use the connection string from Atlas → Connect → Drivers
- Format: mongodb+srv://:@cluster.mongodb.net/unisphere
After deployment, verify:
- GET https://your-backend.onrender.com/api/health → { status: 'healthy' }
- Frontend at https://your-vercel-url.vercel.app loads
- Login with demo credentials works
ponytail: Render free tier has ephemeral filesystem — uploaded images will be lost on restart. Upgrade path: Add Cloudinary SDK, store returned URL instead of local path. For MVP/demo, local uploads work fine on a single-instance server.