A comprehensive serverless RSS feed generator that uses Google's Gemini AI to intelligently parse and summarize content from URLs. SmartFeed includes both desktop (Chrome extension) and mobile (PWA) sharing capabilities.
- Backend: Firebase Cloud Functions (Node.js/TypeScript)
- Database: Cloud Firestore for storing feed items
- Storage: Cloud Storage for hosting the RSS feed file
- AI: Google Gemini API for content parsing and summarization
- Hosting: Firebase Hosting for PWA
- Desktop Client: Chrome browser extension
- Mobile Client: Progressive Web App with Share Target API
- 🤖 AI-powered content parsing using Gemini API
- 🖥️ Chrome extension for easy desktop sharing to SmartFeed
- 📱 Progressive Web App for native mobile sharing
- 🔒 Secure API endpoint with token authentication
- ⚡ Serverless architecture with automatic scaling
- 📊 Stores up to 25 latest items in RSS feed
- 🌐 Public RSS feed accessible from any RSS reader
- ⏱️ Smart caching with 1-hour TTL
- 🎯 Cross-platform compatibility
- Firebase CLI installed and configured
- Google Cloud Project with Firebase enabled
- Gemini API key from Google AI Studio
-
Install dependencies:
npm install
-
Set up Firebase secrets:
# Set your Gemini API key firebase functions:secrets:set GEMINI_API_KEY # Set your API access token (generate a secure random string) firebase functions:secrets:set API_TOKEN
-
Deploy to Firebase:
npm run build firebase deploy
- Installation: Load unpacked in
chrome://extensions/ - Location:
chrome-extension/directory - Features: One-click sharing from any webpage
- Documentation: See
chrome-extension/README.md
- URL: Hosted on Firebase Hosting (your-project.web.app)
- Location:
pwa/directory - Features: Native mobile sharing via Share Target API
- Documentation: See
pwa/README.md
- Install extension in Chrome
- Configure API endpoint and token
- Navigate to any webpage
- Click extension icon → "Share This Page"
- Visit your Firebase Hosting URL on mobile
- Install PWA ("Add to Home Screen")
- Share content from any app
- Select "RSS Share" from share options
curl -X POST https://your-region-your-project.cloudfunctions.net/ingestUrl \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"url": "https://example.com/article"}'The RSS feed is available at:
https://storage.googleapis.com/your-project.appspot.com/rss-feed.xml
Processes a URL and adds it to the RSS feed.
Headers:
Authorization: Bearer <API_TOKEN>(required)Content-Type: application/json
Request Body:
{
"url": "https://example.com/article"
}Response:
{
"success": true,
"message": "URL processed and feed updated successfully",
"feedUrl": "https://storage.googleapis.com/project.appspot.com/rss-feed.xml",
"itemId": "generated-document-id"
}The RSS feed can be customized by modifying the RSSGenerator configuration in src/rss-generator.ts.
- API endpoint requires authentication via Bearer token
- Firestore rules restrict direct database access
- Storage rules allow public read access only to rss-feed.xml
- Secrets are managed via Firebase Secret Manager
-
Start the Firebase emulators:
npm run serve
-
Build TypeScript in watch mode:
npm run dev
Run the test suite:
npm test- View function logs:
firebase functions:log - Monitor in Firebase Console: Functions, Firestore, and Storage sections
- Set up alerts for errors and usage quotas
- Functions only run on-demand (pay-per-execution)
- RSS feed served from Cloud Storage (minimal cost)
- Gemini API calls optimized with fallbacks
- 1-hour cache headers reduce unnecessary requests