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.
[Iedereen] Forse beveiligingsupgrade
Section titled “[Iedereen] Forse beveiligingsupgrade”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.
Overige wijzigingen
Section titled “Overige wijzigingen”- [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_idsin plaats van substring-matching, wat foutieve treffers voorkomt. - [Eindgebruikers] Socials toont alle platforms zonder hardcoded allowlist; hydratie van
brand.platformsen platform-stats alsEnumFieldvoorkomt 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;
BrandStatsWidgetaggregeert nu viaJSON_TABLEin SQL. - [Beheerders] UserForm bewaakt e-mailadres-uniekheid;
AccessAdminPanelis 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_idin 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_contextenavailable_modelsreageert 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