Kasper Electrical

Data model

Insights

Aspect-based sentiment analysis, named entities, topics, temporal trend, and FAQ — derived from the reviews and served at /insights.json.

Mirrors InsightsSchema in @pushbutton/insights.

Top level

FieldTypeRequiredNotes
versionintegeryesSchema version (INSIGHTS_VERSION). Bumped when the aspect taxonomy changes.
generated_atstring (ISO 8601)yesWhen this artifact was generated.
modelstringyesModel used for analysis, e.g. "claude-sonnet-4-6".
review_countintegeryesNumber of reviews analyzed.
date_rangeobjectyes{ earliest, latest } — YYYY-MM-DD bounds of analyzed reviews.
overall_sentimentobjectyesAggregate sentiment (see below).
aspectsAspectInsight[]yesPer-aspect sentiment breakdown (see below).
entitiesobjectyesNamed entities: technicians, services, problems, service_areas (see below).
topicsTopic[]yesPer-vertical topic clusters (see below).
temporalobjectyes{ monthly[], trend } — time-series and direction (see below).
per_reviewrecord<string, PerReviewStored>yesStored per-review analysis keyed by review id.
faqFaqEntry[]yesGenerated Q&A grounded in reviews (see below).
summarystringnoEditorial prose summary for the /summary page and llms.txt.
pull_quotestringnoSingle representative pull-quote.

overall_sentiment

FieldTypeRequiredNotes
scorenumberyesAggregate sentiment score (-1..1 range).
positive_pctnumberyesPercent of reviews scored positive.
neutral_pctnumberyesPercent scored neutral.
negative_pctnumberyesPercent scored negative.

aspects[] — AspectInsight

FieldTypeRequiredNotes
idstringyesAspect id from the fixed taxonomy, e.g. "punctuality".
labelstringyesHuman-readable aspect label.
mention_countintegeryesReviews mentioning this aspect.
positive_countintegeryesMentions scored positive.
neutral_countintegeryesMentions scored neutral.
negative_countintegeryesMentions scored negative.
positive_pctnumberyesPercent of mentions that are positive.
scorenumberyesAggregate aspect sentiment score.
top_phrasesstring[]yesRepresentative evidence phrases.
example_review_idsstring[]yesReview ids exemplifying this aspect.

entities.technicians[] — Technician

FieldTypeRequiredNotes
idstringyesNormalized technician id.
display_namestringyesDisplay name.
mention_countintegeryesReviews mentioning this technician.
positive_pctnumberyesPercent of their mentions that are positive.
average_rating_when_mentionednumberyesMean star rating of reviews mentioning them.
review_idsstring[]yesReview ids mentioning this technician.

entities.services[] — ServiceEntity

FieldTypeRequiredNotes
idstringyesNormalized service id.
labelstringyesService label.
mention_countintegeryesReviews mentioning this service.
positive_pctnumberyesPercent positive.
average_ratingnumberyesMean star rating for this service.
review_idsstring[]yesReview ids mentioning this service.

entities.problems[] — ProblemEntity

FieldTypeRequiredNotes
idstringyesNormalized problem id.
labelstringyesProblem label.
mention_countintegeryesReviews mentioning this problem.
resolution_positive_pctnumberyesPercent of mentions where the problem was resolved positively.

entities.service_areas[] — ServiceAreaEntity

FieldTypeRequiredNotes
idstringyesNormalized service-area id.
labelstringyesService-area label.
mention_countintegeryesReviews mentioning this area.
review_idsstring[]yesReview ids mentioning this area.

topics[] — Topic

FieldTypeRequiredNotes
idstringyesTopic id.
labelstringyesTopic label.
descriptionstringyesShort topic description.
review_countintegeryesReviews in this topic cluster.
positive_pctnumberyesPercent positive within the topic.
review_idsstring[]yesReview ids in this topic.
key_findingsstring[]yesBullet findings synthesized for the topic.

temporal

FieldTypeRequiredNotes
monthlyMonthlyPoint[]yesPer-month series: { month (YYYY-MM), review_count, average_rating, sentiment_score }.
trend"improving" | "stable" | "declining"yesOverall direction of sentiment over time.

faq[] — FaqEntry

FieldTypeRequiredNotes
questionstringyesGenerated question.
answerstringyesAnswer grounded in the reviews.
evidence_review_idsstring[]yesReview ids supporting the answer.