A tool that monitors public sentiment around technical products over time, correlating feedback with release history on a scrubbable timeline.
- You provide: a product name, short description, and known entry-point URLs (e.g. a changelog page, Twitter handle, product site).
- Ingestion Agent (Nimbly-powered): scrapes public releases and feedback from Twitter/X, YouTube, tech review sites, and blogs. Each piece of feedback is scored 1–10 (1 = very negative, 10 = very positive).
- Analysis Agent: aggregates feedback into an Impression Summary, detects significant drops in sentiment, and publishes a summary post to cited.md via Senso.
- Timeline UI: a scrubbable view showing release events and impression score over time side by side.
User Input
│
▼
Ingestion Agent (Nimbly)
├─ Scrapes: changelogs, Twitter/X, YouTube, review sites
├─ Writes: releases, release_feedback (with 1–10 score)
└─ Logs: agent_passes
Analysis Agent
├─ Reads: release_feedback since last pass
├─ Produces: impression summary (positive/negative themes)
├─ Detects: significant score drops
└─ Writes: action_outputs → triggers cited.md post via Senso
Frontend (Vercel / TypeScript)
├─ Product setup form
├─ Feedback feed with scores and source links
└─ Scrubbable timeline: releases + impression inflection points
| Table | Fields |
|---|---|
products |
id, name, description, entry_links[], created_at |
releases |
id, product_id, name, date, summary |
release_feedback |
id, product_id, release_id?, date, source_url, source_type, score (1–10), raw_text |
agent_passes |
id, agent_type, product_id, tool_calls[], rows_created[], created_at |
action_outputs |
id, product_id, trigger_type (impression_drop), summary, published_at |
Notes:
release_feedback.release_idis nullable — feedback isn't always tied to a specific release.source_typeenum:twitter,youtube,blog,review_site,other.agent_passesis an audit log for debugging agent effectiveness (tool calls made, what was written).action_outputsdrives both the cited.md post and any future notification hooks.
- User creates a product via the UI.
- Initialize agent enriches metadata (links, description) using
nimble_searchandfetch_url. - Refresh agent discovers releases via Nimble and writes
releases. - Feedback agent searches the web via Nimble (currently Reddit + X/Twitter only, rolling last 3 months in UTC), scores sentiment, and writes rows to
release_feedback. - Summarize agent reads
release_feedback, merges gaps with release dates, and writesfeedback_summaries. - Each pass is logged to
agent_passes.
On an existing product, use the ··· menu: Refresh releases, Fetch public feedback, and Refresh analysis to run those steps independently.
- Analysis Agent reads new
release_feedbackrows since its last pass. - Generates an Impression Summary: key positive themes, key negative themes, overall score delta.
- If the rolling score drops meaningfully (e.g. >2 points over a window), writes a row to
action_outputsand publishes a post to cited.md via Senso.
- Frontend queries
releasesandaction_outputsfor a product, ordered by date. - Renders a scrubbable timeline with two layers: release markers and impression-change markers.
- Clicking a marker shows the source feedback items and the published summary.
| Layer | Technology |
|---|---|
| Web scraping | Nimble Search (lite depth; use fetch_url for full pages) |
| Data storage | ClickHouse |
| Publishing / notifications | Senso / cited.md |
| Frontend | TypeScript, Next.js |
| Hosting | Vercel |
- Scoring model: LLM-based 1–10 per feedback item, or a two-pass (classify → score)?
- Impression drop threshold: fixed delta or rolling average window?
- Scheduling: manual trigger only for MVP, or cron-based re-scrape?
- Auth: single-tenant for hackathon or multi-product dashboard from day one?