FeedPulse is a lightweight internal tool that helps teams collect product feedback and feature requests, then uses Google Gemini AI to automatically categorize, prioritize, and summarize them—so product teams can quickly understand what to build next.
Product feedback often lives across emails, chats, support tickets, and spreadsheets. FeedPulse centralizes feedback into a single system and turns raw input into actionable insights with AI-powered classification and summarization.
Use cases
- Collect feature requests from users/customers
- Triage and prioritize feedback automatically
- Generate summaries for product planning and roadmap discussions
- Feedback collection: Capture product feedback and feature requests in one place
- AI categorization: Automatically groups feedback into meaningful categories
- AI prioritization: Helps identify high-impact requests (based on volume/importance signals)
- AI summarization: Generates concise summaries for quick review
- Secure API: Authentication with JWT, password hashing with bcrypt
- Operational safety: Rate limiting, security headers, request logging
- Next.js (React + TypeScript)
- Tailwind CSS
- Axios
- Node.js + Express (TypeScript)
- MongoDB + Mongoose
- Authentication: JWT + bcrypt
- Security: Helmet, Express Rate Limit
- AI: Google Gemini (
@google/generative-ai) - Logging: Morgan
- Config: dotenv
┌───────────────────────────────────────────────────────────┐
│ Frontend (Next.js) │
│ UI for submitting feedback + viewing AI insights │
└───────────────────────────────────────────────────────────┘
│ HTTP (REST)
▼
┌───────────────────────────────────────────────────────────┐
│ Backend (Express) │
│ Auth (JWT) • Feedback APIs • AI processing (Gemini) │
└───────────────────────────────────────────────────────────┘
│ │
│ Mongoose │ Google Gemini API
▼ ▼
┌─────────────────────────────┐ ┌───────────────────────┐
│ MongoDB (Database) │ │ Gemini AI (External) │
│ feedback, users, metadata │ │ classify/summarize │
└─────────────────────────────┘ └───────────────────────┘
This is the expected high-level structure for this monorepo (frontend + backend).
Folder/file names may vary depending on your implementation.
FeedPulse/
├── backend/
│ ├── src/
│ │ ├── server.ts # App entry point
│ │ ├── routes/ # API routes
│ │ ├── controllers/ # Request handlers
│ │ ├── services/ # Business logic (Gemini processing, etc.)
│ │ ├── models/ # Mongoose models (User, Feedback, etc.)
│ │ ├── middleware/ # Auth, validation, rate limit, error handling
│ ├── package.json
│ ├── tsconfig.json
│ └── .env # Not committed (local)
│
├── frontend/
│ ├── app/ # Next.js App Router pages
│ ├── components/ # UI components
│ ├── lib/ # API client, helpers
│ ├── public/ # Static assets
│ ├── package.json
│ └── .env.local # Not committed (local)
│
├── README.md
└── .gitignore
- Node.js (LTS recommended)
- npm (or pnpm/yarn)
- MongoDB (local or hosted)
- Google Gemini API key
git clone https://github.com/supunakalanka76/FeedPulse.git
cd FeedPulsecd backend
npm installcd ../frontend
npm installThis repo may not include
.env.exampleyet. Create the following env files locally.
Create backend/.env:
PORT=4000
MONGO_URI=mongodb+srv://<db_username>:<password>@cluster0.yhoye6q.mongodb.net/feedpluse?retryWrites=true&w=majority
JWT_SECRET=replace_with_a_strong_secret
# Google Gemini
GEMINI_API_KEY=your_gemini_api_key_here
# Optional (useful for CORS)
FRONTEND_URL=http://localhost:3000Create frontend/.env.local:
NEXT_PUBLIC_API_BASE_URL=http://localhost:4000If your backend serves routes under a prefix like
/api, use:NEXT_PUBLIC_API_BASE_URL=http://localhost:4000/api
cd backend
npm run devBackend should run on: http://localhost:4000
cd frontend
npm run devFrontend should run on: http://localhost:3000
cd backend
npm run build
npm startcd frontend
npm run build
npm startAdd screenshots to a folder like docs/screenshots/ and link them here.
Example:
docs/screenshots/admin_dashboard.pngdocs/screenshots/feedback_form.png
If you haven’t added tests yet, this section can remain as a placeholder.
cd backend
npm testcd frontend
npm testContributions are welcome.
- Fork the repo
- Create a branch:
git checkout -b feature/my-feature - Commit:
git commit -m "Add my feature" - Push:
git push origin feature/my-feature - Open a Pull Request
This project is licensed under the MIT License. See the LICENSE file for details.


