A modern, serverless RSS aggregator with AI-powered digest generation
Nuntia is a production-grade RSS aggregator that helps you stay informed without information overload. Subscribe to your favorite RSS feeds, browse stories in a beautiful interface, and let AI generate concise daily digests of your reading list.
- 🔐 Secure Authentication - Email/password authentication powered by Firebase
- 📰 RSS Feed Management - Subscribe to unlimited RSS/Atom feeds
- 🎨 Modern UI - Clean, responsive design with dark mode glassmorphism
- 🤖 AI-Powered Digests - Generate daily briefings using Groq's free LLM API
- 📊 Smart Organization - Topic detection and filtering across 20+ categories
- ⚡ Serverless Architecture - Fully deployed on Vercel for zero maintenance
- 💾 Efficient Storage - SQLite database with Drizzle ORM
- 📱 Mobile Responsive - Optimized for all screen sizes
- Next.js 16 - React framework with App Router and Server Actions
- TypeScript - Type-safe development
- Turbopack - Lightning-fast bundler
- Drizzle ORM - TypeScript ORM for SQL databases
- better-sqlite3 - Fast SQLite for Node.js
- Vercel Serverless Functions - Scalable backend
- Firebase Authentication - User management and security
- Groq API - Free, fast LLM inference (Llama 3.3)
- RSS Parser - Feed parsing and normalization
- CSS Modules - Scoped styling with glassmorphism design system
- React Context API - Global state management
- jsPDF - PDF export for digests
- Node.js 18.x or higher
- npm or pnpm
- Firebase Project (Create one)
- Groq API Key (Get free key)
- Clone the repository
git clone https://github.com/ChilliRoger/nuntia.git
cd nuntia- Install dependencies
npm install- Configure environment variables
Create a .env file in the root directory:
# Firebase Configuration
NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.firebasestorage.app
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
# Groq AI Configuration
GROQ_API_KEY=your_groq_api_key- Initialize the database
npm run db:push- Run the development server
npm run devOpen http://localhost:3000 in your browser.
- Install Vercel CLI
npm i -g vercel- Deploy the application
vercel- Add environment variables
Add all environment variables from your .env file to Vercel:
# Firebase variables
vercel env add NEXT_PUBLIC_FIREBASE_API_KEY
vercel env add NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
vercel env add NEXT_PUBLIC_FIREBASE_PROJECT_ID
vercel env add NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
vercel env add NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID
vercel env add NEXT_PUBLIC_FIREBASE_APP_ID
# Groq API
vercel env add GROQ_API_KEYSelect all environments (Production, Preview, Development) for each variable.
- Deploy to production
vercel --prodYour application will be live on Vercel!
- Sign up or Log in to your account
- Click "Feed Manager" to open the feed management panel
- Enter an RSS feed URL and click "Add Feed"
- Your feeds will appear in the sidebar
- Browse stories in the main grid view
- Filter by topic using the topic chips
- Click on any story card to read the full article
- Stories are automatically organized by publication date
- Ensure you have recent stories (last 24 hours)
- Click "Generate Daily Digest" in the Digest Panel
- Wait a few seconds while AI processes your stories
- View your personalized briefing with:
- Executive summary
- Top headlines
- Emerging trends
- Export to PDF if needed
Nuntia is built for Vercel's serverless platform:
- Database: SQLite stored in
/tmpdirectory (ephemeral but functional) - Functions: Next.js Server Actions for backend operations
- Authentication: Firebase for secure user management
- AI Processing: Groq cloud API (no local resources required)
nuntia/
├── app/
│ ├── actions.ts # Server actions (feeds, stories, digests)
│ ├── layout.tsx # Root layout with auth provider
│ └── page.tsx # Main dashboard
├── components/
│ ├── AuthModal.tsx # Login/signup modal
│ ├── FeedManager.tsx # Feed subscription UI
│ ├── StoryGrid.tsx # Story display grid
│ ├── DigestPanel.tsx # AI digest interface
│ └── ...
├── lib/
│ ├── auth-context.tsx # Firebase auth context
│ ├── firebase.ts # Firebase initialization
│ ├── db.ts # Database setup
│ ├── ollama.ts # Groq AI integration
│ ├── rss.ts # RSS feed parsing
│ └── schema.ts # Database schema
└── public/
- User Data: Stored in isolated SQLite database per deployment
- Authentication: Secure Firebase Auth with email/password
- AI Processing: Stories sent to Groq API only when generating digests
- No Tracking: No analytics or third-party tracking scripts
- Open Source: Full transparency with MIT license
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build production bundle |
npm start |
Start production server |
npm run db:push |
Sync database schema |
npm run db:studio |
Open Drizzle Studio |
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Database Persistence: Vercel's serverless environment uses ephemeral storage (
/tmp). Data may be lost between deployments. Consider using a persistent database (Turso, PlanetScale) for production. - Rate Limits: Groq free tier has rate limits. Consider implementing request queuing for heavy usage.
- PostgreSQL support for persistent storage
- Mobile app (React Native)
- OPML import/export
- Multi-language support
- Collaborative feed sharing
- Advanced search with full-text indexing
- Read later functionality
- Browser extension
This project is licensed under the MIT License - see the LICENSE file for details.
- Next.js - The React Framework
- Vercel - Deployment platform
- Firebase - Authentication
- Groq - Fast AI inference
- Drizzle ORM - TypeScript ORM
Made with ❤️ by ChilliRoger