@canonry/canonry 7.58.1 → 7.58.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/assets/agent-workspace/skills/aero/SKILL.md +9 -2
- package/assets/agent-workspace/skills/aero/references/reporting.md +4 -0
- package/assets/agent-workspace/skills/aero/references/seo-analysis.md +123 -0
- package/assets/assets/{AgentSetupPage-BSkstQJa.js → AgentSetupPage-CRvCLiCD.js} +2 -2
- package/assets/assets/{AuditHistoryPanel-DAY6GbzH.js → AuditHistoryPanel-DSUKF9GC.js} +1 -1
- package/assets/assets/{BacklinksPage-Ci9s8osY.js → BacklinksPage-DIZy0NkW.js} +1 -1
- package/assets/assets/{ChartPrimitives-BgY3tqbD.js → ChartPrimitives-CksxPvHn.js} +1 -1
- package/assets/assets/{Hint-BsfMSR5e.js → Hint-C0TmIzHX.js} +1 -1
- package/assets/assets/{HistoryPage-BM7PM3Ow.js → HistoryPage-B2Xtxu5L.js} +1 -1
- package/assets/assets/{InfoTooltip-COkeQYiP.js → InfoTooltip-DV3_9Qp1.js} +1 -1
- package/assets/assets/MeasurementPropertyPage-B3qnQtNg.js +4 -0
- package/assets/assets/{ProjectPage-Dnev2R09.js → ProjectPage-j9V9UFfY.js} +5 -5
- package/assets/assets/RunsPage-CvqCrsiH.js +1 -0
- package/assets/assets/SettingsPage-CX5Rzsm3.js +1 -0
- package/assets/assets/SiteHealthSection-CYKyJBaJ.js +2 -0
- package/assets/assets/{ToneBadge-Bk7cBexZ.js → ToneBadge-DYEbxp5S.js} +1 -1
- package/assets/assets/TrafficPage-DNC0DP-U.js +40 -0
- package/assets/assets/{TrafficSourceDetailPage-BVAVo-JO.js → TrafficSourceDetailPage-Dp7AYvRP.js} +1 -1
- package/assets/assets/{account-context-ChEngAKj.js → account-context-DHWaWJSr.js} +1 -1
- package/assets/assets/{card-qOcJFZhl.js → card-im88-x1b.js} +1 -1
- package/assets/assets/{extract-error-message-bWEYiDDO.js → extract-error-message-Bq8oNvfF.js} +1 -1
- package/assets/assets/{format-helpers-CvOZG1pt.js → format-helpers-DOEct2q8.js} +1 -1
- package/assets/assets/index-B662I7kR.css +1 -0
- package/assets/assets/index-CQwjYVPD.js +60 -0
- package/assets/assets/{query-client-nsJhXK9R.js → query-client-BN_-qp71.js} +1 -1
- package/assets/assets/{react-query-BKjNH2ek.js → react-query-P6OZ-MPl.js} +1 -1
- package/assets/assets/{react-sigma_core.esm.min-C8kc2J6I.js → react-sigma_core.esm.min-BNkIcXRz.js} +1 -1
- package/assets/assets/{service-DmVT5F26.js → service-CWdIU_mf.js} +1 -1
- package/assets/assets/{vendor-lucide-CPeGWK5C.js → vendor-lucide-4KkDquAu.js} +1 -1
- package/assets/assets/{vendor-markdown-Bdsu1JLE.js → vendor-markdown-9SSeLNHZ.js} +1 -1
- package/assets/assets/vendor-radix-BuErWiA2.js +41 -0
- package/assets/assets/{vendor-recharts-CFnqWvWF.js → vendor-recharts-qIim36Mt.js} +1 -1
- package/assets/assets/{vendor-tanstack-CXaF1vMI.js → vendor-tanstack-pEsPGDvT.js} +1 -1
- package/assets/index.html +15 -15
- package/dist/{chunk-SML23FNI.js → chunk-BDUHO7KK.js} +4 -4
- package/dist/{chunk-3O2F2LGB.js → chunk-JDRKZOUP.js} +1 -1
- package/dist/{chunk-VVJ22ZN5.js → chunk-SXGLLWS4.js} +1 -1
- package/dist/{cli-commands-QLHV4NXP.js → cli-commands-3HTHHRXT.js} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{demo-UBMNDBRF.js → demo-TPOKI7ZM.js} +1 -1
- package/dist/{demo-server-F4M74FVL.js → demo-server-ZBNKYYM2.js} +42 -32
- package/dist/index.d.ts +63 -63
- package/dist/index.js +1 -1
- package/dist/{init-MAUH2G2K.js → init-4IKMMWAD.js} +1 -1
- package/dist/{serve-3GW2F3WS.js → serve-2AOLGG3F.js} +1 -1
- package/package.json +1 -1
- package/assets/assets/MeasurementPropertyPage-CHzsfcb5.js +0 -4
- package/assets/assets/RunsPage-uPCDTjPM.js +0 -1
- package/assets/assets/SettingsPage-rBvx_O4A.js +0 -1
- package/assets/assets/SiteHealthSection-oBg5h5Ge.js +0 -2
- package/assets/assets/TrafficPage-BJSxxkbT.js +0 -40
- package/assets/assets/index-BIfsFQb8.js +0 -56
- package/assets/assets/index-D67dZGOY.css +0 -1
- package/assets/assets/vendor-radix-3k2C0Ly9.js +0 -41
|
@@ -107,6 +107,8 @@ import {
|
|
|
107
107
|
GA_OVERVIEW_WINDOWS,
|
|
108
108
|
GaOverviewPeriods,
|
|
109
109
|
RunKinds,
|
|
110
|
+
RunStatuses,
|
|
111
|
+
RunTriggers,
|
|
110
112
|
SiteCrawlFetchStates,
|
|
111
113
|
SiteCrawlIndexabilityReasons,
|
|
112
114
|
SiteCrawlIndexabilityStates,
|
|
@@ -3088,7 +3090,11 @@ function seedSearchLandingPages(db, input) {
|
|
|
3088
3090
|
async function seedProjectSignals(db, project, now, variant) {
|
|
3089
3091
|
const nowIso = now.toISOString();
|
|
3090
3092
|
const prefix = `demo-signals-${project.id}`;
|
|
3091
|
-
const
|
|
3093
|
+
const gscRunId = `${prefix}-gsc-sync`;
|
|
3094
|
+
const bingRunId = `${prefix}-bing-inspect-sitemap`;
|
|
3095
|
+
const gaRunId = `${prefix}-ga-sync`;
|
|
3096
|
+
const gbpRunId = `${prefix}-gbp-sync`;
|
|
3097
|
+
const adsRunId = `${prefix}-ads-sync`;
|
|
3092
3098
|
const crawlRunId = `${prefix}-crawl`;
|
|
3093
3099
|
const root = `https://${project.domain}/`;
|
|
3094
3100
|
const attemptId = `${prefix}-crawl-attempt`;
|
|
@@ -3096,9 +3102,13 @@ async function seedProjectSignals(db, project, now, variant) {
|
|
|
3096
3102
|
const groupId = `${prefix}-ad-group`;
|
|
3097
3103
|
const locationName = `locations/demo-${variant + 1}`;
|
|
3098
3104
|
db.insert(runs).values([
|
|
3099
|
-
{ id:
|
|
3100
|
-
{ id:
|
|
3101
|
-
|
|
3105
|
+
{ id: gscRunId, kind: RunKinds["gsc-sync"] },
|
|
3106
|
+
{ id: bingRunId, kind: RunKinds["bing-inspect-sitemap"] },
|
|
3107
|
+
{ id: gaRunId, kind: RunKinds["ga-sync"] },
|
|
3108
|
+
{ id: gbpRunId, kind: RunKinds["gbp-sync"] },
|
|
3109
|
+
{ id: adsRunId, kind: RunKinds["ads-sync"] },
|
|
3110
|
+
{ id: crawlRunId, kind: RunKinds["site-audit"] }
|
|
3111
|
+
].map((run) => ({ ...run, projectId: project.id, status: RunStatuses.completed, trigger: RunTriggers.manual, startedAt: nowIso, finishedAt: nowIso, createdAt: nowIso }))).run();
|
|
3102
3112
|
db.insert(googleConnections).values({ id: `${prefix}-gsc`, domain: project.domain, connectionType: "gsc", propertyId: `sc-domain:${project.domain}`, scopes: [], createdByProjectId: project.id, createdAt: nowIso, updatedAt: nowIso }).run();
|
|
3103
3113
|
db.insert(bingConnections).values({ id: `${prefix}-bing`, domain: project.domain, siteUrl: root, createdByProjectId: project.id, createdAt: nowIso, updatedAt: nowIso }).run();
|
|
3104
3114
|
const searchTerms = variant === 0 ? ["roof replacement costs", "emergency roof repair options"] : ["family resorts near the coast", "coastal resort amenities"];
|
|
@@ -3110,34 +3120,34 @@ async function seedProjectSignals(db, project, now, variant) {
|
|
|
3110
3120
|
for (const [termIndex, query] of searchTerms.entries()) {
|
|
3111
3121
|
const queryClicks = Math.max(3, Math.round(clicks / (termIndex + 2)));
|
|
3112
3122
|
const queryImpressions = Math.round(impressions / (termIndex + 2));
|
|
3113
|
-
db.insert(gscQueryDailyTotals).values({ id: `${prefix}-gsc-query-${i}-${termIndex}`, projectId: project.id, date, query, clicks: queryClicks, impressions: queryImpressions, position: (7.1 + termIndex + i * 0.03).toFixed(2), syncedAt: nowIso, syncRunId, createdAt: at(date) }).run();
|
|
3114
|
-
db.insert(gscSearchData).values({ id: `${prefix}-gsc-page-${i}-${termIndex}`, projectId: project.id, syncRunId, date, query, page: termIndex === 0 ? root : `${root}services/`, country: "usa", device: "DESKTOP", clicks: queryClicks, impressions: queryImpressions, ctr: (queryClicks / queryImpressions).toFixed(4), position: (7.1 + termIndex).toFixed(2), createdAt: at(date) }).run();
|
|
3123
|
+
db.insert(gscQueryDailyTotals).values({ id: `${prefix}-gsc-query-${i}-${termIndex}`, projectId: project.id, date, query, clicks: queryClicks, impressions: queryImpressions, position: (7.1 + termIndex + i * 0.03).toFixed(2), syncedAt: nowIso, syncRunId: gscRunId, createdAt: at(date) }).run();
|
|
3124
|
+
db.insert(gscSearchData).values({ id: `${prefix}-gsc-page-${i}-${termIndex}`, projectId: project.id, syncRunId: gscRunId, date, query, page: termIndex === 0 ? root : `${root}services/`, country: "usa", device: "DESKTOP", clicks: queryClicks, impressions: queryImpressions, ctr: (queryClicks / queryImpressions).toFixed(4), position: (7.1 + termIndex).toFixed(2), createdAt: at(date) }).run();
|
|
3115
3125
|
}
|
|
3116
|
-
db.insert(gaTrafficSnapshots).values({ id: `${prefix}-ga-page-${date}`, projectId: project.id, date, landingPage: "/", landingPageNormalized: "/", sessions: 62 + i * 3, organicSessions: 39 + i * 2, directSessions: 14 + i, users: 48 + i * 2, syncedAt: nowIso, syncRunId }).run();
|
|
3117
|
-
db.insert(gaAcquisitionDaily).values({ id: `${prefix}-ga-acquisition-${date}`, projectId: project.id, date, channelGroup: "Organic Search", source: "google", medium: "organic", hostName: project.domain, landingPage: "/", landingPageNormalized: "/", sessions: 39 + i * 2, syncedAt: nowIso, syncRunId, createdAt: at(date) }).run();
|
|
3118
|
-
db.insert(gaLeadEventsDaily).values({ id: `${prefix}-ga-lead-${date}`, projectId: project.id, date, eventName: "generate_lead", channelGroup: "Organic Search", source: "google", medium: "organic", hostName: project.domain, landingPage: "/", landingPageNormalized: "/", attributionScope: "landing-page", eventCount: 3 + i % 4, syncedAt: nowIso, syncRunId, createdAt: at(date) }).run();
|
|
3119
|
-
db.insert(bingCoverageSnapshots).values({ id: `${prefix}-bing-coverage-${date}`, projectId: project.id, syncRunId, date, indexed: 48 + i, notIndexed: 3, unknown: 2, createdAt: at(date) }).run();
|
|
3126
|
+
db.insert(gaTrafficSnapshots).values({ id: `${prefix}-ga-page-${date}`, projectId: project.id, date, landingPage: "/", landingPageNormalized: "/", sessions: 62 + i * 3, organicSessions: 39 + i * 2, directSessions: 14 + i, users: 48 + i * 2, syncedAt: nowIso, syncRunId: gaRunId }).run();
|
|
3127
|
+
db.insert(gaAcquisitionDaily).values({ id: `${prefix}-ga-acquisition-${date}`, projectId: project.id, date, channelGroup: "Organic Search", source: "google", medium: "organic", hostName: project.domain, landingPage: "/", landingPageNormalized: "/", sessions: 39 + i * 2, syncedAt: nowIso, syncRunId: gaRunId, createdAt: at(date) }).run();
|
|
3128
|
+
db.insert(gaLeadEventsDaily).values({ id: `${prefix}-ga-lead-${date}`, projectId: project.id, date, eventName: "generate_lead", channelGroup: "Organic Search", source: "google", medium: "organic", hostName: project.domain, landingPage: "/", landingPageNormalized: "/", attributionScope: "landing-page", eventCount: 3 + i % 4, syncedAt: nowIso, syncRunId: gaRunId, createdAt: at(date) }).run();
|
|
3129
|
+
db.insert(bingCoverageSnapshots).values({ id: `${prefix}-bing-coverage-${date}`, projectId: project.id, syncRunId: bingRunId, date, indexed: 48 + i, notIndexed: 3, unknown: 2, createdAt: at(date) }).run();
|
|
3120
3130
|
}
|
|
3121
|
-
seedGaReferrals(db, { projectId: project.id, prefix, syncRunId, nowIso, dates });
|
|
3122
|
-
seedGaOverview(db, { projectId: project.id, prefix, syncRunId, now, variant });
|
|
3131
|
+
seedGaReferrals(db, { projectId: project.id, prefix, syncRunId: gaRunId, nowIso, dates });
|
|
3132
|
+
seedGaOverview(db, { projectId: project.id, prefix, syncRunId: gaRunId, now, variant });
|
|
3123
3133
|
db.insert(gscDataWatermarks).values({ projectId: project.id, dataThroughDate: dates.at(-1), syncedThroughDate: dates.at(-1), updatedAt: nowIso }).run();
|
|
3124
|
-
db.insert(gscCoverageSnapshots).values({ id: `${prefix}-gsc-coverage`, projectId: project.id, syncRunId, date: dates.at(-1), indexed: 1, notIndexed: 0, unknownPages: 0, verifiedByInspection: 1, derivedFromImpressions: 0, reasonBreakdown: {}, createdAt: nowIso }).run();
|
|
3125
|
-
db.insert(gscUrlInspections).values({ id: `${prefix}-gsc-inspection`, projectId: project.id, syncRunId, url: `${root}services/`, indexingState: "INDEXING_ALLOWED", verdict: "PASS", coverageState: "Submitted and indexed", pageFetchState: "SUCCESSFUL", robotsTxtState: "ALLOWED", crawlTime: nowIso, lastCrawlResult: "SUCCESSFUL", isMobileFriendly: true, richResults: ["Sample FAQ"], referringUrls: [root], inspectedAt: nowIso, createdAt: nowIso }).run();
|
|
3134
|
+
db.insert(gscCoverageSnapshots).values({ id: `${prefix}-gsc-coverage`, projectId: project.id, syncRunId: gscRunId, date: dates.at(-1), indexed: 1, notIndexed: 0, unknownPages: 0, verifiedByInspection: 1, derivedFromImpressions: 0, reasonBreakdown: {}, createdAt: nowIso }).run();
|
|
3135
|
+
db.insert(gscUrlInspections).values({ id: `${prefix}-gsc-inspection`, projectId: project.id, syncRunId: gscRunId, url: `${root}services/`, indexingState: "INDEXING_ALLOWED", verdict: "PASS", coverageState: "Submitted and indexed", pageFetchState: "SUCCESSFUL", robotsTxtState: "ALLOWED", crawlTime: nowIso, lastCrawlResult: "SUCCESSFUL", isMobileFriendly: true, richResults: ["Sample FAQ"], referringUrls: [root], inspectedAt: nowIso, createdAt: nowIso }).run();
|
|
3126
3136
|
db.insert(bingKeywordStats).values(searchTerms.map((query, i) => ({ id: `${prefix}-bing-keyword-${i}`, projectId: project.id, query, impressions: 310 - i * 70, clicks: 22 - i * 4, ctr: "0.071", averagePosition: String(6 + i), syncedAt: nowIso, createdAt: nowIso }))).run();
|
|
3127
|
-
db.insert(bingUrlInspections).values({ id: `${prefix}-bing-inspection`, projectId: project.id, url: root, httpCode: 200, inIndex: true, lastCrawledDate: dates.at(-2), inIndexDate: dates.at(-8), inspectedAt: nowIso, syncRunId, createdAt: nowIso, documentSize: 24120, anchorCount: 18, discoveryDate: dates[0] }).run();
|
|
3137
|
+
db.insert(bingUrlInspections).values({ id: `${prefix}-bing-inspection`, projectId: project.id, url: root, httpCode: 200, inIndex: true, lastCrawledDate: dates.at(-2), inIndexDate: dates.at(-8), inspectedAt: nowIso, syncRunId: bingRunId, createdAt: nowIso, documentSize: 24120, anchorCount: 18, discoveryDate: dates[0] }).run();
|
|
3128
3138
|
db.insert(gaMeasurementSyncStates).values({ projectId: project.id, acquisitionStatus: "ready", acquisitionSyncedAt: nowIso, leadStatus: "ready", leadSyncedAt: nowIso, leadAttributionScope: "landing-page", searchLandingStatus: "ready", searchLandingSyncedAt: nowIso, searchLandingAttemptedAt: nowIso, updatedAt: nowIso }).run();
|
|
3129
|
-
seedSearchLandingPages(db, { projectId: project.id, prefix, syncRunId, nowIso, now, variant });
|
|
3130
|
-
db.insert(gaTrafficSummaries).values({ id: `${prefix}-ga-summary`, projectId: project.id, periodStart: dates[0], periodEnd: dates.at(-1), totalSessions: 1610, totalOrganicSessions: 980, totalUsers: 1214, syncedAt: nowIso, syncRunId }).run();
|
|
3131
|
-
db.insert(gaTrafficWindowSummaries).values({ id: `${prefix}-ga-window`, projectId: project.id, windowKey: "30d", periodStart: dates[0], periodEnd: dates.at(-1), totalSessions: 1610, totalOrganicSessions: 980, totalDirectSessions: 284, totalUsers: 1214, syncedAt: nowIso, syncRunId }).run();
|
|
3139
|
+
seedSearchLandingPages(db, { projectId: project.id, prefix, syncRunId: gaRunId, nowIso, now, variant });
|
|
3140
|
+
db.insert(gaTrafficSummaries).values({ id: `${prefix}-ga-summary`, projectId: project.id, periodStart: dates[0], periodEnd: dates.at(-1), totalSessions: 1610, totalOrganicSessions: 980, totalUsers: 1214, syncedAt: nowIso, syncRunId: gaRunId }).run();
|
|
3141
|
+
db.insert(gaTrafficWindowSummaries).values({ id: `${prefix}-ga-window`, projectId: project.id, windowKey: "30d", periodStart: dates[0], periodEnd: dates.at(-1), totalSessions: 1610, totalOrganicSessions: 980, totalDirectSessions: 284, totalUsers: 1214, syncedAt: nowIso, syncRunId: gaRunId }).run();
|
|
3132
3142
|
const inventory = variant === 0 ? summitRoofingInventory() : harborResortsInventory();
|
|
3133
3143
|
const crawl = await seedSiteCrawl(db, { project, prefix, root, crawlRunId, attemptId, nowIso, inventory });
|
|
3134
3144
|
const brokenLinkSource = (crawl.findings.find((finding) => finding.sourceNodeKey?.startsWith("/guides/")) ?? crawl.findings.at(0))?.sourceUrl ?? root;
|
|
3135
|
-
seedLocalAndCommercialSignals(db, { project, prefix, root,
|
|
3145
|
+
seedLocalAndCommercialSignals(db, { project, prefix, root, gbpRunId, adsRunId, campaignId, groupId, locationName, nowIso, dates, variant });
|
|
3136
3146
|
if (variant === 1) {
|
|
3137
|
-
db.insert(healthSnapshots).values({ id: `${prefix}-health`, projectId: project.id,
|
|
3147
|
+
db.insert(healthSnapshots).values({ id: `${prefix}-health`, projectId: project.id, overallCitedRate: "0.61", overallMentionRate: "0.74", totalPairs: 42, citedPairs: 26, mentionedPairs: 31, providerBreakdown: { openai: { citedRate: 0.62, mentionRate: 0.76, cited: 13, mentioned: 16, total: 21 }, perplexity: { citedRate: 0.6, mentionRate: 0.71, cited: 13, mentioned: 15, total: 21 } }, createdAt: nowIso }).run();
|
|
3138
3148
|
db.insert(insights).values([
|
|
3139
|
-
{ id: `${prefix}-insight-1`, projectId: project.id,
|
|
3140
|
-
{ id: `${prefix}-insight-2`, projectId: project.id, runId:
|
|
3149
|
+
{ id: `${prefix}-insight-1`, projectId: project.id, type: "opportunity", severity: "medium", title: "Expand service comparison guidance", query: searchTerms[0], provider: "openai", recommendation: { action: "Draft a comparison section", target: `${root}services/`, reason: "Sample insight for the public dashboard." }, cause: { cause: "Sample answer-history gap", details: "This is stored sample data." }, dismissed: false, createdAt: nowIso },
|
|
3150
|
+
{ id: `${prefix}-insight-2`, projectId: project.id, runId: crawlRunId, type: "persistent-gap", severity: "low", title: "Review one internal link target", query: searchTerms[1], provider: "perplexity", recommendation: { action: "Repair the illustrative link", target: brokenLinkSource, reason: "Sample finding for the public dashboard." }, cause: { cause: "Sample crawl finding", details: "This is stored sample data." }, dismissed: false, createdAt: nowIso }
|
|
3141
3151
|
]).run();
|
|
3142
3152
|
}
|
|
3143
3153
|
db.insert(auditLog).values([
|
|
@@ -3146,23 +3156,23 @@ async function seedProjectSignals(db, project, now, variant) {
|
|
|
3146
3156
|
]).run();
|
|
3147
3157
|
}
|
|
3148
3158
|
function seedLocalAndCommercialSignals(db, input) {
|
|
3149
|
-
const { project, prefix, root,
|
|
3159
|
+
const { project, prefix, root, gbpRunId, adsRunId, campaignId, groupId, locationName, nowIso, dates, variant } = input;
|
|
3150
3160
|
const business = variant === 0 ? { category: "Roofing contractor", campaign: "Spring roof inspection campaign" } : { category: "Resort hotel", campaign: "Spring resort stays campaign" };
|
|
3151
3161
|
db.insert(gbpLocations).values({ id: `${prefix}-gbp-location`, projectId: project.id, accountName: "accounts/demo-fixture", locationName, displayName: `${project.displayName} - Sample`, primaryCategoryDisplayName: business.category, storefrontAddress: "100 Example Avenue, Demo City", websiteUri: root, placeId: `demo-place-${project.id}`, mapsUri: `https://maps.example/${project.id}`, description: "Sample listing for the public, view-only Canonry dashboard.", selected: true, syncedAt: nowIso, createdAt: nowIso, updatedAt: nowIso }).run();
|
|
3152
3162
|
db.insert(gbpDailyMetrics).values(dates.slice(-7).flatMap((date, i) => [
|
|
3153
|
-
{ id: `${prefix}-gbp-impressions-${date}`, projectId: project.id, locationName, date, metric: "BUSINESS_IMPRESSIONS_DESKTOP_MAPS", value: 44 + i * 2, syncRunId },
|
|
3154
|
-
{ id: `${prefix}-gbp-clicks-${date}`, projectId: project.id, locationName, date, metric: "WEBSITE_CLICKS", value: 7 + i % 3, syncRunId }
|
|
3163
|
+
{ id: `${prefix}-gbp-impressions-${date}`, projectId: project.id, locationName, date, metric: "BUSINESS_IMPRESSIONS_DESKTOP_MAPS", value: 44 + i * 2, syncRunId: gbpRunId },
|
|
3164
|
+
{ id: `${prefix}-gbp-clicks-${date}`, projectId: project.id, locationName, date, metric: "WEBSITE_CLICKS", value: 7 + i % 3, syncRunId: gbpRunId }
|
|
3155
3165
|
])).run();
|
|
3156
|
-
db.insert(gbpKeywordImpressions).values({ id: `${prefix}-gbp-keyword`, projectId: project.id, locationName, periodStart: dates[0].slice(0, 7), periodEnd: dates.at(-1).slice(0, 7), keyword: "sample local service", valueCount: 148, valueThreshold: null, syncRunId }).run();
|
|
3157
|
-
db.insert(gbpKeywordMonthly).values({ id: `${prefix}-gbp-monthly`, projectId: project.id, locationName, month: dates.at(-1).slice(0, 7), keyword: "sample local service", valueCount: 148, valueThreshold: null, syncRunId, syncedAt: nowIso }).run();
|
|
3158
|
-
db.insert(gbpPlaceActions).values({ id: `${prefix}-gbp-action`, projectId: project.id, locationName, placeActionLinkName: `${locationName}/placeActionLinks/demo`, placeActionType: "APPOINTMENT", uri: `${root}contact/`, isPreferred: true, providerType: "MERCHANT", syncRunId }).run();
|
|
3166
|
+
db.insert(gbpKeywordImpressions).values({ id: `${prefix}-gbp-keyword`, projectId: project.id, locationName, periodStart: dates[0].slice(0, 7), periodEnd: dates.at(-1).slice(0, 7), keyword: "sample local service", valueCount: 148, valueThreshold: null, syncRunId: gbpRunId }).run();
|
|
3167
|
+
db.insert(gbpKeywordMonthly).values({ id: `${prefix}-gbp-monthly`, projectId: project.id, locationName, month: dates.at(-1).slice(0, 7), keyword: "sample local service", valueCount: 148, valueThreshold: null, syncRunId: gbpRunId, syncedAt: nowIso }).run();
|
|
3168
|
+
db.insert(gbpPlaceActions).values({ id: `${prefix}-gbp-action`, projectId: project.id, locationName, placeActionLinkName: `${locationName}/placeActionLinks/demo`, placeActionType: "APPOINTMENT", uri: `${root}contact/`, isPreferred: true, providerType: "MERCHANT", syncRunId: gbpRunId }).run();
|
|
3159
3169
|
db.insert(backlinkSummaries).values({ id: `${prefix}-backlinks`, projectId: project.id, source: "commoncrawl", release: "DEMO-2026-09", targetDomain: project.domain, totalLinkingDomains: 3, totalHosts: 12, top10HostsShare: "0.42", queriedAt: nowIso, createdAt: nowIso }).run();
|
|
3160
3170
|
db.insert(backlinkDomains).values(["partners.demo.example", "local-guides.demo.example", "trade-directory.demo.example"].map((linkingDomain, i) => ({ id: `${prefix}-backlink-domain-${i}`, projectId: project.id, source: "commoncrawl", release: "DEMO-2026-09", targetDomain: project.domain, linkingDomain, numHosts: 5 - i, createdAt: nowIso }))).run();
|
|
3161
3171
|
db.insert(adsConnections).values({ id: `${prefix}-ads-connection`, projectId: project.id, adAccountId: `demo-account-${project.id}`, displayName: "Sample Ad Account", currencyCode: "USD", timezone: "UTC", status: "active", reviewStatus: "approved", integrityReviewStatus: "sample", integrityDecision: "synthetic", lastSyncedAt: nowIso, conversionTrackingConfigured: true, createdAt: nowIso, updatedAt: nowIso }).run();
|
|
3162
|
-
db.insert(adsCampaigns).values({ id: campaignId, projectId: project.id, name: business.campaign, description: "Sample stored campaign for the public dashboard.", status: "ACTIVE", biddingType: "MAXIMIZE_CONVERSIONS", dailySpendLimitMicros: 45e6, conversionEventSettingIds: ["demo-conversion-setting"], targeting: { sampleData: true }, syncRunId, syncedAt: nowIso }).run();
|
|
3163
|
-
db.insert(adsAdGroups).values({ id: groupId, projectId: project.id, campaignId, name: "Service comparison intent", description: "Sample stored ad group.", status: "ACTIVE", billingEventType: "CPC", maxBidMicros: 32e5, contextHints: ["sample service\nsample comparison"], syncRunId, syncedAt: nowIso }).run();
|
|
3164
|
-
db.insert(adsAds).values({ id: `${prefix}-ad`, projectId: project.id, adGroupId: groupId, name: "Sample responsive ad", status: "ACTIVE", creative: { sampleData: true, headline: "Sample service guidance" }, reviewStatus: "APPROVED", syncRunId, syncedAt: nowIso }).run();
|
|
3165
|
-
db.insert(adsInsightsDaily).values(dates.slice(-7).map((date, i) => ({ id: `${prefix}-ads-insight-${date}`, projectId: project.id, level: "campaign", entityId: campaignId, date, impressions: 340 + i * 20, clicks: 22 + i, spendMicros: 18e5 + i * 1e5, conversions: 2 + i % 3, syncRunId }))).run();
|
|
3172
|
+
db.insert(adsCampaigns).values({ id: campaignId, projectId: project.id, name: business.campaign, description: "Sample stored campaign for the public dashboard.", status: "ACTIVE", biddingType: "MAXIMIZE_CONVERSIONS", dailySpendLimitMicros: 45e6, conversionEventSettingIds: ["demo-conversion-setting"], targeting: { sampleData: true }, syncRunId: adsRunId, syncedAt: nowIso }).run();
|
|
3173
|
+
db.insert(adsAdGroups).values({ id: groupId, projectId: project.id, campaignId, name: "Service comparison intent", description: "Sample stored ad group.", status: "ACTIVE", billingEventType: "CPC", maxBidMicros: 32e5, contextHints: ["sample service\nsample comparison"], syncRunId: adsRunId, syncedAt: nowIso }).run();
|
|
3174
|
+
db.insert(adsAds).values({ id: `${prefix}-ad`, projectId: project.id, adGroupId: groupId, name: "Sample responsive ad", status: "ACTIVE", creative: { sampleData: true, headline: "Sample service guidance" }, reviewStatus: "APPROVED", syncRunId: adsRunId, syncedAt: nowIso }).run();
|
|
3175
|
+
db.insert(adsInsightsDaily).values(dates.slice(-7).map((date, i) => ({ id: `${prefix}-ads-insight-${date}`, projectId: project.id, level: "campaign", entityId: campaignId, date, impressions: 340 + i * 20, clicks: 22 + i, spendMicros: 18e5 + i * 1e5, conversions: 2 + i % 3, syncRunId: adsRunId }))).run();
|
|
3166
3176
|
db.insert(conversionTrackingContracts).values({ id: `${prefix}-conversion`, projectId: project.id, name: "Sample lead", eventName: "generate_lead", googleAds: { customerId: "demo-customer", conversionActionId: "demo-action", conversionId: "AW-123456", conversionLabel: "demo-label", campaignIds: [campaignId], requireBiddableGoal: true, requirePrimaryAction: true }, gtm: { accountId: "demo-account", containerId: "demo-container", tagId: "demo-tag", triggerIds: ["demo-trigger"], variableIds: ["demo-value", "demo-currency"] }, runtime: { verificationRequired: true, requireTransactionId: true, requireValue: true, requireCurrency: true, productionHosts: [project.domain] }, createdAt: nowIso, updatedAt: nowIso }).run();
|
|
3167
3177
|
}
|
|
3168
3178
|
|