AI Scoring Engine & Composite Opportunity Score
AI Scoring Engine & Composite Opportunity Score
Available from v0.1.14
The AI Scoring Engine is an Inngest background function that takes scraped product data and passes it to an OpenAI LLM to compute four scored dimensions. The results — individual dimension scores plus a weighted composite score — are stored in the product_scores table and power the ranked dashboard.
How It Works
- A product scrape completes and its raw data (description, features, pricing signals, reviews) is available in the database.
- The Inngest function is triggered automatically.
- The function sends the scraped data to OpenAI for analysis.
- Four dimension scores (1–10 each) are computed and a weighted composite score is derived.
- All five values are written to the
product_scorestable. - The dashboard ranking updates to reflect the new scores.
Scored Dimensions
Each dimension is scored on a 1–10 scale.
Replicability
Measures how feasible it would be to rebuild the product using our internal stack. A higher score means the product is a strong candidate for replication — relatively straightforward architecture, no exotic dependencies, well-understood domain.
Market Demand
Combines two signals:
- Review volume — how many reviews exist across scraped sources
- Sentiment — overall tone of those reviews (positive, neutral, negative)
A high score indicates strong, positively-skewed user interest.
Revenue Potential
Derived from:
- Pricing tier — inferred from scraped pricing signals (free, freemium, paid, enterprise)
- Estimated market size — LLM-assessed scale of the addressable market for this product category
A high score suggests a paid product in a sizeable market.
Competitive Gaps
Analyses the themes in negative reviews to surface unmet user needs and competitor weaknesses. A high score means reviewers are consistently frustrated with things that are fixable — representing a clear opening for a better product.
Composite Score
The four dimension scores are combined using a weighted formula into a single composite opportunity score, also stored in product_scores. This is the primary sort key on the ranked dashboard.
Composite Score = f(replicability, market_demand, revenue_potential, competitive_gaps)
The exact weights are applied inside the Inngest function and can be tuned as the model matures.
Data Storage
All scores are written to the product_scores table:
| Column | Type | Description |
|---|---|---|
product_id | FK | Reference to the scored product |
replicability | integer (1–10) | Replicability dimension score |
market_demand | integer (1–10) | Market demand dimension score |
revenue_potential | integer (1–10) | Revenue potential dimension score |
competitive_gaps | integer (1–10) | Competitive gaps dimension score |
composite_score | numeric | Weighted composite opportunity score |
Triggering
Scoring runs automatically via Inngest — there is no manual step required. Once a product's scrape data is committed, the scoring function fires in the background. This keeps the UI responsive: the dashboard will surface scored results as they complete.
Notes
- Scoring requires a valid OpenAI API key configured in the environment.
- Products with insufficient scraped data (e.g. no reviews) will still receive scores, but dimension accuracy may be lower — review volume will be reflected in a reduced Market Demand score.
- Scores can be recomputed by re-triggering the Inngest function for a given product if new scrape data is available.