Skip to content

Release notes

Version 1.0.0

What changed in GripIQ 1.0.0 (2026-05-12).

De eerste stabiele release van GripIQ: een fors uitgebreid beheerpaneel, snellere pagina’s voor eindgebruikers, krachtigere filters en een stevige beveiligingsupgrade.

[Beheerders] Vernieuwd beheerpaneel met CRUD, modals en filters

Section titled “[Beheerders] Vernieuwd beheerpaneel met CRUD, modals en filters”

Het Filament-beheerpaneel is grondig vernieuwd met volledige CRUD voor alle resources, sidebar-layouts, modals en filters. Enum-waarden hebben nu nette labels in tabellen en formulieren. Bij het aanmaken van een project wordt de eigenaar automatisch als eerste projectlid toegevoegd. Op Discover Competing Brands wordt de eigen brand voorgeselecteerd wanneer er maar één is. Triggerknoppen voor niet-ingeplande scans zijn weer beschikbaar op de Project-detailweergave.

Wachtwoorden moeten voldoen aan OWASP-regels inclusief een check tegen bekende datalekken. Voor lokale registratie is e-mailverificatie verplicht; Azure-aangemelde gebruikers worden automatisch als geverifieerd behandeld. SSRF, XXE en SQL-injectie zijn afgesloten in sitemap-, website- en social-fetchers. Login- en password-reset-throttling kijken nu naar de combinatie (IP, e-mail), en response-hardening-headers met een strakkere CSP zijn standaard actief.

[Eindgebruikers] Snellere pagina’s door progressief laden

Section titled “[Eindgebruikers] Snellere pagina’s door progressief laden”

Pagina’s laden niet meer in één blok, maar in lagen: KPI’s verschijnen direct, grafieken en lijsten komen erna binnen. Chart.js wordt voortaan per route lazy ingeladen, en blokken onder de vouw laden pas zodra ze in beeld komen. Statische enums worden één keer opgehaald en daarna gecached. Dashboard- en navigatietellers updaten direct na een wijziging.

[Eindgebruikers] Krachtigere filters op Prompts, Insights en Competitors

Section titled “[Eindgebruikers] Krachtigere filters op Prompts, Insights en Competitors”

Op Prompts kunnen meerdere statussen en tags tegelijk geselecteerd worden, en op Insights staat de filterbalk bovenaan met een statusslider en multi-select. Competitors heeft multi-select voor Brand, infinite scroll in de feed, en een segmented-control die per filter te wissen is. Alle widgets onder de filterbalk respecteren voortaan elke ingestelde filter, en de slider klikt netjes terug naar “Alle”.

[Eindgebruikers] Klikbare KPI-kaarten en duidelijkere Share of Voice

Section titled “[Eindgebruikers] Klikbare KPI-kaarten en duidelijkere Share of Voice”

De KPI-kaarten op het Overzicht zijn nu interactief — een klik leidt naar de bijbehorende detailweergave. Share of Voice is duidelijker gelabeld en gedragen: rijen tellen voortaan correct op tot 100%. Help-tooltips bij de visibility-cijfers op Prompts leggen uit welk oppervlak elke meting precies dekt.

  • [Eindgebruikers] Tags voor Prompts kunnen nu beheerd worden met kleurkiezer en management-UI.
  • [Eindgebruikers] “New”-KPI op Insights dekt zowel Draft als Published; het menubadge telt alleen onopgeloste insights en “ignored” wordt als gesloten gedimd.
  • [Eindgebruikers] Visibility-KPI, rankings en trend op de Prompt Show-pagina volgen voortaan de ingestelde date_range.
  • [Eindgebruikers] Brand-mentions op Prompts worden geteld via mentioned_brand_ids in plaats van substring-matching, wat foutieve treffers voorkomt.
  • [Eindgebruikers] Socials toont alle platforms zonder hardcoded allowlist; hydratie van brand.platforms en platform-stats als EnumField voorkomt crashes op /social.
  • [Eindgebruikers] Achtergrond-crawls op Socials draaien in blokken van 10 accounts voor stabielere doorlooptijden.
  • [Eindgebruikers] Diverse UI-fixes: Dialog forwardt $attrs, kaartschaduwen volgen de afgeronde hoeken, en de geestlijn aan de linkerrand van de Prompts-tabel is weg.
  • [Beheerders] Triggerknop voor niet-ingeplande scans is weer zichtbaar op de Project-detailweergave; BrandStatsWidget aggregeert nu via JSON_TABLE in SQL.
  • [Beheerders] UserForm bewaakt e-mailadres-uniekheid; AccessAdminPanel is de canonieke permissienaam.
  • [Iedereen] SSRF in sitemap-, website- en social-image-fetchers is afgesloten en deze paden gaan voortaan via SafeHttp.
  • [Iedereen] Sitemap-XML-parsing is gehard tegen XXE en zip-bom-DoS; raw-SQL-builders staan geen string-interpolatie meer toe.
  • [Iedereen] Forwarded proxy headers achter de Forge load balancer worden weer correct vertrouwd.
  • [Iedereen] Beheerders met admin-rechten kunnen geen lokale wachtwoordlogin meer gebruiken — uitsluitend Azure SSO.
  • [Iedereen] Login- en password-reset-throttling kijken naar (IP, e-mail) in plaats van alleen IP.
  • [Iedereen] User-invitation mail wordt bepaald op azure_id in plaats van e-maildomein; Azure-gebruikers worden bij SSO als geverifieerd behandeld met backfill op de kolom.
  • [Iedereen] tag_ids exists-regels in vier Form Requests zijn project-scoped om cross-tenant-leakage te voorkomen.
  • [Iedereen] Rate-limiting middleware op de CreateKeywordAnalysis-job voorkomt overschrijding van DataForSEO-quota.
  • [Iedereen] Achtergrond-jobs zijn ontdubbeld en mogen langer in de wachtrij staan zonder elkaar te blokkeren.
  • [Iedereen] Cache-invalidatie van nav_counts, insights_context en available_models reageert correct op model-wijzigingen; cache-keys voldoen aan de tenant-scoping-conventie uit ADR-0024.
  • [Iedereen] Vertaalde labels ($t() / trans()) op enum- en datumvelden, zodat de Nederlandse weergave overal klopt.

Volledige technische release notes: GitHub release v1.0.0