Skip to content

Commit af1574d

Browse files
committed
update: claude sonnet on non-search + ui fixes
1 parent a6bdca2 commit af1574d

File tree

5 files changed

+89
-64
lines changed

5 files changed

+89
-64
lines changed

src/app/dashboard/page.tsx

Lines changed: 14 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ function IndustryRankingsTable({
204204
if (brand.llama_mentions > 0) modelCounts.add("Llama 4 Maverick");
205205
// New Voyager models
206206
if (brand.gemini_pro_mentions > 0) modelCounts.add("Gemini Pro 2.5");
207+
if (brand.sonnet_mentions > 0) modelCounts.add("Claude Sonnet 4");
207208
if (brand.deepseek_r1_mentions > 0) modelCounts.add("DeepSeek R1");
208209
if (brand.kimi_k2_mentions > 0) modelCounts.add("Kimi K2");
209210
if (brand.gpt_5_mentions > 0) modelCounts.add("GPT 5");
@@ -227,6 +228,7 @@ function IndustryRankingsTable({
227228
(brand.google_ai_mode_mentions > 0 ? 1 : 0) +
228229
// Voyager mode models
229230
(brand.deepseek_mentions > 0 ? 1 : 0) +
231+
(brand.sonnet_mentions > 0 ? 1 : 0) +
230232
(brand.gpt_4_1_mentions > 0 ? 1 : 0) +
231233
(brand.grok_mentions > 0 ? 1 : 0) +
232234
(brand.llama_mentions > 0 ? 1 : 0) +
@@ -276,6 +278,9 @@ function IndustryRankingsTable({
276278
if (selectedModel.has("DeepSeek v3") && brand.deepseek_mentions > 0) {
277279
selectedModelTotalMentions++;
278280
}
281+
if (selectedModel.has("Claude Sonnet 4") && brand.sonnet_mentions > 0) {
282+
selectedModelTotalMentions++;
283+
}
279284
if (selectedModel.has("GPT 4.1 Nano") && brand.gpt_4_1_mentions > 0) {
280285
selectedModelTotalMentions++;
281286
}
@@ -2791,6 +2796,7 @@ function DashboardContent() {
27912796
analysis_brands.forEach((brand) => {
27922797
const brandName = brand.name;
27932798
const mentions = {
2799+
sonnet_mentions: 0,
27942800
claude_mentions: 0,
27952801
perplexity_mentions: 0,
27962802
gemini_mentions: 0,
@@ -2844,6 +2850,8 @@ function DashboardContent() {
28442850
// Assign mentions to the appropriate model
28452851
if (modelName.includes("claude")) {
28462852
mentions.claude_mentions += mentionCount;
2853+
} else if (modelName.includes("sonnet 4")) {
2854+
mentions.sonnet_mentions += mentionCount;
28472855
} else if (modelName.includes("perplexity")) {
28482856
mentions.perplexity_mentions += mentionCount;
28492857
} else if (modelName.includes("gemini")) {
@@ -2946,6 +2954,7 @@ function DashboardContent() {
29462954
analysis_brands.forEach((brand) => {
29472955
const brandName = brand.name;
29482956
const mentions = {
2957+
sonnet_mentions: 0,
29492958
claude_mentions: 0,
29502959
perplexity_mentions: 0,
29512960
gemini_mentions: 0,
@@ -3000,6 +3009,8 @@ function DashboardContent() {
30003009
// Assign mentions to the appropriate model
30013010
if (modelName.includes("claude")) {
30023011
mentions.claude_mentions += mentionCount;
3012+
} else if (modelName.includes("sonnet 4")) {
3013+
mentions.sonnet_mentions += mentionCount;
30033014
} else if (modelName.includes("perplexity")) {
30043015
mentions.perplexity_mentions += mentionCount;
30053016
} else if (modelName.includes("gemini pro")) {
@@ -3278,62 +3289,6 @@ function DashboardContent() {
32783289
router.push("/dashboard/search");
32793290
};
32803291

3281-
// const handleAnalyze = async () => {
3282-
// if (!brand) return;
3283-
3284-
// console.log("Selected Monitoring Frequency:", monitoringFrequency);
3285-
3286-
// setIsAnalyzing(true);
3287-
// try {
3288-
// const response = await fetch(
3289-
// process.env.NEXT_PUBLIC_ANALYZE_BRAND as string,
3290-
// {
3291-
// method: "POST",
3292-
// headers: {
3293-
// "Content-Type": "application/json",
3294-
// Authorization: `Bearer ${sessionKey}`,
3295-
// },
3296-
// body: JSON.stringify({ brandId: brand.id }),
3297-
// }
3298-
// );
3299-
3300-
// if (!response.ok) {
3301-
// const errorData = await response.json();
3302-
// console.error("Brand analysis failed:", errorData);
3303-
// setIsAnalyzing(false);
3304-
// return;
3305-
// }
3306-
3307-
// // Refetch brand data to get updated metrics
3308-
// await refetch();
3309-
// } catch (error) {
3310-
// console.error("Error analyzing brand:", error);
3311-
// } finally {
3312-
// setIsAnalyzing(false);
3313-
// }
3314-
// };
3315-
3316-
// if (!subsLoading && !subscription && !loading) {
3317-
// return (
3318-
// <div className="flex flex-col items-center justify-center h-screen gap-2">
3319-
// <Blocks className="w-6 h-6 text-blue-500" />
3320-
// <div className="text-center text-blue-500 mb-2">
3321-
// No Subscriptions Found
3322-
// </div>
3323-
// <p>
3324-
// You have no subscriptions. Please get a subscription to start
3325-
// monitoring your keywords and brands.
3326-
// </p>
3327-
// <Button
3328-
// variant="outline"
3329-
// className="mt-5"
3330-
// onClick={() => window.location.assign("/onboarding")}
3331-
// >
3332-
// Get Subscription
3333-
// </Button>
3334-
// </div>
3335-
// );
3336-
// }
33373292

33383293
if (error && queries.length <= 0) {
33393294
return (
@@ -4252,7 +4207,7 @@ function DashboardContent() {
42524207
>
42534208
All Models
42544209
</DropdownMenuCheckboxItem>
4255-
<ScrollArea className="max-h-[200px]">
4210+
<ScrollArea className="h-[200px]">
42564211
{analysis_models?.map((model: string) => (
42574212
<DropdownMenuCheckboxItem
42584213
key={model}
@@ -4536,7 +4491,7 @@ function DashboardContent() {
45364491
Filter by Model
45374492
</DropdownMenuLabel>
45384493
<DropdownMenuSeparator />
4539-
<ScrollArea className="max-h-[200px]">
4494+
<ScrollArea className="h-[200px]">
45404495
{analysis_models?.map((model: string) => (
45414496
<DropdownMenuCheckboxItem
45424497
key={model}
@@ -4646,7 +4601,7 @@ function DashboardContent() {
46464601
>
46474602
All Models
46484603
</DropdownMenuCheckboxItem>
4649-
<ScrollArea className="max-h-[200px]">
4604+
<ScrollArea className="h-[200px]">
46504605
{analysis_models?.map((model: string) => (
46514606
<DropdownMenuCheckboxItem
46524607
key={model}

src/components/dashboard/brand-metrics-card.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ interface Brand {
108108
gpt_mentions: number;
109109
gpt_search_mentions: number;
110110
claude_mentions: number;
111+
sonnet_mentions: number;
111112
perplexity_mentions: number;
112113
gemini_mentions: number;
113114
total_mentions: number;
@@ -133,6 +134,7 @@ interface TemporalBrand {
133134
gpt_mentions: number;
134135
gpt_search_mentions: number;
135136
claude_mentions: number;
137+
sonnet_mentions: number;
136138
perplexity_mentions: number;
137139
gemini_mentions: number;
138140
total_mentions: number;
@@ -373,6 +375,7 @@ export function BrandMetricsHeader({
373375
const modelCounts = new Set<string>();
374376
sessionBrands.forEach((brand) => {
375377
if (brand.claude_mentions > 0) modelCounts.add("Claude 4.0 Sonnet");
378+
if (brand.sonnet_mentions > 0) modelCounts.add("Claude Sonnet 4");
376379
if (brand.perplexity_mentions > 0) modelCounts.add("Perplexity Sonar");
377380
if (brand.gemini_mentions > 0) modelCounts.add("Gemini 2.5 Flash");
378381
if (brand.gpt_search_mentions > 0) modelCounts.add("GPT 4o Web Search");
@@ -400,6 +403,7 @@ export function BrandMetricsHeader({
400403
const totalMentionsPerModel = selectedBrandsData.reduce((acc, brand) => {
401404
return acc +
402405
(brand.claude_mentions > 0 ? 1 : 0) +
406+
(brand.sonnet_mentions > 0 ? 1 : 0) +
403407
(brand.perplexity_mentions > 0 ? 1 : 0) +
404408
(brand.gemini_mentions > 0 ? 1 : 0) +
405409
(brand.gpt_search_mentions > 0 ? 1 : 0) +
@@ -476,6 +480,10 @@ export function BrandMetricsHeader({
476480
modelCounts["Claude 4.0 Sonnet"] =
477481
(modelCounts["Claude 4.0 Sonnet"] || 0) + 1;
478482
}
483+
if (brand.sonnet_mentions > 0) {
484+
modelCounts["Claude Sonnet 4"] =
485+
(modelCounts["Claude Sonnet 4"] || 0) + 1;
486+
}
479487
if (brand.perplexity_mentions > 0) {
480488
modelCounts["Perplexity Sonar"] =
481489
(modelCounts["Perplexity Sonar"] || 0) + 1;
@@ -556,6 +564,7 @@ export function BrandMetricsHeader({
556564
> = {
557565
"GPT 4o Web Search": OpenAI,
558566
"Claude 4.0 Sonnet": Claude,
567+
"Claude Sonnet 4": Claude,
559568
"Perplexity Sonar": Perplexity,
560569
"Gemini 2.5 Flash": Gemini,
561570
"Google AI Overview": Gemini.Color,
@@ -587,6 +596,7 @@ export function BrandMetricsHeader({
587596
brands.forEach(sessionBrands => {
588597
sessionBrands.forEach((brand) => {
589598
if (brand.claude_mentions > 0) allModelCounts.add("Claude 4.0 Sonnet");
599+
if (brand.sonnet_mentions > 0) allModelCounts.add("Claude Sonnet 4");
590600
if (brand.perplexity_mentions > 0) allModelCounts.add("Perplexity Sonar");
591601
if (brand.gemini_mentions > 0) allModelCounts.add("Gemini 2.5 Flash");
592602
if (brand.gpt_search_mentions > 0) allModelCounts.add("GPT 4o Web Search");
@@ -682,6 +692,7 @@ export function BrandMetricsHeader({
682692

683693
brands.forEach((brand) => {
684694
if (brand.claude_mentions > 0) modelCounts.add("Claude 4.0 Sonnet");
695+
if (brand.sonnet_mentions > 0) modelCounts.add("Claude Sonnet 4");
685696
if (brand.perplexity_mentions > 0)
686697
modelCounts.add("Perplexity Sonar");
687698
if (brand.gemini_mentions > 0) modelCounts.add("Gemini 2.5 Flash");
@@ -726,6 +737,7 @@ export function BrandMetricsHeader({
726737
return (
727738
acc +
728739
(brand.claude_mentions > 0 ? 1 : 0) +
740+
(brand.sonnet_mentions > 0 ? 1 : 0) +
729741
(brand.perplexity_mentions > 0 ? 1 : 0) +
730742
(brand.gemini_mentions > 0 ? 1 : 0) +
731743
(brand.gpt_search_mentions > 0 ? 1 : 0) +
@@ -760,6 +772,12 @@ export function BrandMetricsHeader({
760772
) {
761773
brandModelCount++;
762774
}
775+
if (
776+
selectedModel.has("Claude Sonnet 4") &&
777+
brand.sonnet_mentions > 0
778+
) {
779+
brandModelCount++;
780+
}
763781
if (
764782
selectedModel.has("Perplexity Sonar") &&
765783
brand.perplexity_mentions > 0
@@ -941,6 +959,7 @@ export function BrandMetricsHeader({
941959

942960
brands.forEach((brand) => {
943961
if (brand.claude_mentions > 0) modelCounts.add("Claude 4.0 Sonnet");
962+
if (brand.sonnet_mentions > 0) modelCounts.add("Claude Sonnet 4");
944963
if (brand.perplexity_mentions > 0)
945964
modelCounts.add("Perplexity Sonar");
946965
if (brand.gemini_mentions > 0) modelCounts.add("Gemini 2.5 Flash");
@@ -984,6 +1003,7 @@ export function BrandMetricsHeader({
9841003
return (
9851004
acc +
9861005
(brand.claude_mentions > 0 ? 1 : 0) +
1006+
(brand.sonnet_mentions > 0 ? 1 : 0) +
9871007
(brand.perplexity_mentions > 0 ? 1 : 0) +
9881008
(brand.gemini_mentions > 0 ? 1 : 0) +
9891009
(brand.gpt_search_mentions > 0 ? 1 : 0) +
@@ -1017,6 +1037,12 @@ export function BrandMetricsHeader({
10171037
) {
10181038
brandModelCount++;
10191039
}
1040+
if (
1041+
selectedModel.has("Claude Sonnet 4") &&
1042+
brand.sonnet_mentions > 0
1043+
) {
1044+
brandModelCount++;
1045+
}
10201046
if (
10211047
selectedModel.has("Perplexity Sonar") &&
10221048
brand.perplexity_mentions > 0

src/components/dashboard/competitor-chart.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ interface BrandAnalysis {
4545
total_mentions: number;
4646
gpt_mentions: number;
4747
claude_mentions: number;
48+
sonnet_mentions: number;
4849
perplexity_mentions: number;
4950
gemini_mentions: number;
5051
gpt_search_mentions: number;
@@ -69,6 +70,7 @@ interface Brand {
6970
gpt_mentions: number;
7071
gpt_search_mentions: number;
7172
claude_mentions: number;
73+
sonnet_mentions: number;
7274
perplexity_mentions: number;
7375
gemini_mentions: number;
7476
total_mentions: number;
@@ -130,6 +132,7 @@ export function CompetitorChart({
130132

131133
fullBrandAnalytics.forEach((brand) => {
132134
if (brand.claude_mentions > 0) modelCounts.add("Claude 4.0 Sonnet");
135+
if (brand.sonnet_mentions > 0) modelCounts.add("Claude Sonnet 4");
133136
if (brand.perplexity_mentions > 0) modelCounts.add("Perplexity Sonar");
134137
if (brand.gemini_mentions > 0) modelCounts.add("Gemini 2.5 Flash");
135138
if (brand.gpt_search_mentions > 0) modelCounts.add("GPT 4o Web Search");
@@ -157,6 +160,7 @@ export function CompetitorChart({
157160
const getCoverageRatio = (brand: BrandAnalysis, type: "ratio" | "count") => {
158161
const totalMentionsPerModel =
159162
(brand.claude_mentions > 0 ? 1 : 0) +
163+
(brand.sonnet_mentions > 0 ? 1 : 0) +
160164
(brand.perplexity_mentions > 0 ? 1 : 0) +
161165
(brand.gemini_mentions > 0 ? 1 : 0) +
162166
(brand.gpt_search_mentions > 0 ? 1 : 0) +
@@ -181,6 +185,9 @@ export function CompetitorChart({
181185
if (selectedModel.has("Claude 4.0 Sonnet") && brand.claude_mentions > 0) {
182186
selectedModelTotalMentions++;
183187
}
188+
if (selectedModel.has("Claude Sonnet 4") && brand.sonnet_mentions > 0) {
189+
selectedModelTotalMentions++;
190+
}
184191
if (selectedModel.has("Perplexity Sonar") && brand.perplexity_mentions > 0) {
185192
selectedModelTotalMentions++;
186193
}

0 commit comments

Comments
 (0)