Firestore stores structured data (JSON documents):
- User profiles
- Request details
- Status information
- Ratings
Storage stores files (images, videos, audio):
- Photo uploads from requests
- Profile pictures
- Verification documents
- ✅ 5 GB storage (plenty for MVP)
- ✅ 1 GB/day downloads
- ✅ 20,000 uploads/day
- ✅ No credit card required for free tier
- In Firebase Console → Storage
- Click "Get started"
- Start in test mode (for MVP)
- Storage is automatically included in your Firebase project
Cost: $0 for MVP (free tier is generous)
For MVP, you can:
- Start with text-only requests
- Add photo support later when needed
- Focus on core functionality first
The code already handles this - if Storage isn't configured, photo uploads are disabled.
If you want photos but don't want to use Firebase Storage:
- Free tier: Unlimited uploads
- Simple API
- No authentication needed for anonymous uploads
- 25 GB storage
- 25 GB bandwidth/month
- Image transformations included
// Upload to Imgur instead of Firebase Storage
const uploadToImgur = async (file) => {
const formData = new FormData();
formData.append('image', file);
const response = await fetch('https://api.imgur.com/3/image', {
method: 'POST',
headers: {
'Authorization': 'Client-ID YOUR_IMGUR_CLIENT_ID'
},
body: formData
});
const data = await response.json();
return data.data.link; // Returns image URL
};You can convert images to base64 and store in Firestore, but:
- ❌ Firestore document limit: 1 MB
- ❌ Base64 increases file size by ~33%
- ❌ Only works for very small images (< 500KB)
- ❌ Not scalable
Only use this for tiny images or as a fallback.
- Use Firebase Storage - It's free and included
- Make photos optional - Focus on text requests first
- Add photo support later - When you have more users
- Remove photo upload option from RequestForm
- Focus on text and voice input
- Add photos later when needed
The code is now Storage-optional:
- ✅ Works without Storage configured
- ✅ Falls back to base64 for small images (if Storage unavailable)
- ✅ Shows error for large images if Storage isn't available
- ✅ Photo upload is optional in the UI
| Option | Storage | Bandwidth | Cost (MVP) |
|---|---|---|---|
| Firebase Storage | 5 GB | 1 GB/day | $0 |
| Imgur | Unlimited | Unlimited | $0 |
| Cloudinary | 25 GB | 25 GB/month | $0 |
| Base64 in Firestore | N/A | N/A | $0 (but limited) |
Use Firebase Storage - it's:
- ✅ Already part of your Firebase project
- ✅ Free tier is generous (5GB)
- ✅ Integrated with your existing setup
- ✅ No additional setup needed
- ✅ Scales when you grow
You don't need a paid plan - the free tier is perfect for MVP!
- Go to Firebase Console
- Click "Storage" in left menu
- Click "Get started"
- Choose "Start in test mode"
- Select location (same as Firestore)
- Done! Storage is now available
The storageBucket will be automatically added to your Firebase config.