AI-powered product feedback aggregation and analysis tool for Product Managers
Feedback Pulse helps Product Managers consolidate scattered feedback from multiple sources, analyze sentiment and themes using AI, and make data-driven product decisions.
Product Managers receive feedback from various sources daily - customer support tickets, Discord/Slack channels, GitHub issues, social media, and app stores. Feedback Pulse solves the challenge of fragmented feedback by:
- Aggregating feedback from multiple sources into a unified view
- Analyzing each piece of feedback for sentiment, urgency, and themes using AI
- Summarizing feedback into actionable insights
- Prioritizing feature requests based on severity, quantity, and recency
- Enabling semantic search to find related feedback across all sources
- π₯ Feedback Ingestion: Unified interface for collecting feedback from multiple sources
- π€ AI-Powered Analysis: Automatic sentiment detection, urgency scoring, and theme extraction
- π Semantic Search: Natural language search across all feedback using vector embeddings
- π Insights Dashboard: AI-generated summaries, theme distribution, and sentiment trends
- π― Feature Prioritization: Smart ranking of feature requests based on multiple factors
- π‘ Idea Playground: Interactive workspace for PMs to validate feature ideas against feedback
- Validator Mode: Validate requirements against feedback to ensure comprehensive coverage
- Sounding Board Mode: Explore creative alternatives and edge cases with AI assistance
- Conversational Refinement: Iterative chat interface for refining feature specifications
- My Features: Save and manage feature specs with linked feedback context
Backend:
- Cloudflare Workers: Serverless API hosting and orchestration
- Hono: Lightweight, fast web framework for routing
- D1 Database: SQLite-based serverless database
- Workers AI: Built-in AI models for sentiment, summarization, and theme extraction
- Vectorize: Vector database for semantic search
- Workers KV: Key-value store for caching summaries
Frontend:
- React: UI library with TypeScript
- Vite: Fast build tool and dev server
- React Router: Client-side routing
- React Markdown: Markdown rendering for AI responses
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLOUDFLARE WORKERS β
β (Hono Router + API Endpoints) β
β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β/feedback β β/insights β β /search β β /analyze β β
β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ β
βββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββββ
β β β β
βΌ βΌ βΌ βΌ
βββββββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββββββ
β D1 β β KV β β Vectorize β β Workers AI β
β (Feedback β β (Cached β β (Semantic β β (Llama 3.1, β
β Storage) β β Summaries)β β Search) β β BGE Embed) β
βββββββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββββββ
- Node.js (v18 or later)
- pnpm package manager
- Cloudflare account (free tier works)
- Wrangler CLI
-
Clone the repository
git clone https://github.com/prayush21/product-feedback-agent.git cd product-feedback-agent -
Install dependencies
# Install backend dependencies pnpm install # Install frontend dependencies cd frontend pnpm install cd ..
-
Initialize the database
# Create local D1 database and run schema pnpm run db:init -
Configure Cloudflare resources
Update
wrangler.tomlwith your Cloudflare account details:[[d1_databases]] binding = "DB" database_name = "feedback-db" database_id = "your-database-id" [[kv_namespaces]] binding = "CACHE" id = "your-kv-namespace-id" [[vectorize]] binding = "VECTORIZE" index_name = "feedback-embeddings"
-
Start the backend development server
pnpm run dev
This starts the Cloudflare Workers dev server at
http://localhost:8787 -
Start the frontend development server (in a separate terminal)
cd frontend pnpm run devThis starts the Vite dev server at
http://localhost:5173 -
Load mock data (optional)
curl -X POST http://localhost:8787/api/feedback/bulk \ -H "Content-Type: application/json" \ -d @data/mock-feedback.json
product-feedback-agent/
βββ src/ # Backend source code
β βββ index.ts # Main Worker entry point
β βββ types.ts # TypeScript type definitions
β βββ db/
β β βββ schema.sql # Database schema
β βββ routes/
β βββ feedback.ts # Feedback CRUD endpoints
β βββ insights.ts # Analytics & summaries
β βββ search.ts # Semantic search
β βββ analysis.ts # AI analysis triggers
β βββ feature-specs.ts # Feature specifications
β βββ ai-validator.ts # AI validation system
β
βββ frontend/ # React frontend
β βββ src/
β β βββ App.tsx # Main app component
β β βββ main.tsx # Entry point
β β βββ api/ # API client functions
β β βββ components/ # Reusable UI components
β β βββ pages/ # Page components
β β βββ context/ # React context providers
β β βββ styles/ # Global styles
β β βββ types/ # TypeScript types
β βββ public/ # Static assets
β
βββ docs/ # Documentation
β βββ PRD.md # Product Requirements Document
β βββ FEATURE_BUILDER_PRD.md # Feature Builder PRD
β
βββ data/ # Mock data for testing
β βββ mock-feedback.json
β
βββ public/ # Static assets served by Workers
β βββ index.html
β
βββ package.json # Backend dependencies
βββ wrangler.toml # Cloudflare Workers config
βββ tsconfig.json # TypeScript config
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/feedback |
List feedback with filters (source, sentiment, date) |
GET |
/api/feedback/:id |
Get single feedback item with analysis |
POST |
/api/feedback |
Create new feedback item |
POST |
/api/feedback/bulk |
Bulk import feedback |
DELETE |
/api/feedback/:id |
Delete feedback item |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/analyze/:id |
Trigger AI analysis for specific feedback |
POST |
/api/analyze/batch |
Analyze all unprocessed feedback |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/insights/summary |
AI-generated summary (daily/weekly/custom) |
GET |
/api/insights/themes |
Top themes with counts and sentiment |
GET |
/api/insights/priorities |
Prioritized feature requests |
GET |
/api/insights/sentiment-trend |
Sentiment over time |
GET |
/api/insights/sources |
Breakdown by feedback source |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/search?q=... |
Natural language search across feedback |
POST |
/api/search/similar/:id |
Find similar feedback items |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/feature-specs |
List all feature specifications |
GET |
/api/feature-specs/:id |
Get single feature spec |
POST |
/api/feature-specs |
Create new feature spec |
PUT |
/api/feature-specs/:id |
Update feature spec |
DELETE |
/api/feature-specs/:id |
Delete feature spec |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/ai/validate-feature |
Validate requirements against feedback |
The application uses a relational schema with the following tables:
sources: Feedback sources (Discord, GitHub, Twitter, etc.)feedback: Main feedback items with AI analysis resultsthemes: Extracted themes/topicsfeedback_themes: Many-to-many relationship between feedback and themesfeature_requests: Extracted feature requests with priority scoresfeature_specs: PM-created feature specifications with conversation history
For the complete schema, see src/db/schema.sql.
| Task | Model | Purpose |
|---|---|---|
| Sentiment Analysis | @cf/huggingface/distilbert-sst-2-int8 |
Classify sentiment as positive/negative/neutral |
| Summarization | @cf/meta/llama-3.1-8b-instruct |
Generate one-line summaries |
| Theme Extraction | @cf/meta/llama-3.1-8b-instruct |
Extract key themes from feedback |
| Urgency Detection | @cf/meta/llama-3.1-8b-instruct |
Classify urgency (critical/high/medium/low) |
| Embeddings | @cf/baai/bge-base-en-v1.5 |
Generate 768-dim vectors for semantic search |
| Feature Validation | @cf/meta/llama-3.1-8b-instruct |
Validate requirements & provide suggestions |
- Real-time metrics: total feedback, average sentiment, top themes
- AI-generated daily/weekly summaries
- Recent feedback with sentiment badges
- Theme distribution visualization
- Filterable feedback list (by source, sentiment, urgency, date, theme)
- Detailed feedback analysis with AI insights
- Similar feedback suggestions using semantic search
- AI-generated insights with key takeaways
- Theme breakdown with drill-down capability
- Feature request prioritization
- Sentiment trends over time
- Interactive sidebar for exploring feedback
- AI-assisted feature validation in two modes:
- Validator: Ensure requirements comprehensively address feedback
- Sounding Board: Explore creative alternatives and edge cases
- Conversational refinement with chat interface
- Save feature specs to "My Features" library
- Natural language query support
- Vector-based similarity matching
- Context-aware results
-
Deploy the backend
pnpm run deploy
-
Initialize remote database
pnpm run db:init:remote
-
Build and deploy frontend
cd frontend pnpm run build # Copy build output to ../public/ cp -r dist/* ../public/ cd .. pnpm run deploy
Set up the following in your Cloudflare dashboard:
- D1 Database: Create a D1 database and update
database_idinwrangler.toml - KV Namespace: Create a KV namespace for caching and update
idinwrangler.toml - Vectorize Index: Create a Vectorize index named
feedback-embeddings - Workers AI: Enabled automatically with Workers
# Type checking
pnpm run typecheck
# Frontend tests
cd frontend
pnpm run build
pnpm run previewcurl -X POST http://localhost:8787/api/feedback/bulk \
-H "Content-Type: application/json" \
-d @data/mock-feedback.jsoncurl -X POST http://localhost:8787/api/analyze/batchcurl "http://localhost:8787/api/search?q=audio+quality+issues"curl "http://localhost:8787/api/insights/summary?period=daily"- Make changes to backend code in
src/or frontend code infrontend/src/ - Hot reload is enabled in both dev servers
- Test locally using the development servers
- Type check with
pnpm run typecheck - Deploy when ready using
pnpm run deploy
- Product Requirements Document - Complete product specification
- Feature Builder PRD - Idea Playground feature spec
- Cloudflare Workers Docs
- Hono Documentation
Contributions are welcome! Please feel free to submit a Pull Request.
This project is part of a demonstration/educational repository.
- Built with Cloudflare's Developer Platform
- Powered by Llama 3.1 and BGE embeddings
- UI inspired by modern product management tools
Demo Context: This application demonstrates AI-powered feedback analysis for NotebookLM, an AI-powered notebook/research assistant. The principles apply to any SaaS product requiring centralized feedback management.