Changelog
What shipped, when. Every entry below corresponds to a merged change in the Kompense codebase. Dates are the date the change went live.
5 September 2026
Changed
- Removed marketing claims that the product could not keep. The site advertised a 6-hour detection window and a 12-hour scan cadence; the intelligence scrape has always run once a day. Every cadence claim now matches the cron.
/pricinglisted Solo as weekly scans. Only the free tier is throttled to weekly — Solo and above run on the daily cron. Corrected.- Removed four unsourced outcome statistics and an engineering-vanity block (lines of code, commit counts) from the homepage. Neither told a buyer anything about whether the product works.
- Terms and the refund policy now describe the 14-day no-card trial that new accounts actually receive. It had never been documented.
Fixed
kompense.com/battlecardreturned a 404. It now redirects to the generator.
29 August 2026
Fixed
- White-label report exports could include another client's data. On Studio, an export was scoped to the agency rather than to the client it was generated for. Exports are now scoped per client.
- Exported reports were named
Kompense-*regardless of white-label branding, and the custom footer only rendered on the final page of a PDF.
28 August 2026
Added
- White-label reporting for agencies — custom logo, colours and footer on exported reports, per client workspace.
/teardown— a public one-off competitor teardown.
Security
- Private reports were reachable without authentication. Access is now checked server-side on every report route.
27 August 2026
Fixed
- The battlecard SEO pipeline had stalled for roughly six weeks. Failed pairs retried forever with no cooldown, dead pairs were never dropped, and the generation step could exhaust its budget on reasoning tokens before writing anything. Added failure cooldowns, a thinking-free retry, and a second daily slot.
- The social page summarised an arbitrary 1,000 rows out of 10,911 — whichever the database returned first. It now summarises the full set.
- The free tier had been left unusable by an earlier change. Restored.
25–26 August 2026
Performance
- Dashboard data is now fetched server-side in a single request. Previously the page shipped 942KB of JavaScript and issued around 60 queries before rendering anything.
/api/competitorswas reading roughly 27,000 rows to compute four integers.- Removed the remaining duplicated requests on dashboard load, and a 503 in the load path.
Fixed
- The nightly intelligence scrape was timing out at the 300-second limit.
- The browser and the server wrote the same auth cookies at different scopes, which could sign people out unpredictably.
24 August 2026
Added
- Paid ad monitoring — competitor ad copy is now read from search results, where the copy actually appears.
Fixed
- Google sign-in was broken for anyone returning with an expired session. The auth callback was missing from the middleware skip list.
- The Jobs and Content tabs in the insights feed could never show anything —
rows written without a source type were being coerced to
website. - The dashboard displayed a scan cadence the product had never run on.
- Google ads were attributed by advertiser name rather than by domain, which put ads against the wrong companies. The first attempt at this was reverted the same day once the misattribution was found.
20–22 August 2026
Added
- Reverse trial — every new account gets the full Solo plan for 14 days with no card, then drops to the permanent free plan.
- A permanent free tier, tracking one competitor with no card. It had existed in the code but was never shown anywhere.
/klue-pricing, and the/vscomparison pages made indexable — their canonical URLs pointed at pages that did not exist.
Fixed
- Took down a generated battlecard that described the wrong company.
9–17 July 2026
Added
- Instant Battlecard generator — enter two companies, get a battlecard. No account required.
- Programmatic battlecard pages for competitor pairs people actually search for.
Fixed
- Vercel's Data Cache was freezing service-role reads across deploys, which collided crons against each other and served a stale sitemap.