Product Feedback · 2026

Feedback Loop

An AI-native system that takes feature requests and turns them into a brief engineering can act on.

The pattern is always the same.

A customer submits a feature request, another submits the same one two weeks later, and by the end of the quarter the same request is sitting across multiple tickets from different accounts.

Someone has to manually go through every ticket, identify the pattern, and write up individual feature requests engineering can access and prioritise.

Feedback Loop is a dashboard with two views. The Insights tab shows you the full picture at a glance. Request volume by category, tier mix, and trend over time. The Analysis tab lets you filter the queue, run a Claude-powered analysis, and export a PDF brief you can hand straight to engineering.

Try it: Use the mock tickets already loaded or submit your own, then open the Insights tab to explore the data or switch to Analysis to run the full workflow.

Cursor Anthropic API Cloudflare Workers Chart.js JavaScript PDF Export

How I built it

01

Why I built it this way

Having a system means every feature request gets captured, grouped, and actioned

Feature requests come in through support tickets. I go through them manually, spot the pattern, submit individual feature requests, and build a case for engineering.

Feedback Loop replaces the manual steps. The dashboard ensures nothing gets missed, and the PDF gives engineering a consistent brief every time.

02

Step 1: Submit a feature request

Structured intake captures the signal before it disappears into a backlog

The Submit Feature Request page captures each request by product area (Authentication, API, Integrations, User Management, Billing), account tier (Enterprise, Pro, Free), priority, and description.

Every submission is saved locally and appears immediately in the dashboard queue.

You can also go to Settings to import your own tickets via CSV export from Zendesk, Intercom, or any support tool rather than submitting one by one.

The struggle

The mock data went through seven versions. The first read like bug reports. Then it was too employer-specific. Then the categories were confusing to anyone who was not already familiar with the product.

It took longer to get twenty tickets that felt genuinely realistic and well spread across five request types than it took to build the intake form.

03

Step 2 and 3: Analysis and export

Claude groups the requests, scores by priority, and generates a brief you can act on

Step 2 sends the selected tickets to Claude via a secured Cloudflare Worker. Claude groups them into themes, scores each one by priority based on how frequently it appears and which account tiers are asking for it, and returns a summary with recommended actions and affected accounts.

Step 3 exports a PDF document with supporting evidence for each ticket — the document I would attach to a Jira epic or bring into a product review meeting.

The struggle

The PDF export broke twice. The first version generated a blank document. The second had content but the layout was unreadable.

When I deployed, the PDF library returned a 404 and the whole export silently failed until I checked the console. I used Cursor's debugger to trace and resolve the issue, then rebuilt the PDF layout from scratch.

04

Insights tab and CSV import

From a single workflow to a full analytics dashboard

After shipping the core Analysis workflow I added an Insights tab to give the full picture before you dive into individual tickets.

It shows total requests, top category, and tier mix. The stacked bar chart breaks down requests by category and account tier. The donut chart shows the overall tier split. The trend line shows request volume over time. Clicking any chart segment filters the Analysis view instantly.

The Settings page also supports CSV import so you can bring in your own feature request data rather than relying on the mock tickets. Upload a CSV export from Zendesk, Intercom, or any support tool, preview the data, and choose to merge with or replace the mock tickets.

Once imported you choose whether to use your data only or merge it with the mock tickets.

The struggle

The Insights and Analysis panels were conflicting on initial render because of a hidden versus display flex issue. The panels were both trying to occupy the same space until I separated the visibility logic properly.

Getting the chart colours to match the tier system throughout the whole dashboard took more iterations than expected. The CSS variables needed wiring through Chart.js configuration rather than relying on stylesheet inheritance.

Tech stack

Cursor

Built end to end in Cursor

Anthropic Claude

Groups requests and scores priority

Chart.js

Stacked bar, donut, and trend charts

Cloudflare Workers

Secures the API key and rate limits the public demo

Cloudflare Pages

Hosts the live demo

jsPDF

Generates the PDF document

JavaScript

Dashboard, intake form, import, storage

Try it yourself

Submit a feature request first, or go to Settings to import your own tickets via CSV. Then open the Insights tab to explore the data at a glance, or switch to Analysis to filter tickets, run the AI analysis, and export a PDF brief.

Open Feedback Loop →
PA

Madiha's Portfolio Assistant

Ask me anything