Senly
Releases & changelog
Live · v0.50

What's new in Senly

A transparent overview of every improvement, fix and new feature. We make Senly a little better every day.

1874
Total updates
85
Releases
v0.50
Latest release · Sunday
30 older updates are still written in Dutch. Your browser offers a translate option for those blocks — click the translate icon in the address bar.
v0.50
Sunday, 5 July 2026

Apple-glasrand komt naar het dashboard

Polish

Glasrand op de dashboard-kaarten en KPI-tegels

De glazen Apple-rand die we in de Tool Store introduceerden, liep nog niet door in de rest van het portaal.

Polish

Glasrand ook op de Launchpad

De Launchpad (je opstart-checklist) heeft nu dezelfde glasrand: de voortgangs- en zijkaarten krijgen de rand met zachte lift, en de losse stap-taken een fijne rand — in lijn met het dashboard en de Tool Store.

Polish

Glasrand ook op Social Media Trends

De Trends-pagina volgt nu ook de glasrand: de KPI-kaarten, trend-artikelen, inzicht-rijen en de categorie-zijkaart krijgen de nette rand met zachte lift. Consistent met de rest van het portaal, light én dark.

Polish

Glasrand ook op de Contentkalender

Het kalender-venster krijgt nu dezelfde glasrand als frame rond je content-planning — een nette, licht opgetilde omkadering in lijn met de rest van het portaal.

Polish

Partner-analytics: nettere omzet/marge-grafiek

Op de partner-analyticspagina werd de lijn-grafiek "Omzet, kosten & marge" enorm hoog getekend, met veel te grote maand-labels — en als er nog geen omzet was, zag je een groot leeg vlak.

v0.49
Saturday, 4 July 2026

White-label partners bepalen nu zelf hun reseller-prijs

New feature

Stel je eigen verkoopprijs per klant in

De white-label reseller-calculator rekende met een vaste prijs van €59,95 per klant. Als partner kon je niet zien wat je marge zou zijn bij jouw eigen prijs.

Bug fix

Activatiepagina toont nu de juiste info per partnertype

Vroeg je de white-label reseller-optie aan, dan liet de activatiepagina toch de affiliate-tekst zien (“30% levenslange commissie”) — terwijl het reseller-model heel anders werkt (eigen merk, eigen prijs, vaste €40-kosten).

Polish

Schuifjes in de reseller-calculator volgen je huisstijlkleur

De twee schuifjes (aantal klanten en jouw prijs) stonden nog op het standaard browser-blauw. Ze gebruiken nu de ingestelde branding-accentkleur, net als de rest van de white-label-pagina.

v0.48
Friday, 3 July 2026

Boekingslinks tonen nu de juiste host-naam

Polish

Onboarding onthoudt je laatst geopende flow

Bij het openen van Onboarding kwam je altijd op de eerste flow uit de lijst uit, ook al had je net een andere flow (bijv. Social Media Beheer) bekeken — telkens opnieuw zoeken dus.

Bug fix

Grijs lijntje in de tool-zoekbalk weg (light mode)

In light mode stond er een dun grijs kadertje binnen de “Zoek een tool…”-balk. Een globale light-mode input-stijl won qua CSS-specificiteit van de zoekbalk-stijl, waardoor het randje telkens terugkwam.

Bug fix

Canva-video’s plannen nu als video (mp4) i.p.v. stilstaand beeld

Bij “Stuur naar Contentplanner” werd élke Canva-pagina als JPG geëxporteerd — ook video-/animatiepagina’s. Die werden dus als stilstaande afbeelding ingepland i.p.v. als video.

New feature

Apart logo voor light mode en dark mode

Er waren twee logo-velden (“lichte/donkere achtergrond”), maar de zijbalk toonde altijd hetzelfde logo — verwarrend als je een apart logo per modus wilde.

Bug fix

Logo-wijziging direct zichtbaar zonder herladen

Als je een nieuw logo (of andere huisstijl) instelde en opsloeg, veranderde het logo in de zijbalk pas na een volledige page-reload. Het opslaan wiste wel de interne cache, maar de al-geopende zijbalk las die niet opnieuw.

Bug fix

Huisstijl-uitleg: logo staat in de zijbalk, niet de header

Bij het instellen van je logo zei de uitleg dat het “in de header” verscheen, maar de header toont helemaal geen logo — waardoor het leek alsof je logo niets deed.

Bug fix

Logo voor lichte achtergrond op de juiste plek

Het aparte “Logo (lichte achtergrond)” leek niets te doen. De donkere merk-tegel in de zijbalk pakte juist die lichte-achtergrond-variant (een donker logo op een donkere tegel = onzichtbaar), en op het lichte login-kaartje stond andersom het witte donkere-achtergrond-logo — ook onzichtbaar.

Bug fix

Huisstijl opslaan zonder favicon werkt weer

Bij Huisstijl & branding kreeg je de foutmelding “faviconUrl moet https of relatief pad zijn” zodra je iets anders (kleuren, namen) wilde opslaan terwijl er geen favicon was ingesteld. De validatie zag een leeg favicon-veld aan voor een ongeldige waarde en blokkeerde de hele opslag.

Polish

Lichte menubalk in light mode

De verticale menubalk links was ook in light mode een donker teal-zwart blok, dat visueel losstond van het verder lichte dashboard.

Polish

Team-chat-knop rustiger in de zijbalk

De team-chat-knop onderaan de zijbalk was een vol gevuld teal-blok — dezelfde stijl als het actieve menu-item — waardoor hij altijd "geselecteerd" leek en lostrok van de verder minimalistische icoonrij.

Polish

Tools-zoekbalk zonder grijze omlijning

De grote “Zoek een tool…”-balk had in rust een subtiele schaduw die als een dun grijs randje oogde. Die is weggehaald; het veld staat nu vlak. De accent-rand verschijnt nog wél zodra je erin klikt.

Polish

“Tool van de week”-titel iets dunner

De titel van de uitgelichte tool bovenaan de tools-pagina had een zware bold-weight; die is een tandje dunner gemaakt (SemiBold) voor een rustigere uitstraling.

Polish

Browser-balk volgt thema en huisstijl-kleur

De bovenste browser-/adresbalk (de theme-color van de app) was altijd teal, ook in light mode — daardoor oogde de balk bovenaan donker terwijl de rest van het portaal licht was, en negeerde hij je ingestelde huisstijl-kleur.

Polish

Tool Store hero-illustratie verfrist

De decoratieve illustratie rechtsboven had een donkere centrale tegel en een draaiende streepjes-ring.

Polish

DM Opener Generator: illustratie verticaal gecentreerd

In de hero-illustratie stond de hele mockup (profielkaart, AI-orb en openers) te laag in het vak — er zat te veel lege ruimte bovenaan.

Polish

Influencer-tarief calculator: witte kaarten in light mode

De vier zwevende kaarten (Volgers, Geschatte postprijs, Engagement rate, Gemiddelde prijs range) in de hero-illustratie waren donker-amber en het podium bijna-zwart — dat paste niet bij de lichte productpagina.

Polish

Advertentie-statistieken: “ROAS”-label leesbaar in light mode

Het “ROAS”-label boven het centrale glaspaneel in de Advertentie-statistieken-illustratie was licht-op-licht en daardoor onleesbaar in light mode.

Polish

“Tool van de week” compacter en strakker

De uitgelichte tool bovenaan de tools-pagina was een grote, hoge hero-kaart met het icoon rechts en de knop onderaan — dat nam veel ruimte in.

Polish

Win/Loss Analyzer: goud iets donkerder in light mode

De gele accenten in de voorbeeld-illustratie (trofee, verbindingslijnen, icoontjes en percentages) waren te licht op de bijna-witte achtergrond.

Polish

DM Opener Generator: AI-orb netjes verticaal gecentreerd

In de voorbeeld-illustratie stond de middelste AI-orb (met de ringen en de “AI Engine”-pill) iets te hoog en lijnde daardoor niet uit met de profiel- en openers-kaarten ernaast.

Polish

Bezwaren Library: zoekbalk wit in light mode

De zoekbalk (“Zoek een bezwaar…”) in de voorbeeld-illustratie van de Bezwaren Library had een donker-transparante achtergrond die op de lichte kaart grijs oogde.

Polish

Trend radar: bredere voorbeeld-illustratie

De hero-illustratie van de Trend radar is breder gemaakt (net als bij andere tools), zodat de vijf trend-kaarten meer ruimte krijgen en de animatie strakker oogt.

Polish

Klant-ROI calculator: illustratie in de groene tool-kleur

De zwevende kaartjes in de hero-illustratie van de Klant-ROI calculator waren bijna-zwart en de labels (“Opbrengst”, “Winst”, “Kosten”, “Terugverdientijd”, “ROI”) waren grijs — dat paste niet bij de groene tool.

Bug fix

Brand-safety check: gemarkeerde woorden leesbaar in light mode

In de voorbeeld-illustratie van de Brand-safety check waren de gemarkeerde risicowoorden in de caption (“slecht!”, “BrandX”, “niet!!!”) en de risico-chips in het resultaat (slecht, niet, BrandX) wit — op de lichte kaart in light mode dus vrijwel onzichtbaar.

Polish

Profielfoto-downloader: illustratie in het brand-blauw van de tool

De hologram-illustratie op de productpagina van “Profielfoto downloaden” (de ring, het persona-icoon en de glow/schaduw) was in light mode lichtblauw en vaal op de witte kaart.

Bug fix

Tool-mockups (ROI, witregel-fixer e.a.): grijze plaat nu bijna-wit in light mode

De hero-illustraties van o.a. de Klant-ROI calculator, Instagram witregel-fixer, engagement-rate calculator, advertentie-statistieken, influencer-tarief calculator, groei-projectie, bestandsgrootte-verkleiner en profielfoto-downloader tonen een "podium" met zwevende kaarten. Die stond op een donkergrijze plaat, wat in light mode niet bij de lichte pagina paste. Daarnaast waren de kaart-labels op de donkere kaartjes donker-op-donker en slecht leesbaar.

Polish

Hashtag-bibliotheek: amber-accent donkerder in light mode

In de Hashtag-bibliotheek-mockup was het gele/amber-accent (hashtag-pills, iconen, counts, de #-tegel en de gloed) te licht op de bijna-witte achtergrond, waardoor het slecht zichtbaar was.

Polish

Bio generator: keuzevelden wit in light mode

In de Bio generator-mockup waren de keuzevelden (platform-balk, dropdowns voor niche/tone/focus en de CTA-rij) grijs op het lichte paneel — ze gebruikten een half-transparant zwart.

Polish

Bio generator: highlight-woorden leesbaar in light mode

In de voorbeeld-bio’s op de Bio generator-pagina waren de vetgedrukte accentwoorden (zoals “Marketing consultant”) wit — dus onzichtbaar op de lichte kaart in light mode.

Polish

Voice-memo tool: strakkere kop

Het grote intro-tekstblok bovenaan de Voice-memo tool is weggehaald, zodat je direct bij het profiel en de opties uitkomt.

Polish

Tool Store: nette light-mode details

Op de tool-productpagina schemerde het platform ongelijk door de achtergrond achter de popup, de "Perfect voor"-icoontjes stonden net iets te hoog naast de tekst, en de "Bio generator" / "Geschiedenis"-pills oogden grijs in light mode.

Bug fix

Username checker: platform-iconen leesbaar in light mode

In de voorbeeld-illustratie van de Username checker waren de social-platform-iconen (Instagram, TikTok, X, YouTube, LinkedIn, enz.) wit — op de lichte achtergrond onzichtbaar.

Polish

Engagement-rate calculator: podium in de tool-kleur

In de voorbeeld-illustratie was het podium (het "voetstuk" onder het hart) bijna-zwart, wat in light mode niet bij de rest van de lichte, roze illustratie paste.

Polish

Groei-projectie: kaarten en podium in de tool-kleur

In de voorbeeld-illustratie waren de kaarten (Huidige volgers, Doel, enz.) en het podium bijna-zwart en waren de labels grijs — in light mode oogde dat somber en de labels lastig leesbaar.

Bug fix

Maandrapport-generator: voorbeeld-widget leesbaar in light mode

In de voorbeeld-illustratie van de Maandrapport-generator had de middelste "genereren"-kaart witte tekst (124K, Bereik, Conversieratio, Kosten) die in light mode op een lichte lila achtergrond wegviel.

Polish

Username checker: echte merklogo’s

De social-platformlogo’s in de Username checker waren handgetekende benaderingen. Het Instagram-icoon was daarna nog steeds een nagetekende outline in plaats van het echte logo.

New feature

Onboarding & CRM: hernoem een fase door op de naam te klikken

De naam van een fase (kolom) in de onboarding-flow én in de CRM-pipeline kon je niet aanpassen als die er eenmaal stond — je kon fasen alleen slepen of verwijderen.

Infra

App laadt de nieuwste versie (cache ververst)

De offline-cache is ververst zodat de recente light-mode-verbeteringen en fixes direct zichtbaar zijn zonder handmatig verversen.

Bug fix

DM-opener, Hook Analyzer, Bio generator & Username generator: leesbaar in light mode

Deze tools zijn donker (dark-first) ontworpen en hadden geen lichte weergave. In light mode viel tekst weg — wit-op-wit of donker-op-donker (o.a. de score "86 / Sterk", de stap-labels, de "AI Engine"-knop en de gegenereerde varianten).

Bug fix

Hook Analyzer: score "86 / Sterk" leesbaar in light mode

In de Hook Analyzer waren het score-getal en het "Sterk"-oordeel in de Hook Score-kaart wit-op-wit in light mode — dus onleesbaar. Ook de "Top 25%"- en AI-analyse-cijfers waren te licht.

Bug fix

Downloader-productpagina’s: witte tekst nu in de kleur van de tool

Op de downloader-productpagina’s (Facebook, TikTok, Instagram, YouTube, LinkedIn) was de tekst in de hero-mockup — de "Plak je … link"-kop, de kaart-labels en de vetgedrukte feature-titels — wit op de bijna-witte achtergrond in light mode, en dus onleesbaar.

Bug fix

Tool-productpagina’s: hero-illustraties leesbaar in light mode

De sfeer-illustraties bovenaan de tool-productpagina’s (o.a. Link-in-bio, Battle Card, ROI Calculator, Voice-memo) zijn donkere mini-mockups. In de lichte weergave viel de tekst daarin weg — donker-op-donker of licht-op-licht — waardoor labels en voorbeeldteksten onleesbaar werden.

Bug fix

Voice-memo script: tijd en "AI Live"-label vielen over elkaar

In de audio-sectie van de Voice-memo tool lagen de tijdsaanduiding en het "AI Live"-label over elkaar heen rechtsboven.

Bug fix

Niche-spiekboeken: leesbaar in light mode

In de lichte weergave viel de centrale playbook-kaart weg: de donkere glas-achtergrond werd een vage grijze vlek en de gedempte en paarse teksten waren nauwelijks leesbaar (licht op licht).

New feature

Financieel: "Klant sinds" bepaalt vanaf wanneer de omzet meetelt

Als je bij een klant "Klant sinds" op een datum in de toekomst zette, telde het maandbedrag toch al direct mee in je huidige omzet en in de maandgrafiek.

New feature

Setter-commissie volgt nu de klant-startdatum

Koppelde je een appointment-setter aan een klant die pas later start, dan liep de commissie-teller meteen en zag de setter al een bedrag — ook al was de klant nog niet begonnen.

New feature

Account-manager-fee telt ook pas vanaf de klant-startdatum

De €50 manager-fee per klant telde mee zodra de manager gekoppeld was, óók als de klant pas later zou starten.

Polish

Ingeplande commissie toont nu het verwachte bedrag

Een "Ingepland"-commissieregel (klant start later) laat in de Bedrag-kolom nu het verwachte commissie-bedrag zien (pct × maandfee), gedimd, in plaats van €0 — zodat de setter ziet wat de klant straks oplevert. Het uitbetaalbare commissie-totaal en de claim blijven die regels uitsluiten tot ze factureerbaar worden.

Bug fix

Admin-overzicht Medewerkers telde ingeplande commissie dubbel mee

In Financieel > Medewerkers telde de commissie van een setter voor een nog niet gestarte klant al mee in het maandtotaal (bv. €170), terwijl het eigen dashboard van de setter correct €50 toonde.

New feature

Link-in-bio: eigen verloop instellen

Bij de link-in-bio kon je alleen kant-en-klare gradient-thema’s kiezen; een eigen kleurcombinatie maken kon niet.

New feature

Niche-spiekboeken: 8 nieuwe markten + hashtags voor élke niche

De hashtag-bundels zijn uitgebreid van 8 naar 16 markten — er zijn er 8 bijgekomen: Zweden, Denemarken, Noorwegen, Portugal, Polen, Brazilië, Turkije en Mexico, elk met tags in de lokale taal. Bovendien hebben nu álle 8 niches per-land-bundels: waar eerder alleen Horeca, Fitness en Kapsalon land-specifieke hashtags hadden, krijgen ook Webshop, Makelaar, Business coach, Beauty en Autobranche nu voor elke markt een gelokaliseerde set. De lokale tags staan vooraan, gevolgd door de internationale standaard-tags.

New feature

Niche-spiekboeken: nieuw hologram-ontwerp

De Niche-spiekboeken zijn opnieuw ontworpen als een premium 3-koloms dashboard: links kies je een niche, centraal zweeft de playbook-kaart op een hologram-podium met de best presterende formats, post-frequentie en beste tijden, en rechts zie je drie sector-benchmarks (engagement-, reach- en save-uplift) met een sparkline. Onder de hero staat de volledige draaiboek-kaart met land-selector, copy-ready hashtag-bundel per land en do's & don'ts. De benchmark-cijfers zijn indicatieve sector-getallen, geen account-data.

New feature

DM-opener: analyseert nu écht het geplakte profiel

Het ANALYSE-blok in de DM-opener toonde altijd dezelfde vaste voorbeeldwaarden (niche, tone, doelgroep, doel van "@jessica.marketing"), ook nadat je een eigen profiel had geplakt. En de handle stond vast, waardoor het leek alsof de tool niet naar jouw prospect keek.

New feature

Kleur-contrast checker: nieuw ontwerp

De Kleur-contrast checker is opnieuw ontworpen als een WCAG 2.2-dashboard: kies een tekst- en achtergrondkleur (met pipet) en zie live de contrast-ratio in een gloeiende score-ring met grade (AA/AAA) en verdict, een WCAG-resultatenpaneel (AA/AAA × normaal/groot met voldoet/voldoet-niet) en een voorbeeldtekst-kaart. Alles wordt 100% client-side berekend.

Polish

Kleur-contrast checker: verfijnde score-ring en hologram

De centrale score-animatie is dichter bij het ontwerp gebracht: een feller neon-gloeiende ring die onderaan open is met ronde uiteinden, het contrast-icoon dat bovenop de ring rust en de lijn breekt, en een uitgebreider hologram-projector-podium met lichtbundel, meerdere gloeiende concentrische ringen en een felle kern. Beweging wordt uitgeschakeld bij "verminder beweging".

New feature

DM-opener: platform, context en doel sturen de openers weer

De DM-opener genereerde openers altijd alsof het om een Instagram-DM ging en gebruikte geen context of doel — de personalisatie-invoer was bij een eerdere herbouw verdwenen.

Polish

Win/loss analyzer: futuristische trofee-visual

De centrale trofee-globe is moderner gemaakt: een dichter wireframe-bol met een gloeiende kern, twee roterende gyroscoop-ringen, twinkelende netwerk-nodes, een shimmerende lichtbundel en een pulserend hologram-podium. De trofee zweeft subtiel. Beweging wordt uitgeschakeld bij "verminder beweging".

New feature

Bezwaren Library: van 20 naar 100 bezwaren

De Bezwaren Library had 20 sales-bezwaren. Voor een echte naslag-bibliotheek voelde dat te dun.

Polish

ROI calculator: label en accentkleur bijgewerkt

Het eerste invoerveld heet nu "Maandelijkse investering (huidig)" en het accentwoord in de titel is weer volledig groen, in lijn met het ontwerp.

Bug fix

DM-opener: tone-balk werkt weer + tone-labels

In de DM-opener tool deed de tone-balk onderaan (de knoppen om per toon te kiezen) niets — je kon klikken maar er veranderde niks aan de openers. De tool voelde daardoor stuk.

New feature

Link-in-bio: gradient-thema’s

Bij de link-in-bio tool kon je alleen effen thema-kleuren kiezen voor de knoppen.

Polish

Tool-productpagina: "geopend afgelopen week" verwijderd

Op de productpagina van elke tool stond een balkje met "X× geopend afgelopen week". Dat gaf een leeg/onaf gevoel bij tools met weinig gebruik en voegde weinig toe.

Bug fix

Snelheidstest: gauge-naald beweegt weer vloeiend

Tijdens de internet-snelheidstest haperde de meter: de naald en de groene boog sprongen schokkerig in stapjes mee met de metingen (ongeveer 10 keer per seconde), in plaats van soepel te bewegen.

New feature

Win/loss analyzer: nieuw ontwerp

De Win/loss analyzer is opnieuw ontworpen als een insights-dashboard: plak de notities van een deal en kies de uitkomst, en de AI haalt de win drivers en loss reasons eruit — overzichtelijk gepresenteerd met percentage-balken, een centrale trofee-visual, een key-insight en een 4-staps proces. De echte AI-analyse is behouden.

New feature

Voice-memo script: nieuw ontwerp

De Voice-memo script generator is opnieuw ontworpen: plak het profiel van je prospect, kies een duur (30, 60 of 90 sec) en de AI schrijft een gesproken script opgedeeld in drie secties (Hook → Value → Ask) met timing per stuk. Je ziet centraal de herkende (bewerkbare) tekst met een audio-visual, rechts de secties met kopieer-knoppen en een download naar .txt. De echte AI-generatie is behouden.

New feature

LinkedIn connect note: nieuw ontwerp

De LinkedIn connect note generator is opnieuw ontworpen: plak het profiel van je prospect, kies een tone en de AI schrijft vijf varianten (warm, professional, nieuwsgierig, direct, referentie) — allemaal binnen LinkedIn’s 300-tekenlimiet. Je ziet de gekozen note centraal met een tekenteller, alle vijf de varianten rechts en één-klik kopiëren (per note of alle vijf). De echte AI-generatie is behouden.

New feature

Bezwaren library: nieuw ontwerp

De Bezwaren library is opnieuw ontworpen: zoek of filter op categorie in 20 veelvoorkomende sales-bezwaren, kies een bezwaar en zie centraal het gekozen bezwaar met tone-tabs (empathisch, nieuwsgierig, direct) plus rechts alle drie de reactie-varianten om te kopiëren. De echte bezwaar-teksten en reacties zijn behouden.

New feature

DM opener generator: nieuw ontwerp

De DM opener generator is opnieuw ontworpen: plak de bio van je prospect en de AI schrijft vijf korte, gepersonaliseerde openers — elk in een eigen tone, met één-klik kopiëren. Een profiel-analysekaart (niche, tone, doelgroep, doel) en een AI-engine-visual maken het geheel af. De echte AI-generatie is behouden.

New feature

QR-code generator: nieuw ontwerp

De QR-code generator is opnieuw ontworpen: voer een URL in, kies kleur, achtergrond, formaat, foutcorrectie en marge, en zie de QR-code live in de preview. Download als PNG of SVG of kopieer de link. De code bevat je exacte doel-URL (geen redirect of tracking) en verloopt nooit; alles gebeurt client-side.

New feature

Storingen-checker: nieuw ontwerp

De Storingen-checker is opnieuw ontworpen als een live status-dashboard: een platform-grid toont per netwerk (Instagram, TikTok, LinkedIn, Facebook, X, YouTube) of het operationeel is, traag reageert of een storing heeft — met een sparkline en een centrale alert-hub die de ernst weerspiegelt. Daaronder het aantal meldingen, hoe lang geleden de laatste check was, de incident-severity en een 24u-grafiek. De echte statuscontrole (server-side pings) is behouden en ververst automatisch.

New feature

Username generator: nieuw ontwerp

De Username generator is opnieuw ontworpen: geef een merk of trefwoord op en de AI stelt creatieve handles voor. Je ziet een lijst suggesties, een aanbevolen handle met een levendig hologram-effect en een realtime platform-check die per netwerk (Instagram, TikTok, LinkedIn, X, YouTube …) toont of de handle nog vrij is. De echte generatie en beschikbaarheidscheck zijn behouden.

New feature

Trend radar: nieuw ontwerp

De Trend radar is opnieuw ontworpen als een radar-dashboard: geef je niche en platform op en de AI brengt de opkomende content-trends in kaart. Je ziet een horizontale rij trend-kaarten met momentum en groei-indicatie, een zoekbalk, en een "Waarom deze trends nu opkomen"-paneel met signalen zoals engagement velocity, zoekvolume en creatie-groei. De echte scan is behouden.

New feature

Viral hook analyzer: nieuw ontwerp

De Viral hook analyzer is opnieuw ontworpen als een analyse-dashboard: plak je openingszin, kies je platform en de AI scoort de scroll-stopping kracht. Je ziet een grote hook-score (0–100) met een gauge, concrete insights, een AI-analyse op vijf punten (aandacht, emotionele trigger, nieuwsgierigheid, duidelijkheid, viral potentie) en meteen vijf sterkere hook-varianten om te kopiëren. De echte AI-analyse is behouden.

Polish

Content-ideeën tool: rustiger, ruimer formulier

In de Content-ideeën tool stonden alle keuzevelden (klantfocus, niche, doelgroep, platform, toon, doel, AIDA-fase) dicht op elkaar gepropt, waardoor het scherm druk en onoverzichtelijk oogde.

New feature

Bio generator: eigen wensen doorgeven

De bio generator werkte alleen met de vaste keuzelijsten (niche, tone, focus). Je kon de AI niet vertellen wat er specifiek in jouw bio moest — bijvoorbeeld je stad, je slogan of dat je pijltjes in plaats van emoji wilt.

Bug fix

Username checker: TikTok geeft geen valse "vrij" meer

De username-checker meldde populaire TikTok-namen (bijv. @travel, @nike) als beschikbaar terwijl ze allang bezet zijn. TikTok toont op elke profielpagina de vertaal-tekst "Couldn't find this account" — ook bij bestaande accounts — en daar keken we naar, dus kwam bijna alles als "vrij" binnen.

New feature

Username checker: Pinterest, X en Facebook erbij + betrouwbaar vanaf onze servers

De checks vertrokken vanaf ons datacenter-IP, dat door die platforms geblokt wordt — dus kregen ze in productie vaak geen of een verkeerd antwoord. Pinterest, X en Facebook waren helemaal niet automatisch te checken.

Bug fix

Account check (Instagram-analyse) werkt weer

De tool gaf voor elk profiel "Account niet gevonden of niet beschikbaar". Instagram blokkeert onze server-IP en de gratis mirrors (imginn/Jina) waar we op terugvielen zijn inmiddels offline, dus er kwam nooit data terug.

Polish

Handmatige boeking: duidelijke uitleg als je nog geen kalender hebt

Bij "Handmatige boeking" was de kalender-dropdown leeg als je nog geen kalender had aangemaakt, zonder uitleg hoe je verder moest.

Polish

Waarschuwing als je afspraaktype een ontbrekende koppeling nodig heeft

Je kon een kalender met Google Meet, Zoom of Teams aanmaken zonder de bijbehorende koppeling — er werd dan stilletjes geen videolink gegenereerd en gasten kregen een bevestiging zonder werkende link.

Polish

Platformnaam met hoofdletter in de automatiserings-tools

In de automatiserings-studio stond de platformnaam kleingeschreven, bijvoorbeeld "Nog geen facebook-account gekoppeld".

Bug fix

Trending audio: filteren op genre werkt weer

De genre-tabs (Pop, Hip Hop, Dance, R&B…) in de Trending Audio-tool gaven bij de live trends altijd "Geen resultaten". De databron (TikTok-feed) levert geen genre-informatie mee, dus er viel niets te filteren en elke categorie liep leeg.

Bug fix

Boekingslink gebruikt de host in plaats van de ingelogde gebruiker

Als een admin een kalender aanmaakt voor een teamlid, bevatte de boekingslink de naam van de admin in plaats van het teamlid. De link werkte daardoor niet.

Bug fix

Meeting-branding van de admin geldt nu voor het hele bureau

Als een admin de meeting-branding instelde (logo, kleur, bedrijfsnaam), werd die alleen getoond op de eigen boekingspagina. Teamleden kregen de standaard Senly-branding.

v0.47
Thursday, 2 July 2026

Grote kwaliteitspass: 40+ tools getest, gerepareerd en gepolijst

Bug fix

Video-downloaders werken weer (Facebook, LinkedIn, Snapchat, YouTube-fallback)

Downloaden gaf "De downloadservice is tijdelijk niet beschikbaar". De download-engine (yt-dlp) werd op de server niet meer geïnstalleerd, waardoor alle op yt-dlp gebaseerde downloads faalden.

New feature

Instagram-downloader werkt weer — zonder inloggen

Instagram blokkeerde sinds kort de meeste download-routes (login vereist voor embed/API), waardoor Instagram-video's en -foto's niet meer te downloaden waren.

New feature

Bio generator: nieuw ontwerp

De Bio generator is opnieuw ontworpen: kies je platform, niche/beroep, tone of voice en focus en zet optioneel een call-to-action aan. De AI schrijft vier bio-varianten die precies binnen de tekenlimiet van het gekozen platform passen, met per variant een tekenteller, een favoriet-knop en één-klik kopiëren. Een sessie-geschiedenis onthoudt je eerdere generaties. De echte AI-generatie is behouden.

Bug fix

Inloggen: geen valse "onjuist wachtwoord" meer bij de eerste poging

Soms toonde de eerste inlogpoging "Onjuist e-mailadres of wachtwoord" terwijl de gegevens klopten; een tweede klik met dezelfde gegevens lukte meteen. Oorzaak: de voorcontrole (die checkt of tweestapsverificatie nodig is) draait als losse server-call, en een korte hapering daarin (koude databaseverbinding na inactiviteit) werd aangezien voor foute inloggegevens.

Bug fix

Browser-tabtitels toonden "Senly" dubbel

Op meerdere pagina's las de browser-tab "Senly" twee keer, bijvoorbeeld "Inloggen — Senly | Senly": die pagina's hadden zelf al "Senly" in de titel staan terwijl de standaard-titelsjabloon er nog een keer "| Senly" achter plakte.

Polish

Tool-titels: rustiger, semibold in plaats van extra-vet

De grote titel bovenaan elke tool staat nu in semibold (Ciutadella SemiBold) in plaats van extra-vet. Dat oogt rustiger en consistenter over alle tools.

Polish

Maandrapport-generator: ontwerp exact op het voorbeeld

Het ontwerp week licht af van het voorbeeld: titel, sectiekoppen, stat-kaarten en stap-indicatoren waren net iets te compact.

New feature

Contentplanner: slimme planning, stories als story en geen caption-vereiste

De contentplanner plande op dagen die al content hadden, stories werden als "post" ingepland in Metricool, en stories zonder caption gaven "Ongeldige body".

Polish

Contentplanner: weekdag-knoppen en hoofdletter in alle talen

Je kiest nu per weekdag (ma t/m zo) wanneer posts en stories ingepland worden, in plaats van een getal. De dagknoppen vertalen mee in NL/EN/DE/FR. De naam "Contentplanner" begint nu overal met een hoofdletter.

New feature

Maandrapport: echte PDF-preview, voorbeeld zonder klant en in jouw taal

De preview toonde een nagebootste weergave in plaats van de echte PDF, je kon niet zien hoe het rapport eruitzag zonder eerst een klant te koppelen, en de PDF was altijd in het Nederlands.

Bug fix

Profielfoto-downloader: scherp origineel in plaats van wazige upscale

De tool leverde standaard een naar 1080x1080 vergrote versie, maar Instagram en LinkedIn leveren profielfotos vaak klein aan (±200-320px). Die kunstmatig vergroten maakte de foto juist wazig in plaats van scherper.

Bug fix

YouTube-downloader: eerlijke resultaten en werkende thumbnail-download

De thumbnail opende een nieuw tabblad in plaats van te downloaden, voorbeeld-metadata bleef over echte resultaten heen staan, en sommige foutmeldingen toonden een technische code.

Bug fix

Voice-memo-script: kloppende tijdstempels en meertalige output

Tijdstempels toonden als "0:010" en het script kwam altijd in het Nederlands, ook in de Engelse, Duitse of Franse interface.

Bug fix

Username generator: check-fouten zichtbaar en geen races meer

Als de beschikbaarheidscheck faalde gebeurde er stilletjes niets, en na opnieuw genereren konden resultaten bij de verkeerde naam belanden.

Polish

UTM-builder: slimmer, veiliger en persoonlijk

De foutmelding-logica klopte precies andersom (die is omgedraaid), er is een aan/uit-schakelaar die waarden automatisch naar kleine-letters-met-streepjes normaliseert (beter voor Google Analytics), presets zijn nu per gebruiker opgeslagen, Enter slaat presets op, en kopiëren heeft een fallback met echte feedback.

Bug fix

Username checker: eerlijke score en handmatige check-links

Vijf platforms konden nooit automatisch gecheckt worden maar telden wel mee, waardoor de score nooit boven de 44 van de 100 uitkwam.

Bug fix

Trending audio: filter, downloads en voorbeelden gefixt

Het categorie-filter maakte de lijst bij live data altijd leeg, de menu-knop per track deed niets en de laad-spinner was onzichtbaar.

Bug fix

TikTok-downloader: fotoreeksen werken nu echt

TikTok-posts met meerdere fotos gaven een kale foutmelding, en over echte resultaten heen bleven voorbeeld-statistieken staan.

Polish

Trend-radar: voorbeeld vooraf, skeletons en kopieerbare formats

De trend-radar toont nu direct een voorbeeld van de output voordat je iets invult, laad-skeletons tijdens het genereren, een resultaat-kop met je niche en platform, en een kopieerknop per format-kaart. Momentum-badges zijn ook in de lichte modus leesbaar.

Bug fix

Snelheidstest: eerlijke metingen en live upload-meter

Bij een verlopen sessie toonde de test stilletjes 0.00 Mbps, de upload-meter bewoog pas aan het einde, en de mini-grafiekjes waren decoratie.

Bug fix

Storingschecker: geen misleidend groen meer

Platforms die niet gecheckt konden worden telden mee als "alles operationeel", en elke paginaweergave pingde alle 10 platforms opnieuw.

Bug fix

Alle rekentools: correcte invoer in elke taal

Wie in de Engelse interface bedragen als "1,600" of "2.5" intypte kreeg stilletjes totaal verkeerde uitkomsten (1,60 in plaats van 1.600).

Bug fix

Downloaders: carrousels werken en foutmeldingen zijn vertaald

Instagram-, Facebook-, LinkedIn- en Snapchat-posts met meerdere bestanden gaven "Er ging iets mis", en sommige foutmeldingen toonden een technische code.

Security

Video-download-service extra beveiligd

De download-backend valideert aangevraagde adressen nu strenger tegen misbruik, gebruikt overal time-outs zodat trage bronnen geen verzoeken blokkeren, en Instagram-sessiegegevens worden versleuteld opgeslagen.

New feature

AI-tools antwoorden in jouw taal

De AI-resultaten van onder andere de battle card, reply scorer, win/loss-analyse, DM-opener, connect-notes, content-ideeën en hook-analyzer kwamen altijd in het Nederlands, ook in de Engelse, Duitse of Franse interface.

Bug fix

Tool Store: aanvragen-tab werkt voor salesrollen

Appointment setters, closers en salesmanagers zagen de tab "Aangevraagde tools" wel, maar elke aanvraag werd geweigerd.

Bug fix

Content kalender: kloppende datums en volledige vertaling

Black Friday en Cyber Monday konden op onmogelijke datums vallen en alle dagteksten waren alleen Nederlands.

Polish

Lichte modus overal leesbaar in de tools

Foutmeldingen, statusbadges, meters en accentkleuren in tientallen tools hebben nu aangepaste kleuren voor de lichte modus, zodat niets meer wegvalt tegen een witte achtergrond.

Polish

Elke tool voelt directer en eerlijker

Dode knoppen zijn verwijderd of werken nu echt (zoals "Download PDF" op de battle card), verzonnen cijfers zijn vervangen door echte data of een duidelijk "Voorbeeld"-label, lege schermen tonen voortaan een voorbeeldresultaat, kopieerknoppen geven pas "Gekopieerd" als het kopiëren ook echt lukte, en overal kwamen hover- en focus-states bij voor muis- en toetsenbordgebruik.

Bug fix

Tientallen functionele fixes in losse tools

Onder meer: zoeken in de bezwaren-library werkt nu ook in het Engels, Duits en Frans; transparante PNG-bestanden krijgen geen zwarte achtergrond meer bij het verkleinen; de X/Twitter-tekenteller weegt links en emoji correct en de TikTok-limiet is bijgewerkt naar 4000 tekens; het maandrapport filtert de PDF nu echt op de gekozen platforms en toont inzichten op basis van echte cijfers; de link-in-bio pagina breekt niet meer bij een lege titel en kreeg een echte profielfoto-upload; hashtag-research bewaart favorieten nu echt en ondersteunt internationale hashtags; en het kleurenpalet wist je recente extracties niet meer per ongeluk.

New feature

Thema volgt nu standaard je systeem

Nieuwe accounts begonnen altijd in light mode, ook als je apparaat op dark mode stond.

Security

API-beveiligingsaudit: lek in boekings-response gedicht + extra limieten

Een audit van alle publieke API-endpoints vond dat de openbare boekingsbevestiging interne gegevens (tenant- en host-IDs, gekoppelde-agenda-verwijzingen) teruggaf, en dat enkele publieke endpoints geen eigen misbruik-limiet hadden.

Security

Beveiligde API-routes geven 401 in plaats van redirect

API-endpoints die authenticatie vereisen stuurden ongeauthenticeerde verzoeken door naar de loginpagina (HTML), in plaats van een JSON 401-fout.

Security

E-mailadres wijzigen vereist nu bevestiging

Het e-mailadres van je account kon zonder verificatie worden gewijzigd.

Polish

Verzendlimiet-waarschuwing bij IMAP-koppeling

Bij het koppelen van je mailbox via IMAP staat nu een duidelijke melding over de dagelijkse verzendlimiet van je provider (bv. ~100/dag bij domein-hosting, ~500 bij Gmail).

Polish

Uitloggen-knop op profielpagina

Op de profielpagina staat nu een Uitloggen-knop direct onder de profielfoto-acties, zodat je niet meer hoeft te zoeken naar hoe je uitlogt.

Bug fix

Direct Socials-modal leesbaar in dark mode

De partnerschapsmodal van Direct Socials had een witte achtergrond en onleesbare tekst in dark mode.

Bug fix

Admin-links werken nu correct voor social media managers

Meerdere knoppen op het dashboard en in de CRM-import verwezen naar admin-only paginas waar managers geen toegang toe hebben.

New feature

Backup codes bij tweestapsverificatie

Als je je authenticator-app kwijtraakte, was er geen manier om in te loggen.

Bug fix

Andere sessies worden netjes uitgelogd na wachtwoordwijziging

Als je je wachtwoord wijzigde in de ene browser, crashte de andere browser met een 500-fout in plaats van je netjes uit te loggen.

Polish

Wachtwoordvereisten zijn nu duidelijk aanbevelingen

De wachtwoordhints (hoofdletter, cijfer, speciaal teken) leken verplicht terwijl alleen minimaal 8 tekens afgedwongen wordt.

Bug fix

Welkomstmail in de juiste taal

Nieuwe teamleden kregen hun welkomstmail altijd in het Engels, ongeacht de taal van het bureau.

Bug fix

E-mails in normaal lettertype

Welkomstmails en andere systeemmails werden in sommige e-mailclients (o.a. Gmail) weergegeven in een monospace-lettertype.

Bug fix

Wensen-filter: "Alle"-knop weer leesbaar

De actieve "Alle"-filterknop in het Wensen-paneel had onzichtbare tekst doordat de tekstkleur terugviel op een ongedefinieerde CSS-variabele.

Polish

Content-ideeën: icoon gelijk aan productpagina

Het icoon in de hero van de Content-ideeën-tool is nu hetzelfde gloeilamp-logo als op de productpagina (in plaats van het ster-icoon), zodat de tool overal consistent herkenbaar is.

Polish

Instagram-downloader: meer witruimte

De Instagram-downloader heeft overal wat meer ademruimte gekregen: ruimere padding in de panelen, meer afstand tussen de categorie- en kwaliteitskaarten en een bredere werkzone tussen preview, profielinfo en kwaliteitskeuze. De categorie-kaarten (Alle content, Reels & stories, IGTV, Profiel) zijn bovendien breder, zodat de labels op één regel passen.

Polish

Tool-productpagina: reviews in de kleur van de tool

Op elke tool-productpagina volgen de sterren, beoordelings-balken, het gemiddelde cijfer, de review-profielfoto’s en de "Geverifieerd"-badges nu de eigen kleur van die tool, in plaats van steeds hetzelfde teal/blauw. Zo is de hele productpagina consistent in de huisstijl van de betreffende tool.

New feature

Battle Card Generator: nieuw ontwerp

De Battle Card Generator heeft een compleet nieuwe verkoop-productpagina in drie kolommen: links vul je de concurrent, categorie, website en je eigen positionering in; in het midden verschijnt de battle card die JIJ vs de concurrent vergelijkt over 5 assen (pricing, speed, support, features, onboarding) met een advantage-score; rechts krijg je positionering, het zwakste punt van de concurrent, een counter-pitch en een objection handler. De echte AI-generatie is behouden; standaard tonen we een voorbeeld zodat je meteen ziet wat je krijgt.

New feature

Reply Quality Scorer: nieuw ontwerp

De Reply Quality Scorer heeft een compleet nieuwe verkoop-productpagina: plak het kanaal, je originele bericht en de reactie van je prospect en krijg een eerlijke temperatuur-score (heet/warm/lauw/koud/dood) met intentie-detectie, een aanbevolen vervolgstap, het beste moment om te reageren en een conceptantwoord. De echte AI-scoring is behouden; standaard tonen we een voorbeeld-resultaat zodat je meteen ziet wat je krijgt.

New feature

ROI calculator: nieuw ontwerp

De ROI calculator heeft een compleet nieuwe verkoop-productpagina: vul de huidige omzet, conversie, ticketprijs, fee, setup en verwachte uplift in en zie direct de projectie voor je prospect — het netto extra na 12 maanden als groot headline-getal, plus de ROI en payback en een breakdown per 3, 6 en 12 maanden. Alle cijfers rekenen live mee terwijl je de invoer aanpast.

New feature

Internet snelheidstest: nieuw ontwerp

De snelheidstest heeft een compleet nieuwe productpagina met een echte speedometer-gauge die live meebeweegt tijdens de meting, plus aparte kaarten voor download, upload, ping en jitter met mini-grafieken. Eén klik op "Start test" meet je verbinding volledig in de browser (geen downloads, geen tracking). De echte meetlogica is behouden.

New feature

Content kalender: nieuw ontwerp

De Content kalender heeft een compleet nieuwe productpagina: een echte maandweergave met gekleurde stippen per categorie (feestdagen, internationaal, awareness, seizoensgebonden, overig), een vandaag-highlight en een zijbalk met aankomende speciale dagen en je planning-voortgang. Wissel tussen Maand-, Lijst- en Agenda-weergave, blader per maand, markeer dagen als gepland en voeg je eigen dagen toe (bewaard in je browser). De volledige database met 100+ accurate speciale dagen — inclusief beweeglijke feestdagen — is behouden.

New feature

Content-ideeën: nieuw ontwerp

De Content-ideeën-tool heeft een compleet nieuwe productpagina: kies (optioneel) een klant, vul je niche, doelgroep, platform, toon, doel en AIDA-fase in, en de AI genereert 10 post-ideeën met hook, CTA, hashtags en een viral-score — netjes naast het formulier in een overzichtelijke lijst met één-klik kopiëren. De echte AI-generatie is behouden; standaard tonen we een voorbeeld-lijst zodat je meteen ziet wat je krijgt.

Polish

Trending audio: auto-laden + filteren per land

De Trending audio-tool laadt nu automatisch de live sounds zodra je hem opent (geen klik op "Vernieuwen" meer nodig), en je kunt via de regio-keuze direct de trending audio van een ander land ophalen (NL, VS, VK, DE, FR, ES). De trend-score volgt nu netjes de ranglijst in plaats van overal hetzelfde getal te tonen.

New feature

Trending audio: nieuw ontwerp

De Trending audio-tool is opnieuw ontworpen als een overzichtelijke hitlijst: kies je regio en categorie, zoek een sound en zie per track de trend-score (met balk), de stijging, het genre, de artiest en de duur. Speel direct een 30s-preview af met de play-knop. De echte live-data blijft behouden; standaard tonen we een voorbeeld-lijst zodat je meteen ziet wat je krijgt.

New feature

Link-in-bio builder: nieuw ontwerp

De Link-in-bio builder heeft een compleet nieuwe, getabde editor (Basis, Links, Ontwerp, Knoppen, Social, SEO, Instellingen) met een eigen URL-kiezer (senly.bio/jouwnaam) en een live telefoon-preview die direct meebeweegt. Voeg profielinfo, links (slepen, aan/uit, bewerken) en social-iconen toe, kies een themakleur, lettertype en knopstijl, en publiceer je pagina in één klik. Alles blijft client-side (privacy first) en wordt tussentijds bewaard.

Polish

Link-in-bio preview: breder en gelijk

De telefoon-preview in de Link-in-bio builder is nu een stuk breder en beter leesbaar (grotere avatar, naam en knoppen), en heeft dezelfde breedte in mobiel- én desktopweergave.

Bug fix

Contentplanner: stories overslaan bij caption-generatie

Stories kregen een waarschuwing dat er geen caption was en werden meegenomen in de caption-generatie, terwijl stories geen caption nodig hebben.

Polish

Workflow builder: standaardnaam, opslaan zonder sluiten en annuleerbare stap-configuratie

Nieuwe workflows hadden geen naam, opslaan sloot de builder, en wijzigingen aan een stap konden niet ongedaan worden gemaakt.

Bug fix

Webhook rate-limit: correcte HTTP-status en limieten-info

Bij een rate-limit gaf het webhook-endpoint status 200 met { ok: true, status: "error" } terug, en bij een executiefout was het antwoord misleidend.

Bug fix

AI-workflow-generatie past bestaande workflows aan in plaats van opnieuw te maken

Bij het aanpassen van een bestaande workflow via AI werd de hele workflow vervangen door een nieuw concept, en de toegevoegde stappen waren niet bewerkbaar.

Bug fix

Workflow-taken zichtbaar op het dashboard

Taken aangemaakt door een workflow (zonder gekoppelde klant) verschenen niet op het dashboard.

v0.46
Wednesday, 1 July 2026

Tool-productpagina: accent-iconen in de kleur van de tool

Polish

Kleurenpalet-extractor: verfijnde kop

De Kleurenpalet-extractor heeft een opgeschoonde kop: het icoon staat nu naast de titel ("Kleurenpalet" met "extractor" in de accentkleur) en de "direct toepasbaar"-bevestiging heeft een groen vinkje.

New feature

Username checker: nieuw ontwerp

De Username checker heeft een compleet nieuwe productpagina: voer je merknaam in en zie in één scan of de username vrij of bezet is op alle grote social platforms (Instagram, TikTok, YouTube, X, LinkedIn, Pinterest, Twitch, Discord, Reddit) — met een username-score, merkrisico-inschatting en alternatieve suggesties. De echte realtime-check is behouden; standaard tonen we een voorbeeld (@jouwmerk) zodat je meteen ziet wat je krijgt.

New feature

Account check (Instagram): nieuw ontwerp

De Account check-tool heeft een compleet nieuwe productpagina: voer een Instagram-handle in en zie direct de volgers, engagement rate, kwaliteitsscore en een verdeling van echte vs. mogelijk nep/verdachte volgers — plus een aanbeveling op maat. De echte data-analyse (openbare gegevens) is behouden; standaard tonen we een voorbeeld (@dualipa) zodat je meteen ziet wat je krijgt.

New feature

Hashtag-onderzoek: nieuw ontwerp

De Hashtag-onderzoek tool heeft een compleet nieuwe productpagina: typ een hashtag en zie in één oogopslag de populariteit (gebruik per week), het geschatte bereik, gerelateerde tags met volumes en een Kansen-overzicht (concurrentie, trend, seizoen, moeilijkheid) met opportuniteitsscore. De echte data-ophaling is behouden; standaard tonen we een voorbeeld (#marketing) zodat je meteen ziet wat je krijgt.

New feature

Maandrapport-generator: nieuw ontwerp

De Maandrapport-generator is opnieuw ontworpen: kies je klant en periode, filter op platformen en genereer een white-label PDF-rapport in je brand-kleur. Je ziet vooraf de belangrijkste cijfers (groei, bereik, engagement, best presterende post), een rapport-preview en concrete insights — allemaal op basis van de echte data. Downloaden of openen in een nieuw tabblad.

Bug fix

Maandrapport: bereik van best presterende post

De kaart "Best presterende post" toonde het totale bereik van het platform in plaats van het bereik van de post zelf.

New feature

Carousel-splitter: nieuw ontwerp + sleepbare verdeling

De Carousel-splitter is opnieuw ontworpen: upload één brede afbeelding, kies het aantal slides en het formaat (9:16, 4:5 of 1:1), en pas de verdeling aan met sleepbare handgrepen. Je ziet een live preview met optionele safe-zone-overlay en kunt de slides los, als ZIP of allemaal tegelijk downloaden. Alles lokaal in je browser.

New feature

Caption generator: nieuw ontwerp

De Caption generator is opnieuw ontworpen met drie kolommen: links stel je je post, platform, tone-of-voice en aantal varianten in; in het midden schrijft de AI je caption-varianten met één-klik kopiëren (of alles tegelijk) plus een Instagram-preview; rechts een risico-check op je captions en concrete optimalisatie-tips. De echte AI-generatie is behouden.

New feature

Downloaders (Facebook, Instagram, TikTok, YouTube, LinkedIn): nieuw ontwerp

Alle social-downloaders hebben een nieuw, consistent ontwerp gekregen: plak een link, wij herkennen de content automatisch en tonen een preview met de beschikbare downloads (video, thumbnail of losse items) in de huisstijl van elk platform. De echte download-functie is behouden; er wordt niets opgeslagen.

New feature

Instagram-downloader: eigen productpagina exact volgens ontwerp

De Instagram-downloader heeft een volledig eigen ontwerp gekregen dat exact het mockup volgt: een hero met het Instagram-icoon en gradient-titel, categorie-kaarten (Alle content, Reels & stories, IGTV, Profiel), een "Hoe het werkt"-uitleg en hulp-kaart, plus een werk-paneel met plak-link, "Reel gedetecteerd"-detectie, tabs (Reel/Foto/Story/IGTV/Profiel), een 9:16-preview met profielinfo en een "Kies kwaliteit"-keuze. Het app-icoon gebruikt nu hetzelfde logo als de productpagina. De echte download-functie is behouden; er wordt niets opgeslagen.

Polish

Facebook-downloader: verfijnd ontwerp

De Facebook-downloader heeft een eigen, uitgewerkte productpagina gekregen in de Facebook-huisstijl: plak-link met detectie-balk (type, duur, resolutie, formaat, grootte), tabbladen (Video, Reels, Foto’s, Stories, Albums, Profiel), een video-preview met postgegevens en een overzicht van de downloadopties. De echte download-functie is behouden.

Polish

TikTok-downloader: verfijnd ontwerp

De TikTok-downloader heeft een eigen productpagina in de TikTok-huisstijl (teal→roze): een 3-staps indicator, plak-link met detectie-balk, een verticale 9:16 video-preview met actierail, caption en tijdlijn, en de downloadopties met een privacy-melding. De echte download-functie is behouden.

Polish

Snapchat-downloader: verfijnd ontwerp

De Snapchat-downloader heeft een eigen productpagina in de Snapchat-huisstijl (geel): een uitgebreide zijbalk met "Hoe het werkt"-stappen, plak-link met detectie-balk, tabbladen (Story, Spotlight, Publieke snap, Profiel), een preview met snap-gegevens en statistieken, kwaliteitsopties en een download-knop met MB-indicatie. De echte download-functie is behouden.

Polish

YouTube-downloader: verfijnd ontwerp

De YouTube-downloader heeft een eigen productpagina in de YouTube-huisstijl (rood): een 3-staps indicator, plak-link met ronde controle-knop en detectie-balk (duur, resolutie, formaat, grootte), een 16:9 video-preview met kanaalgegevens (weergaven, datum), en de downloadopties met gekleurde kwaliteits-badges (HD/SD/audio/thumbnail) plus grootte en een privacy-melding. De echte download-functie is behouden.

Polish

LinkedIn-downloader: verfijnd ontwerp

De LinkedIn-downloader heeft een eigen productpagina in de LinkedIn-huisstijl (blauw naar paars): een 3-staps indicator, plak-link met "Analyseren"-knop en detectie-balk (type, resolutie, formaat, grootte), vier content-kaarten (Posts, Carrousels, Documenten, Video's) met previews, een trust-rij en de gradient download-knop met grootte plus een gebruiksregel. Het app-icoon gebruikt hetzelfde logo als de productpagina. De echte download-functie is behouden.

New feature

Brand-safety check: nieuw ontwerp

De Brand-safety check is opnieuw ontworpen: plak je caption en zie live welke risicowoorden en concurrenten erin staan, netjes gemarkeerd in de tekst. Met een duidelijk eindoordeel (veilig / onveilig), beheerbare lijsten (risicowoorden + concurrenten) en aanbevolen vervolgacties. Alles lokaal in je browser.

New feature

Kleurenpalet extractor: nieuw ontwerp + meer functies

De Kleurenpalet extractor is opnieuw ontworpen met een 3-staps flow en haalt nu tot 10 kleuren uit je foto of logo, elk met hun aandeel. Kies je uitvoerformaat (HEX/RGB/HSL/CMYK), kopieer of download het hele palet, en bekijk met één klik je afbeelding omgezet naar de gevonden kleuren. Je laatste extracties worden lokaal onthouden. Alles in je browser — de afbeelding wordt nooit geüpload.

New feature

Fancy tekst generator: nieuw ontwerp + extra stijlen

De Fancy tekst generator is opnieuw ontworpen: typ je tekst, kies welke stijlen je wilt en genereer ze in één klik. Naast vet, cursief, script en monospace zijn er nu ook kleine caps en dubbelstrepig (double-struck). Kopieer een losse stijl of alles tegelijk. Werkt overal (Instagram, TikTok, X) — alles lokaal in je browser.

New feature

Format & safe-zones: nieuw ontwerp + uitgebreidere overlay

De Format & safe-zones tool is opnieuw ontworpen met een rijke hero en drie duidelijke stappen (kies formaat, preview met safe-zones, exporteren). De preview toont nu drie zones (veilige zone, tekst zone en afgesneden zone), je kunt digitaal inzoomen, alle formaten naast elkaar vergelijken en exporteren met of zonder overlay als PNG of JPG. Alles lokaal in je browser — er wordt niets geüpload.

New feature

Instagram witregel-fixer: nieuw ontwerp

De Instagram witregel-fixer is opnieuw ontworpen met een tweekoloms opzet (jouw caption naast de gefixte versie), een teller tot 2.200 tekens en een "Fix witregels"-knop. Naast het behouden van je witregels ruimt de tool nu ook dubbele spaties op, met één klik kopiëren naar Instagram.

New feature

Klant-ROI calculator: nieuw ontwerp + werkende berekening

De Klant-ROI calculator is opnieuw ontworpen en volledig werkend: vul je maandelijkse retainer, leads, conversieratio en waarde per klant in en zie direct de maandelijkse opbrengst, kosten, winst, je ROI in een gauge en de terugverdientijd, plus een korte samenvatting van de waarde die je oplevert. Alles lokaal berekend, niets wordt opgeslagen.

New feature

Productpagina-illustraties nu ook in Engels, Duits en Frans

De geanimeerde illustraties op de tool-productpagina's hadden vaste Nederlandse tekst (labels, koppen, omschrijvingen), ook als je de site in een andere taal bekeek.

Polish

Tool Store: "Tool van de week"-titel iets lichter

De grote titel in de uitgelichte "Tool van de week"-kaart had een erg zware letterdikte; die is nu wat dunner gemaakt voor een rustiger, verfijnder beeld.

New feature

Carousel-splitter: nieuw, verfijnd ontwerp met live carousel-preview

De Carousel-splitter is opnieuw aangekleed tot in het detail: afgeronde stap-badges, formaat-knoppen met icoon en verhouding op één regel, gestreepte verdelers met sleepgrepen en oranje navigatiepijlen. De live preview heeft nu een weergave-schakelaar (raster, enkele slide, profielraster), doorbladeren met pijlen en stippen, zodat je precies ziet hoe je carousel op Instagram overkomt.

Polish

Carousel-splitter: opent direct met een voorbeeldafbeelding

De Carousel-splitter laadt nu automatisch een voorbeeldafbeelding zodra je de tool opent, zodat je meteen alle stappen en de live preview in actie ziet zonder eerst iets te hoeven uploaden. Je eigen afbeelding uploaden vervangt het voorbeeld direct.

New feature

Facebook-downloader: eigen ontwerp met voorbeeldweergave

De Facebook-downloader heeft nu een eigen, afgewerkte pagina: plak een Facebook-videolink en de tool toont de video-preview met post-info en downloadopties. Standaard staat er meteen een compleet voorbeeld klaar, zodat je in één oogopslag ziet wat de tool doet.

Polish

Maandrapport-generator: verfijnd samenstel-paneel

Het "Stel je rapport samen"-blok van de Maandrapport-generator is bijgewerkt met duidelijkere platform-tegels (Instagram, LinkedIn, Facebook, TikTok in hun eigen kleuren), een nettere hero en een jaarkiezer met kalender-icoon.

New feature

Caption-generator: nieuw ontwerp met stappenbalk en preview

De Caption-generator is opnieuw vormgegeven: een voortgangsbalk bovenaan (scannen, risico’s markeren, klaar voor publicatie), een opgeschoond invoerpaneel met een centrale idee/upload-zone, caption-kaarten met kopieer-knoppen, een risico-check en tips-paneel, en onderaan een volledige Instagram-preview. Die preview toont drie potentieel-kaarten (bereik, engagement, conversie) met scores die eerlijk uit je caption worden afgeleid — geen verzonnen percentages.

Bug fix

Profielfoto downloaden: LinkedIn werkt nu ook op de online server

De tool "Profielfoto downloaden" gaf online de melding dat hij alleen op je eigen computer werkt. Instagram en LinkedIn blokkeren namelijk verzoeken vanaf onze servers, en de gratis omweg-diensten die we eerder gebruikten (imginn, Jina) zijn inmiddels dicht of weigeren die netwerken.

Bug fix

Bestandsgrootte verkleinen: instellingen werken nu direct

In de tool "Bestandsgrootte verkleinen" leek het instellingen-gedeelte (modus, kwaliteit-slider, JPG/WebP) niet te werken: na het uploaden van een afbeelding had het wijzigen van deze opties geen zichtbaar effect op het resultaat. Je moest de afbeelding verwijderen en opnieuw toevoegen om een andere instelling toe te passen.

New feature

Groei-projectie calculator: nieuw ontwerp + werkend groeiplan

De Groei-projectie calculator is opnieuw ontworpen en volledig werkend: vul je huidige volgers, je doel en je termijn in en zie direct hoeveel volgers je per dag, week en maand moet winnen, plus je voortgang t.o.v. je doel, een indicatie van de benodigde consistentie en een korte inschatting of je op schema zit. Alles lokaal berekend, niets wordt opgeslagen.

New feature

Influencer-tarief calculator: nieuw ontwerp + werkende schatting

De Influencer-tarief calculator is opnieuw ontworpen en volledig werkend: kies je platform, vul volgers + engagement-rate in, kies je posttype en extra's (Story, extra slide, gebruiksrechten, exclusiviteit, whitelisting) en zie direct een geschatte prijs per post met CPM, CPE, verwacht bereik, prijs-range en je marktpositionering. Alles lokaal berekend op vaste marktformules, niets wordt opgeslagen.

Polish

Tool-kop: label netjes onder het logo + iets meer ruimte bovenaan

Bij o.a. Advertentie-statistieken stond het label ("Advertentie-rendement") naast het logo in plaats van eronder, en begonnen de tools nogal hoog tegen de bovenrand.

New feature

Advertentie-statistieken: nieuw ontwerp + werkende berekeningen

De Advertentie-statistieken-tool is opnieuw ontworpen en volledig werkend: vul budget, impressies, kliks, conversies en omzet in en zie direct je CPM, CPC, CTR, CPA, ROAS, winst en break-even, met een AI-analyse en aanbevelingen. Alles lokaal, niets wordt opgeslagen.

Bug fix

Bio generator: interactieve illustratie op de productpagina hersteld

Op de productpagina van de Bio generator bleef de rechterkant leeg — de geanimeerde demo (platformkeuze, opties en de gegenereerde bio's) werd niet getoond.

New feature

Engagement-rate calculator: nieuw ontwerp + werkende benchmark

De engagement-rate calculator is opnieuw ontworpen en volledig werkend: kies je platform, vul volgers + gemiddelde interacties in en zie live je engagement-rate in een gauge, je benchmark-positie (Top 25% e.d.), het verschil t.o.v. het gemiddelde, de platform-gemiddelden en concrete aanbevelingen. Alles lokaal, niets wordt opgeslagen.

Polish

Tool-pagina's: gelijke afstand tot de bovenkant

De vernieuwde tool-pagina's beginnen nu allemaal op exact dezelfde hoogte, zodat het wisselen tussen tools rustiger aanvoelt.

New feature

Bestandsgrootte verkleinen: volledig nieuwe premium tool-pagina

De tool "Bestandsgrootte verkleinen" heeft een compleet nieuw, overzichtelijk ontwerp: een heldere kop met live sessie-teller, een instellingen-paneel (modus, kwaliteit-slider, output-formaat) naast een voor/na-vergelijking, een grote sleepzone en veiligheidsgaranties onderaan. De compressie werkt onveranderd volledig lokaal in je browser.

Polish

Productpagina-illustraties: consistente hoogte, geen lege ruimte

Na een brede controle van alle dashboard-illustraties (elk apart gerenderd en gecontroleerd) zijn de laatste maat-problemen weggewerkt: de ROI Calculator (viel te kort in), Caption generator, Maandrapport-generator en DM Opener staan nu op een consistente, gevulde hoogte zonder grote lege vlakken. De rest bleek al goed te staan.

Polish

QR-code generator: echte scanbare QR-codes in de illustratie

De twee QR-codes in de illustratie waren met de hand getekend met een te regelmatig patroon en zagen er daardoor nep uit.

Polish

AI-icoon, kenmerk-iconen en vinkjes nemen nu de eigen kleur van elke tool over

Op elke tool-productpagina stonden het AI-sparkle-icoon ("Gemaakt door Senly"), de drie kenmerk-iconen onder de titel en de vinkjes bij Voordelen altijd in dezelfde vaste teal — ook op een tool met bijvoorbeeld een rood of blauw thema. Dat botste met de huiskleur van die tool.

Bug fix

Trending audio: laatste kenmerk-kaart ("Sla favorieten op") werd afgesneden

De vier kenmerk-kaartjes onder de trending-audio-illustratie pasten niet samen op de beschikbare breedte, waardoor de vierde kaart half buiten beeld viel en werd weggeknipt.

Polish

Kleurenpalet-extractor: illustratie groter en beter uitgelijnd

De animatie op de productpagina van de Kleurenpalet-extractor (foto → analyse-lens → palet) is flink vergroot, en de paletkaart hangt niet meer tegen de rand — er zit nu nette ruimte aan beide kanten zodat het geheel gebalanceerd staat.

Polish

Carousel-splitter: illustratie een stuk groter

De animatie op de productpagina van de Carousel-splitter (brede afbeelding → 3 slides → Instagram-grid) is vergroot zodat-ie de hero-ruimte beter benut.

Bug fix

ROI Calculator: illustratie overlapte zichzelf — opnieuw opgebouwd

De ROI-animatie was op een vaste maat ontworpen; op de echte productpagina vielen de kaartjes (investering, opbrengst, winst, terugverdientijd) over de centrale ROI-hologram heen, waardoor cijfers onleesbaar werden.

Bug fix

Storingen checker: onderste drie blokken werden afgesneden

De status-illustratie had een vaste hoogte waardoor de drie onderste blokken (Realtime monitoring / Crowdsourced signals / Instant alerts) maar half zichtbaar waren.

Polish

Meer productpagina-illustraties op een breder canvas

De animaties van Brand-safety check, Caption generator, Bio generator, Hashtag-bibliotheek, Bezwaren Library, QR-code generator, Maandrapport-generator, Niche-spiekboeken, Internet snelheidstest en Battle Card Generator staan nu op het bredere hero-canvas, zodat ze groter en duidelijker in beeld komen.

Bug fix

Snelheidstest: meterwijzer liep door de cijfers heen

In de snelheidstest-illustratie stond het grote Mbps-getal midden in de meter, precies waar de wijzer doorheen draaide — onleesbaar.

Polish

Win/Loss Analyzer: luxe trofee met verbindingslijnen

De trofee in de illustratie is opnieuw getekend als een volle, glimmende gouden wireframe-beker (met ster, handvatten en voetstuk) en er lopen nu stippellijnen vanuit de trofee naar elk percentage — zoals in het ontwerp bedoeld.

Polish

Brand-safety & DM Opener: illustratie vult nu de volle hoogte

De animaties van de Brand-safety check en DM Opener Generator lopen nu netjes door tot de hoogte van de knoppen ernaast, i.p.v. halverwege te stoppen.

Bug fix

Enkele illustraties werden rechts afgesneden

De animaties van de Kleur-contrast checker, Username generator, Voice-Memo Script en Win/Loss Analyzer liepen aan de rechterkant buiten beeld.

Bug fix

Battle Card: tekst viel achter het logo

In de vergelijkings-illustratie viel het woord naast het eerste vinkje deels achter het centrale schild-logo, en de beschrijvingen liepen over drie regels.

v0.45
Tuesday, 30 June 2026

Toolaanbevelingen passen zich aan jouw doelgroep aan

New feature

Nog 12 geanimeerde productpagina-illustraties

Twaalf extra tools hebben nu hun eigen, op-maat geanimeerde hero-illustratie gekregen, elk in de eigen merkkleur: LinkedIn Connect Note, QR-code generator, Bezwaren Library, Hashtag-bibliotheek, UTM-link bouwer, Internet snelheidstest (met snelheidsmeter), Battle Card Generator, Reply Quality Scorer, Kleur-contrast checker, Username Generator, Voice-Memo Script en Win/Loss Analyzer. Van holografische podia met gauges en trofeeën tot dashboards met meters en grafieken.

New feature

22 nieuwe geanimeerde productpagina-illustraties

In één grote slag hebben 22 extra tools een eigen, op-maat geanimeerde hero-illustratie gekregen — elk in de eigen merkkleur en passend bij wat de tool doet: o.a. Hashtag onderzoek, Trending audio, Kleurenpalet-extractor, Karakter-/limiet-checker, Account check, Carousel-splitter, Trend radar, Content Dagboek, Viral hook analyzer, Link-in-bio, Username checker, Storingen checker, Snapchat downloader, ROI Calculator, Brand-safety check, Maandrapport-generator, Caption generator, Content ideeën, DM Opener, Fancy tekst, Bio generator en Niche-spiekboeken. Van dashboards met grafieken en donuts tot holografische podia en flow-animaties.

New feature

Rijke downloader-illustraties (TikTok, YouTube, Facebook, Instagram, LinkedIn)

De vijf social-downloaders hebben nu een volledig uitgewerkt, groter panel op hun productpagina, in de eigen merkkleuren: een stap-uitleg of "Plak je link"-kop, een URL-balk met download-knop, content-kaarten per type (video, reels, stories, foto's, audio, thumbnails, documenten, carrousels, profielcontent) met échte, unieke voorbeeld-thumbnails (elke foto komt maar één keer voor), en een balk met voordelen (snel, veilig, zonder watermark/advertenties, werkt overal).

New feature

Geanimeerde hero-illustraties voor meer tools

Tools krijgen geleidelijk een eigen, geanimeerde illustratie op hun productpagina: Formaat & safe-zones (gloeiende telefoon met safe-zone-overlay + IG/TikTok-frames, paars), Profielfoto downloaden (hologram-ring met persoon, IG/LinkedIn-badges en lichtgevend voetstuk, blauw), Engagement-rate calculator (neon-hart op een voetstuk met zwevende statistiek-kaartjes, roze) Advertentie-statistieken (ROAS-glaspaneel met stijgende grafiek + CPM/CPC/CPA/break-even-kaarten op een holografisch podium, blauw) Influencer-tarief calculator (gloeiende €-munt op een gouden podium met volgers-, postprijs-, engagement- en prijs-range-kaarten) Groei-projectie (stijgende grafiek met pijl op een teal podium met volgers-/doel-/dagelijkse-groei-/tijd-kaarten), Klant-ROI calculator (ROI-glaspaneel met stijgende grafiek + opbrengst-/kosten-/winst-/terugverdientijd-kaarten op een groen podium) en Instagram witregel-fixer (return-toets-glyph op een paars podium met "Voor"/"Na"-tekstpanelen).

Polish

Beoordeling-sterren en -cijfer volgen nu de huisstijlkleur

De sterren en het gemiddelde-cijfer in de beoordelingen op de productpagina (plus de ster-verdeling, Geverifieerd-badge en scores van vergelijkbare tools) gebruiken nu de ingestelde huisstijlkleur in plaats van een vast goud/teal — ze veranderen automatisch mee wanneer je je merkkleur aanpast.

New feature

Statistieken-pagina volledig vernieuwd — premium dashboard met aparte tabbladen

De Statistieken-pagina was één lange scroll waarbij de tabs bovenaan alleen meescrolden; alles stond door elkaar en het oogde niet als een afgerond dashboard.

Polish

Performance-trendgrafiek: 30-daagse health-trend met heldere assen

De grafiek op de Health check-tab toont nu een echte dagelijkse health-score over de laatste 30 dagen, op een vaste 0-100-schaal met as-lijnen, een gloeiende lijn, dag-labels en het gemiddelde plus de verandering t.o.v. de vorige 30 dagen — veel leesbaarder dan de vorige weergave.

New feature

Klanten op anciënniteit: filteren op branche, sorteren en downloaden

Het anciënniteit-overzicht op de Klanten-tab heeft nu drie knoppen: een branche-filter (Alle branches + de branches waarin je eigen klanten zitten), een sorteeroptie (langst-actief, kortst-actief of op naam) en een download-knop die de lijst — klant, branche, hoeveel maanden actief en sinds wanneer — als CSV exporteert (te openen in Excel/Sheets).

Polish

Team-tab: "Pagina's per design" als kaartjes + login-activiteit in twee kolommen

"Pagina's per design" toont de top 5 nu als nette kaartjes (rang, icoon, naam, paginatelling) i.p.v. een lijst, en de recente login-activiteit staat in twee kolommen — compacter en consistenter. Beide blokken hebben een "Bekijk alle"-link gekregen.

Polish

Profielfoto's in de Team-overzichten

De teamleden tonen nu hun echte profielfoto in de Team-in-dienst-tabel, de werklast-lijst en de login-activiteit (met de initiaal als terugval wanneer er geen foto is ingesteld). Taken die in GoHighLevel zijn toegewezen aan iemand zonder gekoppeld Senly-account blijven als "Onbekende user" staan — daar is geen profiel van bekend.

Polish

Beoordelingen-sectie op de productpagina volledig herontworpen

De beoordelingen onderaan de productpagina stonden in een kale, enkele kolom en zagen er niet uit.

Polish

Productpagina "Bestandsgrootte verkleinen" volledig vernieuwd

De productpagina van de compressie-tool miste de cinematic uitstraling van het ontwerp: geen visuele voor/na-illustratie en een rommeliger indeling.

Polish

Productpagina: "Open tool"-knop in de kleur van de tool + omkaderde info-sectie

De "Open tool"-knop verloor zijn tool-eigen kleur (een globale link-regel wiste de gradient), en de drie info-kolommen zweefden los zonder kader.

New feature

Profielfoto-downloader volledig opnieuw ontworpen

De Profielfoto-downloader heeft een volledig nieuwe, premium pagina: een heldere kop met de tool, drie kernpunten (hoge resolutie, zonder koppeling, direct download), een glanzende visual, het URL-veld met de "Profielfoto ophalen"-knop en onderaan veiligheidsgaranties. Functioneel hetzelfde, maar veel duidelijker en mooier.

New feature

Reviews: kies je eigen naam of plaats anoniem

Bij een beoordeling kon je geen naam invullen, waardoor reviews onder een algemene noemer verschenen.

Bug fix

Downloader-logo in de productpagina weer compleet

Bij de downloaders (LinkedIn, Instagram, YouTube, TikTok, Facebook) werd het grote merk-logo in de productpagina te groot en teal getint weergegeven, waardoor het buiten z'n vlak liep en niet volledig zichtbaar was.

Polish

Reviews: "Lees meer" na de eerste 5

De reviewlijst op een tool-pagina toont nu standaard de 5 meest recente beoordelingen met een "Lees meer"-knop (incl. aantal) om de rest uit te klappen — rustiger overzicht bij tools met veel reviews.

New feature

Tool-reviews: datum, "Geverifieerd"-badge en historische beoordelingen

Op de tool-pagina toont elke beoordeling nu hoe lang geleden die geplaatst is ("x geleden", in je eigen taal) plus een groene Geverifieerd-badge. Daarnaast zijn de eerdere klantbeoordelingen uit ons oude systeem meegenomen, zodat je per tool het volledige beeld ziet (gemiddelde + alle reviews).

Polish

Reviews tonen nu een "Geverifieerd"-label

Elke review in de reviews-sectie krijgt naast het Trustpilot-label een groene "Geverifieerd"-badge, zodat in één oogopslag duidelijk is dat het echte, verifieerbare beoordelingen zijn (NL/EN/DE/FR).

Polish

Statistieken-kaarten in dezelfde stijl als het Financieel-overzicht

De KPI-kaarten bovenaan de Statistieken-pagina (actieve klanten, open taken, posts gepland, enz.) hadden een net iets andere kaart-stijl dan de cijfer-kaarten op de Financieel-pagina — andere achtergrond, rand en hoekradius — waardoor de twee pagina's niet helemaal op elkaar aansloten.

Polish

Dashboard-widgets met een solide achtergrond

De kaarten op het dashboard (maandwinst, laatste activiteit, snelle acties, deadlines) waren in donkere modus bijna volledig doorschijnend, waardoor de portal-achtergrond erdoorheen scheen en de blokken minder rustig oogden dan de blokken op de Meetings-pagina.

Bug fix

Social account verbinden — einde aan de valse "Verbinding mislukt"

Bij het (opnieuw) verbinden van een social account kon de melding "Verbinding mislukt — geen reactie van de Senly Connector" verschijnen, ook al was de extensie gewoon ingeschakeld. Oorzaak: de achtergrond-worker van de Connector valt na ~30 seconden in slaap (browser-standaard) en reageerde dan niet snel genoeg op de koppel-aanvraag, waardoor de pagina al na 6 seconden afhaakte.

Polish

Tool-iconen met luxe gradient-glow

De tool-iconen in de Tool Store-tabel (en in de aanbevolen-rij, top charts, zoekresultaten en gerelateerde tools) hebben nu dezelfde gloeiende gradient-halo als de grote iconen op de tool-pagina's — een rijkere, premium uitstraling in plaats van platte vlakjes.

Polish

Tool-iconen overal identiek

Elke tool-pagina had z'n eigen, met-de-hand-gemaakte icoon dat los stond van het icoon in de Tool Store-tabel — daardoor kon dezelfde tool op z'n eigen pagina een ander icoon of een andere kleur tonen dan in het overzicht.

New feature

Taken toewijzen aan je hele Senly-team

In het takenbeheer kon je een taak alleen toewijzen aan gebruikers die in GoHighLevel stonden. Teamleden zonder GoHighLevel-account verschenen niet in de toewijzen-lijst.

Polish

Tool Store — schonere zoekbalk zonder randje

De zoekbalk ("Zoek een tool...") heeft geen grijs randje meer. In plaats daarvan zweeft het veld nu met een zachte schaduw, in zowel licht als donker thema — een rustiger, Apple-achtige look.

Bug fix

Statistieken — actieve tab volgt nu de "Systeem"-sectie

Onderaan de Statistieken-pagina bleef de actieve tab op "Team" staan, ook als je op "Systeem" klikte of naar de Systeem-sectie scrolde — die sectie is kort en kon de detectie-zone nooit bereiken.

Polish

Statistieken — Health check rustiger en strakker

Het Health check-tabblad voelde door veel glow, zware schaduwen en felle accenten eerder "druk" dan premium.

New feature

"Aanbevolen voor jou" is nu persoonlijk per doelgroep

De aanbevolen tools waren voor iedereen dezelfde vaste lijst — een bureau-eigenaar, een freelancer en een in-house marketeer zagen exact dezelfde suggesties, ook al gebruiken ze het platform heel anders.

Polish

Tools-pagina heet nu zichtbaar de "Tool Store"

Het kopje boven de Tools-titel zegt nu "Tool Store" in plaats van "Tools", passend bij de nieuwe app-store-opzet. De pakkende titel "Slimme tools, maximale impact" blijft staan.

New feature

"Tool van de week" rouleert nu automatisch op basis van gebruik

De uitgelichte spotlight koos een vaste aanbeveling en verwees niet echt naar de week — de naam "Tool van de week" klopte niet met het gedrag.

New feature

Top Charts: "Populair deze week"

Een genummerde ranglijst van de meest gebruikte tools van vorige week (platform-breed), App-Store-stijl. Eén klik opent de productpagina van die tool. Verschijnt zodra er genoeg gebruiksdata is.

New feature

Snellere, slimmere zoekbalk

Zoeken kon alleen via het filterveld onderaan bij de volledige tabel.

Polish

Rijkere collecties met grote "lead"-story

Twee extra collecties ("Maak scroll-stoppende content" en "Weet wat werkt") en een grotere, full-width uitgelichte collectie bovenaan de sectie voor een redactionele App-Store-look.

Bug fix

Dubbele focus-rand in de zoekbalk weg

De nieuwe zoekbalk toonde bij focus een extra groene ring binnenin (van de globale input-focusstijl). Nu is de balkrand zelf de enige, nette focus-indicator.

Polish

Top Charts is nu altijd zichtbaar

De "Populair deze week"-sectie verscheen alleen bij voldoende gebruiksdata van vorige week. Nu valt hij bij weinig data netjes terug op aanbevolen tools, zodat de sectie altijd gevuld is; zodra er echte usage is, toont hij de echte ranglijst.

New feature

Social proof: "Populair"-badges en gebruiksstatistiek

Tools die in de Top Charts staan krijgen een "Populair"-badge op de kaart, en de productpagina toont "X keer geopend deze week". Zo zie je in één oogopslag wat andere marketeers het meest gebruiken — de vertrouwde App-Store-vibe.

New feature

Keuze van Senly

Een uitgelichte tool krijgt nu het "Keuze van Senly"-keurmerk (ster) op de kaart en in de productpagina, zodat onze aanrader er duidelijk uitspringt.

Polish

Luxere App-Store-uitstraling

De Tool Store heeft een premium finish gekregen: glanzende app-icoon-tegels (met highlight en zachte gloed), een diepere uitgelichte hero en verfijndere kaarten met subtiele sheen en zachtere schaduwen.

Polish

Apple-achtige micro-interacties en productpagina-strip

Kaarten veren nu soepel en drukken kort in bij een klik (de typische App-Store-feel, met respect voor "verminder beweging"-voorkeuren). De productpagina kreeg een nette metadata-strip in Apple-stijl: Categorie · gebruik deze week · Status.

Polish

Rustiger: nog maar één badge per kaart

Op een kaart konden ster, "Populair" en "Nieuw" tegelijk staan — te druk. Nu toont een kaart maximaal één badge, op prioriteit (Keuze van Senly > Populair > Nieuw). De volledige set blijft zichtbaar op de productpagina.

Polish

Productpagina-content nu in 4 talen

De rijke productpagina-content (highlights, voordelen en uitleg) is nu beschikbaar in het Nederlands, Engels, Duits en Frans en volgt automatisch je gekozen taal.

New feature

Volledig vernieuwde, premium productpagina per tool

De productpagina oogde nog niet als een volwaardige app-store-pagina.

New feature

Beoordelingen & reviews op de productpagina

Je kon niet zien wat andere marketeers van een tool vonden voordat je hem opende.

New feature

"Wat is nieuw" per tool

De productpagina toont nu per tool de laatste updates (datum + korte notitie), zoals Apple's versiegeschiedenis. Verschijnt alleen bij tools met recente wijzigingen.

Polish

Uitgelichte hero rustiger getint

De "Tool van de week" toonde een erg felle kleurgradient. Nu een diepere, gedempte tint waarbij de kleur-identiteit blijft maar het rustiger oogt tegen het dashboard.

Bug fix

Lichte modus: uitgelichte tool en zoekbalk hersteld

In de lichte modus toonde de uitgelichte "Tool van de week" een grijze box met een losse rode gloed eronder, en de zoekbalk had een dubbele groene focus-rand.

v0.44
Monday, 29 June 2026

De Tools-pagina werkt nu als een echte app store

New feature

Uitgelichte "Tool van de week" bovenaan de Tools-pagina

Alle tools stonden als gelijke kaartjes in een grid — niets sprong eruit en je werd niet naar de meest waardevolle tool geleid.

New feature

Klik op een tool opent een overzichtelijke productpagina

Een klik bracht je meteen in de tool, zonder eerst te zien wat hij precies doet of welke verwante tools er zijn.

New feature

Collecties: samengestelde tool-bundels rond één doel

Welke tools je samen gebruikt voor een concrete klus (een nieuwe klant onboarden, meer leads sluiten) moest je zelf bij elkaar zoeken.

Readable descriptions in the activity feed on the dashboard

Security

Activity feed shows clear descriptions instead of raw codes

The "Latest activity" block on the dashboard displayed technical codes like "note_deleted", "client_updated", or "inviter_run" instead of readable text.

Polish

Re-inviting a deleted colleague with the same email address

If you tried to re-add a previously deleted team member with the same email address, it would be blocked with "email address already exists".

New feature

Persoonlijke booking-link op je voor- en achternaam, zelf aanpasbaar

De publieke boekingslink (/boek/...) was gebaseerd op het deel vóór de @ van je e-mailadres — bij een bedrijfsmailbox werd dat bijvoorbeeld "skycialmanagement" in plaats van je eigen naam, en je kon het nergens aanpassen.

Polish

Inloggegevens worden met een typ-animatie ingevuld

Bij het kiezen van een opgeslagen login uit de browser ploften e-mail en wachtwoord in één keer in de velden.

Bug fix

Manager-inkomen telt een klant pas mee vanaf de koppelmaand

Het inkomstenoverzicht van een social media manager toonde de klant-vergoeding voor álle maanden van het jaar — ook voor maanden vóór de manager aan die klant gekoppeld was. Koppelde je iemand halverwege het jaar aan 18 klanten, dan stond het volledige bedrag ook al in januari t/m mei.

Bug fix

Meeting-kalenders zijn weer privé per gebruiker

In de meeting-instellingen zag elke gebruiker binnen een bureau álle kalenders van het bureau — ook de kalenders van de eigenaar/admin verschenen bij bijvoorbeeld een social media manager.

Polish

Admin ziet bij elke kalender van wie die is

Een admin zag in het kalender-overzicht wel alle boekingslinks van het bureau, maar niet bij wie elke kalender hoorde.

Bug fix

Nieuw aangemaakte gebruiker kan nu wél inloggen met het ingestelde wachtwoord

Bij het aanmaken van een gebruiker vulde de browser het wachtwoordveld soms stilletjes met een opgeslagen wachtwoord (je zag alleen bolletjes). Daardoor werd een ander wachtwoord opgeslagen dan je doorgaf en kon de nieuwe gebruiker niet inloggen — pas na het wachtwoord opnieuw te wijzigen lukte het.

Polish

Financieel staat nu als laatste blok op het klantprofiel

Het Financieel-blok stond vóór Contracten, Websites en Prestaties — geen logische volgorde.

Bug fix

Styling van het "Account manager"-blok hersteld

In het Account manager-blok had de "Kies manager"-keuzelijst een veel te donkere achtergrond en was de "Koppelen"-knop slecht leesbaar (donkere tekst op de groene knop), zowel in actieve als inactieve staat.

Polish

Social Media Beheer & Groeiservice tonen alleen relevante blokken

Klantprofielen onder Social Media Beheer en Groeiservice toonden ook de tabbladen Websites, Prestaties, Campagnes en Huisstijl, terwijl die bij andere dienstverleningen horen.

New feature

Bewustwordings-melding bij betaalde klantprofielen

Bij het aanmaken van een klantprofiel onder Social Media Beheer of Groeiservice was niet meteen duidelijk dat dit € 50 per maand extra kost voor onze externe automatiseringstools.

Bug fix

Activiteiten-feed toont nette omschrijvingen i.p.v. ruwe codes

Het "Laatste activiteit"-blok op het dashboard toonde technische codes als "note_deleted", "client_updated" of "inviter_run" in plaats van leesbare tekst.

New feature

Verwijderde collega met hetzelfde e-mailadres opnieuw uitnodigen

Wilde je een eerder verwijderd teamlid opnieuw toevoegen met hetzelfde e-mailadres, dan blokkeerde dat met "e-mailadres bestaat al".

Polish

Nieuwe managers starten met een logische dashboard-indeling

Een nieuw toegevoegd teamlid (manager / social media manager) kreeg een standaard widget-volgorde die niet op managers was afgestemd — de eigen-inkomenwidgets ontbraken en de blokken stonden in een onhandige volgorde.

New feature

Teamleden koppelen nu zelf hun Canva en mailbox via hun profiel

Alleen een bureau-admin kon een Canva-account of mailbox koppelen. Een social media manager kon dat niet vanuit haar eigen profiel, terwijl die koppelingen wél persoonlijk zijn (jouw Canva, jouw verzendadres voor de klanten waar je aan werkt).

Bug fix

"Mailbox koppelen" in de inbox werkt nu ook voor teamleden

De knop "Mailbox koppelen" op de lege E-mail-pagina (en het tandwiel boven je inboxen) verwees naar een admin-only pagina. Een social media manager die erop klikte werd weggestuurd naar het dashboard — er leek "niets te gebeuren".

Bug fix

Social media managers kunnen nu écht contracten naar klanten versturen

Op het klantprofiel zag een manager wel het Contracten-tabblad, maar het verstuurformulier bleef leeg: de lijst met contract-sjablonen was admin-only, dus er viel geen sjabloon te kiezen en versturen lukte niet.

Polish

Koppelingen op je profiel netjes inklapbaar

Het blok "Mijn koppelingen" op je profiel toonde de volledige stappenplannen van Canva én mailbox direct onder elkaar uitgeklapt — een lange lap tekst.

v0.43
Sunday, 28 June 2026

One consistent menu bar on all public pages

New feature

Menu bar consistent with homepage

On marketing pages (such as /statistics), the menu bar on mobile displayed a hamburger menu and hid the "Log in / Register" button, while the homepage showed the button + language dropdown. Two different menu bars.

New feature

More breathing room around the menu bar on mobile

The menu bar was stuck to the top edge on phones and the page title was too close to the menu bar on most pages.

Polish

Menubalk overal gelijk aan de homepage

Op marketing-pagina's (zoals /statistieken) toonde de menubalk op mobiel een hamburger-menu en verborg de "Inloggen / Registreren"-knop, terwijl de homepage juist de knop + talen-dropdown liet staan. Twee verschillende menubalken dus.

Polish

Meer ademruimte rond de menubalk op mobiel

De menubalk plakte op telefoons tegen de bovenrand en de paginatitel stond op de meeste pagina's erg dicht onder de menubalk.

Bug fix

Affiliate-commissie berekend over netto-omzet (excl. btw)

De commissie werd berekend over het door de klant betaalde bedrag inclusief btw. Daardoor zou een affiliate ook commissie over de btw krijgen — geld dat als belasting wordt afgedragen — en liep de "Verdiend"-waarde niet gelijk met de verwachte-commissie-schatting.

Polish

Bedrijfsgegevens voor uitbetaling klappen in zodra ze compleet zijn

Heb je je self-billing-gegevens volledig ingevuld, dan vouwt het formulier samen tot een compacte balk met een groen vinkje. Klik erop om weer te bewerken.

New feature

Affiliate: QR-code van je persoonlijke link

In de link-kaart staat nu een QR-code van je ref-link, met een download-knop — handig om offline of in gesprekken te delen. Viertalig.

New feature

Affiliate: anonieme top-affiliates ranglijst

Op de Verwijzingen-pagina staat nu een top-5 van affiliates met de meeste betalende verwijzingen — anoniem (alleen initialen), met jouw eigen positie gemarkeerd. Demo-accounts uitgesloten. Viertalig.

New feature

"Jouw uitnodigingen"-overzicht bij give-a-week

De uitnodig-kaart toont nu, zodra je iemand hebt uitgenodigd, hoeveel je uitnodigde, hoeveel betalend werden en hoeveel gratis weken je verdiende. Viertalig.

New feature

Nodig iemand uit: jullie krijgen allebei 1 week gratis

Alleen het commissie-affiliateprogramma (met Stripe-koppeling) bestond — een laagdrempelige "deel met een collega"-loop ontbrak.

New feature

Affiliate: voortgangsbalk naar je volgende uitbetaling

De uitbetaal-kaart toont nu een balkje met "Nog €X tot je volgende uitbetaling" richting de €50-drempel, met je huidige saldo. Bij bereikt: "klaar voor uitbetaling". Viertalig.

New feature

Maandelijkse affiliate-samenvatting per mail

Elke affiliate met activiteit in de afgelopen maand krijgt nu op de 1e een samenvatting: aantal klikken, nieuwe verwijzingen en verdiende commissie, met een zetje om te blijven delen. Viertalig; dormante accounts en demo krijgen niets.

New feature

Melding bij een mislukte affiliate-uitbetaling

Als een Stripe-transfer faalde, kreeg niemand bericht — geld bleef stil hangen zonder dat de affiliate of wij het wisten.

Bug fix

Verwijzingen-pagina: resterende Nederlandse teksten nu viertalig

De voortgangsbalk naar 40% commissie, het "Hogere commissie"-kaartje en de "+7 dagen gratis"-melding waren nog Nederlands-only; nu vertaald in NL/EN/DE/FR.

Polish

Beeldmateriaal-galerij: tegel-bijschriften nu ook viertalig

De categorie-labels onder de tegels (Planning, Tijd besparen, Bereik…) volgen nu de gekozen taal, net als de banners zelf.

New feature

Affiliate-banners in 4 talen (NL/EN/DE/FR)

Alle 30 promotie-banners (18 stories + 12 vierkant) zijn nu in NL, EN, DE en FR gerenderd. De galerij toont automatisch de banners in jouw ingestelde taal.

New feature

Affiliate: aparte beeldmateriaal-galerij met voorvertoningen

In de promotiekit opent "Bekijk al het beeldmateriaal" een nieuw tabblad met een galerij vol voorvertoningen: 18 story-banners en 12 vierkante banners (verschillende boodschappen + mascottes), alle 12 mascottes en de logo's — elk met een download-knop. Viertalig.

New feature

Affiliate: promotiekit met deelteksten, banners, logo + mascottes

Blok "Promotiemateriaal" met kant-en-klare teksten (e-mail, social post, kort bericht) waarin je link al staat — één klik om te kopiëren — plus Senly-banners met mascotte (vierkant 1080×1080 en story 1080×1920), het officiële Senly-logo en 8 mascotte-illustraties. Viertalig.

New feature

Verwijzingen: "Hoe het werkt"-uitleg

Op de Verwijzingen-pagina staat nu een kort uitleg-blok: 30% (→40% vanaf 10 actief), 30-dagen-cookie, terugkerende commissie, 21-dagen-trialbonus en uitbetaling op de 1e vanaf €50. Viertalig.

New feature

Super-admin: handmatig affiliate-commissie bijboeken of corrigeren

Op de affiliates-pagina in super-admin kun je nu een commissie handmatig bijboeken (+) of corrigeren (−) met een reden. Wordt vastgelegd als audit-regel en past het saldo direct aan; begrensd op plus/min EUR 1000.

New feature

Affiliate-notificaties: mail bij aanmelding én bij conversie

Een affiliate kreeg alleen mail bij uitbetaling — niet wanneer iemand zich aanmeldde via hun link of wanneer een verwijzing betalend werd.

Polish

Affiliate: nette viertalige melding voor accounts zonder bureau-koppeling

De foutmelding voor een orphan-account (geen bureau) is niet langer Nederlands-only, maar netjes vertaald in NL/EN/DE/FR.

New feature

Affiliate: waarschuwing als er saldo klaarstaat zonder gekoppelde Stripe

Een affiliate kon commissie opbouwen zonder Stripe te koppelen en kreeg dan niets uitbetaald — zonder het door te hebben.

Performance

Affiliate-dashboard: verwijzingen-lijst gepagineerd

Het dashboard laadde álle verwijzingen van een affiliate in één keer; bij honderden bureaus werd dat traag.

New feature

Affiliate-portaal: premium hub met vier blokken i.p.v. tabbladen

De vier onderdelen stonden in tabbladen; als startpunt minder overzichtelijk.

Polish

Affiliate-portaal rustiger: secties uitklapbaar

De voortgang naar 40% en het verdiensten-overzicht staan nu standaard ingeklapt als nette balk (met samenvatting), net als de bedrijfsgegevens. Alle info blijft — je klikt het open wanneer je het wilt lezen. Dat haalt de drukte van de pagina zonder iets te verbergen.

Polish

Affiliate-portaal: tabbalk verdwijnt als er maar één tab is

Voor rollen die alleen het tabblad "Verwijzingen" zien (geen admin), is de tabstrip met onderstreping nu weg — die is overbodig bij één tab.

Bug fix

Affiliate-positie ("Jouw positie") klopt nu + nette titel

De positie-kaart toonde de rauwe sleutel "AFF_KPI_RANK", en "van N affiliates" telde alle ooit-aangemaakte accounts mee — inclusief demo, inactieve en teamleden die alleen even keken — dus de positie klopte niet.

Bug fix

Affiliate-programma open voor het hele team (niet meer alleen admins)

De pagina beloofde "beschikbaar voor iedere gebruiker binnen een actief bureau-account", maar de code blokkeerde iedereen behalve admins en partners — social media managers, appointment setters en sales-rollen kregen "Niet beschikbaar".

New feature

Verdiensten-overzicht (PDF) + eerstvolgende uitbetaaldatum voor affiliates

Affiliates konden hun verdiensten niet als maand-/jaaroverzicht downloaden voor hun boekhouding, en zagen niet wanneer de volgende uitbetaling zou plaatsvinden.

New feature

Klik- en conversietracking voor affiliate-links

Je zag wel de verwezen bureaus, maar niet hoeveel klikken een reflink kreeg of de conversie klik naar aanmelding naar betalend.

New feature

Akkoord op affiliate-voorwaarden wordt vastgelegd

Het affiliate-portaal toonde "door deel te nemen ga je akkoord met onze voorwaarden", maar dat akkoord werd nergens opgeslagen — geen bewijs.

Polish

Facturen-overzicht in premium weergave (raster/lijst/pictogrammen)

Het facturen-overzicht was een smalle lijst zonder voorvertoning.

New feature

Factuur automatisch gemaild + facturen-overzicht voor affiliates

Affiliates kregen hun self-billing-factuur niet automatisch toegestuurd en hadden geen plek om al hun facturen terug te vinden.

New feature

Self-billing-factuur als PDF te downloaden

Bij een affiliate-uitbetaling was er nog geen factuur die de affiliate (en jij voor de boekhouding) kon downloaden.

New feature

Self-billing: btw-correcte affiliate-uitbetaling + eigen factuurnummer

Bij uitbetaling werd geen rekening gehouden met de btw-situatie van de affiliate (NL btw-plichtig, EU/buiten-EU reverse charge, of particulier/KOR) en was er geen self-billing-factuurnummer.

New feature

Affiliates kunnen hun bedrijfs-/btw-gegevens invullen (self-billing)

Voor een correcte uitbetaling en een geldige factuur miste van affiliates de bedrijfsnaam, btw-status/-nummer, KvK en adres.

New feature

Affiliate-overzicht toont verwachte commissie na de trial

Bij een verwezen bureau dat nog in proefperiode zat, zag je alleen €0 verdiend — niet wat het je gaat opleveren zodra het converteert.

Bug fix

Affiliate-overzicht telt teruggedraaide commissie niet meer mee

Na een terugbetaling werd de commissie wél uit de totalen gehaald, maar bleef die in de "verdiend"-kolom per verwezen bureau toch staan.

New feature

Taalvoorkeur instelbaar in Voorkeuren (portaal + e-mails)

De taal koos je alleen via de dropdown in de menubalk, die vooral de weergave/cookie zette. Daardoor kon je portaal in het Nederlands staan terwijl je account-taal (en dus je e-mails) nog op een andere taal stond.

New feature

Herinnering wanneer je proefperiode bijna afloopt

Bureaus kregen geen seintje vlak voordat hun gratis proefperiode overging in een betaald abonnement — wat tot verraste afschrijvingen kon leiden.

Infra

Vangnet tegen langdurige wanbetaling

Een bureau met status "betaling mislukt" (past_due) hield toegang zolang Stripe opnieuw probeerde — terecht — maar als Stripe het abonnement onverhoopt niet zou opzeggen, kon die toegang in theorie eindeloos doorlopen.

Polish

Resterende trial-dagen in affiliate-portaal nu viertalig

In het affiliate-overzicht stond de trial-status ("nog 21d", "Trial afgelopen") altijd in het Nederlands, ook voor EN/DE/FR-affiliates.

Bug fix

Proefperiode + btw nu ook correct bij betaalwijze-koppelen

Wie de trial-checkout niet in één keer afrondde en later via het dashboard de betaalwijze koppelde, werd direct afgeschreven (geen proefperiode) en zonder btw bovenop het bedrag — dat liep via een ander checkout-pad dan de normale registratie.

v0.42
Saturday, 27 June 2026

Subscription completion works again (Stripe address error fixed)

Bug fix

Linking payment details was stuck on a Stripe error

Those who still had to complete their subscription got "We could not find a valid address on the provided customer" and couldn't link the direct debit authorisation.

Polish

Subscription rule on the Stripe payment page in the correct language

The product description on the Stripe checkout was always in Dutch, even for German/French/English agencies.

Bug fix

Error messages during registration now in the client's language

Validation and error messages in the signup form (e.g. "Company name is required", "This email address already has an account") were always in Dutch, even for EN/DE/FR visitors.

Bug fix

Affiliate link now shows the correct 21-day trial period

Those who came in through an affiliate/referral link saw "14-day trial period" on the registration form, while the extra week (+7 days) was indeed granted upon completion. The displayed trial period didn't match what the visitor actually got, and the affiliate bonus remained invisible.

Polish

Tighter review block on the registration form

The review block showed the score plus two separate reviews and a second Trustpilot logo, which looked cluttered on mobile and could overflow the card.

New feature

Registration quiz adapts follow-up questions to your role

Everyone got the same "biggest challenge" question with client-focused options ("Clients say goodbye", "Prove ROI to clients") and a platform question that literally said "for clients" — while a content creator or in-house marketer doesn't have external clients at all.

Payment/subscription screen: Stripe error fixed + now multilingual

Bug fix

Entering payment details sometimes gave a Stripe error

When completing the subscription, you sometimes received the error "Tax ID collection requires updating business name on the customer". The VAT number field is always on, and Stripe requires the company name to be automatically rewritten — but it was only set when automatic VAT was on.

Bug fix

Subscription completion screen now in your own language

The "Complete your subscription" screen was hardcoded in Dutch, so an English-speaking (or German/French) user still saw it in Dutch.

New feature

Review & Korting: nu ook een Google-review nodig voor je gratis week

Voorheen gaf één Trustpilot-review al een week gratis.

v0.41
Thursday, 25 June 2026

Workflows: AI built-in — generation, advice, describe-to-flow & optimizer

New feature

New workflow action "AI: generate text"

Add an AI step to a workflow that writes text based on a prompt with your trigger variables (e.g. {client.name}). The result comes in {ai.output} and can be used in subsequent steps — for example, as a personalized email — or saved directly as an internal note or task. With rate-limit (cost/speed) and in demo, the AI is not actually called. First step of a broader AI-in-workflows expansion.

New feature

AI advice in the workflow builder

New "AI advice" button in the workflow builder: the AI reviews your workflow and provides concise advice — what the flow does, risk warnings (e.g. mass emailing without a wait step or condition) and tips (e.g. personalizing with the AI step). Read-only; in demo, a sample advice is shown.

New feature

Describe in plain language what you want — AI builds the workflow

Type a short description (e.g. "send new leads a welcome email and create a follow-up task") and the AI proposes a complete workflow concept: trigger, actions, and settings, which you can then adjust. The AI can only use existing building blocks; invalid inventions are filtered out server-side.

New feature

AI optimizer: let AI review your workflows

One button analyzes all your workflows and their run history (last 30 days) and provides concrete improvement suggestions: which step fails, unpublished concepts, overlap, missing guards, and personalization opportunities. Read-only; in demo, a sample analysis is shown.

v0.40
Wednesday, 24 June 2026

Dashboard + personalization: light mode, widgets, target audience change

New feature

Change your target audience yourself (account-wide)

New on the Components page: a target audience selector that allows you to switch to another target audience in one go (e.g. freelancer → in-house marketer). You immediately get the standard components of that target audience; afterwards, you can fine-tune per component. Previously, the target audience was fixed based on your choice during sign-up.

Polish

Scheduling designs is now called "content planner" instead of "Metricool"

The buttons and window for scheduling designs are now generically called "content planner" instead of the platform name, so it doesn't seem tied to a specific tool. The connection below remains unchanged. The selected type toggle (post/reel/story) now has white text for better contrast.

Bug fix

No more jump from light to dark on hard refresh

Since light mode became the default, the page would jump back to dark on a hard refresh (Cmd+Shift+R) or on a new account. The server showed light, but the theme script fell back to dark.

Bug fix

Clients widget now appears even without clients

The "Clients in management" widget was checked but didn't appear on the dashboard when you had no clients — the entire card would disappear.

New feature

Restore your dashboard to the standard of your target audience

New in "Widget management": a "Restore to standard" button that resets your widget layout to the smart order that fits your target audience. The standard order per target audience has also been refined.

Polish

In-house: Monthly profit widget fully hidden

For in-house marketers (where financials are hidden), the Monthly profit widget is now also not available to add via "Widget management", consistent with the hidden financial navigation. If you re-enable financials at Components, the widget returns.

v0.39
Tuesday, 23 June 2026

Affiliate centre completely revamped — four tabs including Review & Discount

New feature

New tab: Review & Discount — submit a review, get 1 week free

Agencies can submit a review on Trustpilot. Upon approval, they receive 1 week of free subscription as credit on their next invoice. Max 1 review per platform per agency.

Polish

Affiliate page fully redesigned: icon-tabs, KPI cards with icons, two-column layouts

Each tab now has its own hero. Referrals display icon-KPIs + progress card with motivation block. Creator Bonus and White-label Partner each have an illustration hero and their own card structure.

New feature

Affiliate tabs fully translated in NL/EN/DE/FR

All texts in the four affiliate tabs (Referrals, Content Creator Bonus, White-label Partner, Review & Discount) are now included in the i18n keys and are automatically displayed in the user's language.

Polish

White-label calculator now shows full calculation (revenue - costs = margin)

The comparison calculator now shows the full calculation: revenue, Senly costs, and margin per column — plus a third column with your additional benefit.

New feature

Partners page shows all four bonus programmes

At senly.io/partners, there is now an overview of all ways to earn: affiliate commission (30%/40%), Content Creator Bonus (up to 100% credit), White-label Partner (€19.95/client/month), and Review & Discount (1 week free).

Bug fix

Partners calculator corrected to current solo rate of €69.95

Calculator used €500 as average client value — not based on an existing Senly rate.

New feature

Sales dashboard: affiliate referrals widget for appointment setters

Appointment setters and sales roles now see a compact summary of their affiliate referrals directly on their dashboard — number active/in progress, outstanding balance, and recent agencies. Widget can be toggled on/off via the widget menu.

Polish

Affiliate dashboard: trial column shows "Converted" after activation

Trial column showed a dash once a referred agency completed its trial and became paying — did not distinguish between "never a trial" and "trial converted".

Polish

Affiliate terms updated: Content Creator Bonus, White-label and Review & Discount added

The partner terms page only described the commission programme. Sections 12-14 have been added with the rules for the three new bonus programmes (thresholds, max. claims, credits, white-label agreement). All four languages updated.

Bug fix

Affiliate terms: 40% tier added and commission threshold clarified

Terms only mentioned 30% MRR, but the system automatically upgrades to 40% at 10+ active referrals.

Bug fix

Affiliate referrals list: paying agencies still showed "In Progress"

A referred agency that already had an active subscription still showed the orange "In Progress" badge in the affiliate dashboard of the referrer.

New feature

Email confirmation upon approval or rejection of reel and review claims

The affiliate who submitted a claim now automatically receives an email as soon as a super admin approves or rejects the claim. In case of rejection, the reason is stated if provided.

Polish

Partners page: bonus programme cards open animated demo modal

Each bonus programme card (Content Creator Bonus, White-label Partner, Review & Discount) at senly.io/partners now opens a modal with a programme-specific animation: increasing view counter with threshold markers (Creator), incoming customers with margin counter (White-label), and Trustpilot review with typing animation plus credit badge (Review). Same style as existing step demos.

Polish

Affiliate tabs: all three bonus sections start at equal height

The White-label Partner tab had 8px less padding-top than the Creator Bonus and Review & Discount tabs, causing the sections to misalign.

Polish

Affiliate bonus tabs: info button shows brief explanation as popup

Next to each bonus tab (Creator Bonus, White-label Partner, Review & Discount) there is now a small ℹ button. Clicking opens a small card with the eyebrow, header, and subtitle of that programme — without switching tabs.

Affiliate centre: leaderboard, trial insight & White-label Partner programme

New feature

White-label Partner tab — start your own branded SaaS on Senly

Own logo, domain and pricing — Senly provides the engine, you provide the client relationship. With interactive profit calculator and apply form.

New feature

Leaderboard KPI in affiliate dashboard

You can see your position (#1 to #N) among all Senly affiliates based on active referrals. Top 3 receive a medal.

New feature

+7 days free trial for everyone who signs up via your affiliate link

Bonus visible as a pill under the reflink. Encourages active use of the link.

New feature

Trial status per referred agency in the referral table

You can see how many days the trial is still running per agency — orange at <3 days, red when nearly expired.

v0.38
Monday, 22 June 2026

Websites & Performance: buttons neatly styled

Polish

No more plain buttons

The "+ Website" and "Fetch scores" buttons displayed the default browser style instead of the brand style.

Workflow folders: create yourself + full-screen folder view

New feature

Real, manageable folders for workflows

Folders were only created implicitly and with many workflows it became a long list.

Client status switch now jumps immediately

Bug fix

Status selector aligns with actual status

When you activated a client (e.g., via the "Activate" screen of an inactive client), the Active/Paused/Inactive switch at the top of the profile remained on the old status.

Inactive/paused client profile: Activate button visible + correct action

Bug fix

Activate works now clearly

On an inactive/paused client profile, the green "Activate" button was invisible (wrong color variable), and the only visible option moved the profile to the other non-active status instead of to active.

Workflows now in overviewable folders

New feature

Collapsible folders + extra refinement

With many workflows, the overview became a long list.

Workflow overview: premium look + wider

Polish

More luxurious, wider workflow page

The workflow overview looked a bit flat and didn't use the full width.

Workflow steps no longer transparent

Polish

Opaque step containers on the canvas

The step containers in the workflow builder were semi-transparent — the dotted background shone through.

Consistent style across all settings pages

Polish

Uniform headings and alignment

Some settings pages (Custom roles, Workflows, Webhooks, Custom fields, Tags, Contracts) had inconsistent margins and heading styles — some were flush with the edge, others were centered with a smaller grey heading.

White text on green "Approve" button (commission claims)

Polish

Improved button contrast

The green "Approve" button on the commission claims page had dark text; it is now white for better contrast.

Workflows: meer lucht bovenaan + witte knoptekst

Polish

Ademruimte en knop-contrast

De workflow-pagina krijgt wat meer ruimte bovenaan en links, en de groene "Nieuwe workflow"/"Opslaan"-knoppen hebben nu witte tekst voor beter contrast.

Vertakkingen nu visueel op het canvas

New feature

Ja- en nee-pad zichtbaar op het canvas

Een vertakking was een gewone stap; de twee paden bewerkte je in het zijpaneel — niet als de visuele boom die je gewend bent.

Workflows: inkomende webhooks + automatische retry & faal-alerts

New feature

Inkomende-webhook trigger

Workflows konden alleen reageren op gebeurtenissen binnen Senly — externe tools konden er geen starten.

New feature

Automatische retry + faal-alerts

Een mislukte mail of webhook werd niet opnieuw geprobeerd, en je hoorde het niet als een workflow ging falen.

Workflow-canvas: config-paneel rechts + mini-kaart

New feature

Stappen instellen in een paneel rechts

Klik een stap op het canvas en zijn instellingen schuiven netjes in een paneel rechts in beeld — de stappen op het canvas blijven compact en overzichtelijk, precies zoals je gewend bent. Plus een mini-kaart rechtsonder met een overzicht van je hele flow.

Workflow-bouwer op volledig scherm (GHL-stijl canvas)

New feature

Volledig-scherm canvas met zoom & slepen

De bouwer zat in een smal zijpaneel — onhandig voor grote flows met veel stappen en vertakkingen.

Workflows: échte if/else-vertakking

New feature

Vertakking met een ja- en nee-pad

Een voorwaarde kon de flow alleen lineair stoppen — je kon niet twee verschillende kanten op.

Workflows op een vast tijdstip (geplande automatiseringen)

New feature

Nieuwe trigger: "Op een vast tijdstip"

Workflows konden alleen reageren op gebeurtenissen — niet zelf op een vast moment starten.

Workflows: meer acties + voorwaarden met getallen

New feature

Voorwaarden met getallen

Voorwaarden konden alleen tekst vergelijken (bevat / is gelijk aan).

New feature

Taak toewijzen aan een teamlid

De actie "Taak aanmaken" heeft nu een optioneel "Toewijzen aan"-veld, zodat de automatische taak direct bij de juiste persoon belandt.

New feature

CRM-lead-acties: fase wijzigen & tag toevoegen

Twee nieuwe acties voor lead-triggers: verplaats de lead automatisch naar een andere pipeline-fase, of voeg er een tag aan toe (bv. "Hot lead"). De bouwer waarschuwt als je ze achter een trigger zonder lead-context zet.

Workflow-bouwer: handiger werken (variabelen, mappen, stappen aan/uit, log-filter)

New feature

Variabelen invoegen met één klik

Je moest variabelen als {client.name} foutgevoelig met de hand typen.

New feature

Mappen om workflows te ordenen

Geef een workflow een map (bv. "Onboarding" of "Facturatie"); de lijst groepeert ze netjes per map.

New feature

Stappen tijdelijk uitschakelen

Zet een losse stap aan/uit zonder hem te verwijderen — handig om iets even over te slaan zonder je flow te verbouwen.

Polish

Logboek: filter op mislukte + uitklapbare details

Filter het logboek op alleen mislukte uitvoeringen en klik een uitvoering open om per stap te zien wat er gebeurde.

Workflows: twee nieuwe triggers (nieuwe lead, afspraak geboekt)

New feature

Start workflows op meer momenten

Workflows konden nog niet automatisch reageren op een nieuwe lead of een geboekte afspraak.

Workflows koppelen aan externe apps (Zapier, Make, n8n)

New feature

Webhook-actie — verbind met elke externe tool

Workflows konden alleen dingen binnen Senly automatiseren; koppelen met externe automatiseringsprogramma’s kon niet.

Workflows: dupliceren + slimme onvolledig-waarschuwingen

New feature

Workflow dupliceren

Met de nieuwe kopieer-knop op elke workflow-kaart maak je in één klik een concept-kopie — handig om een variant te bouwen zonder opnieuw te beginnen.

New feature

Waarschuwingen bij onvolledige stappen

Je kon een stap publiceren met een leeg verplicht veld, of een klant-actie achter een trigger zonder klant — dat faalde dan stil bij uitvoering.

Workflows: robustness & completion (review-fixes)

Bug fix

Invoice-paid workflows now also fire for online payments

An "Invoice paid" workflow would only run when manually marked as paid, not when a client paid via a Mollie/Stripe payment link.

Bug fix

Wait steps no longer block new automations

Many resumed wait steps could fill the per-workflow hourly limit and prevent new triggers; scheduled runs were also counted as "successful" in the success percentage.

Performance

Faster execution for large teams and many wait steps

Team notifications are now sent in parallel instead of one by one, and the cron that resumes wait steps processes them in parallel blocks — one slow step no longer holds up the rest.

Polish

Builder: more stable dragging and honest test preview

Reordering steps via drag-and-drop now keeps the correct step open and lands in the correct position; the test button honestly shows which steps are skipped due to a condition or wait step.

Content Creator Bonus: Post a Reel = money back

New feature

Create a Reel about Senly and receive up to 100% discount on your subscription

Agencies that created content about Senly were not rewarded for the exposure they generated.

Web maintenance: automatic website performance via Google Lighthouse

New feature

Performance block for web maintenance clients

There was no insight into how quickly a client's website loads or how it scores on SEO and accessibility.

Client profile per service + Content block secured

New feature

Websites block for web maintenance clients

For web maintenance clients, there was no place to keep track of domain, hosting, CMS, and SSL.

New feature

Campaigns block for advertising clients

Advertising clients had no overview of active campaigns, budgets, and durations.

New feature

House style block for branding clients

New "House style" block shows brand colors, fonts, and a notes field — automatically visible when the type "Branding & Strategy" is selected.

New feature

Smart blocks when changing service

When changing the service type in the client editor, the blocks were not automatically updated.

Security

Content & Social Media only for management/growth clients

The Content block (€50/client) is now server-side limited to Social Media Management and Growth Service. Other client types don't see the block, not even in the block selector.

Bug fix

"Delete client" button clickable again

After expanding the block selector, the modal grew too large and the footer overlapped the delete button.

Client profile: Websites, Campaigns & Branding blocks

New feature

Websites block for Web Maintenance clients

Web Maintenance clients had no place for domain, hosting, and CMS information in the client profile.

New feature

Campaigns block for Advertising clients

Advertising clients had no structured place for ongoing campaigns per platform.

New feature

Branding block for Branding & Strategy clients

Branding clients had no dedicated place for brand identity; brand guidelines were nowhere to be noted.

New feature

Smart blocks presets per service

When selecting a service, the correct blocks are automatically pre-selected: Web Maintenance gets Websites, Advertising gets Campaigns + Content, Branding gets Branding.

Workflows module fully translated (NL/EN/DE/FR)

New feature

/admin/workflows available in 4 languages

The automation builder (workflows) was entirely in Dutch — labels, descriptions, trigger/action catalogue, demo workflows, and palette. Non-Dutch users had to translate the UI to participate.

Client overview: filter by service type

New feature

Web maintenance, Ads, Branding & Other as separate filter buttons

Clients with a non-social service type were all listed under "No service", regardless of whether they were a web maintenance or advertising client.

Klantprofiel aanpasbaar per dienstverlening

New feature

Zichtbare blokken instellen per niet-social klant

Bij klanten met een ander type dienstverlening (webonderhoud, advertenties, branding) zag je altijd alle tabbladen inclusief social-media-tools die je toch niet gebruikt.

Klanten toevoegen buiten social media: webonderhoud, ads, branding & overig

New feature

Meer klanttypen: voeg alle klanten toe aan je portaal, ongeacht dienst

Je kon alleen Social Media Beheer- en Groeiservice-klanten aanmaken. Bureaus die voor dezelfde klant ook webonderhoud, advertenties of branding doen, konden hun volledige klantportfolio niet bijhouden in Senly.

Workflows now connect to your CRM (phase 2b), Workflows can also send emails automatically & 1 more

New feature

New trigger "CRM: lead moved" + action "Add to pipeline"

Workflows couldn't react to your sales pipeline or put leads in it — while "lead moved to phase X → do Y" is one of the most used automations.

New feature

New workflow action: Send email

Phase 1 of Workflows could create tasks, notify the team, and add notes — but not send emails, while that's one of the most requested automations.

New feature

New: build your own automations under Settings → Workflows

Senly already did separate, fixed automations (invoices, reminders, auto-contract), but you couldn't set up your own "when X → do Y". For that, you had to go to an external tool.

New feature

Client invoice portal now appears in the client's language

The shared link that your end client opens (/client portal/...) was completely hardcoded in Dutch — statuses, dates, and buttons. An English, German, or French client would still see Dutch.

Polish

Settings menu now in three columns

With the new Workflows option added, the two-column list became long; the menu is now in three columns on desktop (two on tablet, one on mobile).

Workflows: completely new, premium design (phase 4)

New feature

Visual flow builder with drag-and-drop

The workflow builder was a functional but bare form — not pleasant to work with.

New feature

Automation dashboard & insights

You had no overview of what your automations were doing.

New feature

Templates gallery & integrations overview

Starting from scratch took time.

Workflows get smart: conditions, wait steps, and client profile actions (phase 3)

New feature

Conditions — "only continue if…"

A workflow would always perform all actions; you couldn't say "only do this if the lead name contains X".

New feature

Wait steps — delayed actions

Everything happened immediately; a follow-up email "2 days later" was not possible.

New feature

Update client profile

Workflows couldn't modify client data.

v0.37
Sunday, 21 June 2026

Billing, checkout & afspraken: iDEAL, BTW, facturatiecyclus & i18n

New feature

iDEAL en Bancontact als betaalmethode bij aanmelding

Op de Stripe-betaalpagina stonden alleen kaart en SEPA-incasso. SEPA voelt voor veel Nederlandse en Belgische bezoekers onbekend.

New feature

EU-bedrijven kunnen BTW-nummer opgeven bij betaling (reverse-charge)

Buitenlandse EU-bureaus konden hun BTW-nummer niet kwijt bij aanmelding, waardoor ze BTW betaalden over een transactie die fiscaal verlegd had moeten worden.

Bug fix

Factuur klopt nu wereldwijd (BTW, export, reverse-charge)

De factuur paste altijd 21% NL BTW toe, ook bij buitenlandse klanten of EU-reverse-charge.

New feature

Facturatiecyclus wijzigen vanuit je abonnement-pagina

De cyclus-keuze (per kwartaal -15%, jaarlijks -30%) was alleen tijdens aanmelding beschikbaar. Bestaande klanten konden niet overstappen.

New feature

Cyclus-keuze op /prijzen en internationale prijspagina's

Maandelijks / Per kwartaal / Jaarlijks-schakelaar staat nu ook op /prijzen, /en/pricing, /de/preise en /fr/tarifs met besparingsbadge. De CTA geeft de gekozen cyclus automatisch door naar /signup.

Bug fix

"Verzetten of annuleren"-link werkt weer vanuit de bevestigingsmail

De beheerpagina /b/manage/[token] stond niet op de publieke-routes-lijst; uitgelogde genodigden werden doorgestuurd naar het inlogscherm.

New feature

Privacyverklaring en algemene voorwaarden in NL/EN/DE/FR

Internationale prospects konden de legal-pagina's niet in hun taal lezen.

Polish

Telefoonnummer is nu verplicht bij aanmelding

Op het aanmeldformulier is het telefoonnummerveld van optioneel naar verplicht gezet (4-talig, minimaal 6 cijfers).

New feature

Uber-i18n-audit: 240 vertaal-lekken in 128 files gefixt

Een diepgaande controle met 445 parallelle agents vond nog 254 unieke vertaal-lekken: /alternatives, partner-funnel, booking-management, helpcentrum, integraties-pagina en meer.

v0.36
Saturday, 20 June 2026

Automations studio (LinkedIn/Instagram/Facebook/TikTok) now available in 4 languages

New feature

Automations studio fully in NL/EN/DE/FR

The /automations/[platform] page (LinkedIn / Instagram / Facebook / TikTok automation studio) was still fully hardcoded in NL: platform intro texts, tool descriptions, limits, how-it-works steps, stat labels (TOTAL REQUESTS / THIS WEEK / etc.), main-action card, live activity feed with "Run stopped" / "Run completed", "X d ago" time suffix. International agencies thus saw a Dutch interface on a central screen.

Bug fix

Zoom-agenda koppelen werkt weer

De Zoom-koppeling stuurde de OAuth-callback naar het apex-domein (senly.io) waar de inlogsessie niet leeft, waardoor reconnecten altijd op de loginpagina strandde.

Security

Contract-ondertekenlinks met sterk willekeurig token

De ondertekenlink van een contract gebruikte een raadbaar cuid-token; een gegokt token kon een bindende handtekening vervalsen.

Security

Affiliate self-referral via eigen domein geblokkeerd

Je kon je eigen tweede bureau aanmelden onder je eigen verwijscode voor een kickback.

Security

Server-side paywall voor verlopen/opgezegde abonnementen

Een verlopen of opgezegd abonnement behield volledige toegang tot alle betaalde functies — er was nergens een server-side controle op de abonnementsstatus.

Bug fix

Klikken op tracking-links in outreach-mails werkt weer

De open-redirect-fix gebruikte een relatieve redirect-URL; daardoor gaf elke klik op een tracking-link een 500-fout in plaats van door te sturen.

Security

SSRF-guard sluit ook de IPv6-mapped vorm van interne adressen af

Een interne/metadata-IP in IPv6-mapped hex-vorm (bv. ::ffff:a9fe:a9fe = 169.254.169.254) werd door de nieuwe guard niet als privé herkend.

Security

Kritieke lekken gedicht + autorisatie strak getrokken

Een diepe red-team-audit vond o.a. een publiek lek van een platform-API-token, een extensie die social-cookies aan elke website kon geven, cross-tenant Drive-toegang, omzeilbare rate-limits, MFA-omzeiling via SSO en diverse routes die alleen in de UI waren afgeschermd.

Polish

Cyclus-keuze verschijnt alleen bij 1 klant

De kwartaal/jaar-korting was ook te kiezen vanaf 2 klanten en stapelde dan bovenop de volumekorting — dat erodeerde de marge op grotere bureaus te ver.

Bug fix

Bij kwartaal/jaar stond er nog "daarna automatisch maandelijks"

Het zinnetje onder het bedrag op het aanmeldformulier zei altijd "daarna automatisch maandelijks", ook als je per kwartaal of jaarlijks had gekozen.

Polish

Strakke .95-prijzen i.p.v. rommelige kommabedragen

Een vast kortingspercentage gaf onhandige bedragen als €59,46 en €48,96 per maand — dat oogt niet aantrekkelijk.

New feature

Zichtbare cyclus-keuze op de prijspagina

De korting voor per kwartaal/jaar betalen was alleen te kiezen ín het aanmeldformulier, niet zichtbaar op de prijssectie zelf.

Bug fix

Factuurbedrag exact gelijk aan wat er geïnd is

De factuur/kwitantie nam het door Stripe geïnde totaal als grondslag en telde er nogmaals 21% BTW bij. Met Stripe Tax actief zat de BTW al in dat bedrag, waardoor de factuur 21% te hoog kon uitvallen.

Polish

Cyclus zichtbaar op de factuur

Bij kwartaal- en jaarbetalingen vermeldt de factuuromschrijving nu expliciet "kwartaalabonnement" of "jaarabonnement" (i.p.v. enkel de maand), zodat duidelijk is welke periode is betaald.

Bug fix

MRR-cijfers kloppen voor kwartaal-/jaarklanten

Het maandbedrag in de super-admin-dashboards is nu het effectieve bedrag ná cyclus-korting (een jaarklant telt mee voor het gekorte bedrag per maand), zodat de MRR niet langer te hoog wordt weergegeven.

New feature

Kies bij aanmelden je facturatiecyclus: maandelijks, per kwartaal of jaarlijks

Senly kende alleen maandelijkse facturatie. Bureaus die liever vooruitbetalen voor een betere prijs (en jij voor minder churn en cashflow vooraf) hadden die optie niet.

New feature

Eén-klant-tarief is nu €69,95 (USD $79.95) — bestaande bureaus houden hun oude tarief levenslang

Het één-klant-instaptarief stond op €60 (USD $70).

Bug fix

Een op €0 gezette maand leek leeg i.p.v. nul

Als je het inkomen van een manager handmatig op €0 zette (vorige update), toonde de "per maand"-grafiek geen balk én geen bedrag — niet te onderscheiden van een maand zonder gegevens.

New feature

Zet het werkelijke inkomen van een manager per maand zelf vast

De inkomstengrafiek van een manager (dashboard "Mijn inkomen" + "per maand") was een live-berekening op basis van de huidige klant-toewijzingen. Daardoor toonde elke maand hetzelfde bedrag en was er geen manier om afgelopen maanden — die in werkelijkheid anders waren — te corrigeren.

New feature

Hele admin-omgeving van bureaus nu in NL/EN/DE/FR

De mega-audit vond 55 medium-prio i18n-lekken in admin-schermen die bureaus dagelijks gebruiken: het eigen-velden-beheer, tags, gebruikersbeheer, integraties (Zoom/Outlook/Google Insights/master-config), rollen & rechten en de statistieken-pagina toonden nog hardcoded NL. Een Duits/Frans bureau dat Senly gebruikt zag hierdoor permanent Nederlandse interface in delen van het portaal.

Security

De demo-link viel ook buiten het dashboard om nog te boeken

In de vorige stap werd alleen de "Boek een demo"-knop op de Launchpad gegate. Wie de kale boekingslink kende, kon die los intypen en alsnog (meerdere) demo-afspraken inplannen.

v0.35
Friday, 19 June 2026

Demo can now only be booked once per agency

Bug fix

"Book a demo" on the Launchpad was unlimited

The "Book a demo" button on the Launchpad was an open link without any limit. As a result, an agency could essentially schedule unlimited demo appointments.

Bug fix

Affiliate-pagina toonde bij een drukke piek "Niet beschikbaar"

Als de affiliate-data eenmalig niet laadde (bv. een tijdelijke rate-limit-piek), toonde de pagina meteen een "Niet beschikbaar"-scherm — alsof de functie kapot was, terwijl een seconde later alles weer werkte.

Bug fix

Sessie kon kort haperen bij snel doorklikken

De interne sessie-check viel onder dezelfde verzoek-limiet als de rest. Bij een piek kreeg die check een "te veel verzoeken"-fout, wat een sessie-foutmelding in de achtergrond gaf en kon aanvoelen als kort uitgelogd raken.

Bug fix

Snel klikken door het portaal gaf soms "Te veel verzoeken" of een lege affiliate-pagina

De API-limiet stond op 120 verzoeken per minuut per IP-adres. Een heel bureauteam achter hetzelfde kantoor-internet deelde dat budget samen, en elke paginalaad vuurde meerdere achtergrond-calls af. Daardoor liep je bij normaal snel werken al tegen een rate-limit aan: de affiliate-pagina toonde dan "Niet beschikbaar" en de sessie kon kort haperen.

Performance

Logo en huisstijl werden tot 8x per pagina opnieuw opgehaald

Elk onderdeel dat het bureaulogo of de huisstijl-kleuren toont, haalde die los op. Bij de eerste paint vuurden ze allemaal tegelijk dezelfde aanvraag af, wat het rate-limit-budget onnodig snel opmaakte.

Polish

Factuur aanmaken/bewerken opent groot, met een ruime live-preview

Het nieuwe-factuur-venster was een relatief klein gecentreerd venster, waardoor de live-preview van de factuur vrij klein was — net als eerder bij de sjabloon-editor.

New feature

De Instagram-tab was een "binnenkort"-knop zonder functie

Instagram stond als tab in de hashtag-tool maar gaf alleen een foutmelding — IG schermt hashtagdata af achter login en blokkeert serverIP’s, en de proxy die TikTok/YouTube redt weigert Instagram.

Bug fix

Opslaan met Bold, Elegant, Badge, Cards of Sidebar gaf "Ongeldige body"

De validatie van de factuur-opslag-route kende alleen de vier oorspronkelijke basissjablonen (Aurora, Onyx, Slate, Classic). Een factuur opslaan met een van de vijf nieuwere sjablonen — of met een eigen sjabloon dat daarop gebaseerd is — werd geweigerd.

Polish

Sidebar-sjabloon: bredere inhoudskolom

Bij het Sidebar-sjabloon nam de gekleurde zijbalk relatief veel breedte, waardoor lange omschrijvingen in de factuurregels te smal afbraken.

New feature

De "Met bijlage"-filter deed niets

De filterknop "Met bijlage" boven de threadlijst had geen functie.

New feature

Labels in de inbox waren vaste suggesties zonder functie

De labels in de zijbalk waren hardcoded voorbeelden; je kon ze niet aanmaken, toepassen of erop filteren.

Bug fix

Kolommen, dichtheid, totaalstijl en extra kleuren werkten niet op echte facturen

In de sjabloon-editor kon je ~30 dingen instellen, maar bij het kiezen van je eigen sjabloon op een factuur paste maar een handvol toe (accentkleur, lettertype, footer, kop-stijl). Kolom-verbergen, dichtheid, totaal-accentvak, tweede accentkleur, datumnotatie en hoofdletter-labels deden niets. Bovendien gingen sommige van die instellingen al verloren bij het aanmaken van het sjabloon.

New feature

Trendlijntjes bij open- en klikpercentage waren placeholders

De sparklines bij de campagne-KPI-tegels waren nooit op echte data gebaseerd; de cijfers klopten, de trendlijn niet.

New feature

"Beantwoord allen" deed slechts een gewone reply

De knop "Allen beantwoorden" stuurde alleen naar de afzender — de CC-ontvangers werden genegeerd, ook al stonden ze in de oorspronkelijke mail.

New feature

Sjablonen-knop in de inbox werkt

De "Concept templates"-knop in de mailmappen deed niets (was uitgeschakeld), terwijl de sjablonen-backend al bestond.

New feature

Volledig scherm voor het lezen van een mail

De vergroot-knop in een geopende mail deed nog niets.

Polish

Bold, Elegant, Badge, Cards en Sidebar krijgen hun eigen kleur

Bij het kiezen van een basissjabloon bleef de preview altijd de teal merkkleur tonen, ook bij sjablonen die juist een andere kleur uitstralen (indigo, violet, goud, sky). Daardoor zag de galerij er niet "in kleuren" uit.

New feature

Sidebar-sjabloon: logo, afzender en betaalinfo in een gekleurde zijbalk

Alle sjablonen waren top-down opgebouwd. Een layout met een verticale gekleurde kolom links — zoals in moderne agency-facturen — ontbrak nog.

New feature

Acht basissjablonen om uit te kiezen i.p.v. vier

Je wilde meer variatie én meer kleur in de sjabloonkiezer, met echte verschillende looks i.p.v. alleen kleurwissels.

New feature

Nieuw basissjabloon "Bold" naast Aurora, Onyx, Slate en Classic

Je kon kiezen uit vier basissjablonen om verder te customizen. Een echt opvallende, full-bleed kopstijl zoals je die in moderne factuur-galerijen ziet ontbrak.

Bug fix

Afbeeldingen in de team-chat verschenen niet

Chat-afbeeldingen werden opgeslagen onder /uploads/chat/, maar de runtime serve-route dekte alleen platte /uploads/<bestand>-paden. Geneste chat-paden vielen daardoor terug op de standaard-static-server, die runtime-geschreven bestanden niet uitlevert → 404. De bestanden zelf stonden wel veilig op het persistente volume, maar waren onbereikbaar.

Bug fix

Een gekozen lettertype (Inter, Geist, Playfair…) was in de preview niet zichtbaar

In de sjabloon-editor kon je een lettertype kiezen, maar de preview viel terug op het standaard systeemlettertype omdat de webfonts niet geladen werden. Je zag dus niet hoe Playfair of Merriweather er echt uitzien.

New feature

De gedownloade PDF volgt nu álle sjabloon-instellingen, plus 8 nieuwe ontwerpopties

De rijke sjabloon-editor werkte in de preview en op de online klantpagina, maar de gedownloade/verstuurde PDF gebruikte alleen de accent-kleur en stond bovendien altijd in het Nederlands. Wat je ontwierp kwam dus niet 1-op-1 in de PDF terug. En er was vraag naar nog meer controle om facturen écht uniek te maken.

v0.34
Thursday, 18 June 2026

Sjabloon-editor: uitklapbare secties + veel meer ontwerpopties

New feature

Maak echt unieke facturen — kleuren, typografie, layout, dichtheid, kolommen en blokken volledig naar wens

De sjabloon-editor had maar een handvol opties (accent, lettertype, logo-positie, header-stijl, achtergrond). Te weinig om écht unieke facturen te maken — als iedereen met dezelfde paar knoppen werkt lijken alle gedeelde sjablonen op elkaar en heeft de bibliotheek weinig nut.

v0.33
Wednesday, 17 June 2026

Template editor and library fully translated (NL/EN/DE/FR)

Polish

The custom template editor and shared library were still in Dutch on other languages

The new template feature had just been built, but all the texts within it — the "+ Custom template" and "📚 Library" buttons, the full template editor (all field labels, options, buttons, error messages) and the library gallery — were hardcoded in Dutch. On an EN/DE/FR account, they remained in Dutch.

New feature

Maak je eigen factuur-sjabloon: kleuren, lettertype, logo, layout, zelfs eigen CSS

Je kon alleen kiezen uit 4 vaste sjablonen (Aurora/Onyx/Slate/Classic). Bureaus die hun facturen volledig in eigen huisstijl wilden — eigen accent-kleur, lettertype, logo-positie, achtergrond — moesten het doen met wat er was. Moneybird heeft dit, wij hadden het nog niet.

v0.32
Tuesday, 16 June 2026

Manage your appointment page: host name was not filled in

Bug fix

Literal {hostName} placeholder on the cancel/reschedule page

On the public "Manage your appointment" page (via the link in the confirmation email) it literally said "with {hostName} ..." instead of the host's name. The translation string with_host_r6 contained the placeholder {hostName} itself, while the component already adds the host name separately — so the placeholder was never replaced.

Polish

Vragen sluiten beter aan op wat bureaus echt voelen — niet alleen wat ze doen

De quiz vroeg vooral naar tactische dingen ("hoe organiseer je je workflow?", "hoeveel tools gebruik je?"). Goede vragen, maar ze trekken geen emotie. Bezoekers vinkten antwoorden aan zonder zich te herkennen in een pijn.

Polish

Score-bereik op de quiz gerebalanced — laag voor wie het al goed doet, hoog voor wie chaos heeft

De optimalisatietest gaf iedereen erg hoge "winst-cijfers": minimum 12u bespaard, minimum 64% kwaliteitsverbetering. Zelfs iemand die op alle vragen het beste antwoord gaf ("ik gebruik 1 alles-in-een platform", "automatische rapportages") kreeg te horen dat Senly nog "94% kwaliteit" en "2,9x sneller" beloofde. Niet geloofwaardig — en het gevoel "ze houden me voor de gek" zet bezoekers eerder af dan aan.

New feature

Nieuwe entity "factuur-klant" voor losse facturen zonder dat je een complete bureau-klant hoeft aan te maken

Bij een factuur naar een los CRM-contact (zoals "Tim van 13metaal") kwamen er geen adres-, KvK-, of BTW-gegevens op de factuur. CRM-contacten slaan die velden simpelweg niet op — alleen bedrijfsnaam, contactnaam en e-mail. Voor échte facturatie was je gedwongen om eerst een hele bureau-klant aan te maken (Klanten → +Nieuwe klant) met social-media-velden die niet relevant zijn voor een eenmalige opdracht.

Bug fix

Agenda toont niet langer de afspraken van andere teamleden

Een boeking die via de link van één host binnenkwam, verscheen in de agenda van álle teamleden binnen hetzelfde bureau. Een appointment-setter zag bijvoorbeeld de afspraken van een andere host staan. Oorzaak: de agenda-query haalde naast je eigen host-boekingen ook alle boekingen van de hele tenant op (OR op tenantId).

Polish

Eerste indruk op de prijspagina: een laag bedrag

De aantal-klanten-slider op de signup begon standaard op 5 klanten, wat €250/maand toonde. Bezoekers schrokken bij hun eerste blik op het bedrag, terwijl veel bureaus beginnen met 1-2 klanten en de echte prijs voor hen €60-€100 is.

New feature

Kies je tijdzone en zie alle tijden meteen in jouw lokale tijd

De tijdzone-keuze op de boekingspagina was half af: de getoonde tijdsloten bleven altijd in Nederlandse tijd staan, ook als je bijvoorbeeld Istanbul koos. Een bezoeker die "12:00" aanklikte boekte daardoor 12:00 in zíjn zone (= een ander moment dan de 12:00 die de host bedoelde). Ook stonden er maar 10 tijdzones in de lijst.

Bug fix

Meetings in de juiste dag-kolom bij een afwijkende profiel-tijdzone

Sinds de vorige update volgde de tijd-positie van een meeting in de week/dag-agenda al je ingestelde profiel-tijdzone, maar de bepaling van wélke dag-kolom een meeting in viel gebruikte nog de tijdzone van je browser/laptop. Voor wie een profiel-tijdzone instelt die afwijkt van zijn apparaat (bijvoorbeeld een teamlid dat fysiek in een ander land zit) kon een meeting rond middernacht in de verkeerde dag belanden — de positie klopte, maar de kolom niet.

Performance

Gemini paid-tier live — captions van ~7s/stuk naar ~5s/stuk, 5/6 via Gemini i.p.v. 2/6

Op de gratis Gemini tier (10 RPM) viel 4 van de 6 captions terug op de tragere OpenRouter Gemma-fallback (5-7s/call) of failde de batch helemaal door rate-limit cascades. Voor 246 captions liep dat richting tientallen minuten of erger.

New feature

Wereldwijde tijdzones: gast ziet zijn tijd, host ziet de zijne — zoals Calendly

Tot nu toonden alle booking-mails en de host-agenda altijd Nederlandse tijd. Een gast die in bijvoorbeeld Turkije (UTC+3) boekte, kreeg een bevestiging in NL-tijd en moest zelf 2 uur omrekenen — verwarrend en foutgevoelig.

New feature

AI-features (captions, brand-check, IG-check) draaien nu op Senly's gedeelde paid Gemini-key

Vroeger moest elk bureau zélf een Google AI Studio API-key aanmaken in Settings → AI Integraties, anders werkten captions/brand-check/IG-profielcheck niet of liepen ze tegen het 10 RPM-limiet van de gratis tier. Veel bureaus haakten af bij die setup, of merkten "AI is traag" als ze hun key wel hadden ingesteld maar op het gratis quota draaiden.

Bug fix

First-available, in-app notifs, activity-filter, content-rate-limit, email-test: alle dag/tijd-grenzen in NL-tijd

Vijf medium-prio plekken konden rond middernacht NL de verkeerde data tonen of beperkingen toepassen: first-available zocht slots vanaf 02:00 NL i.p.v. 00:00; in-app notif-bericht voor verplaatste/geannuleerde meetings toonde UTC-tijd; activity-feed filter "tot datum X" miste de avond van die dag; content-generate-rate-limit reset op verkeerde kant van middernacht; email-test toonde verzendtijd in UTC.

Bug fix

Calendar, inviter-runner, CRM-reports en maandrapport: dag/maand-grenzen in NL-tijd

Vier interne flows trokken hun data tussen UTC-grenzen i.p.v. NL-grenzen. Voor klanten die rond middernacht NL actief zijn betekende dit verkeerde maand-totalen in CRM-reports, een posts-overzicht op de client-kalender met een dag overlap, een run-inviter call die de dagteller op de verkeerde kant van middernacht zag, en startLabel/endLabel in het maandrapport die soms de verkeerde maand toonden.

Bug fix

7 klant-facing TZ-bugs opgelost (audit-wave 1 van 4)

Naast de eerder vandaag gefixte booking-page en Metricool-tijden bleken er nog 7 plekken te zijn waar tijden in server-TZ (= UTC op Railway) werden berekend in plaats van in de juiste lokale tijdzone. Concreet: meeting-mails (bevestiging/herinnering/cancellation/reschedule) toonden 2 uur te vroeg in zomer; "morgen 09:00 NL" voor Metricool/Canva-posts via de quick-action-knop kwam op 11:00 NL terecht; daily-brief begroette met "Goedemorgen" om 7:00 NL (= 5:00 UTC); FB-inviter-daglimit reset op UTC-middernacht waardoor het tussen 22:00 NL en 02:00 NL aan de verkeerde kant van de grens kon zitten; LinkedIn-maandlimit gebruikte UTC-maand (rond maandwissel verkeerd); invites-per-dag-grafiek bucketed op UTC-dag; en daily crons hadden geen expliciete timezone-config.

Bug fix

Captions duurden 23s/stuk in plaats van ~7s — fix teruggedraaid

De throttle in v0.506 (BATCH 10→3, Gemini-retry-wait 1.5s→5s) zou rate-limit cascades moeten vermijden, maar maakte het totaal juist 3× langzamer: kleinere parallel-batch hielp niet (Gemini’s 10 RPM werd nog steeds geraakt), en de langere wait-tijden tussen model-switches stapelden op tot 5-10s extra per caption.

Bug fix

Posts van 8:00 kwamen op 6:00 te staan in Metricool

Nieuwe posts die Senly naar Metricool stuurde verschenen 2 uur te vroeg in de Metricool-planner. Wat als 8:00 was ingepland kwam op 6:00 te staan, etc. Oorzaak: Railway-servers draaien in UTC; de format-helper gebruikte d.getHours() / getDate() die op de server-TZ lopen. Een Date voor "8:00 Amsterdam" (= 06:00 UTC) werd zo geformatteerd als "T06:00:00" en samen met timezone "Europe/Amsterdam" verstuurd. Metricool plande op 06:00 NL.

Performance

Genereer captions niet meer 2× zo traag door rate-limit fallback

Captions duurde erg lang. Oorzaak: BATCH=10 stuurde 10 calls tegelijk naar Gemini, maar Gemini 2.5-flash gratis is maar 10 RPM — dus 8 van de 10 kregen 429 en vielen terug op OpenRouter-Gemma, dat 5-7s per call doet i.p.v. Gemini’s 2-3s. Hele batch wachtte op de traagste fallback-call.

Bug fix

Tijdslot in publieke booking-pagina kwam 2 uur te vroeg in de agenda

Wie 12:00 koos op de publieke booking-pagina kreeg een bevestiging voor 10:00. Wie probeerde te boeken op 10:00 of 11:00 viel buiten beschikbare uren en kon niet meer reserveren. Ook bevestigingsmail, agenda-uitnodiging en dashboard-kalender toonden de verkeerde tijd. Oorzaak: de tijdzone-conversie deed twee iteraties om DST-randen op te vangen, maar de tweede iteratie mat de offset opnieuw tegen het reeds-gecorrigeerde resultaat — waardoor de NL-zomer-offset (UTC+2) dubbel werd toegepast. 12:00 NL ging zo via 10:00 UTC naar 08:00 UTC, en kwam in de browser terug als 10:00 NL.

Bug fix

Genereer captions: vision-ladder valt netjes door, OpenRouter-models geüpdatet

Bij 6+ pagina’s tegelijk schoten alle 4 vision-providers stuk: Gemini gaf 429 (free tier RPM), GitHub Models gaf 429, OpenRouter gaf 404 ("This model is unavailable for free") omdat ons OpenRouter-model meta-llama/llama-3.2-11b-vision-instruct:free niet meer gratis bestaat, en OpenAI heeft geen key. 2 captions kwamen door, 4 mislukten met een hele rode foutmuur.

Performance

Stuur-naar-Metricool laadt voorbeelden nu in seconden i.p.v. minuten

Bij grote designs (100+ pagina’s) liet de modal nooit voorbeelden zien — de export-pipeline schoot tien Canva export-jobs van 25 pagina’s parallel af, wachtte per job tot een PNG-bundel klaar was, en timde dan ook nog eens 60-180s per chunk. Eindresultaat: minuten wachten, of helemaal niets.

Polish

Klant- en contactpersoon-velden zijn nu type-to-search

Bij CRM-contacten van honderden namen werd de native dropdown een lijst van scrollen-en-scrollen. Klantenlijsten met 50+ klanten gaven hetzelfde probleem.

Polish

Eén contactpersoon-dropdown — klant-contacten of losse CRM-contacten

Voor een losse opdracht moest je via een aparte rij "Of: los CRM-contact" gaan; het Contactpersoon-veld zelf bleef disabled tot je een klant had gekozen.

Bug fix

Stuur-naar-Metricool: thumbnails laden nu ook door als één Canva-job traag is

De vorige chunk-fix splitste 246 pagina’s al netjes in jobs van 25, maar gebruikte intern Promise.all — zodra één van de 10 chunks de 60s polling-window van Canva raakte, sloopte de error de hele batch en zag je nul thumbnails in de modal (alleen de "Pagina N"-placeholders en een gele "Thumbnails niet geladen"-melding).

New feature

Losse opdrachten kunnen nu direct gefactureerd worden vanuit het CRM

Een factuur kon alleen aan een Klant gestuurd worden. Voor eenmalige opdrachten aan een lead, een oud-klant, of iemand uit je CRM die nog geen klantrelatie heeft moest je eerst een nepklant aanmaken — en die bleef daarna in je klantenlijst staan.

Bug fix

Stuur-naar-Metricool modal liet bij grote designs geen thumbnails zien

Bij een design met 20 pagina’s laadden de thumbnails prima, maar bij 246 pagina’s viel de export om met "Canva export timeout (60s)". De helper stuurde alle pagina’s naar Canva in één gigantische export-job en wachtte daarna 60 seconden — niet genoeg voor zo’n grote job. De modal opende dan zonder thumbnails (alleen de "Pagina N"-placeholders).

Polish

Tandwiel-icoon deed twee dingen tegelijk: beheer voor admin, voorkeuren voor de rest

In de admin-versie opent het tandwiel het beheer-popover en staat Voorkeuren op de sliders-knop ernaast. Maar voor een MANAGER/SMM/setter was de sliders-knop verborgen en opende hetzelfde tandwiel-icoon ineens de Voorkeuren-sidebar. Twee compleet verschillende functies op één icoon, afhankelijk van wie kijkt — verwarrend.

New feature

Publieke navigatie + boekings-flow nu volledig meertalig

i18n-coverage-audit gaf 15 "Hoog"-prio surfaces aan die nog hardcoded NL waren: de top-nav (incl. prijzen-link die altijd naar /prijzen ging), de booking-pagina (weekdagen, maanden, metadata, router-flow), het review-portaal voor klant-feedback, en auth-foutmeldingen bij forgot/reset/MFA. EN/DE/FR-bezoekers zagen daardoor Nederlandse tekst op centrale pagina's.

Polish

Veld toonde pas op na klant-keuze — nu altijd in beeld

Het nieuwe "Contactpersoon (optioneel)"-veld verscheen pas zodra je een klant had gekozen, wat verwarrend overkwam: bij een lege factuur leek de feature er niet te zijn.

New feature

E-mails respecteren nu User.preferredLanguage — geen NL-flash meer voor EN/DE/FR-klanten

i18n-coverage-audit gaf transactional-email een score van 18/100. Alleen 4 contract-mails waren meertalig; alle andere mails (auth, billing, trial, winback, cookie-expiry, meeting, newsletter, partner) waren 100% hardcoded NL. Engelse klant die wachtwoord vergat kreeg Nederlandse mail. Welkomstmail (eerste indruk) altijd NL. Bevestiging meeting altijd NL ook al boekte een Engelse bezoeker.

Bug fix

Bedrijfspagina toonde "Log dit account in" terwijl de tool gewoon verbonden was

Op de LinkedIn-tools voor bedrijfspagina (zoals Bedrijfspagina-volgers uitnodigen) bleef de gele "Log dit account in via de Senly Connector"-balk staan, ook al stond de koppeling op groen-Verbonden met succesvolle laatste run. Oorzaak: de tool eiste een specifieke accountnaam, en als die nog op de standaardplaceholder "LinkedIn account" stond werd de tool tegengehouden — terwijl bij een bedrijfspagina de pagina-URL (linkedin.com/company/...) de pagina al uniek identificeert.

Polish

Tegels in het tandwiel-popover voor restricted rollen waren dood

Een teamlid met een beperkende custom-rol (bv. "Social Media Manager") zag in het tandwiel-popover alle beheer-tegels staan — Gebruikers, Rollen, Integraties, Webhooks, etc. — maar kon ze niet openen. Het programma leek dan kapot ("klikken doet niets"). Onder water bestond de hele permission-catalog in lib/role-permissions.ts wel, maar hij werd nergens gebruikt; en custom-rollen op een ADMIN-account werden zelfs door de helper genegeerd ("ADMIN mag alles").

New feature

T.a.v.-veld toegevoegd aan het factuur-formulier

Een factuur ging altijd naar het algemene klant-emailadres en stond op naam van het bedrijf zelf — bij grotere klanten waar je een specifieke contactpersoon hebt was dat niet handig.

Polish

Geen visuele breuk meer tussen hero en feed

Op /changelog was de bovenkant (hero) mooi teal-getint, maar zodra je voorbij de filter-balk scrolde sprong de achtergrond naar een vlak donkergrijs blok. Dat gaf een harde overgang en haalde de huisstijl-sfeer weg van waar je het meest leest.

New feature

12 branded stickers om snel mee te reageren in de chat

Naast de paperclip-knop staat nu een smiley-knop die een sticker-picker opent. Twee tabbladen: "Senly" (6 mascotte-stickers: hoi, koffiepauze, gefeliciteerd, idee, launch, love) en "Reacties" (6 reactie-stickers: klaar, vuur, feest, applaus, top, trofee). Klik op een sticker = direct verzonden als chat-bericht — geen tekst nodig, geen extra klikken. De ontvanger ziet hem groot in de bubble.

Bug fix

Overzicht-pagina toonde lagere jaarwinst dan Financieel — verschil van duizenden euros

Op de Eigenaar-overzicht stond bv. €70.628 jaarwinst, terwijl Financieel €75.358 toonde. Reden: de Overzicht-pagina gaf geen tenant-ID mee bij het ophalen van de handmatige maandbedragen, waardoor die voor alle 12 maanden werden genegeerd en de pagina terugviel op de standaardprojectie. Stond je 5 maanden handmatig hoger of lager dan de projectie, dan zag je dat verschil terug in het overzicht.

Polish

Het admin-paneel heet nu "Instellingen", het persoonlijke paneel "Voorkeuren"

Na het wisselen van de sliders- en tandwiel-knop kwamen de oude paneeltitels niet meer overeen met de inhoud — "Beheer" stond boven wat eigenlijk de centrale instellingen waren, en "Instellingen" boven wat puur persoonlijke voorkeuren zijn.

Polish

Sliders opent nu voorkeuren, tandwiel opent admin-shortcuts

Klik op de schuifjes-knop rechtsboven om je voorkeuren (thema, geluid, account) te openen, en klik op het tandwiel voor de admin-shortcuts (Gebruikers, Integraties, SaaS, Huisstijl). De support-badge zit nu mee op het tandwiel.

New feature

Google, Outlook en Apple iCloud krijgen dezelfde "Heraankoppelen nodig"-flow als Zoom

De automatische detectie van een verlopen koppeling werkte alleen voor Zoom — bij Google, Outlook en Apple iCloud kreeg je nog een rauwe API-fout en bleef de kaart "Verbonden" tonen, wat verwarrend was bij een doodgelopen refresh-token.

New feature

Dagelijkse achtergrond-check op alle agenda-koppelingen

Verlopen koppelingen werden pas zichtbaar zodra een klant probeerde te boeken — dan was het al te laat. Een dood Google-token na 6 maanden inactiviteit kon weken onopgemerkt blijven.

Bug fix

Zoom-kaart bleef "Verbonden" tonen terwijl de koppeling al lang stuk was

De Integraties-tab zei "Verbonden" met een groen bolletje, terwijl de Zoom-API bij elke boeking een "Access token is expired" (401)-fout teruggaf. De rauwe API-fout stond wel in kleine rode tekst onderaan, maar zag eruit als technische ruis — niet als een duidelijk signaal "actie nodig".

New feature

Automatische token-refresh + één retry bij 401

Vóór elke Zoom-API call vernieuwen we de access-token als die binnen 60 seconden verloopt. Krijgen we toch nog een 401 (Zoom kan dat soms onverwachts doen), forceren we één extra refresh-poging vóórdat we de koppeling als kapot markeren. Daardoor blijven werkende koppelingen vanzelf bij — alleen écht verlopen refresh-tokens vragen om handmatig opnieuw koppelen.

Polish

Health check / Klanten / Team / Systeem-bar wordt een gefrost glas-paneel

Op de Statistieken-pagina bleef de tab-bar (Health check, Klanten, Team, Systeem) wel sticky bovenaan staan tijdens scrollen, maar had geen achtergrond. Daardoor schemerden onderliggende kopjes zoals "Inactiviteits-risico" en lijsten dwars door de tabs heen — visueel lastig te lezen.

Bug fix

iCloud-events stonden 2 uur te laat in de Senly-kalender

Een meeting die in je Apple-agenda om 10:00 stond, verscheen in Senly Meetings als 12:00. Reden: onze iCal-parser interpreteerde élke tijd als UTC en negeerde de tijdzone-info (TZID) die Apple meestuurt. In de Nederlandse zomertijd (UTC+2) leverde dat een vaste 2-uur shift op — voor weergave én voor het detecteren van bezette slots tijdens boekingen.

Bug fix

Gele "Log dit account in"-balk blijft niet meer staan na een geslaagde koppeling

Op de LinkedIn-, Facebook- en TikTok-tool-pagina's bleef de gele waarschuwing "Log dit account in via de Senly Connector" staan, zelfs nadat je net een succesvolle koppeling had voltooid (met de groene "Verbonden!"-pop-up). Reden: de pagina controleerde nog op een legacy-bestand op de server dat bij elke nieuwe deploy verdween, terwijl de echte koppel-status (versleutelde cookies + tijdstempel) gewoon in de database stond.

Bug fix

Witte tekst op gele balk → donker-amber

Op de Facebook- en LinkedIn-automatisering verscheen een geel waarschuwingsvak (bv. "Log dit account in via de Senly Connector") met witte tekst die in de lichte modus onleesbaar was.

New feature

Notitie toevoegen, vastpinnen of verwijderen → activiteit-log

Als iemand een notitie of reminder toevoegde aan een klant verdween dat in stilte — er was geen manier om later te zien wie wanneer iets had genoteerd, los van de notitie zelf.

v0.31
Monday, 15 June 2026

i18n wave I + L: 5 kritieke gaten dicht (publieke surfaces in juiste taal) + Vitest-suite + CLAUDE.md-regels, Notities-kaartjes: witruimte boven de tekst weg & 11 meer

Bug fix

Pricing-pagina: EN/DE/FR-bezoekers krijgen nu de gelokaliseerde variant

/prijzen was 100% Nederlands, ook al heeft Senly al gelokaliseerde routes (/en/pricing, /de/preise, /fr/tarifs). Een Engelse bezoeker die op "Prijzen" klikte belandde in een NL-pagina.

Bug fix

Signup-success pagina nu in 4 talen

Na succesvolle signup zag een Engelse klant "14 dagen gratis proberen — gestart!", "Welkom bij Senly!", "Naar mijn portaal" — eerste indruk was Nederlands.

Bug fix

BookingIndex (/boek/[user]) nu meertalig

De host-landing van boekingen ("Plan een meeting", "Kies een meeting type", "Laden…", "Powered by", "Niet beschikbaar", locationLabel-map) was hardcoded NL — klanten van internationale Senly-bureaus zagen Nederlands.

Bug fix

Password-reset + welkomstmail in taal van ontvanger

Beide mails waren 100% hardcoded NL. Een Engelse gebruiker die "wachtwoord vergeten" klikte kreeg een Nederlandse mail.

New feature

Signup slaat nu de browser-taal op (cross-device stabiel)

Bij signup werd User.preferredLanguage niet ingesteld — Engelse klant die op de telefoon (Nederlandse Safari per ongeluk) inlogde kreeg ineens NL. Cross-device-ervaring was onstabiel.

Infra

Vitest test-suite + CLAUDE.md anti-recurrence-regel toegevoegd

We hebben 300+ files aangeraakt vandaag zonder enige regressie-test. De Wave H re-audit liet zien dat fixes regressies kunnen introduceren — vooral in defensieve code (regex, rate-limits, validators).

Polish

Strakkere reminder-notities

In het nieuwe Notities-blok zat een grote lege ruimte boven de tekst (waar normaal een categorie-label staat).

New feature

Apart Notities-blok voor content-reminders

Er was alleen "Notities & wensen" — alles ging als AI-context mee, geen plek voor losse reminders.

Bug fix

Vaste hoogte voor de auto-roterende platform-slider

Op mobiel sprong de hele sectie onder de feature-slider omhoog of omlaag als de slide auto-roteerde. Sommige slides (bv. Meetings & Agenda) hadden een langere titel of bullet-beschrijvingen dan andere (bv. Content Kalender), waardoor de container telkens kromp of groeide.

New feature

Upload-knoppen voor profielfoto, banner-foto en achtergrond-foto

Voor elke foto moest je eerst de afbeelding ergens hosten en de URL plakken. Voor klanten en bureau-medewerkers was dat een extra stap die best omslachtig kon zijn.

New feature

Drie nieuwe header-layouts plus 4 foto-vormen

De Hero- en Cutout-layouts deden eigenlijk hetzelfde (allebei een banner-foto), en er ontbrak nog een Shape-layout met speciale foto-vormen — een functie die je bij Linktree alleen met Pro krijgt.

New feature

Sociale media iconen-rij + 5 nieuwe design-opties

Onze link-in-bio tool miste een aantal gratis-Linktree-features waar gebruikers echt iets aan hebben.

Polish

Iconen voor UTM-bouwer, limiet-checker, hashtag-bibliotheek, niche-spiekboeken, contrast-checker en link-in-bio

De 6 nieuwe tools op de tools-pagina toonden een lege grijze cirkel in plaats van een icoon.

New feature

Link-in-bio: volledig design-control zoals Linktree, maar gratis

De link-in-bio tool had alleen basis-opties: titel, bio, knop-kleur en achtergrond. Voor een professionele micro-landing was dat te beperkt.

New feature

Markt-/doelland-selector op de niche-cheatsheets

De niche-spiekboeken toonden één hashtag-bundel en één tijdvenster per niche — maar Spanjaarden eten pas om 21:30, Duitsers zoeken op #essengehen en Britten zoeken op #britishfood. De cheatsheet was zo lekker voor de Nederlandse markt maar te onspecifiek voor andere landen.

New feature

UTM-link bouwer · Karakter- en limiet-checker · Hashtag-bibliotheek · Niche-spiekboeken · Kleur-contrast checker · Link-in-bio pagina

Een serie dagelijks gebruikte tools die nog ontbraken in de Senly-suite. Allemaal nul AI-quota.

Polish

Cijfers op de financieel-overzicht-cards waren te licht en misten visuele anchor

KpiTile gebruikte hardcoded inline-style #6ee7b7 / #fca5a5 voor positief/negatief, dat te licht uitsloeg op de witte cards (slecht contrast, dunne uitstraling). En de hoofd-financieel-cards (Maandinkomsten/Maandkosten/Maandwinst) misten het linker accent-streepje dat de facturatie-tab-KPIs wél hebben — niet consistent.

Bug fix

Raw vertaalsleutels op review-, booking-, MFA- en abonnement-pagina nu echt vertaald

Audit vond ~336 verdachte i18n-keys; na dedup-check tegen translations.ts bleven 39 echt ontbrekende keys over die in de UI als rauwe sleutel-tekst werden getoond (bv. "post_status_labels_r6_draft" op de review-pagina, "booking_status_labels_r6_confirmed" op /b/manage, "mfa_status_enabled" in het MFA-paneel, "abon_winback_banner" op abonnement-page).

Polish

Diverse NL/EN tekstfouten gefixt en ontbrekende incident-vertalingen toegevoegd

Audit vond 53 i18n-issues. In de bezwaren-bibliotheek stond letterlijk het Engelse "no" in een Nederlandse zin en de tekst "reads vat nooit" was kapot. Op /statistieken kregen EN/DE/FR-tenants Nederlandse maand-labels ("mrt", "okt"). Incident-status op /status werd in alle talen als ruwe Engelse enum ("investigating") getoond. Een aria-label voor de AI-Team-sidebar viel terug op de letterlijke sleutel-naam.

v0.30
Sunday, 14 June 2026

Status page: outage tooltips now always readable

Polish

Tooltips on senly.io/status are now light and easy to read

The tooltips on the uptime bars (outages + timestamps) appeared dark on a light status page, making the text hard to read.

Polish

Onnodige extra ruimte boven de KPI-cards weg

Op de Per klant-tab stonden de vier KPI-cards (Maandinkomsten, Maandkosten, Maandwinst, Jaarwinst) een stuk lager dan op de Overzicht-tab — er zat overbodige witruimte tussen de tab-balk en de cards.

Polish

Tooltip past zich aan het thema aan

De vorige fix maakte de tooltip vast donker — ook in light mode. Dat zag er niet goed uit.

Polish

Overbodige “Per klant”-titel weggehaald

In de Per klant-tab stond onder de tab-balk nog een tweede grote “Per klant”-titel met daaronder een uitlegregel. Dat was dubbel: de tab-naam zegt al waar je bent en de tabel is zelf duidelijk genoeg.

Polish

Tooltip op de cashflow-grafiek

De tooltip bij de cashflow-grafiek pakte de pagina-tokens over, waardoor in bepaalde combinaties donkere tekst op een donker fond verscheen — slecht leesbaar.

Polish

Laatste delen van Facturatie vertaald

De periodieke-facturen-manager en de mail-voorbeeld-modal stonden nog in het Nederlands.

Polish

Editor-modals en instellingen-modal volgen nu je portaaltaal

De factuur-editor, offerte-editor en de facturatie-instellingen waren nog alleen in het Nederlands — onhandig als je in EN/DE/FR werkt.

Polish

Het Facturatie-dashboard spreekt nu vier talen

Het Facturatie-dashboard (KPI’s, cashflow, AI-inzichten, Facturen- en Offertes-lijst) was alleen in het Nederlands beschikbaar — onhandig voor bureaus met internationale gebruikers of een ander interface-voorkeur.

Polish

Actieve filter-pill als zachte mint-chip

De actieve filter-knop (bij Facturen, Offertes en Bank) is een rustige, premium chip geworden: een zacht mint-getinte vulling met een subtiele teal-rand en donker-teal tekst. Inactieve knoppen krijgen een kalme teal-getinte hover. Past zich automatisch aan light én dark mode aan.

New feature

Korting per factuurregel

Je kon geen korting op een regel geven — alleen de volle prijs.

New feature

E-factuur (UBL) exporteren

Je factuur was alleen een PDF — niet machine-leesbaar voor de boekhouder of (straks verplichte) e-facturatie.

New feature

Facturenlijst exporteren naar CSV

Je facturen overzetten naar je boekhouder of Excel moest handmatig.

New feature

Voorbeeld van de e-mail die je klant ontvangt

Je kon de tekst van je facturen, herinneringen en offertes wel instellen, maar niet zien hoe de uiteindelijke e-mail er bij de klant uitziet vóór je hem verstuurt.

New feature

Bankafschrift importeren + automatische reconciliatie

Betalingen die binnenkwamen op je rekening moest je handmatig terugzoeken en per factuur op “betaald” zetten — foutgevoelig en tijdrovend.

New feature

Deelbetalingen registreren met automatisch restbedrag

Een factuur kon alleen volledig op “betaald” of helemaal open staan — een klant die in termijnen of deels betaalde, kon je niet netjes bijhouden.

New feature

Gratis SEPA-betaal-QR op factuur, PDF en in de preview

Je klant moest IBAN, bedrag en factuurnummer handmatig overtypen om te betalen — foutgevoelig en omslachtig.

New feature

Optioneel: online betalen met iDEAL of creditcard (Mollie / Stripe)

Voor wie écht online wil laten afrekenen en facturen automatisch op “betaald” wil laten springen, was er nog geen koppeling.

New feature

Deelbaar klantportaal per klant

Je klant kreeg losse links per factuur en offerte; er was geen overzichtspagina waar hij alles bij elkaar kon terugvinden en betalen.

New feature

AI-debiteurenbeheer in het Facturatie-dashboard

Je zag wel je openstaande facturen, maar niet wie het grootste betaalrisico vormt, wat er de komende maanden binnenkomt, of welke opvolgactie als eerste loont.

New feature

Nieuw Facturatie-dashboard onder Financieel

De cijfers achter je facturen en offertes stonden verspreid: je zag wel losse facturen, maar geen totaalbeeld van wat er binnenkomt, openstaat of te laat is.

New feature

Maak offertes, laat klanten ze online tekenen en zet ze met één klik om naar een factuur

Offertes maakte je buiten Senly, en akkoord kreeg je los per mail — zonder duidelijke status of een nette weg naar de factuur.

New feature

Stel een factuur in op een interval en Senly maakt hem voortaan zelf aan

Voor klanten met een vast maandbedrag moest je elke periode handmatig dezelfde factuur opnieuw maken.

New feature

Herinneringen in drie trappen — handmatig of volautomatisch vanuit je eigen mailbox

Achterstallige facturen najagen was handwerk: zelf bijhouden wie te laat is en losse herinneringsmails sturen.

Polish

Live preview toont de factuur op ware proporties

Het voorbeeld werd in de smalle helft van de editor geperst, waardoor het adres lelijk afbrak en de factuur niet op echte verhoudingen stond.

New feature

Crediteren, debetnota’s en een archief voor je facturen

Een verstuurde factuur corrigeren of crediteren kon nog niet, en de lijst liep vol met afgeronde facturen.

New feature

Volledige facturatie — concept, sjablonen, live preview, PDF en versturen vanaf je eigen mailbox

Bureaus moesten facturen in een losse boekhoudtool maken. Er was geen manier om vanuit Senly — waar de klant, het tarief en de bedrijfsgegevens al staan — een factuur te sturen.

New feature

Hover/tik op een balkje → nette info-kaart i.p.v. kale browser-tooltip

De uptime-balkjes gebruikten de standaard browser-tooltip — traag, ongestyled en lelijk.

Bug fix

"Plan een demo"-knop ging naar /contact i.p.v. de demo-agenda

De knop in de "Hulp nodig?"-kaart op het Launchpad opent nu direct de Senly demo-boekingspagina in een nieuw tabblad.

Bug fix

"status_subscribe_button_submit" op de knop i.p.v. echte tekst

Het inschrijf-formulier vroeg om de vertaalsleutels status_subscribe_button_submit en status_subscribe_button_sending, maar die ontbraken in de vertalingen — alleen een ongebruikte gecombineerde sleutel bestond. Daardoor stond de letterlijke sleutelnaam op de knop.

New feature

Hover over een rood/oranje balkje → exacte storingstijden

De tooltip toonde alleen de datum en een ruw aantal "failures" — je kon niet zien wanneer op de dag de storing was of hoe lang die duurde.

Bug fix

Rode balkjes verdwenen na een paar dagen weer naar groen

De uptime-balkjes laadden de laatste 3000 checks. Omdat de monitor elke 2 minuten pingt (~2.150 checks/dag), was dat maar ~1,4 dag aan historie. Alles ouder viel terug op "geen data" en werd groen gerenderd — dus een echte storing kleurde een balkje wel rood, maar binnen een paar dagen werd het weer groen en leek het alsof er nooit iets was geweest.

New feature

Score-trend per maand op de Instagram-grafiek

De grafiek op het Instagram-profielcheck-dashboard toonde "Checks per dag" — niet erg informatief, omdat het aantal checks niets zegt over hoe goed je profiel is.

New feature

NL / EN / DE / FR voor de hele tool-suite

De luxe dashboards van Facebook, LinkedIn, TikTok en Instagram en de platform-kaarten op de Content-tab stonden nog volledig in het Nederlands. Wisselde je naar Duits/Engels/Frans, dan zag je een mix van talen.

Bug fix

Pipeline-funnel telt nu alleen open deals

De funnel telde ook gewonnen/verloren/inactieve deals mee, waardoor het totaal veel hoger leek dan de Pipeline-waarde.

Polish

"Nieuwe deals per maand" hernoemd naar "Nieuwe leads per maand"

De grafiek telt álle aangemaakte leads (incl. imports), wat als "deals" misleidend was.

Bug fix

Onvertaalde sleutel op de integraties-pagina opgelost

De analytics-integratiekaart toonde rauwe code-sleutels (intc_analytics_label) i.p.v. een naam.

Polish

Strakkere tab-iconen op de LinkedIn-tool

De iconen op de LinkedIn-tabs (loep, hartje, oog, etc.) hadden een dik, gradient-blokje eromheen dat speels en niet professioneel oogde.

New feature

Instagram krijgt hetzelfde luxe dashboard

De Instagram-tool toonde alleen een AI-profielcheck-knop, terwijl Facebook, LinkedIn en TikTok al een rijk dashboard hadden.

Polish

Wit vinkje, lux trefwoord-labels en nette limiet-tekst

Bij de "Klaar"-melding was het vinkje zwart op een donkere cirkel (slecht zichtbaar), de teal trefwoord-labels oogden wat zwaar/blauwig, en de limiet-tekst ("~50 uitnodigingen per week …") liep buiten het kader.

New feature

Volwaardig dashboard voor de TikTok-groeitool

De TikTok-tool toonde alleen een kale regel met cijfers en twee knoppen, terwijl Facebook en LinkedIn al een rijk dashboard hadden.

Polish

Strakker trefwoorden-veld bij de connectie-campagne

Het invoerveld voor trefwoorden zag er grauw/grijs uit in de lichte modus (het was voor de donkere modus ontworpen) en oogde gedateerd.

New feature

Meerdere berichten instellen (max 15)

Bij post-engagement en welkomstberichten kon je weliswaar meerdere teksten op aparte regels zetten, maar het was niet duidelijk hoeveel er meededen en de limiet lag op 10.

Bug fix

Dag- en waarde-labels op de prestatiegrafiek

In de lichte modus ontbraken bij de prestatiegrafiek (Facebook én LinkedIn) de labels langs de assen — de dagen onderaan en de getallen langs de zijkant waren wit op een witte achtergrond.

Bug fix

Geen witte tekst op witte achtergrond meer

In de lichte modus waren teksten in het LinkedIn-tool-paneel (zoals "Deze week verstuurd" en de live-statusregels) wit op een witte achtergrond en dus onleesbaar. De ingebedde tool-knop gebruikte kleuren die alleen voor het oude, donkere paneel bedoeld waren.

Bug fix

Lege afgebroken runs vervuilen de activiteit niet meer

Bij de Facebook-tool stond de live-activiteit na verloop van tijd vol met "Run gestopt · 0 uitnodigingen". Als je wegnavigeerde en terugkwam, leken al je runs op 0 te staan. Oorzaak: wanneer het automatiserings-tabblad werd gesloten, schreef de extensie een lege "gestopt"-melding (0 uitnodigingen) weg die je echte runs uit de lijst verdrong.

Bug fix

Aantallen tellen niet meer dubbel of vallen terug na een run

Op Stop kon dezelfde run twee keer geteld worden (een keer door het portaal, een keer door het gesloten tabblad), en vlak na een run viel "Totaal" soms even terug naar de oude waarde.

New feature

Volwaardig dashboard per LinkedIn-tool

De LinkedIn-automatiseringen toonden alleen een kale startknop, terwijl de Facebook-tool al een rijk dashboard had met statistieken, een grafiek en een live-activiteitenpaneel.

Polish

Alleen de gestarte knop toont "Bezig…"

Als je één van de twee scan-knoppen klikte, werden ze allebei grijs — alsof je ze allebei had aangeklikt.

Polish

Duidelijk welke run-knop je aanklikt

Beide startknoppen ("Volledige scan" en "Scan nieuwste posts") hadden dezelfde teal-glow, waardoor ze er allebei "actief" uitzagen — en bij het starten werden beide uitgeschakeld zonder zichtbaar verschil, alsof je ze allebei aanklikte.

Bug fix

Pauze na 40 uitnodigingen werkt nu cumulatief

De 30-seconden-pauze na 40 uitnodigingen werd per post geteld en reset bij elke nieuwe post. Bij uitnodigingen verspreid over meerdere posts (bv. 10 per post) werd de drempel van 40 nooit bereikt — dan pauzeerde de tool dus niet, terwijl dat juist het rate-limit-risico verlaagt.

Bug fix

Blijft bij jouw post — ook bij reels

Als een eigen post een reel was, opende de tool de reel-weergave en scrolde daarin door naar de vólgende reel (van een ander account) en likete daar de reacties.

v0.29
Saturday, 13 June 2026

Facebook tool: invitations are always logged, even with reactions liking on

Bug fix

Sent invitations are no longer lost in Activities

With 'Like reactions' on, the run could encounter an error along the way, causing the final report to log 0 invitations — while invitations had indeed been sent. This did not happen with the option off.

Bug fix

Liket niet meer per ongeluk reacties van een andere post

Na het liken van de reacties scrolde de tool soms door in de post-detail naar de vólgende post (zelfs van een ander account) en likete daar de reacties.

New feature

Inzicht: aantal gelikete reacties

Met "Reacties liken" aan houdt de tool nu bij hoeveel reacties er in totaal geliket zijn — zichtbaar op de "Reacties liken"-kaart ("X reacties geliket") en per run in de logs.

Bug fix

Geen "0 posts verwerkt" meer in de beheer-weergave

Facebook toont een pagina-admin soms de "Pagina beheren"-weergave i.p.v. de gewone feed. Daar zit een post in een andere structuur (een gewone <div> i.p.v. een [role="article"]), waardoor de tool geen posts vond en dus geen likers uitnodigde.

Bug fix

"Reacties liken" liket nu de reacties, niet de post zelf

De optie likete soms de post in plaats van de reacties eronder, omdat de comment-like-knoppen op de feed niet uitgeklapt stonden.

Bug fix

Gestopte runs verliezen hun uitnodigingen niet meer

Als je een run stopte (of de server tussendoor herstartte), werd de run gelogd als "0 uitnodigingen" — de al verstuurde uitnodigingen telden niet mee in Totaal/Deze week.

Polish

Stat-kaarten tellen mee per verstuurde uitnodiging

Tijdens een actieve run liep alleen de run-banner mee; de kaarten "Totaal uitnodigingen" en "Deze week verstuurd" bleven op hun oude waarde staan tot de run klaar was.

Polish

Volgorde omgedraaid: insights eerst, daarna uitnodigen

De tool nodigde eerst de likers uit en navigeerde dan naar de Audience-insights om het volger-aantal af te lezen — waardoor de tab daar bleef hangen i.p.v. op je pagina.

Polish

RAM besparen logt nu hoeveel posts het uit de DOM haalt

Met RAM besparen aan logt de tool nu per opgeruimde post de DOM-grootte (artikelen vóór→ná) en aan het eind een totaal ("N verwerkte posts uit de DOM verwijderd"). Zo is zwart-op-wit zichtbaar dat de geheugen-optimalisatie echt werkt i.p.v. een stille toggle.

Bug fix

Automatisch reageren plaatst nu echt

De reactie-knop en verzendknop van LinkedIn heten allebei "Commentaar" (zonder aria-label), waardoor de tool de reactie wel typte maar niet plaatste.

Bug fix

Onthouden posts overleven nu de volgende run

De cache van verwerkte posts stond in localStorage op het facebook.com-domein. Omdat elke run een nieuwe tab opent, overleefde die cache niet betrouwbaar naar de volgende run — een tweede run verwerkte dezelfde posts gewoon opnieuw (live getest en bevestigd).

Bug fix

RAM besparen werkt nu echt (verwijderde verwerkte posts uit de DOM)

De "RAM besparen"-toggle deed helemaal niets — de instelling werd nergens in de extensie gebruikt.

Bug fix

"Verwerkte posts onthouden": echte teller + werkende Reset

De "X onthouden"-teller stond altijd op 0 en de Reset-knop deed niets — de cache leeft op het facebook.com-domein, terwijl de teller/knop op het portaal-domein draaide.

Polish

Snelle scan merkbaar sneller

Snelle scan geeft nu duidelijk eerder op per post (2 lege scrolls i.p.v. 5), terwijl de normale scan grondiger werd (6) — zo is het verschil echt voelbaar.

New feature

Exact volger-aantal (112.102) i.p.v. FB's afronding (112 d.)

Facebook toont op de pagina alleen het afgeronde aantal ("112 d."), waardoor de tool nooit het exacte aantal kon laten zien en kleine groei onmeetbaar was. Het exacte getal staat alleen in het professional dashboard.

New feature

"Nieuwe volgers sinds vorige run" wordt nu exact gemeten

Doordat elk run het exacte totaal opslaat, is de delta tussen twee runs nu precies (bv. +48 i.p.v. onmeetbaar). Bij exacte data tonen we ook 0 of een afname eerlijk; alleen zonder exacte meting valt het terug op "geen meetbare wijziging".

Bug fix

Post-engagement liket nu echt

De tool vond geen posts/like-knoppen omdat LinkedIn gehashte class-namen + andere labels gebruikt.

New feature

Welkomstbericht herzien

Verzamelt connecties die nog geen bericht kregen en stuurt per persoon een welkomstbericht via de berichten-pagina (met {voornaam}).

Polish

Event-deelnemers en groep-leden verwijderd

Deze twee tools zijn uit de LinkedIn-studio gehaald. Over blijven: trefwoorden-campagne, post-engagement, profiel-bezoeken en bedrijfspagina-volgers.

Polish

"Nieuwe volgers" toont nu de groei sinds de vorige run

De kaart toonde "deze week" en kon een nep-getal laten zien. Omdat Facebook grote volger-aantallen afrondt op duizendtallen (de pagina toont "112 d." i.p.v. 112.104), is een delta op afgeronde cijfers niet betrouwbaar — kleine groei is simpelweg niet te meten.

Bug fix

Pagina-volgers toont nu het echte aantal (112.000 i.p.v. 112)

Facebook toont grote volger-aantallen afgekort als "112 d. volgers" (112 duizend). De tool las daar letterlijk "112" uit, waardoor de Pagina-volgers-stat duizend keer te laag stond.

Bug fix

Geen valse "+111.888 nieuwe volgers" na de fix

Doordat oude runs het foute lage aantal (112) hadden opgeslagen en de nieuwe run het juiste (112.000), oogde het verschil als een onmogelijke groeispike van +111.888 deze week.

Polish

Iconen per tool-tab + duidelijke verbonden-status

Elke LinkedIn-tool-tab heeft nu een eigen teal icoon en een groene status-dot bij "verbonden". De accountnaam toont het profieltype als nette pill met een instellingen-icoon ernaast.

Polish

Gedeelde-posts acties verwijderd, nieuwe optie "Reacties liken"

De gedeelde-posts acties konden op de normale pagina-feed niet betrouwbaar werken (Facebook toont reshares alleen in Meta Business) en raakten per ongeluk eigen posts aan.

Polish

Instagram / Facebook / LinkedIn / TikTok-cards krijgen eigen achtergrond, gekleurde glow en gradient-band

De vier "Tools openen"-cards hadden `background: var(--card-bg)` — maar die CSS-variabele was nergens in de codebase gedefinieerd. Resultaat: een transparante card, waardoor je het page-grid dwars door de kaart heen zag. Daarnaast oogden ze visueel mager t.o.v. de rest van de portal.

Polish

Tabs en invoervelden van de nieuwe LinkedIn-tools netjes in light mode

De nieuwe tool-tabs en de velden voor trefwoorden/templates/URL waren in light mode vaag of grijs (wit-op-wit tekst, donkere velden op een witte kaart).

Polish

Run-knoppen vereenvoudigd tot één "Starten"-blok

De "meerdere pagina's"-knoppen waren niet functioneel.

New feature

Cosmetische onderdelen vervangen door echte werking

Een deel van de studio was nog vaste tekst (systeem-status, beste tijdstippen) of deed niets (actief-schakelaar, actieve dagen).

New feature

Echte cijfers: totaal uitnodigingen, tijdbesparing, volgers, live-activiteit

De stats in de Facebook-studio waren voorbeeld-getallen (12.840, "Lisa uit Amsterdam"). Niet je echte data.

Bug fix

Dagteller + activiteiten-log worden nu correct bijgewerkt na een run

De nieuwe studio stuurde de voortgang/afronding niet door naar de server. Nu wel — dagteller, laatste-run en activiteitenlog kloppen weer.

New feature

Facebook-tool draait nu als volledige studio met alle bot-opties

De Facebook-tool was een kleine knop in een card — niet vergelijkbaar met een echte automatiseringsbot waar je een hele instellings-pagina hebt voor pauzes, snelle scan, verwerkte posts onthouden, gedeelde-posts acties en run-modi (1 pagina / meerdere pagina’s).

New feature

Post-engagement: automatisch liken + reageren

Zichtbaarheid op LinkedIn groeien kostte handmatig liken/reageren.

New feature

Welkomstbericht na nieuwe connectie

Stuurt automatisch een gepersonaliseerd bericht (template met {voornaam}) naar recente connecties die nog geen bericht kregen.

New feature

Profiel-bezoeken (view boost)

Bezoekt profielen uit een trefwoorden-zoekopdracht — veel mensen kijken terug. Zacht, laagdrempelig, geen connectie-quota.

New feature

Event-deelnemers en groep-leden connecten

Twee tools die connectieverzoeken sturen naar deelnemers van een LinkedIn-event of leden van een groep. Tellen mee in LinkedIn's wekelijkse connectie-limiet.

Polish

Ruimte tussen "Start groeitool" en "Doelaccounts beheren"

In de TikTok-studio plakten de twee knoppen aan elkaar zonder tussenruimte.

Bug fix

Pop-ups binnen de tool-studio bleven in de card hangen

In de TikTok-studio verscheen het "Doelaccounts beheren"-venster half over de card en werd het onderaan afgesneden, in plaats van netjes gecentreerd over het scherm. Zelfde probleem gold voor de Instagram-profielcheck-resultaten.

Polish

LinkedIn-engine (trefwoorden-vak, run-knop, voortgang) in teal high-tech look

De binnenkant van de tools erfde nog de oude blauw/lichte styling, wat botste met de nieuwe donkere studio.

New feature

Premium full-screen tool-studio per platform (start met LinkedIn)

De tools openden in een nieuw tabblad binnen het normale dashboard (met zijbalk en profielbalk), wat krap en afleidend was.

Polish

Verbonden-status en opnieuw verbinden staan nu op de tool-pagina

De vier platform-cards waren rommelig geworden doordat de account-status en reconnect-knoppen er direct in stonden.

Bug fix

Tellers op Verlopen / Vandaag / Deze week / Deze maand staan niet meer foutief op 0

De vier kolommen op de homepage toonden de taken wel in de lijst, maar het cijfer rechtsboven (Verlopen 0, Vandaag 0, Deze week 0, Deze maand 0) klopte niet — vooral bij accounts met veel lokaal-aangemaakte taken (zonder GHL-koppeling).

Polish

Eén card per platform met verbonden-status, opnieuw verbinden en tools

Platformen stond dubbel: brede per-account cards bovenaan en daaronder nog eens vier automatiserings-cards met dezelfde platforms. Verwarrend en rommelig.

New feature

Automatiserings-tools draaien nu op een eigen pagina per platform

De groei-tools (Instagram-profielcheck, Facebook-likers uitnodigen, LinkedIn zoek+uitnodigen, LinkedIn bedrijfspagina-volgers, TikTok-groeitool) zaten in de smalle platform-cards op de Content-tab. Daardoor was er weinig ruimte voor instellingen en stond alles door elkaar.

New feature

Nieuwe sectie "Platform-automatiseringen" onder Platformen

De groei-tools per platform (Instagram-profielcheck, Facebook-likers uitnodigen, LinkedIn-connectietool, TikTok-groeitool) zaten verspreid in de platform-cards, zonder centraal overzicht van wat er per platform mogelijk is.

v0.28
Friday, 12 June 2026

Boekingspagina: agenda-blokkades vroeg op de dag werken nu wél, Boekingssite: apart favicon naast het logo & 7 meer

Bug fix

Slots-route berekent dayStart in host-timezone (was UTC)

Op de boekingspagina werden externe agenda-events (iCloud, Google) vóór ~12:00 lokaal niet meer als blokkade herkend. Oorzaak: Railway draait in UTC, terwijl wekelijkse beschikbaarheid in lokale tijd staat ("10:00" = 10:00 Amsterdam). De code interpreteerde "10:00" als UTC, waardoor de cursor-grid 2 uur (zomer) verschoof t.o.v. de UTC busy-events. Een terugkerende afspraak van 10:45 lokaal blokkeerde dus geen enkele 10:30-/11:00-slot.

New feature

Eigen favicon voor de boekingspagina, los van het logo

In Meetings → Branding kon je alleen een logo instellen; datzelfde logo werd ook als browser-tab-icoon (favicon) gebruikt. Een breed liggend logo ziet er als favicon vaak rommelig uit.

New feature

In-app meldingen voor boeking, annulering, verzetting EN herinnering

Het meeting-formulier toonde een gele waarschuwing "In-app notifications is nog niet geintegreerd in Senly" terwijl in-app meldingen voor 3 van de 6 events (boeking/annulering/verzetting) al actief waren via createAppNotification. Plus reminder en followup hadden nog geen in-app channel.

Polish

Alle 6 booking-notificaties (geboekt/annulering/verplaatst/herinnering/vervolg/aanvraag) hebben nu default-tekst

Bij het aanmaken van een nieuwe meeting-type stonden alle notificatie-subjects en bodies leeg. Gebruiker moest elke template handmatig opbouwen of riskeerde lege mails naar prospects.

New feature

URL-slug-veld in meeting-type formulier (auto-gevuld uit naam, override mogelijk)

Slug van een meeting-type werd alleen auto-gegenereerd uit de naam. Wilde je een nettere of kortere URL (bv intro-call i.p.v. intro-call-senly-30-min), dan moest je je naam aanpassen.

Polish

Cookiebanner: hoger contrast en steviger glas-paneel

De cookiemelding was te transparant: boven de heldere statistieken-sectie scheen de achtergrond erdoorheen en de lichtgrijze tekst plus de "Alleen noodzakelijk"-knop waren nauwelijks leesbaar.

Polish

Voice-briefing opt-in verhuist naar Instellingen-paneel onder Voorkeuren

De opt-in banner stond bovenaan het dashboard - prominent, en bezet ruimte ook na "Niet nu". User vond dat ongelukkig.

New feature

DailyBrief widget bovenaan dashboard - opt-in voice-samenvatting per dag

Klanten openen het portaal en moeten zelf scrollen om te zien wat er voor vandaag staat (meetings, taken, deadlines). Geen warm welkom, geen prioriteit-direct-zichtbaar.

Bug fix

NL/EN/DE/FR-knop in de navbar verdween bij scrollen

De language switcher in de publieke nav (sn-lang-trigger) gebruikte var(--text) als kleur. Bij scroll wordt de nav een witte pill (.sn-nav-pill) en daarmee viel de witte tekst weg in de witte achtergrond - de pill bleef leeg.

v0.27
Thursday, 11 June 2026

Mijn-taken-badge telt sjablonen ook mee plus filtert scope-aware, Header- en chip-counts tellen de terugkerende sjablonen nu ook mee & 23 meer

Bug fix

Mijn taken (2) klopte niet meer met de inline-sjablonen

De badge naast Mijn taken bleef 2 tonen ook al stonden er meer sjablonen in de tabel. De server-counter telde alleen echte Tasks, en GET /api/tasks/recurring stuurde altijd alle sjablonen van de tenant terug, ook van collegas.

Bug fix

Open totaal en Alles-chip toonden te lage aantallen

Sinds de sjabloon-rijen inline in de takenlijst staan, klopten de counts er niet meer mee. Je zag 7 rijen in de tabel maar Alles=2 en Open totaal=2. De counts werden server-side berekend op echte Task-rijen, virtuele sjabloon-rijen werden overgeslagen.

New feature

Een klik op het sjabloon-rondje rondt deze periode af en schuift naar de volgende

Een echte taak met een herhalings-koppeling kon je afvinken, maar de virtuele sjabloon-rijen (de "echte" terugkerende rij in de lijst) hadden een grijs niet-klikbaar rondje. Je moest wachten op de cron tot de volgende periode aanrolde.

Bug fix

Recurrence instellen via potlood-knop sloeg niets op

Veranderde je in het bewerk-paneel de herhaling op een taak, dan leek de save te slagen maar het sjabloon werd nooit aangemaakt. De drawer stuurde nextDueDate naar de API, maar die verwachtte firstDueDate. POST gaf een 400, foutmelding werd weggeslikt door .catch(() => null).

New feature

Terugkerende sjablonen zijn nu bewerkbaar via dezelfde drawer

De inline-rijen van terugkerende sjablonen hadden geen edit-knop. Wijzigen van titel, frequentie of volgende uitvoerdatum kon niet zonder eerst te stoppen en opnieuw aan te maken.

Polish

Terugkerende sjablonen verschijnen als rij met een herhalings-icoon

Terugkerende taken zaten in een aparte sectie onderaan de pagina ("Terugkerende taken"). Je miste daardoor het overzicht: een sjabloon dat over 2 dagen weer aanrolt zag je niet in "Deze week" zoals andere taken.

Bug fix

Soft-deleted taken filterden niet uit de homepage-widget

Verwijderde je een taak in het takenbeheer, dan bleef hij toch staan onder "Aankomende deadlines" op de homepage, soms zelfs dubbel. De widget-queries trokken alle taken op zonder check op deletedAt, dus prullenbak-items hingen er nog tussen.

Bug fix

Standalone taken kunnen nu worden bewerkt, afgevinkt en verschijnen bij Mijn taken

Twee samenhangende bugs: 1) een persoonlijke taak (zonder klant) kon je niet afvinken of bewerken want PATCH/DELETE/bulk/restore controleerden tenant-ownership via client.tenantId, een relatie die voor klantloze taken niet bestaat, dus alle write-routes gaven 404. 2) "Mijn taken" toonde geen persoonlijke taken want er werd alleen gematcht op GHL-user-id, terwijl een admin zonder GHL-koppeling daar nooit op matched.

Bug fix

Taken zonder klant zijn nu zichtbaar in het takenbeheer

Maakte je een taak aan zonder klant te selecteren, dan kreeg je een succes-toast — maar de taak verscheen nergens in het takenbeheer. Oorzaak: de query filterde op client.tenantId, maar klantloze taken hebben geen client-relatie en vielen daardoor buiten elk tenant-scope.

New feature

Zoek vrije tekst over titel, beschrijving en klant-namen

Bij veel taken (we zien er nu 112+) was er geen manier om snel een specifieke taak te vinden — alleen filteren op datum-periode. Bij een dubbele titel kon je niet onderscheiden welke je zocht.

New feature

Persoonlijke terugkerende sjablonen

Een terugkerende taak vereiste altijd een klant. Voor wekelijkse persoonlijke routines (bv. "weekplanning maken") kon je geen sjabloon aanmaken zonder dummy-klant.

New feature

Klant is voortaan optioneel bij het aanmaken van een taak

Bij een nieuwe taak moest je verplicht minstens 1 klant aanvinken. Voor persoonlijke to-dos of intern werk was dat onlogisch — je verzon dan vaak een dummy-klant.

Bug fix

Scope-toggle en Nieuwe-taak-knop blijven zichtbaar bij Mijn taken zonder GHL-koppeling

Klikte je als admin op "Mijn taken" en had je nog geen GHL-koppeling, dan verdwenen zowel de Mijn/Alle-taken-toggle als de + Nieuwe taak-knop. Je kon dus niet meer terug naar Alle taken zonder de URL handmatig aan te passen.

New feature

Volgende-week-chip tussen Deze week en Deze maand

Tussen Deze week en Deze maand zat geen chip voor wat er volgende week op de planning staat — wilde je dat zien, dan moest je het maand-filter pakken en mentaal de huidige week eruit filteren.

Polish

Hint bij de Voltooid-sectie zegt voortaan correct uit- of inklappen

De Voltooid-balk onder de takenlijst zei altijd "klik om uit te klappen" — ook als de sectie al uitgeklapt was. Verwarrend.

Bug fix

Lokale fallback wanneer GHL niet bereikbaar is

Bij een GHL-locatie die uit staat (401 Location is not active) of een time-out kreeg je "Geen enkele taak kon worden aangemaakt." en bleef je vastzitten — terwijl het takenbeheer juist ook zonder GHL hoort te werken.

New feature

Klanten-chips in de bewerk-drawer

In het bewerk-paneel zag je alleen de primaire klant ("Gekoppeld aan Kind Medisch Centrum") ook al hing de taak aan 5 klanten. Klanten toevoegen of loskoppelen kon helemaal niet via bewerken.

New feature

Kopie-knop in elke taak-rij

Een taak die je vaker laat terugkomen of als basis voor een variant wilde gebruiken, moest je handmatig opnieuw typen: titel, beschrijving, klanten, deadline, assignee.

New feature

Multi-client taak: 1 entry in de takenlijst, gekoppeld aan alle geselecteerde klanten

Vink je 5 klanten aan voor 1 taak, dan maakte het systeem 5 losse kopieen aan. In het takenbeheer zag je dezelfde titel 5 keer staan — onhandig om af te vinken, te bewerken en te overzien.

New feature

Lokale taken — klanten zonder GHL-koppeling worden niet meer afgewezen

Bij een nieuwe taak voor 5 klanten waarvan er bv. 4 geen GHL-contact hadden, kreeg je "Geen enkele taak kon worden aangemaakt." Het takenbeheer was hard gekoppeld aan GoHighLevel — een klant zonder GHL kon helemaal geen taak krijgen.

New feature

Nieuwe taak — multi-select klantenlijst (met zoek + "selecteer alles")

Bij Nieuwe taak kon je maar 1 klant kiezen. Wilde je dezelfde taak (bv. een onboarding-stap of een briefing) aan 8 klanten geven, dan moest je het formulier 8 keer invullen.

Bug fix

Knoppen/links in een e-mail leidden tot "content geblokkeerd"

Sommige e-mails (o.a. Trustpilot-activatie) hebben links zonder target="_blank". Die navigeerden het iframe waarin de e-mail wordt getoond naar de externe site — die stuurt vervolgens X-Frame-Options: DENY mee, waardoor de browser de pagina blokt en de mail-inhoud verdween achter "Deze content is geblokkeerd".

Polish

Releases staan nu strikt in dalende chronologische volgorde

Op /changelog kon de array-volgorde van entries afwijken van de tijd-volgorde (door auto-push races tussen parallelle sessies), waardoor versie-badges sprongen: v7.79 → v7.78 → v7.54 → v7.77. Voelde rommelig.

Polish

Settings-footer toont nu hetzelfde versienummer als /changelog

De "Senly · v0.227 → updates" link onderin het settings-paneel gebruikte de raw versie uit lib/changelog.ts (incl. interne releases), waardoor het nummer hoger was dan wat de bezoeker op /changelog zag.

Polish

Publieke /changelog telt elke zichtbare release netjes door vanaf v0.01

De versie-badges (v14.50, v14.49, …) volgden de raw versie in lib/changelog.ts, inclusief de gaten van interne releases die alleen voor Super Admin zichtbaar zijn. Daardoor sprong de nummering vooruit en oogde het laatste versienummer fors hoger dan het aantal echte publieke releases.

New feature

Exacte DNS-records direct zichtbaar na opslaan domein

Na het invullen van een eigen domein (bijv. portaal.labellebijoux.nl) kregen bureaus alleen een statische CNAME-instructie te zien. Railway vereist ook een uniek TXT-verificatierecord per domein — dat werd nooit getoond, waardoor klanten altijd contact moesten opnemen.

Polish

De hero-titel staat nu netjes op twee regels op mobiel

"Het all-in-one platform / voor / social media professionals." wrapte op mobiel waarbij "voor" alleen op een eigen regel kwam te staan en de gradient-tekst nog eens in tweeën brak — vier visuele regels, voelde onrustig.

v0.26
Wednesday, 10 June 2026

Emptying the trash with one button

New feature

"Empty trash" button in task management

Tasks from the trash had to be removed one by one

Performance

Signup-shell ship nu statisch zodat de pagina meteen verschijnt op mobiel

De /signup pagina stond op force-dynamic terwijl er server-side helemaal geen data wordt opgehaald. Op trage mobiele verbindingen (of bij een Railway cold-start) zag de bezoeker daardoor lang een leeg scherm met de tekst "Laden...".

Bug fix

Bulk-verwijderen taken werkt ook bij inactieve GHL-locatie

GHL gaf 401 "Location is not active" — daardoor mislukte ook de lokale DB-delete

Bug fix

Stappenplan via "Start 14 dagen gratis" bleef op mobiel hangen

Op iOS Safari (en in elke browser-tab die kort op de achtergrond stond tijdens het laden) bleef de framer-motion mount-animatie van de quiz-steps soms hangen op opacity:0. Resultaat: bezoekers zagen "Wat beschrijft jou het best?" met spookachtige, niet-zichtbare cards en konden niet doorklikken — terwijl de cards onderliggend wél bestonden.

Bug fix

Default sidebar-logo voor tenants zonder eigen logo

Een verse klant zonder ingesteld whitelabel-logo zag het oude /logo.png (social media tools / SMT) bovenaan in de sidebar en op de launchpad. Hoort het Senly-logo te zijn.

New feature

3 proof-kaartjes (2.5× volgers / +1.5% engagement / 80+ leads) terug boven de widget

Nieuw GrowthTeaserStrip-component direct boven de Lux-widget; volgt dezelfde 1180px max-breedte zodat alles uitgelijnd staat. Animeert subtiel in beeld.

Polish

Instagram-tab rustiger gemaakt

De Instagram-kleur (#ec4899) en de 5-stops oranje/roze/paars-gradient maakten de widget fel/knalroze

Polish

Growth-automation-sectie smaller en gecentreerd

De widget liep bijna full-width; nu max 1180px breed en gecentreerd, consistent met de rest van de pagina.

Polish

Starter en Scale-cards staan nu op volle sterkte naast Growth

De zij-kaarten waren op opacity 0.84 en scale 0.955 gezet om de Growth-card te benadrukken. Dat oogde gedateerd (fishbowl-effect) en maakte twee van de drie pakketten visueel onaantrekkelijk.

Polish

Featured Growth-card oogt rustiger en eleganter

De featured-card had een vier-lagen shadow-stack incl. een outline-ring (0 0 0 1px rgba(20,184,166,...)) — leek meer op een "uitgelicht" UI-element dan op een premium pricing-card. Paste niet bij de glassmorphism-taal van de site.

Polish

Testimonials-cards krijgen dezelfde zachte border als alle andere cards

.sn-testi-card had border: none — daardoor zweefden de quotes op een witte achtergrond terwijl trust-, growth-, vergelijking- en pricing-cards allemaal een 1px solid --line-soft border delen. Voelde of de testimonials uit een andere flow kwamen.

Polish

Vergelijking-cards op de radius-schaal

.sn-vs-card had border-radius: 26px — net naast de 8/12/18/24 schaal die we deze week hebben ingevoerd.

Polish

Border-radius schaal als CSS-variabelen (--r-sm / md / lg / xl)

Elke nieuwe card had een eigen pixelwaarde voor border-radius (12 / 14 / 18 / 20 / 22 / 24…). Geen schaal achter, dus nieuwe componenten landden nooit automatisch op de rest.

Polish

Subtiele teal-anchor zodat de Growth-widget vasthoudt aan de Senly-huiskleur

De widget gebruikte alleen platform-color (pink/teal-rood/blauw). Daardoor verdween de teal-identiteit van de site precies in dat blok — voelde als een buitenstaander naast de teal-dominante trust-stats en sectie-eyebrows.

Polish

Icoon en tekst van de safety-note staan nu netjes in het midden

De TikTok safety-note had align-items: flex-start en geen justify-content; de icon+tekst-combinatie zat links uitgelijnd terwijl de tekst zelf via de geërfde .sn-trust text-align: center geometrisch scheef stond.

Polish

Zachtere overgang vanuit de witte trust-stats naar de Growth-widget

De platform-tinted achtergrond-glow in de widget stond op 16% (shell), 22% (hero-shine) en 16% (sub-cards) — kwam neer als een felle pink/teal/blauwe waas direct onder de schone witte stat-cards.

Polish

Hero, engagement en autopilot delen één rij

De hero-card stond apart bovenaan en de twee sub-cards eronder. De Actief-pill stond ook nog losse rij onder de 100% terwijl er een aparte live-pulse-dot in de hoek zat — voelde dubbel.

Polish

Widget lijnt nu uit met de 4 trust-stats erboven en alles is rustiger geschaald

De Growth-widget zat in sn-wrap (max 1280px, dikke side-padding) terwijl de trust-stats-row vlak erboven maar 14px side-margin had — de widget oogde daardoor ingedrukt. Daarnaast voelden de hero-cijfers (76px), iconen en USP-tekst onnodig groot op de overige site-typografie.

Polish

Titel en subtitel van de USP-cards staan nu echt links

De .sn-trust section heeft text-align: center, wat doorerfde naar de USP-titels en -subtitels — die stonden dus per ongeluk gecentreerd in hun tekstblok.

Polish

Hero- en sub-getallen op het site-gewicht

De grote cijfers (+1.000-1.500, +5.000-8.000, 100%) stonden op font-weight 800 — extra dik t.o.v. de rest van de website waar display-getallen op 500 staan.

Polish

Outer shell ligt nu rustig in de pagina i.p.v. zwaar naar voren gedrukt

De buitenste glas-card had een dubbele drop-shadow (0 32px 80px + 0 12px 28px) waardoor het blok losgeknipt boven de pagina leek te zweven — paste niet bij de rest van de website-stijl waar containers vlak liggen.

Polish

Iconen en titels van de USP-cards op één lijn links

De vorige polish centreerde icoon + tekst horizontaal in de card. Daardoor stonden de iconen op verschillende X-posities (omdat de titels verschillende lengtes hebben) — voelde inconsistent.

Polish

Icoon en tekst staan nu gecentreerd in elke USP-card

De vier USP-kaartjes (AI-gedreven, Veilig & compliant, 24/7, Realtime) hadden hun icoon top-aligned met de titel terwijl de titels verschillende lengtes hebben — voelde scheef.

Polish

Symmetrische adempauze rond de Growth-widget

Boven de widget zat 180px ruimte (oude bottom-margin van de trust-stats-row), onder de widget bijna niets — voelde scheef.

Polish

Widget begint nu direct met de platform-rail

De koppen "GROEI-AUTOMATISERING / Resultaten, per platform. / Op basis van gemiddelden..." voelden overbodig: de widget eronder spreekt al voor zich.

Polish

Heading van de Growth-Automation-sectie volgt nu de site-stijl

De eyebrow stond in een pill-met-border en de h2 had een eigen gradient — week visueel af van alle andere section-headings ("PLATFORM / Alles wat je nodig hebt voor social media. In één platform.").

Polish

Eén platformkleur door de hele widget i.p.v. een regenboog

De secundaire cards gebruikten amber en violet, de USP-icoontjes vier eigen kleuren (paars/teal/blauw/amber) en de "Actief" status was groen — naast de platform-kleur. Te druk en off-brand.

New feature

Loskoppelen-knop op Taken- en Financieel-integratiepagina

Er was geen manier om GoHighLevel los te koppelen vanuit het portaal

Polish

Premium split-screen showcase i.p.v. de oude tabs-met-uitklap

De vorige Growth Automation-sectie gebruikte horizontale platform-tabs bovenaan en een collapsible kaart met een hub-diagram. Het werkte, maar oogde generiek en sloot minder aan op de glassmorphism-look van de rest van de homepage.

New feature

Bezoekers zien direct de groei-cijfers per platform op de homepage

De interactieve widget met Instagram-, TikTok-, LinkedIn- en Facebook-tabs (incl. de samenvattings-bar met cijfers en de uitklapbare hub-visualisatie) was eerder van de homepage verwijderd. Daardoor moest een bezoeker zelf doorklikken om concrete cijfers per platform te zien.

Bug fix

Kopieer-knop kalenders toont nu correcte status

Knop toonde altijd "Gekopieerd / Kopieer" als vaste tekst

New feature

Bezoekers zien direct de groei-cijfers per platform op de homepage

De interactieve widget met Instagram-, TikTok-, LinkedIn- en Facebook-tabs (incl. de samenvattings-bar met cijfers en de uitklapbare hub-visualisatie) was eerder van de homepage verwijderd. Daardoor moest een bezoeker zelf doorklikken om concrete cijfers per platform te zien.

Bug fix

Bevestigingsknop op boekingspagina toonde ruwe vertaalsleutel

De knop liet "booking_confirm_r6" zien omdat de vertaalsleutels booking_confirm_r6 en booking_submitting_r6 ontbraken in alle talen.

Bug fix

GHL DELETE-response veroorzaakte fout bij bulk-acties

GHL geeft bij DELETE een lege 204-response terug. De GHL-fetch-helper probeerde die te parsen als JSON, wat crashte — waardoor alle 19 taken als mislukt werden gemarkeerd.

Polish

v0.100+ toont nu v13.31+ in plaats van v1.00+

De changelog sprong na v13.30 terug naar v1.61 — verwarrend want dat is chronologisch een stap terug.

New feature

Terugkom-korting hands-off — geen handwerk meer

De win-back-mail beloofde korting, maar die moest handmatig in Stripe gezet worden als een bureau terugkwam.

New feature

Opgezegde bureaus krijgen automatisch een terugkom-aanbod

Wie opzegde kreeg alleen een bevestigings-/hervat-mail. Daarna hoorden we niets meer — een gemiste kans om ze terug te winnen.

Polish

Eerste 5 stappen aangepast naar de echte onboarding-flow

Stappen zijn nu: 80% schermweergave instellen, Launchpad starten, rondleiding volgen, integraties koppelen, aan de slag. Knop heeft een premium shimmer-animatie en dieper gradient gekregen.

Polish

Versienummers tonen nu altijd 2 decimalen

v0.11 en v0.159 hadden een inconsistente decimale diepte — soms 2, soms 3 cijfers.

Polish

Welkomstpagina na betaling nu full-screen en passend bij het registratieformulier

De pagina na Stripe-checkout was een smal login-kaartje (480px) dat niet aansloot bij de rest van de signup-flow.

Bug fix

Pauze-popup plakte linksboven in plaats van in het midden

Het pauze-slot werd binnen het portaal gerenderd, waardoor een ouder-element de positionering "ving" en de popup linksboven plakte.

Bug fix

Snapchat Spotlight-download opgelost

De downloader stuurde een iPhone-User-Agent mee, waarop Snapchat een app-pagina zónder video teruggaf (0 formats) — de download faalde altijd.

Bug fix

Instagram reel-download probeert nu ook yt-dlp

De IG-downloader stopte na de embed-poging en gebruikte yt-dlp niet, terwijl yt-dlp publieke reels wél kan ophalen.

Performance

yt-dlp wordt al bij het opstarten klaargezet

De eerste download na een deploy moest ~30MB yt-dlp-binary ophalen en kon daardoor de eerste keer net te lang duren.

New feature

Gepauzeerd account vraagt om reactiveren bij inloggen

Een account pauzeren bevroor alleen de facturatie — iedereen kon nog gewoon inloggen en alles gebruiken. De belofte "bevries je account" werd niet waargemaakt.

Performance

YouTube-downloader probeert alle proxy-instances tegelijk

De instances werden één-voor-één geprobeerd (elk 12s) — bij dode instances kon dat ruim een minuut hangen voor het een werkende vond.

Bug fix

LinkedIn- en Snapchat-downloader werken weer (yt-dlp self-install)

Railway negeert sinds de Railpack-builder onze nixpacks.toml, waardoor yt-dlp nooit geïnstalleerd werd en deze downloaders altijd faalden.

Bug fix

Je kunt weer normaal typen in de risicowoorden/concurrenten-velden

Na elke letter sprong de cursor uit het veld en moest je opnieuw klikken.

New feature

Reel/post-download via Instagram's eigen embed-HTML

Alle externe IG-downloaders zijn dood (Meta haalt domeinen neer) of vereisen een browser-captcha die niet server-side kan.

New feature

Opzeggen opent nu een slimme retentie-funnel in plaats van één muur

Wie wilde opzeggen kreeg meteen een kale bevestigingsknop — geen kans om te redden, geen inzicht in waarom mensen weggaan.

New feature

Account pauzeren in plaats van opzeggen

Je kunt je abonnement 1–3 maanden bevriezen: er wordt niet gefactureerd, al je data blijft staan en je hervat met één klik wanneer je wilt.

New feature

Eenmalige behoud-korting

Twijfelaars krijgen 50% korting op de volgende maand (max. 1× per half jaar, automatisch verwerkt via Stripe).

New feature

YouTube-downloader werkt weer (Invidious/Piped mirrors)

YouTube blokkeert Railway's datacenter-IP met "bevestig dat je geen bot bent" — yt-dlp faalde structureel.

Bug fix

Account check geeft weer echte cijfers

Instagram blokkeerde de directe API → "Account niet gevonden".

Bug fix

Profielfoto Instagram werkt weer

Vereiste lokale Chrome / liep tegen IG-login-wall aan.

Bug fix

Hashtag-onderzoek YouTube via Invidious-search

yt-dlp's hashtag-scrape werd door YouTube geblokt op de server.

Bug fix

YouTube-downloader gebruikt weer werkende yt-dlp clients

De extractor-args ios,tv_embedded geven sinds 2026 alleen storyboards → "format not available".

Bug fix

Profielfoto geeft geen verkeerd plaatje meer terug

Bij een Instagram login-wall werd IG's generieke branding-logo stil als avatar teruggegeven.

Infra

Cobalt-downloader alleen nog bij eigen instance

De publieke api.cobalt.tools is dichtgezet (JWT vereist) — elke download deed een nutteloze call.

Polish

Native browsercalender vervangen door premium glassmorphism datumkiezer

De standaard OS-kalender paste niet bij de Senly-uitstraling en verschilde per browser/platform.

Bug fix

Profielfoto downloaden werkt nu zonder lokale Chrome

De tool vereiste lokale Chrome op de cloud — Railway zei "Deze functie draait niet op de online server".

Bug fix

Account check (influencer) krijgt nu wel resultaten

Instagram blokkeert datacenter-IPs van Railway → "Account niet gevonden".

Bug fix

Hashtag onderzoek (TikTok) gebruikt residentiële proxy als fallback

tikwm.com gaf vaak "Hashtag niet gevonden" doordat Railway IPs geblokt waren.

Bug fix

Trend Radar gebruikt nu dezelfde AI-helper als de andere Sales-tools

Trend Radar deed een eigen directe Anthropic-call zonder Gemini-fallback. Bij key-issues of redeploy-timing kreeg je "AI niet geconfigureerd op de server" terwijl andere AI-tools wel doorliepen.

Bug fix

Cobalt.tools als primaire downloader voor alle video-tools

Instagram, YouTube, LinkedIn, Snapchat downloaders mislukten — Railway datacenter-IPs worden geblokkeerd door platforms en derde-partij scrapers

Infra

yt-dlp wordt bij elke deploy bijgewerkt naar nieuwste versie

De nixpkgs yt-dlp loopt maanden achter; platforms blokkeren oudere versies

Bug fix

Keuzelijst "Nieuwe taak" toont nu alle actieve klanten

Klanten zonder GHL-koppeling werden gefilterd uit de dropdown, waardoor ze onzichtbaar waren.

Polish

Middelste prijskaart breder en prominenter, zij-kaarten iets naar achtergrond

Grid gewijzigd naar 1fr/1.16fr/1fr, featured schaalt naar 1.06× met sterkere schaduw, niet-featured kaarten 0.955× met lichte transparantie (op mobiel: geen effect).

Polish

De "Actief"-badge op onboarding-kaarten is nu goed leesbaar

De badge gebruikte lichte pastel-tekst (ontworpen voor dark mode), waardoor hij op de lichte kaart-tinten in light mode bijna wegviel.

v0.25
Monday, 8 June 2026

Affiliate — Stripe status automatically restored after missed callback

Bug fix

Stripe "Connect with Stripe" now disappears once the connection is already made

stripeOnboarded-flag remained false if the ?onboarding=complete callback could not complete (e.g., due to the 500-bug)

Bug fix

Geen 500-fout meer na Stripe Connect onboarding

useSearchParams() zonder Suspense gooit een Next.js 14 error zodra Stripe terugredirect met ?onboarding=complete

New feature

Overlay bij openen van inactief of gepauzeerd klantprofiel

Gebruikers konden inactieve klanten gewoon openen en gebruiken zonder te betalen (verdienmodel-lek)

New feature

Vul je klant-profiel automatisch in vanaf hun website

Een nieuwe klant aanmaken kostte 5-10 minuten handwerk: naam, branche, kleur, doelgroep en tone-of-voice allemaal handmatig invullen — waardoor velden vaak leeg bleven.

New feature

Brand-voice profile beschikbaar voor alle AI-content per klant

De geanalyseerde tone-of-voice + doelgroep wordt opgeslagen in Client.toneOfVoice en Client.audience. Bestaande AI-features (captiongeneratie, content-kalender, maandrapport-narratives) kunnen dit profiel meelezen in hun system-prompts zodat alle gegenereerde content meteen op de stem van de klant aansluit zonder dat het bureau het handmatig hoeft te beschrijven.

v0.24
Sunday, 7 June 2026

Bulk-acties + saved filters + extra webhook-events op CRM contacten, Tags-catalogus, outgoing webhooks en saved filters & 23 meer

New feature

Bulk-select op CRM contactenlijst

Tags toepassen of contacten verwijderen moest één voor één.

New feature

Saved filters dropdown in CRM contactenlijst

Naast de zoekbalk verschijnt nu een Filters-knop die per user (en optioneel team-breed) zoek-query + sortering kan opslaan. Eén klik herstelt de filter.

New feature

Extra webhook-events: lead.status_changed, contract.signed, payment.received

Status-wijziging in een lead, ondertekend contract en Stripe-betalingen vuren nu ook outgoing webhooks. Webhook-receivers kunnen daarmee onboarding-flows, accounting-syncs of Slack-notificaties automatiseren zonder code.

New feature

Centrale tags-catalogus met kleuren en cascade-rename

Tags werden alleen als string opgeslagen op contacten en leads; bij import ontstond ruis (bv. `csv-import-2026-…`) en duplicates met varianten in spelling. Geen manier om kleur toe te kennen of in bulk op te ruimen.

New feature

Outgoing webhooks voor integraties zonder code

Voor automatiseringen met Zapier, Make, n8n of een eigen backend was er geen out-of-the-box manier om Senly-events naar buiten te sturen.

New feature

Saved filters voor CRM en klanten

Power-users met veel klanten of leads moesten elke keer dezelfde filter-combinaties handmatig instellen.

New feature

Definieer eigen velden per tenant via Admin → Eigen velden

Bureaus willen data per klant of contact opslaan die niet in het standaard-schema past — NPS-score, contract-einddatum, branche-code, functie, regio, lead-bron-detail.

New feature

Eigen-velden-sectie op klantprofiel én CRM-contact-detail

Klant-detail krijgt een collapsible "Eigen velden"-sectie onder Notities; CRM-contact-detail toont dezelfde velden in de slide-over. Beide secties verbergen zichzelf automatisch als er voor die entity nog geen velden gedefinieerd zijn — geen lege ruimte voor bureaus die deze feature niet gebruiken.

New feature

CSV-import van contacten ondersteunt nu kolom-mapping naar eigen velden

Bij CSV-import gingen kolommen die niet in het auto-detect-lijstje stonden verloren — terwijl ze vaak de waardevolste lead-context bevatten (functie, sector, lead-score).

Polish

Witte tekst op de commissieclaim-knop

De tekst op de groene "Dien commissieclaim in"-knop was zwart en moeilijk leesbaar

Polish

"Aanbevolen voor jou" sectie verborgen als er geen aanbevelingen zijn

Het kopje "Aanbevolen voor jou" bleef zichtbaar ook al stonden er geen apps onder

Polish

GoHighLevel-vermelding verwijderd uit de takenpagina

De melding "niet gekoppeld" op de takenpagina noemt geen externe tool meer bij naam

Security

Gebruikers zien in het CRM alleen hun eigen toegewezen leads en contacten

Managers, setters en closers konden elkaars leads en contacten inzien in het CRM-systeem

Infra

Privacyverklaring uitgebreid met Google API Services User Data Policy en alle nieuwe features

De privacyverklaring miste een uitgebreide Google API Services sectie (vereist voor de Google OAuth verificatie van Analytics, Search Console en Bedrijfsprofiel). Verder waren veel features die er sinds de laatste update zijn bijgekomen niet beschreven: Google Insights, AI fallback ladder met 8 providers, Booking, Outreach + cookieloze tracking, Stripe + Stripe Connect, klantreview portaal.

Infra

Algemene voorwaarden geactualiseerd met actuele prijzen + nieuwe features

De voorwaarden noemden verouderde prijzen (70/60 euro per klant tot 20 daarna) en ontbeerden de nieuwe Solo/Growth/Scale tiers met IP gebaseerde valuta detectie. Ook ontbraken vermeldingen van trial, refund policy, AI ondersteuning, Senly Connector eigen verantwoordelijkheid en API derden disclaimers.

New feature

View-as knop op gebruikersbeheer

Admin kon niet controleren hoe het portaal eruitziet vanuit het perspectief van een setter of manager.

Polish

AI mag alleen nog naar pagina-paden en queries verwijzen die letterlijk in de data staan

Gemini stelde soms acties voor over een verzonnen pagina (bv "agency-alternatief") die niet in jouw Google Analytics of Search Console data zat. Minor hallucinatie, maar storend als je actiepunten letterlijk wilt opvolgen.

Infra

Cache invalideert automatisch bij elke prompt-bump

Een nieuwe prompt-versie zou pas na 24 uur effect hebben omdat de 24u-cache nog de oude samenvatting bevatte.

Bug fix

AI-samenvatting werkt nu robuust via de hele provider-ladder

De widget toonde "Kon de samenvatting niet genereren". Twee oorzaken: (1) Gemini-flash is een thinking-model en het thinking at het output-budget op waardoor JSON truncated terugkwam, (2) ik gebruikte een directe Gemini-call zonder fallback naar de 7 andere providers die Senly al heeft.

New feature

AI leest je GA + Search Console data en schrijft een leesbare samenvatting

KPIs zijn handig maar abstract. Een eigenaar die snel wil weten wat er deze week gebeurde moest zelf grafieken interpreteren en actiepunten verzinnen. Voor agencies die dit voor klanten doen is dat herhaalbaar werk dat slim kan.

Infra

TenantAiInsight model + structured JSON-prompt naar Gemini

Het was nog niet vastgelegd hoe AI-output gepersisteerd of gerate-limited werd voor de Insights-toepassing.

Bug fix

Sparkline-grafiekjes hadden geen vaste hoogte

De SVG-sparklines in Bezoekers, Bedrijfsprofiel en de nieuwe Zoekprestaties-widget waren paginalang uitgerokken zodra de widget breder dan ~150px was. De viewBox-ratio bepaalde de hoogte automatisch i.p.v. mijn bedoelde 50-70px.

Bug fix

Aangevinkte Google Insights-widgets verdwenen weer bij refresh

Je kon de 5 nieuwe widgets (Website KPIs / Bezoekers / Bronnen / Nu online / Bedrijfsprofiel) aanzetten via Widgets beheren, maar zodra je naar een andere pagina ging en terugkwam stonden ze er weer NIET. De keuze ging dus niet naar de DB.

Polish

Pagina-content verspringt niet meer bij wisselen van feature

Op mobiel verschilde de hoogte van de detail-panel (eyebrow + titel + body + bullets) per feature omdat sommige meer/langere bullets hadden. Alles eronder (de "Krachtige extras"-sectie en verder) sprong elke wissel ~50-100px omhoog of omlaag.

Bug fix

Sluit-knopje (X) van het chat-tooltip was ei-vormig op mobiel

De X-knop in het support-chat tooltip (rechtsboven) werd op iOS Safari verticaal uitgerekt — leek een ei i.p.v. een rondje. Width/height stonden beide op 20px maar UA-button-styling pushte de hoogte hoger.

New feature

Volledige NL/EN/DE/FR vertaling van affiliate-voorwaarden + footer-link

De voorwaarden-pagina was NL-only en niet vindbaar voor bezoekers die niet door /partners of /affiliate kwamen.

New feature

Affiliate-voorwaarden gestructureerd vastgelegd

Het partner-programma had nog geen publieke voorwaarden. Geen regels over wat wel en niet mag, geen uitbetaalvoorwaarden, geen termination clauses. Juridisch zwak en partners wisten niet waar ze aan toe waren.

Polish

Mobile pill compactere layout zonder Senly tekst

Op mobiel in sticky-state stond de pill niet gecentreerd — links veel meer ruimte dan rechts omdat de "Senly" tekst de inhoud naar links duwde. Plus de padding was asymmetrisch (20px links / 14px rechts).

Polish

Hero/Section/CTA titels bumped van max 50px naar 56px

Na de v12.62-verkleining naar clamp(28, 3.7vw, 50) voelde de titel op desktop net te klein.

Polish

Padding-top van clamp 120-170 naar clamp 165-215

v12.70 voegde +67px ruimte toe tussen nav-row en eyebrow — gebruiker wilde nog ~45px extra erbij.

Polish

Hero margin uniform aan alle zijden + ruimte tussen nav en eyebrow

Mobiele hero had asymmetrische witruimte: 4px links/rechts maar 14px boven/onder. En de nav-row (Senly logo + Inloggen + NL pill) zat te dicht op de eyebrow-badge eronder.

Polish

Padding-top verder verkleind van clamp 80-130 naar clamp 50-90

Vorige iteratie maakte padding-top clamp(80, 12vh, 130) — gebruiker wilde de content nog hoger zien (zoals na ~30px scroll vanaf de standaard view).

Polish

"en compleet" toegevoegd aan eerste zin van hero-subtitle

De vorige fix toonde de hele tweede zin op mobiel — dat was te veel. De gebruiker wilde slechts ~2 woorden langer, niet 2 extra regels.

Polish

Hero-content begint hoger op het scherm + tweede zin subtitle terug

Op mobiel zat de titel ver onder de bovenrand door een te grote padding-top (clamp 130-200). En de subtitle was bewust ingekort tot alleen de eerste zin — voelde te kaal.

Polish

Instagram / TikTok / LinkedIn / Facebook tabs worden swipe-slider <720px

De 4 platform-tabs (Instagram, TikTok, LinkedIn, Facebook) pasten niet allemaal naast elkaar op mobiele schermen — Facebook viel deels of helemaal buiten beeld, en de tabs werden te krap geknepen.

Polish

Mobile hero krijgt ademruimte (margins + padding)

Op mobiel zat de hero binnen relatief brede zijmarges en met een krappe padding-bottom van 48px. Daardoor oogde de content geknepen — de "Bekijk demo" knop en de checklist eronder eindigden te krap tegen de hero-rand.

v0.23
Saturday, 6 June 2026

Homepage: hero-lengte terug, pill verder van zijkanten, nav iets lager, Homepage: hero onderkant witruimte + meer lengte & 38 meer

Polish

Hero padding-bottom terug + nav meer lucht aan de zijkanten en bovenkant

De extra hero-lengte van v12.63 (padding-bottom clamp 140-180) was te lang — origineel 90px voelt beter. De sticky pill stond na scroll te dicht op de viewport-randen (17px lucht). En de hele nav (initial + sticky pill) zat met top:14 te dicht tegen de bovenrand.

Polish

Hero symmetrisch wit aan alle vier kanten + langere sectie

Live meting op senly.io toonde: hero-top 18px, links 17px, rechts 17px witruimte, maar onderkant 0px — de hero raakte de volgende sectie direct. Asymmetrisch.

Polish

Hero/Section/CTA-titels uniform verkleind

De grote titels op de homepage (Het all-in-one platform, Krachtige extras, Alles wat je nodig hebt, Live binnen een middag, etc.) waren clamp(32, 4.8vw, 64) en oogden te dominant. De pagina las als een aaneenschakeling van geschreeuwde headlines.

Polish

Nav rechts net zo ver van de zijkant als links + smooth scroll-overgang

Bij scrollen sprong de nav-pill als een klap van de brede non-pill state (margins clamp 24-64) naar de smalle pill state (margins 14). Geen tussenliggende animatie. En ondanks scrollbar-compensatie leek de pill rechts ruimer dan links omdat .sn-nav zelf op left:14/right:14 stond, waardoor (100vw - 100%) binnen .sn-nav-inner de 28px gap meerekende i.p.v. alleen de scrollbar.

Polish

Pill-morph richting omgekeerd — bij scroll naar hero-rand-breedte

De vorige iteratie maakte de nav full-width edge-to-edge (v12.58) — dat was niet wat bedoeld was. Voor de v12.58-fix versmalde de pill op scroll naar max-width 760px in het midden.

Polish

Volledig nieuwe nav-bar bovenaan senly.io

De vorige nav was een gecentreerde "pill" met witte marges links/rechts en een morph-animatie bij scrollen. Voelde meer als een micro-component dan een echte website-header — en past niet bij "duur, premium" design.

Polish

Tweede asterisk-regel onder de calc-card verwijderd

Onder de Growth-calculator stonden twee bijna-identieke disclaimer-regels onder elkaar — één binnen de info-card en één los onder de card. Visueel lelijk en redundant.

Polish

Padding-y van alle secties + margin tussen kaarten vergroot

De homepage secties zaten te krap op elkaar — voelde gehaast en weinig premium. Elegantie komt voor een groot deel van ademruimte.

Polish

High-end SaaS finish voor de stats-rij

De stats-rij oogde te plat — flat lichtgrijs blok met simpele iconen en tekst. Voelde niet als een duur, premium product.

Polish

Calculator naar elegant wit + teal i.p.v. platform-gradient overload

De Growth-calculator op de homepage had per platform een kleurrijke gradient achtergrond, gradient tab-pill, gradient cijfers in de stats-rij en een platform-gekleurde CTA-knop. Te druk in vergelijking met de rest van de pagina.

New feature

Optionele video op de Platform-carousel kaarten

Elke feature in de "Alles wat je nodig hebt"-carousel toonde alleen een statische screenshot. Voor sommige features (zoals het klantprofiel met brand kits) zegt een korte schermopname meer dan een stilstaand beeld.

New feature

Zelf kiezen of je 7, 30 of 90 dagen wilt zien per widget

Alle GA- en Bedrijfsprofiel-widgets toonden hardcoded 30 dagen. Wilde je vandaags piek of het kwartaaltrend zien, dan moest je naar Google.

New feature

Delta-badges: pijltje + % vs vorige periode op alle KPIs

Een KPI-getal op zichzelf is moeilijk te beoordelen — is 2.300 bezoekers veel of weinig? Je had geen referentie zonder GA open te klikken.

Polish

Grid-lijntjes op de Platform/Vergelijking-kaarten subtieler

De rastertextuur (rgba 15,23,42 / 0.045) op de witte raster-kaarten was iets te aanwezig — leidde af van de content erin.

Polish

Padding-right van .cl-hero-accent ruimer

In de hero-titel "Wat is er nieuw in Senly" werd de schuine descender van de italic "y" rechts afgesneden. Oorzaak: padding-right van 0.1em op het accent-span was niet genoeg om de italic descender op te vangen onder background-clip: text.

Polish

Signup-formulier in de partner-popup verdeeld over 2 kolommen

Het signup-formulier ("Bedrijfsnaam", "Contactpersoon", "E-mail", "Type", "Klantvolume", "Status") stond als één lange lijst onder elkaar. Daardoor was de modal hoger dan de viewport en viel 'ie onder de top-nav weg.

Polish

Scrollbar-bewuste margin maakt asymmetrie eindelijk nul

Devtools-meting toonde aan dat in Chrome op macOS scrollbar-gutter: stable both-edges niet daadwerkelijk een gutter aan de linkerkant reserveert — body zit strak links, scrollbar zit 6px rechts buiten body. Daardoor was hero-rechts tot viewport-rand altijd 14+scrollbar (= 20) terwijl links 14 was. Visueel 6px scheef ondanks identieke CSS-margin-waardes.

Polish

Definitieve garantie voor 14px-margin links/rechts hero

Ondanks auto-margin en scrollbar-gutter bleef de hero in sommige browsers visueel asymmetrisch — rechterkant ruimer dan linkerkant.

Polish

Symmetrische scrollbar-gutter op alle root-niveaus

Op sommige browsers werd de oude :root:has(.sn-root) selector niet matched of laat geparsed, waardoor scrollbar-gutter: stable both-edges niet altijd actief was. Dat kon de hero alsnog asymmetrisch t.o.v. de viewport positioneren — rechterkant oogde dan ruimer dan de linkerkant.

Bug fix

GA + Bedrijfsprofiel widgets verschenen niet in de widget-catalog

In fase 2 waren de 5 nieuwe widgets opgehangen aan PremiumDashboard, maar het actieve dashboard is TaskioDashboard met een eigen WIDGET_REGISTRY. Daardoor stonden de widgets nergens in "Widgets beheren" en kon niemand ze aanzetten.

Polish

Witruimte links/rechts van hero gegarandeerd gelijk

Ondanks symmetrische margin (14px L+R) liep de rechterkant van de hero-kaart visueel verder van de viewportrand af dan de linkerkant. Oorzaak: in sommige browsers werkt scrollbar-gutter niet ideaal, waardoor 14px-margin niet 1-op-1 gerendered wordt.

Bug fix

Achtergebleven foutbanner op /admin/integraties/google-insights bij refresh

Na een afgebroken Google-koppelpoging bleef ?gi_error=session_not_found in de URL staan. Elke refresh van de pagina toonde dan opnieuw de rode banner — ook al was de koppeling al lang succesvol.

Polish

Platform/Vergelijking secties krijgen dezelfde kaart-vorm als de hero

De rasterachtergrond van de Platform- en Vergelijking-secties liep van rand tot rand. De hero zit juist als afgeronde "floating card" met 14px lucht aan beide zijden — visueel onsamenhangend.

Polish

Top-nav rechts/links witruimte gelijk getrokken

.sn-nav-inner had padding 24px links en 14px rechts. Daardoor zat de rechtse content (Inloggen / NL) dichter op de pill-rand dan de linker logo+links — visueel asymmetrisch.

New feature

Kies welke GA4-property en bedrijfslocatie je wilt tonen na het koppelen

Na het verbinden met Google was er nog geen manier om aan te geven welke GA4-property of welke bedrijfsprofiel-locatie de data moest leveren.

New feature

5 nieuwe dashboard-widgets onder Aanpassen → Rapportage

Bureau-eigenaren konden hun website- en bedrijfsprofiel-statistieken niet in Senly zien. Switchen tussen Google Analytics en Bedrijfsprofiel kostte tijd en bleef vaak liggen.

Infra

OAuth data-layer voor GA4 Data API + Business Profile Performance API

De OAuth-koppeling was er, maar er was nog geen code om met de tokens daadwerkelijk data van Google op te halen.

Polish

Platform- en Vergelijking-secties krijgen subtiele rastertextuur

Na de hero liepen meerdere kale-witte secties achter elkaar, zonder visueel ritme tegenover de teal-gradient secties (clock, pricing, testi). De rastertextuur die de hero zo herkenbaar maakt, kwam nergens terug.

Polish

Lichtere achtergrond voor de Uitbetaling-kaart

De Uitbetaling-kaart op /affiliate kreeg eerder #eef0f2 als achtergrond. Solide, maar wat zwaarder grijs dan nodig op de witte pagina.

Polish

Resterende hairlines boven SECTIE 2/3/4 verwijderd

Na de vorige fix waren de strepen rond "SECTIE X" weg, maar boven elke nieuwe sectie liep nog een dunne grijze lijn (border-top) horizontaal door het grid-patroon. Bron: een latere light-theme override die de algemene fix overruled met !important.

New feature

Admin kan eigen Google-account koppelen voor website- & vindbaarheidsstatistieken

Bureaus konden hun eigen websitebezoek (Google Analytics) en Google Bedrijfsprofiel-prestaties niet in Senly zien — daarvoor moesten ze steeds naar aparte Google-dashboards.

Infra

OAuth-fundament + setup-gids voor Google Insights

Google Analytics Data API en Business Profile API vereisen API-activatie, OAuth-scopes en (voor Bedrijfsprofiel) een aparte toegangsaanvraag bij Google die dagen tot weken duurt.

Polish

Geen rommelige horizontale lijntjes meer rond "SECTIE X"

De eyebrow boven elke statistieken-sectie had een 1px streep aan de rechterkant van de tekst en een border-top boven de header. Op de pagina met grid-textuur liepen die als slordige horizontale lijnen door het raster heen.

Polish

Uitbetaling-kaart op /affiliate niet langer half-doorzichtig

De "Uitbetaling"-kaart had in light-mode een achtergrond van rgba(255,255,255,0.02) — 2% opacity — waardoor het grid-patroon van de pagina dwars door de kaart heen liep.

Polish

Geen 6-stippen icoontje meer naast stage-titel

Het kleine verplaats-icoontje (6 stippen) links van elke stage-titel was visueel ruis — de hele kolomkop is al sleepbaar, dus het icoon voegde alleen drukte toe.

Polish

Kolom-achtergrond van licht-blauwgrijs naar puur wit

De vorige fix gebruikte #f1f3f7 als kolom-achtergrond — die had een lichte blauwe ondertoon waardoor het bord er koeler/blauwiger uitzag dan de rest van de pagina.

Polish

Kanban-kolommen krijgen een solide achtergrond

De stage-kolommen op /onboarding en /crm hadden een halfdoorzichtige achtergrond (rgba 0,025). Daardoor lekte de grid-textuur van de pagina dwars door de kolommen heen — vooral zichtbaar bij hogere kolommen (twee-regelige titels) waar het patroon door de kolom liep.

New feature

Sleep stages (kolommen) om hun volgorde aan te passen

Je kon contacten wel tussen kolommen slepen, maar de volgorde van de kolommen zelf zat vast op de volgorde waarin ze waren aangemaakt. Wilde je "Onboarding klaar" tussen "Start Feedback" en "Actief" zetten, dan moest je een nieuwe kolom maken en alles handmatig overzetten.

New feature

Flow-naam achteraf wijzigen

Een nieuwe flow kreeg z'n naam alleen bij aanmaken — typo of veranderd inzicht betekende dat je 'm moest verwijderen en opnieuw bouwen.

New feature

Twee tabs onder Kosten: Maandelijks en Jaarlijks

Sommige uitgaven betaal je per jaar (domeinen, jaarabonnementen, hosting). Voorheen moest je die zelf delen door 12 voordat je ze als maandbedrag invulde — anders klopten de portaalcijfers niet.

Bug fix

Vervolg: pagina-tekst kwam ondanks vorige z-index-fix nog door de popup heen

Ook na de eerste z-index-verhoging schoten de commissieniveau-titel ("30% standaard, 40% vanaf 10 bureaus"), de subtekst en de Standaard/Premium-cards nog door de popup-backdrop heen. Oorzaak: een element hogerop in de pagina-tree creëerde een lokale stacking-context (door een transform op de tier-cards), waardoor de popup-backdrop opgesloten zat in die lokale context en niet boven alle pagina-content uit kon komen.

Bug fix

Aanvraag-popup op /partners stond achter het menu, pagina-tekst kwam over de popup heen

De popup ("Meld je aan / Partner-aanvraag") verdween achter het sticky menu bovenaan, en de hero-tekst ("30% standaard, 40% vanaf 10 bureaus" + "Word nu partner") schoot tegelijk door de donkere overlay heen — onleesbare stapeling.

Polish

Footer-tagline volgt nu dezelfde positionering als de homepage

De footer zei "voor social media bureaus die willen schalen" — een nauwere positionering dan de homepage ("voor social media professionals"). Beide regels nu gelijk: "Het operating system voor social media professionals — zonder de tooling-chaos." Vertaald in NL/EN/DE/FR. Past bij de bredere doelgroep (bureaus, freelancers, content creators, in-house) die ook eigen landingspagina's hebben.

Polish

De demo per partner-stap beweegt nu en gebruikt dezelfde velden als het echte aanvraagformulier

De demo-modal toonde "Naam / E-mail / Bereik" terwijl het echte formulier "Bedrijfsnaam / Contactpersoon / E-mail / Type / Klantvolume" vraagt — en alles was statisch waardoor de waarde van een "demo" beperkt was.

Polish

Klantcases, Team, Woordenboek en Beveiliging staan nu in de footer

De footer linkt nu ook naar /cases (klantcases), /team, /woordenboek en /security — pagina's die er sinds de vorige footer-versie bij gekomen zijn. Vertaald in NL/EN/DE/FR.

Polish

Social-iconen + locatie-regel weg

Instagram (@senly.io) en LinkedIn (Senly-io) staan rechtsonder als ronde icoon-knoppen met teal hover. De "Lage Zwaluwe · Gemaakt in Nederland"-regel is verwijderd — die info staat al duidelijk in de over-ons-pagina en op de schema.org-markup.

New feature

Nieuwe tab "Takenbeheer" op senly.io

De feature-pillen op de homepage (Brand kits → Kalender → Meetings → … → Tools) krijgen er een tab "Takenbeheer" tussen Meetings en Activiteiten. Toont workload per team, deadlines/prioriteiten en de keuze tussen lijst, kanban of kalender. Per-taal screenshot (NL/EN/DE/FR) zoals de andere features, accent paars (#a855f7).

v0.22
Friday, 5 June 2026

Discount Codes Page: Labels and input fields now readable in light mode

Bug fix

Labels and input fields were barely readable in light mode

The Discount Codes page used hardcoded dark colours (rgba(226,232,240,…)), which became almost invisible in light mode — grey-on-grey labels, inputs without clear outlines.

New feature

Kortingscodes voor een langere trial

Er was geen manier om iemand via outreach/e-mail een langere proefperiode te geven dan de standaard 14 dagen — alleen handmatig per bureau achteraf.

New feature

Codeveld op de aanmeldpagina

De aanmeldpagina heeft nu een kortingscode-veld dat automatisch vooringevuld wordt vanuit de link, met directe bevestiging ("✓ Geeft je 30 dagen gratis trial!") en de juiste trial-lengte in het overzicht. Werkt in NL/EN/DE/FR.

Polish

De drie groeicijfers verbinden nu visueel naar een centrale glow-hub, met vier USP-punten eronder

De drie stat-cards stonden los naast elkaar in een vlakke rij — weinig samenhang en geen "automation"-gevoel.

v0.21
Thursday, 4 June 2026

Financial: monthly revenue chart updated + months now translated

Polish

The monthly revenue chart (Financial) has a modern, premium look

De tools-rij is horizontaal scrollbaar; door een browser-eigenaardigheid clipte die scroll-container ook verticaal, waardoor de hover-schaduw van de kaarten aan boven- en onderkant werd afgesneden.

Bug fix

The month abbreviations below the chart were always in Dutch

The labels (jan, feb, mrt…) were hardcoded in Dutch and did not translate along with the portal language.

Polish

De nieuwe tools toonden een generiek rondje i.p.v. een eigen icoon

Elke nieuwe tool heeft nu een eigen gradient-icoon in de tools-grid (hartje, grafiek, euro, pijl, schild, palet…), passend bij de kleur van de tool zelf.

New feature

Een batch handige, snelle tools die volledig in je browser werken — geen AI nodig

Toegevoegd: Engagement-rate calculator (met benchmark per platform), Advertentie-statistieken (CPM/CPC/CPA/ROAS/break-even), Influencer-tarief calculator, Groei-projectie, Klant-ROI calculator, Instagram witregel-fixer, Fancy tekst generator (unicode bold/cursief), Formaat & safe-zones (export per social-formaat), Carousel-splitter, Kleurenpalet-extractor en een Brand-safety check. Allemaal direct, privacy-vriendelijk (alles client-side) en in 4 talen.

Polish

"Bekijk alle verstuurde contracten" is nu een duidelijke teal pill-knop

De vorige knop-styling was te subtiel en oogde nog als een gewone tekstlink.

Polish

De maandelijkse omzetgrafiek (Financieel) heeft een moderne, premium look

De maandbalken hebben nu gradient-vullingen met diepte en een subtiele gloed, afgeronde vormen, een fijne scheiding tussen vast (recurrent) en eenmalig, een soepele opbouw-animatie en een duidelijker hover-effect (de maand komt omhoog en licht op). Toekomstige maanden tonen nu als een nette, vlakke projectie. Werkt in light- en dark-mode.

Bug fix

De maand-afkortingen onder de grafiek stonden altijd in het Nederlands

De labels (jan, feb, mrt…) waren hardcoded Nederlands en vertaalden niet mee met de taal van het portaal.

Polish

De link naar het contracten-overzicht is nu een subtiele knop

In Instellingen → Contracten staat "Bekijk alle verstuurde contracten" nu als smalle, omrande knop in plaats van een platte tekstlink.

Polish

"Voorbeeld"-knop direct bij elke template

Je moest een template eerst openen in de editor om een voorvertoning te zien.

New feature

Zoeken in het contracten-overzicht + notificatie aan/uit

In het overzicht zoek je nu direct op klantnaam of contract. En in de instellingen zet je met één vinkje de "contract bekeken"-melding aan of uit voor je bureau.

New feature

Melding zodra de klant je contract opent

Je krijgt nu een in-app melding (belletje rechtsboven) zodra een klant je verstuurde contract voor het eerst opent. Uit te zetten per bureau.

New feature

Automatische herinnering + welkomstmail

Stel per template in dat een niet-getekend contract na X dagen automatisch een herinnering krijgt (dagelijkse cron). En kies "welkomstmail" als actie na ondertekenen, dan ontvangt de klant direct een persoonlijke welkomstmail van je bureau.

New feature

Eén overzicht met alle verstuurde contracten

Je kon contracten alleen per klant bekijken. Geen totaaloverzicht van wat verstuurd/bekeken/getekend is.

New feature

Bulk versturen

Stuur in één keer hetzelfde contract naar meerdere klanten: kies een template, vink de klanten aan en verstuur. Klanten zonder e-mailadres worden netjes overgeslagen en gerapporteerd.

New feature

Tegen-ondertekening: ook het bureau zet een handtekening

Tot nu tekende alleen de klant. Voor sommige overeenkomsten wil je dat beide partijen tekenen.

New feature

Optionele e-mailverificatie vóór ondertekenen

Zet "E-mailverificatie vereisen" aan op een template. De klant vraagt dan eerst een 6-cijferige code aan die naar zijn e-mailadres wordt gestuurd, en moet die invullen om te kunnen tekenen — een extra zekerheid dat de juiste persoon ondertekent.

New feature

Klant zet een echte handtekening en kan zelf velden invullen

Ondertekenen was alleen een vinkje + naam. Niet alle bureaus vonden dat genoeg, en de klant kon geen eigen gegevens toevoegen.

New feature

Audit-bewijs, vervaldatum en PDF-download

Bij ondertekening leggen we datum/tijd, e-mail, IP-adres én een SHA-256 documentcontrole (hash) vast — zichtbaar onderaan het getekende contract als bewijs dat er niets is gewijzigd. Een verlopen ondertekenlink wordt netjes geblokkeerd, en zowel klant als bureau kunnen het contract met één klik als PDF downloaden (via printen → bewaar als PDF).

New feature

4 nieuwe kant-en-klare templates: geheimhouding (NDA), influencer-samenwerking, projectovereenkomst en advertentiebeheer

Er was maar één standaard dienstverleningsovereenkomst. Voor andere situaties moest je alles zelf schrijven.

New feature

Eigen variabelen en klant-invulvelden

Je kon alleen de vaste variabelen (klantnaam, tarief, etc.) gebruiken.

New feature

Template dupliceren + ondertekenopties per template

Dupliceer een template met één klik als startpunt voor een variant. Per template stel je opties in: e-mailverificatie vereisen, het bureau laten tegen-ondertekenen, de ondertekenlink laten verlopen na X dagen, automatisch een herinnering sturen, en een actie na ondertekenen (welkomstmail).

Polish

Het branche-ringdiagram toonde een grote, zilver-grijze boog die er goedkoop uitzag

Branches voorbij de top 8 werden gebundeld tot één "Overige"-segment met een doorzichtig-witte kleur. In de demo (waar elke klant z'n eigen branche heeft) werd dat een groot grijs blok, dat door een kleur-renderbug ook nog eens een zilveren verloop kreeg.

Polish

De legenda van de ringdiagrammen toonde een (horizontale én verticale) scrollbalk, ook als je er niet overheen ging

Bij veel branches/platforms werd de legenda scrollbaar en bleef de scrollbalk constant zichtbaar — een browser-eigenaardigheid liet zelfs een overbodige horizontale balk verschijnen.

Polish

De staafdiagrammen (klantcohort, productiviteit per weekdag) kregen een premium look

De balken hebben nu gradient-vullingen met diepte, een subtiele gloed, afgeronde "zwevende" vormen, een fijne scheiding tussen gestapelde delen (actief/inactief), een soepele opbouw-animatie en oplichten-bij-hover. Werkt in light- en dark-mode — in dezelfde stijl als de vernieuwde ringdiagrammen.

Bug fix

De weekdag-namen in "productiviteit per weekdag" stonden altijd in het Nederlands

De afkortingen (ma, di, wo…) waren hardcoded Nederlands en vertaalden niet mee met de gekozen taal.

Polish

De donut-grafieken (branches, platforms) zien er nu high-tech en premium uit

De ringdiagrammen op de Statistieken-pagina hebben nu gradient-segmenten met diepte, een subtiele gekleurde gloed per segment, strakke scheidingen tussen de delen, een fijne binnenring, een teal-gloed met gradient-cijfer in het midden en een soepele opbouw-animatie. Beweeg je over een segment, dan licht dat segment op en dimmen de andere. Werkt in zowel light- als dark-mode.

Bug fix

Letterlijke "{count}" verdwenen uit de berichtenteller

In de e-mail-module stond boven een gesprek "2 {count} berichten in deze conversatie" — de placeholder "{count}" werd letterlijk getoond i.p.v. vervangen (een foutje uit de grote vertaalronde).

Bug fix

De taal-demo's lieten het standaard platform-logo zien i.p.v. het ingestelde bureau-logo

De nieuw aangemaakte taal-demo's (EN/DE/FR) hadden geen eigen logo, waardoor de zijbalk terugviel op het standaard platform-logo in plaats van het bureau-logo dat op de Nederlandse demo is ingesteld.

Bug fix

Taal wijzigen in de demo veranderde wel de knoppen, maar de klanten/agenda/CRM bleven Nederlands

Elke taal heeft een eigen, volledig vertaalde demo-omgeving. Maar de taal-routing gebeurde alleen op het moment dat je op "Bekijk demo" klikte. Wisselde je daarna van taal terwijl je al in de demo zat, dan kreeg je wel de vertaalde interface maar bleef je op de Nederlandse demo-tenant — dus Nederlandse klanten, afspraken en CRM.

New feature

Tools, CRM, onboarding, meetings, e-mail en tientallen andere schermen vertalen nu mee

Veel onderdelen van het portaal stonden nog hardcoded in het Nederlands en bleven dus Nederlands voor wie EN/DE/FR had ingesteld — denk aan de tools (bezwaren-bibliotheek, QR-, ROI- en voice-memo-generator, reply-scorer, speedtest, enz.), de CRM- en onboarding-borden, de meetings-instellingen, de e-mail-inbox en diverse beheer- en klantprofiel-schermen.

New feature

De demo toont nu een compleet gelokaliseerde beleving (NL/EN/DE/FR) in plaats van altijd Nederlandse data

Wie de demo in het Engels, Duits of Frans bekeek kreeg wel een vertaalde interface, maar de inhoud bleef Nederlands: Nederlandse klantnamen (Bloem & Stijl), een Nederlandse CRM-pipeline, Nederlandse taken, onboarding en mailbox. Een Franse bezoeker zag dus klanten en een CRM die hij niet kon lezen.

Bug fix

Een wit logo (voor donkere achtergrond) was onzichtbaar op het witte contract — de branding-preview leek leeg

Het contract is een wit document, dus het pakte je logo voor lichte achtergrond. Had je alleen het standaard "logo donker" ingesteld (meestal een wit logo voor je donkere sidebar), dan stond er een wit logo op een witte achtergrond — onzichtbaar. De branding-preview in de instellingen oogde daardoor leeg.

Bug fix

De knoppen "Opslaan" en "+ Nieuwe template" hadden donkere, slecht leesbare tekst op de teal achtergrond

In Instellingen → Contracten was de tekst van de primaire knoppen donker (bijna zwart) op de teal/petrol achtergrond, vooral in dark mode nauwelijks leesbaar.

Bug fix

Inlogformulier verschijnt niet meer kort in dark mode bij uitloggen

Wie vanuit het portaal in dark mode uitlogde, zag het inlogformulier ~1 seconde in donker en daarna pas naar light verspringen.

Bug fix

Tabbladen en teksten op de huisstijl- en klantprofiel-pagina vertalen nu mee

In EN/DE/FR bleven diverse onderdelen Nederlands: de tabs Huisstijl/Abonnement en Identiteit/Kleuren/Domein/E-mail, de LinkedIn-tip en sectie "Platformen", de commissie/koppel-velden bij contracten, en de "AI brand-voice"-tab in het bewerk-venster.

Polish

Streepje naast "Contracts" stond te ver van de titel

In de Contracts-sectie van het klantprofiel duwde de uitlijning het decoratieve streepje, de titel en de knop uit elkaar, waardoor de titel midden in de balk zweefde.

Polish

De voorvertoning op het klantprofiel toont nu hetzelfde gebrande contract als de template-editor

Bij het versturen van een contract vanaf het klantprofiel toonde de voorvertoning alleen de kale inhoud, zonder je logo of accentkleur. Dat kwam niet overeen met de preview in de template-editor en gaf geen volledig beeld van wat de klant zou zien.

Polish

Het fijne blueprint-raster op de achtergrond is nu ook zichtbaar in light mode

Het 64×64 raster-backdrop dat het dashboard zijn premium "blueprint"-uitstraling geeft, was in light mode praktisch onzichtbaar: de lijnen stonden op slechts 2,2% dekking én de content-laag dekte het raster volledig af met een dekkende crème achtergrond. In dark mode was het wél zichtbaar.

New feature

Knop "Voorbeeld" in de template-editor toont het contract precies zoals de klant het ziet

Bij het schrijven of bewerken van een contract-template zag je alleen de ruwe Markdown-tekst met {{variabelen}}. Je kon niet controleren hoe het uiteindelijke contract eruit zou zien zonder het eerst op te slaan en naar een echte klant te sturen.

New feature

De volledige Launchpad-onboarding vertaalt nu mee naar Engels, Duits en Frans

De Launchpad toonde in EN/DE/FR een mix: de chrome (kopteksten, knoppen) was deels vertaald, maar de 35 onboarding-taken (titel, beschrijving, knoptekst, waarde-belofte), de 7 categorie-namen in de linkerkolom en een handvol UI-labels (Aanbevolen/Klaar/Overgeslagen, "Wat is nieuw?", hulp-tekst) stonden hardcoded in het Nederlands.

New feature

Je bureaulogo en accentkleur staan nu op het contract en de ondertekenpagina

De ondertekenpagina toonde bovenaan alleen je bureaunaam als tekst — het logo werd wel opgehaald maar nergens getoond. Een contract zag er daardoor minder af en minder "van jou" uit.

New feature

Contracten werken nu ook voor bedrijven zonder KvK/BTW (bijv. een Amerikaans bedrijf met EIN/Tax ID)

De bedrijfsgegevens en de standaard-templates waren hard op de Nederlandse situatie gebouwd: vaste velden "KvK-nummer" en "BTW-nummer". Een buitenlands bureau (bv. een Amerikaans bedrijf) heeft geen KvK of BTW, maar een EIN en Tax ID — en kon dat nergens kwijt zonder dat het contract krom oogde.

Polish

Instellingen → Contracten toonde twee keer "Contracten" boven elkaar

De kleine kop-label (eyebrow) en de paginatitel toonden allebei hetzelfde woord "Contracten", waardoor het er dubbel uitzag.

Polish

Het kalender-paneel toonde in dark mode het achtergrond-raster van het portaal er doorheen

De .calendar-page-container had in dark mode een semi-transparante achtergrond (rgba(255,255,255,0.025)). Daardoor scheen het vaste blueprint-raster van het portaal (.app-shell::before, 64px grid) door het paneel heen — een doubled "vakjes achter vakjes"-effect in en rond de header/agenda. In light mode speelde dit niet, want daar was het paneel al ondoorzichtig (#ffffff).

New feature

Je voorkeurstaal wordt onthouden per gebruiker, ook op een ander apparaat

De taalkeuze zat alleen in een browser-cookie. Dat werkte op hetzelfde apparaat, maar je account "onthield" je taal niet: log je in op je telefoon of een andere browser, dan moest je opnieuw kiezen. En op een gedeelde computer kon de laatste bezoeker-keuze jouw taal overschrijven.

Bug fix

De "vandaag"-kolom in de week-agenda toonde dubbele/rommelige lijnen ("strepen over strepen")

De vandaag-kolom (cel + dagheader) had een semi-transparante teal-achtergrond (rgba). De andere kolommen waren ondoorzichtig, maar door de transparante vandaag-cellen scheen het pagina-achtergrond-raster (80px grid) heen — bovenop de eigen rasterlijnen van de kalender. Daardoor zag je in die ene kolom twee niet-uitgelijnde sets lijnen over elkaar.

New feature

Stuur een contract volautomatisch bij elke nieuwe klant

Je kon contracten al handmatig sturen, maar niet automatisch bij het aanmaken van een klant — wat je vaak juist wilt aan het begin van een samenwerking.

Bug fix

Bij het wisselen van taal (en bij het laden van pagina's in EN/DE/FR) zag je kort de Nederlandse versie flitsen

De useLanguage-hook startte altijd op 'nl' en las de werkelijke taal pas in een useEffect — dus ná de eerste paint. Voor een EN/DE/FR-gebruiker rendeerde elke client-component daardoor één frame in het Nederlands voordat de juiste taal werd toegepast. Extra zichtbaar na een taalwissel, omdat die een volledige reload doet en je dan de hele pagina even in NL zag.

New feature

Digitale contracten — van template tot getekende handtekening, volledig in Senly

Bureaus moesten contracten buiten Senly opstellen (Word/PDF), los mailen en handmatig bijhouden of een klant had getekend. Geen overzicht, geen audit-trail, losse tools.

New feature

Bedrijfsgegevens centraal — KvK, BTW en adres één keer invullen

Bedrijfsgegevens stonden nergens centraal en moesten in elk contract opnieuw worden getypt.

New feature

Bureaus kunnen hun abonnement nu zelf opzeggen (en weer hervatten) via Instellingen → Abonnement

Er was geen self-service opzegging — een bureau dat wilde stoppen moest de beheerder mailen, die het handmatig via super-admin opzegde. Dat is omslachtig en in NL/EU bovendien een compliance-puntje (opzeggen moet net zo makkelijk zijn als aanmelden, en aanmelden is volledig self-service).

Bug fix

Tariefoverzicht op de abonnement-pagina toonde verouderde, onvolledige prijzen

De pagina toonde twee tiers met hardcoded prijzen ("1-20 klanten €50, 21+ €40") die niet meer klopten met de echte facturatie-logica. De €60 één-klant-tier ontbrak volledig en de tier-grenzen waren verkeerd (1-20/21+ i.p.v. 1/2-19/20+).

Bug fix

"Systeem"-thema volgt nu betrouwbaar je licht/donker-instelling

De systeem-optie testte op (prefers-color-scheme: light) en viel bij twijfel terug op donker — een systeem zonder harde voorkeur werd zo onterecht donker. Ook werd de thema-cookie niet bijgewerkt en schakelde het portaal niet live mee.

New feature

Elke update vertaalt nu mee naar Engels, Duits en Frans

De changelog-pagina toonde de titel en knoppen wel in je taal, maar de honderden updates zelf bleven in het Nederlands staan. De vertaling hing af van een cache die via een trage achtergrond-taak werd gevuld en de gedeelde AI-quota telkens uitputte — waardoor het overgrote deel van de updates nooit vertaald raakte.

New feature

Nieuwe kolom "Actieve klanten" in het overzicht van verwezen bureaus

Affiliates zagen wel hun verdiende commissie per bureau, maar niet hoeveel actieve klanten een verwezen bureau op dat moment heeft — terwijl dat juist de commissie aanstuurt (30% van wat het bureau per klant aan Senly betaalt).

Polish

Hero, labels en filters komen al vertaald uit de server

De changelog-titel, subtekst, statistiek-labels en filterknoppen werden eerst kort in het Nederlands getoond en klapten pas ná het laden om naar de gekozen taal. Die korte NL-flits liet de pagina "onvertaald" ogen, en zoekmachines zagen de Nederlandse versie.

Bug fix

Gekozen taal stuurt nu het taal-attribuut van elke pagina aan

Het `lang`-attribuut van de pagina stond altijd hard op "nl", ook als je EN/DE/FR had gekozen. Daardoor bleef de browser "deze pagina vertalen?" aanbieden en oogde de pagina onvertaald, terwijl de inhoud wél in de juiste taal stond. Op de changelog zag je bijvoorbeeld een Duitse titel maar een Nederlandse browser-vertaalprompt.

Bug fix

Taalwissel schrijft één schone cookie — geen achtergebleven NL meer

Oude bezoekers konden meerdere portal_locale-cookies tegelijk hebben (een legacy host-locked "nl" naast de nieuwe cross-subdomain keuze). De client koos daar soms de stale "nl" uit en herschreef de cookie terug naar NL, waardoor een net gekozen taal stilletjes terugviel.

v0.20
Wednesday, 3 June 2026

Currency based on IP country at signup — the US really pays in dollars

New feature

Signup form now both shows and charges in the currency of the visitor's country

The signup form showed the currency based on browser language (EN → USD), but the Stripe charge was hardcoded to EUR. An American visitor saw dollars but was charged in euros — a mismatch between display and collection.

Infra

Pricing helpers and subscription display fully currency-aware

The rate calculation (lib/pricing) and all Stripe flows assumed euros.

Bug fix

Server koos verkeerde taal bij dubbele taal-cookie

Oude bezoekers konden twee portal_locale cookies hebben: een legacy host-locked (vaak nog "nl") naast de nieuwe cross-subdomain cookie (bv. "fr"). De server pakte er willekeurig één — meestal de oude "nl" — waardoor de changelog in het Nederlands bleef ondanks taalkeuze FR/EN/DE.

Bug fix

Vertaal-cache warmde de verkeerde changelog-entries

De cache-warming pakte alle versie-nummers uit de broncode, inclusief interne (verborgen) entries. Daardoor vielen juist een deel van de ZICHTBARE entries buiten de gewarmde set en bleven die in het Nederlands.

Bug fix

Laatste signup-stap bleef in het Nederlands bij EN/DE/FR

De quiz-banner toonde de juiste taal (bv. "FAST GESCHAFFT" in het Duits) maar het aanmeldformulier eronder bleef Nederlands. Oorzaak: twee gescheiden taalsystemen — de landing/quiz gebruikt de "senly-lang" bron, terwijl het formulier via useLanguage() de "portal_locale" cookie leest die op /signup nog op NL kon staan.

New feature

Klanten die tijdelijk pauzeren kun je nu op "Gepauzeerd" zetten

Een klant kon alleen Actief of Inactief zijn. Voor klanten die de dienstverlening even on hold zetten maar binnen enkele maanden terugkomen, was er geen passende status — je moest ze op Inactief zetten, waardoor ze niet meer te onderscheiden waren van echt beëindigde klanten.

Infra

Technische opzet: onHold-veld + backwards-compatible afgeleide status

Een volledige migratie van het isActive-boolean naar een enum zou 150+ plekken in de code raken — te risicovol.

Polish

"TIJDELIJK · FOUNDER-TARIEF" tekst wit i.p.v. teal

Bug fix

Changelog bleef hardnekkig NL door fragiele client-side aanpak

De eerste opzet vertaalde de changelog client-side ná page-load. Dat bleek onbetrouwbaar: een service-worker serveerde oude bundles, en de fetch-trigger miste door een hydration-timing race regelmatig z'n moment. Resultaat: bezoekers in EN/DE/FR zagen alsnog Nederlands.

Polish

Aanmeldformulier (laatste stap) is nu veel breder over de pagina

De embedded SignupForm in de quiz was 640px breed — voelde te smal en krap op grote schermen.

Bug fix

"Verwezen via PARTNERS"-badge was deels onleesbaar en niet netjes opgemaakt

De affiliate-code in de badge had een witte transparante achtergrond (rgba(255,255,255,0.06)) — relic van het oude donkere thema, dus nagenoeg onzichtbaar op de lichte form-achtergrond. De code "PARTNERS" leek los te zweven.

Bug fix

Changelog bleef in NL ondanks taalkeuze EN/DE/FR

Twee samenlopende oorzaken. (1) De runtime-translate fetch vuurde niet op natuurlijke page-load door een effect-volgorde race tijdens hydration. (2) Veel hardnekkiger: de service worker (cache senly-v27) serveerde de OUDE JS-bundle, waardoor zelfs na deploy van de fix de gefixte code nooit in de browser laadde — elke test draaide tegen verouderde code.

New feature

Urgency-banner met countdown boven de pricing-section

De Founder-korting was visueel zichtbaar via doorgestreepte prijzen, maar mistte een tijdscomponent — geen reden om NU te beslissen.

Polish

SignupForm rendert nu zonder eigen donkere achtergrond binnen de quiz

De laatste stap van de quiz (het 14-dagen aanmeldformulier) toonde een smalle witte card op een donkere mesh-achtergrond. Dat botste met de lichte quiz-stappen ervoor — het leek een aparte donkere tab midden op het scherm.

Bug fix

Quiz gaf "Er ging iets mis bij opslaan" op de laatste stap

Het /api/signup-quiz endpoint stond niet in de publieke-paden whitelist van de middleware. Daardoor werd de POST geredirect naar /login (HTTP 307) — de quiz draait juist VOOR de bezoeker een account heeft, dus er is geen sessie. De fetch kreeg een redirect ipv JSON terug en toonde de generieke opslaan-fout.

Polish

"Terug"-knop op stap 1 gaat nu naar de homepage

Op de eerste quiz-stap was de Terug-knop disabled (grijs). Bezoekers die zich bedachten konden niet terug naar de landing page zonder de browser-back-knop.

Bug fix

Railway-deploy v9.08 faalde tijdens TS-compile op de "Anders"-knop in quiz stap 4

Na de v9.08 fix kreeg submitQuizAndAdvance een optionele Attribution-parameter, maar de onClick-handler op de Doorgaan-knop (bij "Anders"-flow) gaf het MouseEvent als argument door — TypeScript klaagde dat MouseEvent geen Attribution is. Railway-build crashte op "Type 'MouseEvent' is not assignable to type 'Attribution'".

Bug fix

Na het kiezen van attribution-bron ging quiz niet door naar signup-formulier

In stap 4 (Waar gevonden?) bleef de quiz vast hangen na selectie. submitQuizAndAdvance() las data.attribution uit een stale closure (setData is async), waardoor de guard-clause de submit blokkeerde. Resultaat: bezoeker zit vast, geen signup-form, dropoff op laatste stap voor je conversie.

Bug fix

TikTok-logo onzichtbaar op stap 3 (witte cards)

TikTok-platform-card op stap 3 ("Welke platformen beheer je?") had kleur #ffffff (wit) ingesteld voor donker-thema, maar de quiz heeft een lichte achtergrond. Logo verdween dus volledig in de witte card.

New feature

Stap 2 vraagt nu ook naar groei/business-pijn, niet alleen operationele zorgen

De oude 5 challenges in stap 2 waren allemaal operationeel ("tijd voor rapporten", "chaotische tools", etc). De echte pijn van bureau-eigenaren is meestal resultaat-gericht: te weinig groei voor klanten, hoge churn, kunnen geen nieuwe klanten werven. Senly kan die problemen mede oplossen, maar bezoekers konden ze niet selecteren = verloren segmentatie-data.

New feature

665+ releases lazy-vertaald via Gemini, server-side gecached

De pagina chrome (header, filters, labels) was vertaald, maar de inhoud van elke release-entry stond hardcoded NL in lib/changelog.ts. Een bureau-eigenaar die op EN/DE/FR het portaal gebruikt, zag de changelog in het Nederlands. Statisch vertalen van 600+ historische releases × 4 talen is ondoenbaar.

Polish

Quiz refactored naar grid-cards layout (zoals Higgsfield) met witte achtergrond

De v9.00 quiz had list-style opties met emoji-iconen op de SignupForm light-theme. Voelde inconsistent met de "premium" Higgsfield-feel die als referentie was gegeven. Plus de eerste donker-versie streek niet met de rest van Senly's lichte huisstijl.

New feature

Pricing-section op senly.io toont nu ook doorgestreepte oude prijs + besparing

De /prijzen-pagina kreeg in v8.98 de Founder-korting (anchor + badge), maar de pricing-teaser op de homepage (senly.io) stond nog op de kale €50/€40 zonder doorgestreepte regulier-prijs. Bezoekers die alleen tot aan de homepage scrollen misten de psychologische trigger volledig.

Bug fix

Featured Growth-card had wit-op-licht tekst en was nauwelijks te lezen

De middelste pricing-card had alleen een teal-gradient als achtergrond zonder ondoorzichtige base. Op de marketing-pagina (lichte page-bg) schoof de page door de transparante gradient heen, waardoor de card bijna wit werd terwijl tekst + ondertitels + features op witte styling stonden — onleesbaar.

New feature

Founder-tarief op /prijzen, /en/pricing, /de/preise en /fr/tarifs

De prijzen op de marketing-site stonden zonder anchor — bezoekers zagen alleen €50/€40 zonder referentiepunt waardoor de prijs als duur kon overkomen.

Polish

Voorbeeld-regels in pricing-cards tonen besparing concreet

Voorbeelden ("10 klanten = €500/maand") gaven het bedrag wel maar niet de besparing.

Polish

Blueprint-grid in dashboard-achtergrond minder opdringerig

De grid-lijnen die in v8.94 zijn toegevoegd waren op sommige plekken net te aanwezig en concurreerden met de content-cards.

Polish

Subtiele 64×64 grid-lijnen op de dashboard-achtergrond

De marketing-site heeft een mooie blueprint-grid in de hero die het premium gevoel oplevert. Het portaal zelf had alleen een egale donker-teal gradient — minder visueel rijk dan de landing.

Polish

Start-trial knop matcht nu de kleur van het gekozen platform-logo

De "Start 14 dagen gratis" CTA stond altijd in LinkedIn-blauw, ongeacht of je op Instagram, TikTok of Facebook tab stond. Inconsistent met het platform-specifieke karakter van de info-cards.

New feature

Instagram + TikTok krijgen ook info-card stijl (in lijn met LinkedIn + Facebook)

IG en TT gebruikten een scrape die op productie vaak faalde (Railway IP geblokt), met als fallback een manual-input flow. Niet consistent met LinkedIn/Facebook die direct een info-card toonden. Bezoekers vonden de inconsistentie verwarrend.

New feature

TikTok info-card heeft expliciete veiligheid-disclaimer over lage limiet

TikTok-cijfers (+150-250 volgers/mnd) lijken laag vergeleken met Instagram. Bezoekers vroegen zich af waarom.

Polish

Calculator-code drastisch vereenvoudigd: scrape/error/manual-input/result UI verwijderd

De component had ~200 regels dood code voor de scrape-flow, error-states, manual-input fallback, profile-rendering en result-state. Niet meer nodig nu alle 4 platforms statisch zijn.

v0.19
Tuesday, 2 June 2026

Facebook info card: invite volume + conversion figures

Polish

Facebook stats now tell the whole story: 30k invites → 3-5k new followers/mo

The Facebook stat "+200-400 new page likes per month" only gave the end result without context. Visitors wondered where Senly's figures came from.

New feature

Facebook als 4e platform met info-card (+200-400 page-likes / +15-25 leads per maand)

Calculator had alleen Instagram, TikTok en LinkedIn. Veel bezoekers vragen ook naar Facebook-groei.

Polish

Volgersgroei-card toont nu per-maand cijfer in plaats van 3-maands totaal

Bezoekers zagen "+19.976 extra volgers in 3 mnd" maar moesten zelf delen door 3 om te begrijpen wat dat per maand betekent. Per-maand is concreter voor de "wat krijg ik elke maand"-vraag.

Bug fix

LinkedIn/Facebook "Start 14 dagen gratis" CTA: tekst was wit-op-wit onleesbaar

De LinkedIn-blauwe CTA-knop werd door een generieke .sn-calc-card a-rule overschreven met witte achtergrond. Witte tekst op witte bg = onleesbaar tenzij je met de muis hovert. Conversion-killer.

New feature

Als Instagram-scrape faalt, kan bezoeker zelf z'n volgers invullen voor een persoonlijke prognose

Instagram blokt alle datacenter-IPs (Railway, Vercel én Cloudflare). De growth calculator viel terug op een nette "schakel over naar TikTok"-melding, maar IG-bezoekers die liever niet wilden switchen liepen alsnog vast zonder resultaat te zien.

Polish

Achtergebleven @socialmediatools.nl-adressen vervangen door @senly.io

Op verschillende publieke pagina's en in support-content stond nog "info@socialmediatools.nl" / "support@socialmediatools.nl" / "noreply@socialmediatools.nl". Inconsistent met de Senly-merknaam.

Infra

Optionele Cloudflare Worker omzeilt Railway IP-block bij Instagram

Instagram blokt Railway's datacenter-IP met 429 Too Many Requests, waardoor de growth calculator op productie slechts ~30% van de Instagram-scrapes laat slagen — zelfs na multi-UA retries en cache.

Polish

Het Telefoon-kanaal is van /contact afgehaald

Het Telefoon-kanaalblok ("+31 (0)85 060 5050") stond zichtbaar op de contactpagina en ook in de JSON-LD structured data, waardoor Google het mogelijk als snippet zou tonen. Voor de huidige supportflow (e-mail + formulier) is dat overbodig.

New feature

LinkedIn werkt nu zonder scrape — statische info-card met realistische cijfers

Bij het kiezen van LinkedIn in de growth calculator kreeg de bezoeker alleen een "binnenkort beschikbaar"-error. Niet ideaal voor conversie: bezoekers zagen direct dat een feature kapot was. LinkedIn heeft sinds 2018 geen publieke endpoint meer zonder OAuth, dus echt scrapen is geen optie zonder login-flow (wat conversie zou killen).

Bug fix

Geen valse foutmelding meer als de mail al weg was

Bij snel verwijderen kwam de melding "0 verwijderen gelukt, 4 mislukt: Thread niet gevonden — mogelijk is de mail inmiddels al verplaatst". Maar als de mail er al niet meer was, is het eind-resultaat (mail weg uit inbox) feitelijk gewoon bereikt — onnodig om er een fout van te maken.

Polish

Naam- en e-mail-placeholders zijn nu generieke voorbeelden

Het naam-veld toonde "Dylan van Dijk" als placeholder, het e-mail-veld "dylan@bureau.nl". Voor bezoekers oogde dat als pre-filled formulier (alsof er al iemand ingevuld stond) en het hint nergens naar wat er verwacht wordt.

Bug fix

Gmail-throttling fout opgevangen bij snel achter elkaar verwijderen

Na de vorige fix (batched bulk-move) was de rate-limit weg, maar Gmail's eigen per-seconde quota zorgde dat individuele moves binnen een batch nog "Command failed" kregen. Resultaat: alert met "0 verwijderen gelukt, 1 mislukt".

Bug fix

Image-proxy whitelist te smal voor email-bodies

De image-proxy stond alleen images toe van een whitelist (Metricool, Instagram, Facebook etc.). E-mails van GitHub, Railway, Cloudflare en eigenlijk iedere afzender met images werden geblokkeerd → broken-image-icoontjes in de inbox.

Bug fix

Schakel naar DE → terug naar NL: footer bleef Duits

Na de cross-subdomain cookie-fix (v8.69) bleef bij oude bezoekers de legacy host-locked `portal_locale` cookie naast de nieuwe `domain=.senly.io` cookie bestaan. `document.cookie` retourneerde dan twee waarden met dezelfde naam, en de regex pakte willekeurig de eerste — vaak nog de oude DE-waarde. Resultaat: bij terugswitchen naar NL bleef de footer (en andere client-rendered tekst) op DE staan, ook al toonde de server-rendered hero correct NL.

Bug fix

"Te veel verzoeken" weg bij rapid-fire prullenbak-klikken

Als je snel achter elkaar de prullenbak op 20-40 mails klikte, sloeg de globale 120-req/min rate-limit aan en kreeg je "Te veel verzoeken". Sommige mails verdwenen wel uit de UI maar werden niet daadwerkelijk verwijderd.

Polish

Avatar-checkbox uit eerdere experiment teruggedraaid

De korte-tijdse avatar-vervang-checkbox is eruit; de inbox ziet er weer hetzelfde uit als daarvoor. Bulk via per-mail prullenbak-klik is met de queue snel genoeg dat aparte multi-select-UI niet nodig is.

Polish

Selectie-checkbox vervangt het avatar i.p.v. ernaast komen

De checkbox stond als extra kolom voor de avatar, wat de grid-layout van de thread-row brak: rijen kregen verschillende breedtes, geselecteerde rijen leken groter. Plus de "Verplaats naar prullenbak"-knop in de bulk-bar was zo lang dat de tekst over drie regels brak en de hele bar uitelkaar trok.

Bug fix

Contactformulier (en alles op app.senly.io) blijft in dezelfde taal als senly.io

Wie op senly.io op DE/EN/FR klikte zag op senly.io alles vertaald, maar bij doorklikken naar app.senly.io (bv. /contact, /helpcentrum, /status) bleef het formulier in NL. Oorzaak: de portal_locale-cookie werd zonder `domain=`-attribuut gezet, dus host-locked op senly.io en niet zichtbaar op app.senly.io. Server-side viel die laatste terug op Accept-Language (vandaar de juiste taal in de zijbalk), maar useLanguage() in client-components viel terug op browser-taal (vaak NL).

Bug fix

Status-pagina: component-namen en omschrijvingen nu in EN/DE/FR

De vetgedrukte kopjes op /status (Portaal, Marketing site, Database, Authenticatie, Email-verzending, Bestand-opslag, Achtergrond-jobs) en hun beschrijvingen kwamen recht uit de DB en bleven daarom altijd Nederlands — ook als de rest van de pagina al in een andere taal stond.

Performance

Typen in het zoekveld en klikken op een kaart triggert nu alleen herrenders van de componenten waarvan de props wijzigen

Na v8.64 was de wiskunde rondom de data al optimaal, maar React rendert standaard nog steeds het hele component-subtree bij elke state-wijziging. Concreet: 1 toetsaanslag in de zoekbalk triggerde een herrender van alle 12 maand-tabs, alle 8 categorie-tabs en alle 132 dag-kaarten (ook al was alleen de filter-output veranderd). Bij het uit/open klikken van 1 kaart herrenderden alle 132.

New feature

Vink meerdere mails aan, één klik om alles in de prullenbak

20 mails snel achter elkaar verwijderen liep tegen de globale 120-req/min rate-limit aan ("Te veel verzoeken"). En zelfs zonder rate-limit was elke mail per stuk klikken simpelweg te traag. Outlook en Gmail hebben dit al jaren.

Performance

Eén API-call voor 200 mails ipv 200 losse

Iedere thread-move was een aparte HTTP-call die door de middleware rate-limit ging. Bij 20+ acties tegelijk = direct 429.

Performance

Drie perf-issues opgelost waardoor de Content Dagboek pagina merkbaar sneller laadt en filters direct reageren

De pagina had drie cumulerende issues: (1) "kapotte" memoization — `now = new Date()` binnen de render maakte elke render een nieuwe Date-instance, waardoor de useMemo dependency steeds verschilde en ALL_DAYS bij iedere render opnieuw werd geconcat + gesorteerd; (2) de maand-tab-bar deed bij elke render 12 × 132 = 1584 iteraties omdat de count per maand telkens via .filter().length werd berekend; (3) de page was force-dynamic en deed bij elke request een redundante getServerSession() DB-call ondanks dat alle data statisch is en de middleware de auth al doet.

Bug fix

Klikken op een tab landde soms niet volledig op de doelsectie (bv. Klantinfo werd niet bovenaan getoond)

De smooth-scroll werkte met een vooraf berekende targetY (genomen op klik-moment) en interpoleerde daar lineair naartoe. Maar tijdens de animatie kan de layout boven de doelsectie verschuiven: door de Framer Motion expand van CollapsibleSections, asynchrone re-renders, of resize-observers. Het resultaat: de scroll eindigde op een verouderde Y en kwam een aantal pixels (soms 50-150) tekort.

Bug fix

Klikken op een verre tab (bv. Klantinfo) liet de pill kort op Content "stilstaan" tijdens het scrollen

De scroll-spy werd gelockt voor 800ms na een tab-klik, om te voorkomen dat tussenliggende secties als actief gemarkeerd werden. Maar de smooth-scroll + CollapsibleSection expand-animatie kan langer dan 800ms duren — dan keek de spy halverwege "Content" als laatste-gepasseerde sectie en zette de pill daar, tot de scroll z'n doel bereikte en de pill weer naar Klantinfo schoot. Zichtbaar als een knipper.

Bug fix

Pill van actieve tab plakte nog steeds niet tegen de bar-rand ondanks v8.60

De vorige fix paste alleen de base .client-tabs regel aan, maar twee verderop in globals.css stonden overrides die mijn padding terug op een waarde >0 zetten: een mobile mediaquery (padding: 8px 4px !important) en een .client-profile-container variant (padding: 6px !important). Die laatste is exact de selector die op de klant-detailpagina actief is — dus die override won altijd.

Polish

De actieve tab-pill (groen) zat met een paar pixels witruimte van de bar-rand af; nu vult 'ie de bar tot tegen de border

De .client-tabs container had padding: 5px en de pill een kleinere border-radius (16px vs bar 20px). Het resultaat: een dubbele "indent" — de pill leek alsof er bewust ruimte omheen was gelaten, wat onbedoeld een lossere relatie tussen pill en bar gaf.

Polish

Knop nu solid teal met witte tekst i.p.v. zwakke teal-on-light

De Maak klantmap-knop was teal tekst op een lichte teal-tint achtergrond — dat werkt in dark mode maar wast volledig weg in light mode. Op witte cards bijna onleesbaar.

New feature

Maak klantmap-knop bij elke submap in de Drive-sectie

Stel je klantprofiel staat per ongeluk gekoppeld aan een te brede map (bv. de hele "Klanten"-folder met daarin alle bureau-klanten). Dan zag je in de Drive-sectie alle andere klanten als submappen staan. Er was geen snelle manier om vanuit die weergave te zeggen: "deze ene submap is de echte klantmap van dit klantprofiel".

New feature

Bewaar je "Klanten"-map als root, Senly matcht automatisch per klant

Na Drive-koppeling stond de root op je hele Drive ("Mijn Drive"). Daardoor scanden auto-koppeling en de folder-picker ALLE top-level mappen — inclusief vakantiefoto's, Inbox, etc. Bij een klant als "Noes Fiolet Studio's" zocht Senly tussen al die top-levels, vond geen match, en je moest manueel per klant doorklikken.

New feature

Bestaande klantmappen worden direct herkend

Bij de eerste versie van de bureau-eigen Drive-koppeling vroeg Senly alleen de `drive.file` scope: toegang tot files die Senly zelf had aangemaakt. Resultaat: bureau's zagen na koppelen een lege "Senly Klanten"-folder en moesten al hun bestaande klantmappen handmatig verslepen. Onbruikbaar.

New feature

Bureau's met eigen whitelabel-domein kunnen ook gewoon Drive koppelen

Google OAuth eist een statische redirect-URI whitelist. Als bureau X z'n portaal whitelabelt naar app.bureauX.nl, zou de Drive-callback ook daar moeten landen — maar die URL staat niet in onze Google OAuth-client. Resultaat: redirect_uri_mismatch error. Per bureau handmatig whitelisten schaalt niet.

Infra

Schema: Tenant.customDomain + OAuthSession.returnUrl

Tenant krijgt een optioneel customDomain veld (unieke whitelabel-host). OAuthSession krijgt een returnUrl-veld voor de canonical-redirect flow. Dezelfde aanpak werkt straks voor Microsoft/OneDrive, Canva, GHL en elke andere OAuth-integratie — moet alleen per provider geretrofit worden.

New feature

Mailbox-filter in de e-mail-inbox

In het e-mail-overzicht zag je wel je gekoppelde mailboxen, maar je kon niet filteren om alleen de mails van één specifieke inbox te zien.

New feature

Bureau's koppelen hun eigen Google Drive met één klik

Tot nu toe liep alle Drive-opslag via één centraal service account (mijn Drive). Klantbestanden van alle bureau's zaten in mijn account, en als het service account onderuit ging — zoals vanmiddag — viel ALLE Drive-toegang in één klap weg voor iedereen.

Security

Drive-scope beperkt tot "drive.file" — alleen Senly-content

Een full drive-scope geeft toegang tot ALLES in iemand's Google Drive — vakantiefoto's, belastingaangiftes, alles. Voor een SaaS-integratie veel te ruim.

Infra

Nieuwe DB-model TenantDriveConnection + 4 OAuth-routes

Schema: 1 koppeling per tenant (uniek), met accessToken/refreshToken/expiresAt/googleEmail/rootFolderId. Routes: /api/integrations/gdrive/{connect,callback,disconnect,status}. lib/gdrive.ts heeft nu een getDriveContext(tenantId) resolver die transparant kiest tussen tenant-OAuth en central service account — bestaande callers blijven werken zonder aanpassing.

Bug fix

Topbar van het analyserapport was nauwelijks leesbaar

De Terug-knop, titel en Download-knop in de viewer-topbar waren bijna onzichtbaar. De viewer zat onder de dashboard-header (Header + AppSidebar) en de gebruikte CSS-variabelen resolveden anders in light mode dan verwacht.

Polish

Analyserapport opent in een eigen viewer met "Terug naar klant" knop

PDF-rapporten openden in een verse tab zonder geschiedenis, dus de browser-terugknop deed niets. Je moest m sluiten en de klantpagina opnieuw zoeken.

Performance

Vlot scrollen door grote PDF-rapporten

Doorheen een 30-pagina rapport scrollen voelde alsof Chrome elke pagina opnieuw moest downloaden. Klopte ook: de download-API leverde de hele PDF in een blok met no-store, dus geen progressive rendering mogelijk.

Bug fix

PDF van evaluatiegesprek opent niet meer in 404

Na het uploaden van een analyserapport bij een evaluatiegesprek gaf de download-link een 404. Next.js production-server bouwt de static-files index bij startup; PDFs die na de build naar /uploads/evaluations werden geschreven werden niet langer geserveerd, zelfs niet met het Railway-volume gemount op /app/public/uploads.

Security

PDF-rapporten alleen zichtbaar voor mensen met toegang tot de klant

Het oude pad /uploads/evaluations/eval-<clientId>-... was raadbaar — iedereen die de URL kende kon de PDF binnenhalen, ook zonder login.

Bug fix

De "Plan een demo" knop in de Hulp nodig-kaart op de Launchpad werkt weer

De knop linkte naar /helpdesk, maar die route bestaat niet — klikken leidde nergens heen (404 of stille no-op).

New feature

Knop "Aftrek bewerken" op de medewerker-kosten pagina opent een inline edit-modus waarin je per klantkoppeling de aftrek (€) op de klantomzet kunt aanpassen zonder naar het klantprofiel te navigeren

Sinds v8.35 kun je per sales-koppeling een aftrek in euro instellen, maar dat kon alleen via het klantprofiel. Bij een bureau met tientallen koppelingen was dat veel klikwerk om bv. voor 20 koppelingen tegelijk een nieuwe aftrek in te stellen.

New feature

Per Appointmentsetter/Closer/Sales Manager-koppeling kun je nu een aftrek in euro instellen die zowel hun commissie als hun zicht op de klantomzet verlaagt

Bureaus wilden hun sales-rollen kunnen belonen op basis van een "interne omzet" die lager is dan de werkelijke klantomzet — zonder dat de sales-medewerker weet wat de klant écht betaalt. Bijvoorbeeld: klant betaalt 440 euro per maand, admin stelt 10% commissie + 40 euro aftrek in → sales ziet de klant als 400 euro waard en krijgt 10% van 400 = 40 euro commissie. Was niet mogelijk: zowel de berekening als de UI gingen altijd uit van de werkelijke monthlyFee.

v0.18
Monday, 1 June 2026

Canva OAuth: cookieless via state-in-URL — works 100% cross-site

Bug fix

No more "verifier_missing", even in incognito or strict-cookie mode

Even after moving the PKCE state to the DB (v8.20), linking kept failing, because we still needed a session_id cookie to find the DB row. During cross-site OAuth redirects, even small SameSite=Lax cookies are sometimes not forwarded by incognito and Chrome's strict tracking blocking. Agencies trying to link for the first time got stuck on this.

Bug fix

Geen "verifier_ontbreekt" / "state_mismatch" meer bij verbinden

Bij het koppelen van een Canva-account zetten we PKCE code_verifier + CSRF state in HTTP-only cookies. Bij de redirect terug van Canva naar Senly werden die SameSite=Lax cookies door sommige browsers (incognito, Chrome met strict tracking-blocking) niet teruggestuurd → koppeling faalt. Symptomen: rode banner "verifier_ontbreekt" of "state_mismatch", terwijl alles aan onze kant correct was. Nieuwe bureaus konden hierdoor geen verbinding maken.

Polish

Launchpad padding-top gelijk aan Takenbeheer (112px)

padding-top berekend als container-top (80px) + eyebrow-hoogte (12px) + eyebrow-margin (18px) + sa-title-row-margin (2px) zodat de h1 op dezelfde verticale positie staat.

Polish

Launchpad-content heeft nu dezelfde zij-padding als Takenbeheer

20px extra horizontale padding toegevoegd aan lp-root zodat de afstand tot de zijbalk overeenkomt met pagina's die een .container wrapper gebruiken.

Polish

Launchpad-content start bovenaan i.p.v. verticaal gecentreerd

justify-content: center verwijderd van lp-root zodat de titel op dezelfde verticale hoogte staat als Takenbeheer en andere pagina's.

Polish

Launchpad-titel en info-popover gelijk aan Takenbeheer en andere pagina's

Titel gebruikt nu th2-title + sa-title-row, info-icoontje en popover zijn de gedeelde InfoPopover-component. Popover verschijnt altijd op de voorgrond via een hogere z-index op de titel-sectie.

New feature

Per klant nu een vrije tekstbeschrijving van de persoon

Bij overdracht tussen social media managers ging persoonlijke kennis over de klant verloren — hoe iemand communiceert, voorkeuren, gevoeligheden. De bestaande "Notities & wensen" sectie is bedoeld voor schrijfinstructies aan de AI, niet voor het overdragen van mens-kennis.

Polish

Launchpad-paginatitel met klikbaar info-icoontje

Boven de voortgangsbalk staat nu "Launchpad" als paginatitel. Het info-icoontje ernaast opent een popover met uitleg over het doel van de Launchpad.

Polish

Geen rode "niet gevonden"-melding meer op de klantpagina

Onder Klantinfo verscheen voor elke klant de "Documenten"-sectie met een rode foutmelding "Geen lokale map gevonden voor X. Controleer BEDRIJVEN_FOLDER_PATH." De feature werkt alleen als de server-env var BEDRIJVEN_FOLDER_PATH is gezet en er een persistent volume aan dat pad gemount is — op productie zonder die setup heeft de sectie geen nut en geeft ze alleen visuele ruis.

Polish

"Nieuwe entry toevoegen" niet meer dik-vet

Modal-titel had font-weight: 800 (extra bold) — voelde te zwaar voor een lichte glas-card.

New feature

Contact-picker bovenin "Nieuwe entry toevoegen"

Bij het aanmaken van een nieuwe onboarding-entry moest je alle contactgegevens (naam, bedrijf, email, telefoon) opnieuw intypen, zelfs als het contact al bekend was in het CRM. Duplicaat-werk + foutgevoelig (typo's, ontbrekende velden).

Performance

Cards verschijnen nu direct i.p.v. ~1 seconde golf

v8.06 fixte de data-fetch dubbel-load (server-side data), maar gebruiker zag de cards nog steeds twee keer komen. Oorzaak: .tx-rec-card had een fade-in animation van 0.6s met per-card stagger van 0.05s tot 0.45s. Voor 6 cards is dat een ~1 seconde wave per rij. Met twee rijen ("Recent gebruikt" + "Aanbevolen voor jou") tegelijk werd dat visueel ervaren als "dubbel laden". Plus tijdens hydration herstart de CSS animation, wat de flash versterkte.

Bug fix

Light-mode override op select/input werkte niet — styled-jsx scoped html-selector verkeerd

In het Financieel-tabblad van het klantprofiel hadden de "Kies…"-dropdowns (Appointmentsetter / Closer / Sales Manager) een donkergrijze achtergrond in light mode — paste niet bij de witte cards eromheen.

Performance

Geen visuele dubbel-flash meer bij /tools openen

ToolsIndex initialiseerde personal state met FEATURED_SLUGS-fallback (7 cards), daarna fetch /api/tools/personal in useEffect → setPersonal → re-render met DB-data. Resultaat: gebruiker zag de tool-cards twee keer achter elkaar laden (eerst fallback, dan API-data).

Polish

Inline-styled loading-state met SVG-spinner — meteen vanaf eerste paint

Bij het openen van een boekingslink (en de manage-link voor annuleren/verzetten) zag je ~1 sec ongestyled "Laden…" linksboven verschijnen voordat de echte pagina inviel. Oorzaak: de styles stonden in `style jsx global` die pas NA hydration actief wordt — voor die periode kreeg de browser dus puur HTML zonder CSS.

Bug fix

Pijl sprong naar row 2 onder de avatar

.user-card had grid-template-columns: 44px 1fr auto (3 kolommen), maar v7.98 voegde een vierde child toe (sessies-knop) naast de bestaande pijl. CSS Grid plaatste het 4e element (pijl) automatisch op row 2 col 1 — onder de avatar. Resultaat: elke card 28px hoger dan nodig.

Bug fix

Wit blok over donker dashboard opgelost — verkeerde CSS-vars

Op het appointment-setters dashboard verscheen de "Mijn compensatie"-widget in dark mode als een groot WIT blok waardoor tekst (flat fee, commissie, totaal, tabel) niet leesbaar was. In light mode werkte het wel.

Polish

User-cards ~40% lager zonder data te verliezen

Op /admin/users zag je maar 3-4 user-cards per scherm. Veel verticale ruimte tussen elementen, grote avatar, dikke padding.

New feature

lib/metricool.ts en alle 13 aanroepende routes herwerkt zodat per-tenant credentials overal worden gebruikt

Na v7.95+v7.97 was de credentials-infrastructuur (secret-vault + Tenant-velden + UI) klaar, maar alle 13 aanroepende routes gebruikten nog de oude sync authHeaders/userId helpers die alleen env vars lezen. Een bureau dat via /admin/integraties/content-kalender z'n eigen Metricool-token instelde, zag nog steeds platform-quota gebruikt worden bij sync/post/analytics/calendar/canva-send/ai-content/ai-post-image/feed-style/monthly-report/calendar-aggregate/review.

New feature

Sessies-overzicht per gebruiker met "log overal uit"

Geen manier om te zien wie waar ingelogd is of om een gecompromitteerde sessie te beëindigen. Een admin die ontdekt dat een ex-medewerker nog ingelogd is, kon alleen het wachtwoord wijzigen en hopen dat de JWT verloopt.

New feature

2FA-status zichtbaar in gebruikerslijst

2FA-data zat al in de DB (User.mfaEnabled + mfaSecret) maar werd nergens in admin/users getoond. Admin kon niet snel zien welke users 2FA hadden ingesteld.

Infra

IP-privacy via hash + prefix-only opslag

Volledige IP-adressen opslaan = privacy-overweging onder AVG/GDPR. Vereist rechtvaardigingsgrond en kort bewaartermijn.

New feature

Nieuwe admin-page /admin/integraties/content-kalender met token + userId formulier

Per-tenant Metricool-credentials konden alleen via API (PATCH /api/integrations/metricool/credentials) ingesteld worden — geen UI. Bureaus moesten dus DevTools openen of een aparte client gebruiken om hun eigen token in te voeren.

Performance

Geen "verdwijnende oudere events" meer bij schaal

De activiteiten-pagina haalde altijd 100 items op en filterde client-side. Bij grote tenants betekende dat: zodra je meer dan 100 events had, miste je de oudere — geen enkele zoekopdracht of filter kon erbij komen. Search en type-filter beperkten zich tot het 100-venster.

Bug fix

platforms-card ::before/::after lekten uit hun container in dark mode

In dark mode verscheen een gloeiende cyaan→blauw→paars→rood gradient-line boven de Content sectie op klantprofiel. Alleen zichtbaar zonder taken (toevallig — de scroll-positie maakte het opvallend). Oorzaak: .platforms-card had alleen in light mode position: relative + overflow: hidden. In dark mode misten beide. De ::before (4px platform-accent strip met linear-gradient TikTok #25F4EE→#FE2C55, Instagram orange→pink→purple, etc.) en ::after (30px blur-glow) hebben position: absolute + top: 0; left: 0; right: 0. Zonder positioned ancestor zochten ze de dichtstbijzijnde — vaak meerdere niveaus hoger. 8 platforms-cards stapelden zo hun gradient-bars op TOP van de hele Content section → multi-color gloeiende horizontale lijn.

Infra

Alle diagnose-test CSS-overrides verwijderd

Tijdens de zoektocht naar de bron heb ik 5 diagnose-blokken in globals.css toegevoegd (v7.79: knop verbergen, v7.81: hele Content verbergen, v7.82: collapsible-stack + platforms + spacer, v7.85: alleen collapsible-stack, v7.90: alleen platforms-strip).

Infra

cp-collapsible-stack uitgesloten → testen platforms-strip

v7.85 wees uit dat de 4 CollapsibleSection cards NIET de bron zijn. Bron is dus de platforms-strip (Platformen-blok met platform-cards) of de spacer-div met margin-top: 72px.

New feature

Pipeline-creatie krijgt zelfde card-grid UX als de Onboarding-modal, met 4 startpunten van compact (5 stages) tot uitgebreid (17)

Elke nieuwe pipeline kreeg automatisch dezelfde 17 hardcoded stages (Lead binnen → Gekwalificeerd → Gebeld → ... → Inactieve klant). Voor solo-bureaus of korte sales-cycli was dat overweldigend en moest je handmatig 10+ kolommen wegklikken om iets bruikbaars over te houden. Modal was bovendien een platte naam-input zonder enige indicatie van wat je kreeg.

Polish

Service-filter verschijnt nu pas bij 2+ verschillende dienst-types in de flow, en toont alleen de typen die er ook echt in zitten

De "Alle diensten"-dropdown stond altijd in de toolbar — ook bij flows met 0 contacten, mono-dienst flows (alles SM Beheer), of bureaus die per dienst al een aparte flow hebben (waardoor filteren binnen die flow zinloos was). Plus toonde de dropdown alle 9 SERVICE_TYPES opties terwijl er bijvoorbeeld alleen "SM Coaching" en "SM Beheer" in de flow voorkwamen — visueel cluttered.

New feature

Taken zoals "zoom 80%" en "probeer dark mode" kun je nu netjes afvinken (i.p.v. "Sla over")

Voor stappen zonder DB-detectie was de enige manier om ze van de actieve lijst te krijgen "Sla over" — wat ze visueel als "Overgeslagen" markeerde, ook als je de actie wel had uitgevoerd. Voelde niet eerlijk.

New feature

Nieuwe prullenbak-knop naast de flow-selector + DELETE-handler die de UI bijwerkt

Backend had al een DELETE /api/onboarding/flows/[id]-endpoint, maar er was geen UI-knop om een flow te verwijderen. Gebruikers konden onbedoeld duplicaten of testflows niet kwijtraken.

Infra

Verder isoleren binnen Content sectie

v7.84 bevestigde dat een van drie elementen (cp-collapsible-stack / platforms-strip / spacer-div) de bron is. Nu testen we welke specifiek.

Infra

Bron is binnen Content sectie bevestigd → nu collapsible-stack isoleren

v7.81 test was succesvol: hele Content sectie verbergen liet de gradient-line verdwijnen. Bron is dus binnen Content. Maar binnen Content zitten 4 dingen: header-row (titel + knop), cp-collapsible-stack (4 cards), platforms strip, en een lege spacer-div.

New feature

NewFlowModal vervangen door visuele card-grid met 9 templates en stage-previews

De "Nieuwe flow"-modal had een platte <select>-dropdown waarin je een template kon kiezen — niet inzichtelijk wat je kreeg en gebruikers wisten niet welke template bij hun proces paste. Plus de modal was 440px breed met alleen een naam-input + dropdown, voelde meer aan als databank-formulier dan als productverkenning.

New feature

Stap 1 voor iedereen: zet je browser-zoom op 80%

De launchpad miste een universele eerste stap die direct uitlegt hoe je het portaal het comfortabelst gebruikt.

New feature

+13 nieuwe onboarding-stappen verdeeld over rollen

Basisinstellingen kreeg: taal kiezen, notificaties instellen, dark mode proberen, valuta instellen (admin), eigen domein koppelen (admin). Klanten & werk kreeg: eerste taak aanmaken, eerste maandrapport versturen (beide bureau). Meetings & boeken kreeg: video-meeting app koppelen, booking-emails personaliseren. E-mail kreeg: email-handtekening instellen. Tools & integraties kreeg: cloud-opslag koppelen (admin). Sales-flow kreeg: lead-bronnen configureren (sales manager), eerste outreach-template (sales). Per rol zie je nu een veel completer onboarding-pad.

Infra

Hypothese "Deel review-link knop" gefalsifieerd → nu hele Content sectie verbergen

v7.79 verborg de Deel review-link knop in dark mode op klantprofiel om te testen of die de bron was van de gradient-line. Gebruiker meldt dat de lijn er nog is — knop is dus niet de bron.

Infra

v7.71 + v7.76 defensieve neutralisaties verwijderd

De pseudo-element neutralisatie (v7.71) en de tweede shotgun-pass met overflow:clip + box-shadow weghalen (v7.76) hadden geen effect op de gloeiende gradient-line. Beter terugdraaien om de codebase schoon te houden.

Infra

TIJDELIJKE diagnose: Deel review-link knop verborgen in dark mode

Gebruiker vermoedt dat de Deel review-link knop de bron is van de gradient-line. Om dit te valideren zonder live DOM-inspectie nodig te hebben, verbergen we de knop tijdelijk in dark mode op klantprofiel.

Polish

"FLOWS" als eyebrow, "Onboarding" als hoofd-titel (was andersom)

De Onboarding-pagina had "ONBOARDING" als kleine eyebrow boven een grote "Flows"-titel. Gebruiker vond de hiërarchie logischer omgekeerd: het primaire onderwerp van de pagina is Onboarding, en Flows is de feature-naam — die hoort als label boven de titel.

Polish

Solid bg-elev + drie accent-radials erbovenop (zelfde stack als .app-shell-main)

v7.75 gebruikte een color-mix(accent 14% + diep donker) — leek wel groen maar matchde niet exact de meetings-kalender. Die ziet er groener uit door twee gestapelde lagen: var(--bg-elev) als solid basis + de .app-shell-main accent-radials (19/13/14% teal) die door transparante cellen heen schemeren.

Bug fix

Aggressievere neutralisatie van gradient-line boven Content sectie

v7.71 schakelde pseudo-elements uit op cp-section-header-row / client-section / cp-collapsible-stack — maar de lijn bleef. Gebruiker meldt dat de lijn alleen verschijnt wanneer Taken via EmptyState gerendered wordt (zonder taken). Kandidaten: empty-state-icon box-shadow glow, Deel review-link knop, overhangende shadow uit een sectie.

Polish

bg-elev grijs vervangen door color-mix(accent 14% + diep donker)

v7.74 gebruikte var(--bg-elev) (#161a21 = neutraal grijs) voor het gebied vanaf de filter-balk. Dat voelde te neutraal — geen relatie met de huisstijl.

Polish

v7.73 was overshoot — splits-aanpak: gradient blijft boven, uniforme kleur onder

v7.73 maakte de hele /changelog uniform bg-elev waardoor de hero ook plat werd — de portal-gradient die overal in dark mode te zien is verdween. Bedoeling was dat alleen ván de filter-balk t/m de releases die uniforme groen-zwarte kleur kreeg, en de hero erboven de gewone portal-sfeer behield.

Polish

Radial-gradient stack vervangen door solid var(--bg-elev)

De /changelog-pagina had in dark mode een stack van 6 radial-gradients als achtergrond (overgenomen van de portal-body). Daardoor waren er zichtbare lichtere/donkere zones tussen de hero, filter-balk en releases — onrustig.

Bug fix

Multi-kleur gradient-line gloeide boven de Content sectie

In dark mode verscheen een gloeiende horizontale gradient-line (teal/cyaan → blauw → paars → rood) vlak boven de Content sectie op de klantprofiel-pagina. De exacte bron-selector was via grep niet te identificeren — kandidaten waren ::before/::after op cp-section-header-row, section[data-tour="klant-designs"], of cp-collapsible-stack.

Polish

Kalender-raamwerk wordt direct getoond, events floeren erin zodra ze geladen zijn

v7.69 ving de auto-refresh op, maar bij een verse pagina-load (zonder cache) verspringde het scherm nog steeds naar een "Laden..."-tekst voordat het grid verscheen. Onrustig en onnodig.

Polish

Refresh werkt nu écht silent op de achtergrond

Elke 90 sec (en bij tab-focus / op de refresh-knop) verving het hele kalender-grid voor een "Laden..."-tekst, ook al stond er al data. Het scherm verspringde dus regelmatig, wat onrustig oogt en je positie/zicht onderbreekt.

New feature

LinkedIn-logo krijgt een persoon- of building-badge rechtsonder zodat persoonlijk vs zakelijk in één oogopslag duidelijk is

Wanneer een klantprofiel zowel een persoonlijke LinkedIn (/in/<naam>) als een zakelijke bedrijfspagina (/company/<id>) gekoppeld had, was er geen visueel onderscheid tussen de twee cards — beide toonden hetzelfde LinkedIn-logo. Plus: de twee accounts konden door de account-volgorde in de DB ergens in de platformen-rij verspreid staan, niet altijd naast elkaar.

Bug fix

InstagramProfileCheckButton verschijnt nu alleen als account.cookieFile aanwezig is — zelfde gedrag als LinkedIn/TikTok

Op de klantprofiel-pagina toonde de Instagram-card een actieve "AI-profielcheck"- + "Bekijk laatste"-knop, óók wanneer de extensie nog niet ingelogd was. Andere platforms (LinkedIn, TikTok) verbergen hun acties terecht zolang er geen sessie is — Instagram week af. Klikken op de knop in niet-ingelogde staat liep linea recta in een scraper-fout omdat het profiel niet bereikbaar is zonder cookie.

Polish

Sticky filter-balk had hardcoded donkere achtergrond i.p.v. portaal-bg

.cl-filters-wrap had in dark mode background: rgba(11, 14, 20, 0.85) — een ondoorzichtige donkere balk die over de portaal-radial-gradient lag. Daardoor was de zone met de filter-pills duidelijk donkerder dan de rest van de pagina (zichtbare horizontale "band" tussen hero en releases).

Bug fix

Eerste card van de Aanbevolen-rij stond half-gescrolled

De rij rendert eerst met defaultSuggested (fallback), dan herrendert met API-data. Bij die wissel hield de track soms een non-zero scrollLeft vast — je zag dan de eerste card links half afgesneden i.p.v. vol vanaf de rand.

Bug fix

E-mail: "Command failed" bij snel achter elkaar mails verwijderen

Gmail throttled bij rapid-fire deletes. Het frontend deed één request en toonde direct een alert bij elke transient error — dus elke 3e-5e delete kreeg "Kon thread niet verwijderen: Command failed".

Bug fix

Trends: Exporteren-knop deed niets

De Exporteren-knop op /trends had een lege placeholder-handler (onClick={() => { /* placeholder */ }}). Click → geen download, geen feedback.

Polish

Changelog dark mode: exact dezelfde achtergrond als het portaal

/changelog had in dark mode een eigen radial-gradient-stack met paars-accent en hardcoded #070a0f/#0b0e14 basis. Voelde subtle "anders" dan de portaal-pagina ernaast — niet als één geheel.

Bug fix

Tools: "Aanbevolen voor jou" toonde maar 5 items

/api/tools/personal filterde recent-gebruikte tools uit FALLBACK_SUGGESTED (7 items). Als 2+ tools al "recent" waren, bleven er 5 over — niet genoeg om de 6-kolommen rij te vullen. De fallback-check triggerde alleen bij <4 items.

Bug fix

Deel review-link knop bleef wit in dark mode

.rv-share-trigger-btn had background: var(--card, #fff) en color: var(--text, #1a2332). --card was nergens gedefinieerd, dus de knop viel terug op #fff en #1a2332 — witte knop met donkere tekst op een donkere pagina-achtergrond.

Polish

E-mail-paneel langer zodat ruimte onder = ruimte boven

.ml-app had margin: 20px 0 24px met height: calc(100vh - 160px). Bij een ~70px topbar gaf dat 20px ruimte boven maar ~46px gat onder de shell — visueel scheef.

Polish

Brand kit, overzicht en andere klant-detail blokken krijgen meer ademruimte

De klant-detail pagina (/klant/[slug]) erfde de standaard .container max-width van 1320px. Op brede schermen voelde dat krap — vooral de brand-kit kleur-cards en het overzicht-blok hadden veel ongebruikte witruimte links en rechts.

Polish

.app-shell-main accent-radials terug, content-area niet meer plat-donker

v7.57 ging te ver: naast de echte oorzaak (saturate(150%) op alle <header> elementen) had ik ook .app-shell-main solid donker gemaakt + z-index:1. Daardoor verdween de subtiele teal branding-glow op het dashboard volledig — alles werd platvloers donker.

Bug fix

Globale header backdrop-filter weggehaald + content-area uniform donker

Door HEEL het portaal verschenen in dark mode lichtere/blauwige rechthoekige patches achter cards en boven section-titels. Bug bestond letterlijk sinds dag 1 (eerste 40 uur van het project). Eerdere pogingen om body-radials of .app-shell-main-accent te verzwakken hielpen niet omdat de daadwerkelijke oorzaak op TWEE plekken zat tegelijk.

New feature

Profielfoto verantwoordelijke i.p.v. initiaal-rondje

In de takentabel zag je bij "Verantwoordelijke" een rondje met de eerste letter van de naam — niet de echte foto. Voelde minder persoonlijk en minder herkenbaar dan bv. de meetings-pagina waar avatars wel verschijnen.

New feature

Top-tabs Werkload / Overzicht / Kalender met underline op active

De Takenbeheer-pagina toonde alleen de takenlijst (eventueel als Kanban). Er was geen high-level overzicht of dag-gericht kalender-zicht — terwijl admins juist zoiets gevraagd hebben.

Polish

Filter-pills nu als witte rechthoekjes met ronde hoeken

.th2-chip filter-knoppen hadden in light mode een transparante achtergrond met dunne border — voelde plat en goedkoop vergeleken met de KPI-cards rechtsboven die wel duidelijke witte rechthoekjes zijn.

Bug fix

Tweede .container.financieel-container regel met padding-top 64px override mijn v7.54 fix

Mijn v7.54 zette padding-top op 16px in een vroeg blok, maar later in globals.css stond een tweede .container.financieel-container regel met padding-top: 64px !important die door CSS-cascade later won (gelijke specificiteit, latere wint). Resultaat: Statistieken op 16px, Financieel op 64px — nog steeds inconsistent.

Polish

.container.financieel-container krijgt nu ook padding-top 16px ipv 80px default

Net zoals Statistieken in v7.52 — de Financieel-pagina erfde 80px top-padding van de default .container, tabs begonnen pas halverwege de viewport.

Bug fix

Horizontale uurlijnen flakeden in de week-kalender

.meet-week-slot border was color-mix(in srgb, var(--border) 70%, transparent). In light mode is var(--border) al rgba(12, 36, 34, 0.09) — 9% opacity. De 70%-mix bracht dat naar ~6% effectieve opacity, onder de drempel waar browsers een 1px-border betrouwbaar renderen. Bij scroll, zoom of subpixel-shift verdween een deel van de uurlijnen waardoor je ze "soms wel, soms niet" zag en moest refreshen om ze terug te krijgen.

Polish

Statistieken-pagina content begint nu direct onder de header bar zoals Meetings

.container.home-container erfde de default .container padding-top van 80px. Resultaat: een grote witruimte tussen de top header-bar en de eerste tabs (Health check / Klanten / Team / Systeem). Voelde onnatuurlijk leeg vergeleken met Meetings.

Bug fix

Reader-paneel had nog een mauve tint i.p.v. echt wit

.ml-reader::before tekende twee radial-gradients (paars rechtsboven, teal linksonder) bedoeld als premium "glow", maar in light mode op een witte ondergrond zag dat eruit als een lichtgrijze / mauve tint i.p.v. pure wit — niet wat de gebruiker verwachtte naast de witte sidebar en threadslijst.

Bug fix

Reader-paneel had een lichtgrijs vlak i.p.v. wit

.ml-reader had background: var(--mlnx-bg) — in light mode is dat #f7f8fa (off-white), een tintje donkerder dan body's #ffffff. Daardoor zag het reader-paneel er grijs uit naast de witte sidebar en threadslijst.

Polish

.campaign-search border transparanter + dezelfde zachte shadow als KPI-cards

In light mode trok de "Zoek campagnes..."-input een opvallende grijze omlijning op de pagina — terwijl de KPI-cards ernaast veel subtieler oogen door hun box-shadow.

Polish

Avatar-foto's zien er nu professional uit

De pravatar.cc-portretten waren artistiek/casual (man met lang haar, vrouw met sjaal, persoon met zonnebril) — past niet bij de "Plan een demo met ons team"-context.

Polish

Tijd-rij + dag-kolom + uur-slot lijnen krijgen meer opacity zodat ze altijd duidelijk renderen

De gridlijnen waren op 60% (uren) / 30% (slots) van --border opacity gezet. In sommige browsers + sommige scroll-posities renderde de subpixel-anti-aliasing dit zo subtiel dat de lijnen visueel "wegvielen" (glitching look). Plus ze waren überhaupt te zacht om als duidelijke structuur te dienen.

Polish

.taskio-card achtergrond iets transparanter — portal-bg schijnt sterker door

Gebruiker wilde de widget-shell iets meer transparant zodat de portal-bg duidelijker doorschijnt en de cards minder "vast" op de bg liggen.

Polish

Avatar-stack toont nu echte mensen i.p.v. JD/SM/RW-stubjes

De drie kleur-bolletjes met initialen zijn vervangen door <img>-tags die portretten ophalen van i.pravatar.cc (open-license stock). Drie vaste indices die typisch Noord-Europees ogen. Alt-tekst bevat Nederlandse demo-namen voor accessibility. De "+8"-badge blijft staan voor het idee van een groter team.

Polish

.taskio-card krijgt rgba(255, 255, 255, 0.025) — identiek aan .calendar-page-container

Na v7.43 (frosted-glass !important rule weg) viel .taskio-card terug op var(--bg-elev) (vlak #161a21). Gebruiker wilde echter precies dezelfde look als de Kalender-shell ("Bekijk agenda van — Social Media Tools"), met subtiele wit-glas laag die de portal-bg laat doorshijnen.

Bug fix

rgba(16, 21, 30, 0.55) + saturate(145%) frosted-glass-rule met !important overruled v7.40 — nu verwijderd

v7.40 zette .taskio-card op var(--bg-elev) maar de blauwerige tint bleef zichtbaar. Reden: op regel 59166 stond een verborgen @media (min-width: 900px) override met `background: rgba(16, 21, 30, 0.55) !important; backdrop-filter: blur(24px) saturate(145%);` die alle vorige fixes met !important overruled. De rgba(16, 21, 30) heeft B=30 > R=16 (duidelijk blauwerig) en de 55% opacity + saturate(145%) liet de portal accent-glow ook nog versterkt doorshijnen.

Polish

Drie radial-gradients (bg-tint-strong/tint/soft) op .ml-app teruggezet — versie van v7.31 hersteld

background: transparent vervangen door de radial-gradient-stack van v7.21/v7.26/v7.31. De teal-wash is weer zichtbaar in de e-mail-shell. Border 0 en box-shadow none blijven (was uit v7.31). Kolom-hairlines uit v7.34 blijven ook intact.

Bug fix

Tekst in "Hulp nodig?"-card stond per ongeluk gecentreerd

Een oude .lp-help { text-align: center }-regel uit globals.css (resterend van de login-pagina) lekte mee naar het Launchpad-card en gaf "Ons team staat klaar..." een ongewenste centrering.

Polish

.taskio-card krijgt vlakke var(--bg-elev) ipv transparent — accent-tint uit portal-bg schijnt niet meer door

Met background: transparent uit v7.37 schenen de teal radial-gradients uit .app-shell-main (3 ellipsen op 13-19% opacity in var(--teal)) door de widgets heen. De gebruiker zag dat als een "blauwerige" tint binnen elke widget — niet wenselijk.

Polish

Geen lege ruimte meer onderaan de pagina

De Launchpad-content stond bovenaan met een grote zwarte/witte plek onder de laatste taak. Op een normaal scherm voelde de pagina onaf doordat de blokken niet de viewport vulden.

v0.17
Sunday, 31 May 2026

Email dark mode: green "box" around the Inbox gone — shell fully transparent

Polish

Three radial gradients on `.ml-app` removed, background now transparent so the body gradient shines through uniformly everywhere

The `radial-gradient(75% 70% at 0% 0%, bg-tint-strong)` created a strong teal hotspot in the top-left of the email shell, making the area around the "Inbox" look like a separate green-tinted box while the rest stayed darker.

Polish

.taskio-card buitenste container krijgt background: transparent en box-shadow: none, sub-elementen blijven gekleurd

De buitenste widget-shell .taskio-card had nog een inset highlight rgba(255, 255, 255, 0.04) + drop-shadow die samen een vlak-illusie gaven, terwijl de gebruiker een volledig transparante container wilde. Wel moeten sub-elementen (deadline-vakjes met gekleurde glow, quick-action items met var(--bg-mid)) hun eigen achtergrondkleur behouden.

Polish

Donut-cijfer leunde tegen de boog-uiteindjes

Donut iets vergroot (130×75 i.p.v. 110×62), cijfer iets compacter (16 px i.p.v. 18 px) en verder van de bodem gepositioneerd (8 px i.p.v. 4 px). Status-card kolom navenant verbreed naar 130 px zodat de donut past.

Polish

.taskio-card achtergrond is nu transparent in dark mode

Zelfs de subtiele rgba(255, 255, 255, 0.025) glas-laag uit v7.33 voelde nog te aanwezig op de donkere portal-bg. Gebruiker wilde de achtergrondkleur er helemaal uit.

Polish

border-right op .ml-folders en .ml-threads gebruikt nu rgba hairline ipv solide #262c34

De kolom-scheidingslijnen waren een solide donker grijs-blauw (#262c34 = --mlnx-border) die zichtbaar als donkere verticale lijnen tussen sidebar/thread-lijst/reader zichtbaar waren. Visueel deed het lijken alsof de middelste kolom een andere achtergrond had.

Polish

Alle .taskio-card widgets (Maandwinst, Laatste activiteit, Snelle acties, Aankomende deadlines) krijgen nu dezelfde subtiele wit-glas laag als de Kalender-shell

De dashboard widgets waren in dark mode bijna pikzwart door een 4-laagse radial-gradient (var(--bg-tint-strong) + var(--bg-tint) + var(--bg-tint-soft) op var(--bg-elev)). Resultaat: vrijwel onzichtbare cards op de donkere portal-bg. De Kalender-pagina ("Bekijk agenda van — Social Media Tools") had daarentegen een veel lichtere, transparant-witte glas-laag die mooi door de portal-bg heen scheen.

Polish

Status-card naast voortgangsbalk uitgelijnd in hoogte

Sinds de hero op align-items: start stond, was de status-card rechts (met halve donut) langer dan de voortgangsbalk links — onevenwichtig.

Polish

box-shadow en border op .ml-app verwijderd zodat geen donkere lijnen meer rond de e-mail-shell verschijnen

De .ml-app shell had box-shadow: 0 8px 24px -12px rgba(0,0,0,0.5) en border: 1px solid rgba(255,255,255,0.06) — gaf zichtbare donkere randen aan elke kant van de e-mail-sectie, alsof het paneel naar voren werd geduwd.

Bug fix

Search-bar wrapper had panel-soft achtergrond + #262c34 border in dark mode

.ml-threads-search wrapper had background rgba(255,255,255,0.04) + border #262c34. Resultaat: zwarte rechthoek-look bovenop de teal-glas shell.

Polish

Hero van 3 naar 2 kolommen, progress-blok niet meer naar onderen gepusht

Na het verwijderen van de raket-illustratie bleef de hero-grid in 3 kolommen (1fr 280px 280px) staan — daardoor zat er een leeg gat tussen de voortgangsbalk en de "Waar sta je nu?"-card. Plus de progress-wrap werd via margin-top: auto naar de onderkant van een uitgerekte hero-kolom geduwd, waardoor er witruimte boven het blok ontstond.

Polish

Drie decoratieve blokken verwijderd voor een schonere onboarding-pagina

De raket-SVG in de hero, de "Snel aan de slag"-quick-list (Bekijk onboarding video / Download mobile app / Helpdesk-link) in de rechter sidebar, en de "Pro tip"-card met "Meer tips bekijken"-knop zijn weg. Hero is nu compacter; rechter sidebar bevat alleen nog "Hulp nodig?" en "Wat is nieuw?".

Polish

"Launchpad" h1 en intro-zin verwijderd

De "Launchpad"-titel met info-icoon en de regel "Jouw persoonlijke setup voor een succesvolle start" zijn weg. De hero begint nu direct met de voortgangsbalk; categorieën verschijnen meteen daaronder.

Bug fix

Per ongeluk verwijderde .ml-app teal-radial-gradient achtergrond hersteld

Commit 20d9aaf draaide v7.21 terug: de drie radial-gradients (bg-tint-strong/tint/soft) op var(--bg-elev) basis die de e-mail-shell zijn karakteristieke donker-teal wash gaven, werden verwijderd. E-mail dark mode oogde daardoor te plat en zonder die premium glas-look die op Meetings wel zichtbaar is.

Polish

Geen brede witruimte meer boven en naast de Launchpad-content

De Launchpad had padding: 80px 20px 120px en max-width: 1320px met centrering — dat gaf veel witruimte aan de bovenkant en links/rechts. De Meetings-pagina staat juist edge-tot-edge tegen de header en zijkant.

Polish

Card-shell rond e-mail-shell weer weggehaald

De .ml-app radial-tint-laag die in v7.21 werd toegevoegd om de Meetings-look te imiteren is verwijderd. Dark mode keert terug naar de configuratie van v7.17: panels transparent, body-gradient schemerend, geen extra teal-wash binnen een afgeronde shell.

Polish

Launchpad-pagina volledig herontworpen volgens de premium SaaS-mockup van de gebruiker

De Launchpad was een 2-koloms layout met alleen categorieën + takenlijst. Geen visueel anker, geen contextuele hulp, geen onboarding-cues. De pagina voelde leeg en functioneel ipv premium.

Polish

Wit-glas overlay vervangen door de teal-tinted multi-radial-gradient die .ml-app ook gebruikt

v7.20 (wit-alpha overlay) voelde anders aan dan de E-mail-pagina die een specifieke radial-gradient teal-tinted shell heeft.

Polish

Subtle teal-wash vervangen door volwaardige donker-teal radial-tint

In dark mode had de e-mail-shell een nauwelijks zichtbare teal-tint (rgba 0.05). De gebruiker wilde de duidelijke donker-groene tint die op /meetings zichtbaar is — die komt daar van de body-radials maar werd op de e-mail-pagina niet doorgegeven.

Polish

Teal-tint vervangen door wit-tint en alpha verdubbeld voor lichtere widget-look

v7.19 had subtiele teal-tint (3.5% -> 0.8%) wat het oog zag als te donker en niet light genoeg. Gebruiker wilde de transparante achtergrond veel lichter.

Polish

Solide donkere base layer onder de teal-tint weggehaald — body-gradient schijnt nu volledig door

v7.16 had nog rgba(11,14,20,0.6) als solid base onder de teal-tint, waardoor de widgets nog steeds donker en relatief opaque oogden.

Polish

E-mail-shell krijgt nu dezelfde card-look als de Meetings-kalender in dark mode

In dark mode liepen de drie e-mail-kolommen wel netjes door in de body, maar er was geen visuele card-omsluiting met ronde hoeken zoals op /meetings — daar staat het kalender-grid duidelijk in een teal-getinte wrapper met afgeronde hoeken.

Bug fix

E-mail-kolommen blokten de body-achtergrond in dark mode

In de vorige fix kregen alle drie de e-mail-kolommen een effen achtergrond (#070a0f). Dat dekte de body-gradient af — geen teal/violet tinten meer zichtbaar door de e-mail-pagina heen. Op andere pagina's zoals Meetings komt die wash juist wél door.

Polish

Glassmorphism overlay gebruikt nu teal-brand-kleur i.p.v. neutraal wit alpha

v7.15 gebruikte rgba(255,255,255) overlays wat een neutraal-wit washed-out gevoel gaf. Past niet bij de brand-stijl van het portaal — de Content-kalender heeft een veel meer teal-getinte donkere achtergrond.

Polish

Taskio-card widgets krijgen in dark mode dezelfde glasachtige transparantie als de Content-kalender

In dark mode hadden de dashboard-widgets een vrij solid donkere achtergrond (var(--bg-elev)) terwijl elders op de site (zoals de Content-kalender) een glasachtige transparante stijl zit waardoor de body-gradient subtiel doorschijnt. Inconsistente diepte-look.

Bug fix

Linker- en middenpaneel hadden in dark mode nog een lichter tintje dan body

De vorige fix maakte de e-mail-reader gelijk aan body, maar de sidebar en threadslijst (--mlnx-panel) waren nog #11161e — een tintje lichter dan body. Daardoor was de overgang van body naar die kolommen alsnog zichtbaar.

Polish

Settings-zijbalk en content-area krijgen card-styling met afgeronde hoeken en consistente witruimte

.meet-settings layout had geen horizontale padding, waardoor de zijbalk plat tegen de linkerrand plakte zonder ronde hoeken aan top-left en bottom-left. Inconsistent met de Kalender-tab die wel 20px padding heeft en card-styling op zijn elementen.

Polish

De paarse glow rechtsonder kwam uit .app-shell-main — vervangen door huisstijl-accent

Na v7.09 (portal-page-bg paarse aura's naar accent) bleef er een paars-roze gloed rechtsonder zichtbaar in dark mode op alle dashboard-pagina's (Launchpad, etc.). Bron: .app-shell-main op regel 59134 had een hardcoded rgba(139, 92, 246, 0.18) ellipse op positie 82% 82% — precies waar de chat-widget zit. Lichtmode-variant op regel 59144 had rgba(139, 92, 246, 0.04). Beide overleefden de v7.09-pass omdat ze in een andere selector dan tbv-page--portal zaten.

Bug fix

leftSidebarOpen/rightSidebarOpen worden nu atomisch uit localStorage geïnitialiseerd i.p.v. via een aparte read-effect

Bij tab-switch terug naar Meetings kwamen de linker en rechter zijbalken vaak weer terug, zelfs als de gebruiker ze net had dichtgeklapt. Oorzaak: useState(false) + read-effect was vatbaar voor een race — bij first render dropte de write-effect (state via closure = false) "closed" terug in localStorage VOORDAT de read-effect z'n setLeftSidebarOpen(true) propageerde. Bij een snelle remount-cyclus (auto-refresh visibility-handler) eindigde dat met een verkeerd-gepersisteerde of opnieuw-uitgelezen "open" voorkeur ondanks dat de gebruiker net had dichtgeklapt.

Bug fix

Links naast de e-mail-shell zat in dark mode een harde lijn met de body

In dark mode was de e-mail-pagina-achtergrond #0d1117 terwijl de body #070a0f gebruikte — 6 helderheids-eenheden verschil. Dat gaf links en rechts van de e-mail-shell een zichtbare overgang alsof de achtergrond ophield. In light mode liep het wél door omdat body daar pure wit is en de e-mail-tegels nauwelijks afwijken.

Polish

Hardcoded violet radial-gradients in de pagina-achtergrond gebruiken nu var(--accent) zodat ze de ingestelde brand-kleur volgen

De Launchpad-pagina (en alle andere portal-pagina's die .tbv-page--portal gebruiken) toonden een paars-roze gloed rechtsboven die uit de toon viel bij een teal/groene huisstijl. Op vier plekken in globals.css stond rgba(139, 92, 246, 0.22) hardcoded in dark mode + rgba(167, 139, 250, 0.28) in light mode — beide violet/lavender — als achtergrond-aura. De Launchpad eigen orbs gebruikten al var(--accent), maar de page-bg daaronder dus niet.

Polish

Kalender krijgt standaard de volledige ruimte; je voorkeur wordt onthouden

De twee zijbalken op /meetings (links: mini-kalender + agenda-filters, rechts: deze-week stats + up next) stonden altijd open. Op kleinere schermen of voor wie de kalender wil zien, is dat te druk.

Polish

Title-fontweight van 700 naar 600

De "Postvak IN" header en de subject-titel van een geopende mail zijn een tintje slanker gemaakt (bold → semibold). Voelt eleganter en past beter bij de premium look.

Polish

Safari/WebKit-default border rond de "Zoek campagnes..."-input verwijderd

Het zoekveld bovenaan de campagnes-pagina had een dubbele border: de wrapper had de stijl-border, en de browser tekende daarnaast nog een eigen ronde border rond de <input type="search"> zelf (Safari/Chrome default voor search-inputs).

Polish

Compactere kop op /email/campagnes

De "E-mail campagnes"-titel met envelope-icoon en de intro-zin ("Stuur klanten maandelijkse updates, nieuwsbrieven of aankondigingen met templates") zijn verwijderd. De breadcrumb "E-mail › Campagnes" blijft staan en geeft genoeg context; de pagina opent nu directer met de KPI-tegels.

New feature

Nieuwe BookingCalendarSync-table + cancelBookingExternalSyncs helper — booking-cancel reikt nu tot in alle gekoppelde agenda's van de host

Bij booking-create syncede Senly het event naar alle gekoppelde agenda's (Google/Outlook/Apple), maar de externe externalIds werden nergens vastgelegd. Bij cancel — via host DELETE, host PATCH→cancelled óf attendee self-service token — werd alleen de DB-status op CANCELLED gezet plus een cancellation-mail verstuurd. De gesyncede kopieën in de iPhone Apple Calendar, Google Calendar, etc. bleven staan en moesten handmatig opgeruimd worden.

Polish

Placeholder-sparklines en niet-werkende AI-suggesties uit de campagnes-pagina

Op de campagnes-pagina stonden nog drie placeholder-elementen: de verzonnen sparklines achter de 4 KPI's, een "Optimaliseer onderwerpregels"-card met een dode knop, en een "Beste verzendtijd — Donderdag 10:00"-card die uit de losse pols gehaald was.

Bug fix

filteredBookings filtert nu status === "cancelled" weg — tile valt direct uit het week/dag/maand grid

Bij klik op "Annuleer boeking" werd de booking in de DB op CANCELLED gezet en kreeg de attendee netjes een cancellation-mail, maar het tile bleef vrolijk in de kalender hangen. Status badge in het popover toonde wel "CANCELLED", maar de visuele booking was nog steeds zichtbaar op zijn oorspronkelijke tijdslot. Andere code-paden in dezelfde file (Vandaag-strip, Up Next, MonthGrid telling) filterden cancelled wel weg, alleen de hoofd-render via filteredBookings → MonthGrid/WeekGrid/DayGrid niet.

New feature

Echte open- en click-tracking voor verzonden campagnes

De KPI-tegels en per-campagne statistieken op /email/campagnes waren placeholders. Je wist nooit hoeveel mensen je mail écht openden of doorklikten — alleen hoeveel mails er waren afgeleverd.

New feature

Inactieve abonnees-KPI + werkende "Start re-engagement"-knop

De vierde KPI was "Omzet gegenereerd" — verzonnen data. En de "Start re-engagement"-knop in AI Suggesties deed niets.

Polish

De annuleer-knop in het booking-popover is nu een volle destructive button i.p.v. piepkleine ghost-tekst rechtsonder

De "Annuleer boeking"-knop stond als 12px grijze text-only knop helemaal rechtsonder in de footer — vrijwel onzichtbaar. Gebruikers vonden de delete-actie niet en gingen via hun iPhone Apple-agenda het event verwijderen, maar dat haalde alleen de sync-kopie weg; de Senly source bleef staan en het event verscheen opnieuw in de kalender. Plus: de oude knop gebruikte een browser-confirm() popup, lelijk en out-of-style.

Bug fix

Floating action button rechtsonder op de Trends-pagina verwijderd

Op de Trends-pagina stond een teal FAB op fixed bottom: 24px right: 24px die conflicteerde met de chat-widget op dezelfde positie. Gaf een lelijke dubbele-cirkel look. Daarbij deed de FAB nog niets (placeholder voor toekomstige AI-assistent).

Bug fix

Globale a-tag CSS overschreef de witte tekstkleur op de Open meeting link knop

In BookingDetailPanel was de knop een <a> met meet-btn-primary class. Globaal a:hover { color: var(--text) } heeft specificiteit 0,1,1 > .meet-btn-primary (0,1,0). Resultaat: tekst alleen zichtbaar bij hover.

New feature

Externe agenda-wijzigingen verschijnen nu vanzelf in de kalender zonder te navigeren

Als de gebruiker een event verwijderde via zijn iPhone/Apple Calendar, bleef het oude event in Senly staan tot hij naar een andere pagina navigeerde en terugkwam — soms minuten lang. Oorzaak: useEffect(() => load(), []) draaide alleen bij mount, geen polling en geen window-focus listener. De localStorage-cache van 2 min liep wel af maar zonder trigger gebeurde er niets.

Polish

Geen-verbinding pagina krijgt elegante centered card met auto-retry indicator

Offline-pagina was plat: generic icoon, basic typografie, plain teal knop op donkere achtergrond.

New feature

Nieuwe "Verwijder uit agenda"-knop in het externe-event-popover met confirm-flow + provider-sync

Bij klik op een Google/Outlook/Apple-event in de meetings-kalender opende een read-only popover met enkel een tekstje "Dit event komt uit je gekoppelde X-agenda en kan alleen daar bewerkt worden." De gebruiker moest naar de externe agenda-app om iets te verwijderen — onnodig, want de provider-delete-functies (deleteGoogleEvent / deleteOutlookEvent / deleteAppleEvent) bestonden al voor onze eigen booking-cancel flow.

Polish

/email/campagnes is van simpele kaartenlijst naar volwaardig dashboard

De campagnes-pagina was een afgeslankte kaartenlijst zonder overzicht: geen KPI's, geen filter, geen paginatie, geen statistieken per campagne. Vergeleken met de rest van het portaal voelde 't zwak en lui.

Polish

"E-mail gebruik" widget (2,4 GB / 10 GB / 24%) onderaan de email-sidebar verwijderd

Widget toonde hardcoded statische waardes 2,4 GB / 10 GB / 24% met als comment "placeholder, echte byte-meting komt later". Misleidende UI — gebruiker dacht dat dit echte data was.

New feature

Twee toggle-knoppen op de toolbar — klap de hele linker of rechter zijbalk in voor meer kalender-ruimte

Twee nieuwe leftSidebarOpen + rightSidebarOpen states. .meet-cal-layout krijgt no-left en no-right modifier classes die grid-template-columns naar 0 1fr X of X 1fr 0 zetten. Smooth transition 320ms cubic-bezier(0.16, 1, 0.3, 1) op de grid-columns geeft een vloeiende slide-animatie. Inhoud van de sidebar fade-out + translateX 12px voor extra polish. Toggle-knoppen in de toolbar (links en rechts) met SVG icoon dat 180deg rotateert om de state te tonen. Beide sidebars staan default open zodat niets verandert voor bestaande gebruikers — kunnen op verzoek wegklikken voor maximale focus op de kalender. Mobile (max-width 900px) blijft full-width met sidebars verborgen.

Polish

Event-titels in week/dag-view terug naar weight 600 voor betere leesbaarheid

Vorige iteratie had de titels naar weight 500 gezet, wat in de kleine event-blokken te dun was om vlot te scannen. Terug naar weight 600 — middenweg tussen "drukke 700" en "te dun 500". Toegepast op week-bk, week-ext, day-bk, day-ext.

Polish

Meeting-titels in Up next en kalender-namen in Verdeling deze week zijn nu dunner

.meet-upnext-info strong (Niura analysegesprek, Met mama mee naar het ziekenhuis, etc.) van font-weight 700 -> 500. .meet-dist-name (Gezinsagenda, Werk, Agenda) van 600 -> 500. Consistent met de stat-nummers en event-titels die ook 500 zijn.

Polish

Stat-nummers (11, 19u 40m, 39%, 1u 47m) 28px/600 -> 22px/500. Event-titels 600 -> 500.

Display-typografie van 28px/font-weight 600 verlaagd naar 22px/font-weight 500 voor de 4 stat-cards. Letter-spacing iets minder agressief (-0.025em ipv -0.035em). Event-blok titels (week-bk, week-ext, day-bk, day-ext) ook 600 -> 500. Resultaat: rustiger en eleganter, minder schreeuwerige cijfers en titels.

Polish

Cards en event-blokken hebben nu uniforme achtergrond i.p.v. subtiele gradients

Vorige polish-ronde voegde subtiele 180deg gradients toe aan alle cards + 105deg diagonale gradient op event-blokken. Bij elkaar maakte dat de pagina visueel drukker i.p.v. eleganter — te veel beweging in het oog.

Polish

Alle cards, knoppen en numeriek typografie verfijnd naar high-end UI standaard

Cards en buttons voelden web-default aan met enkele 1px borders en simpele shadows. Numerieke typografie (11, 39%, 19u 40m) was te dik en zonder tabular nums. Geen subtiele gradients, geen multi-layer depth.

Bug fix

Twee functies waren tijdens de visuele redesign uit de sidebar gehaald

In iteratie 2 had ik de Spam-folder en de "Accounts beheren"-link verwijderd omdat ze niet op de mockup stonden — maar je had ze nodig om ongewenste mail te bekijken en om nieuwe Gmail/IMAP-inboxen toe te voegen.

Bug fix

Mass-mailing campagnes waren niet meer bereikbaar vanuit de mail-pagina

Bij de visuele redesign was de Campagnes-link uit de sidebar verwijderd, en als gevolg was de mass-mailing-pagina (/email/campagnes) alleen nog te bereiken via een directe URL.

Bug fix

Bij klikken van "Alle" verschenen soms de gevlagde mails uit "Met ster"

De fetch voor de vorige filter (bv. Met ster) kon ná de fetch voor je nieuwe filter ("Alle") binnenkomen en de resultaten overschrijven — visueel "glitchte" je dan terug naar gevlagde mails terwijl Alle actief was.

Performance

Geen 30-seconden "wachten op Gmail" meer tussen twee verwijderingen

De actie-knoppen werden disabled tot de Gmail/IMAP-call klaar was. Bij een trage Gmail-antwoord kon het 30 seconden duren voor je weer kon verwijderen, ook al was de volgende mail al geopend.

Performance

Optimistische UI bij verwijderen / archiveren / spam-markeren

Bij klikken op het prullenbakje wachtte je tot de Gmail/IMAP-call klaar was voor de mail uit de lijst verdween — plus een bevestigings-popup. Voelde lui en je bleef met een leeg lezer-paneel zitten.

Bug fix

Klikken op het prullenbakje deed niets bij Gmail-inboxen

De move-endpoint accepteerde alleen IMAP-accounts. Voor Gmail-accounts (zoals zakelijk@socialmediatools…) gaf de server een 400 "Alleen IMAP-accounts ondersteund" terug — visueel leek het alsof het prullenbakje stuk was, en hetzelfde gold voor archiveren en als-spam-markeren.

Bug fix

Sidebar en lezer hadden nog rechte hoeken in plaats van de afgeronde 18 px

Een oudere .ml-app-regel zette padding: 0 20px op de grid-shell. Mijn override zei daar niets over en de oude padding overleefde — daardoor stonden de panels strak binnen een afgerond kader, met zichtbaar rechte hoeken in plaats van mee-afgeronde.

Polish

Geen losse grijze rand meer rond de mail-app

De 3-koloms mail-shell had een border van 1 px rond het geheel — die maakte een tweede lijn buiten de witte panels en gaf een opvulling waar je 16e niet wilde.

Polish

Mail-shell stond te strak tegen de bovenkant van de pagina

De 3-koloms mail-shell had een negatieve top-margin (-8 px) zodat 'ie direct tegen de top-rand van het hoofdpaneel stond — Meetings en andere tabs hebben juist visuele ademruimte rondom de content.

Polish

Subject-rij, sender-strip en mail-content card in lijn met de mockup

In het rechter mail-paneel was de subject één losse h1, en de mail-inhoud landde als platte tekst onder een grijze regel — geen scheiding, geen ademruimte, geen "lux" gevoel.

Polish

Event-blokken voelen nu high-end aan — zachte floating shadow, glowing accent-strip, smoothere transitions

Hard 1px border + plat hover-effect maakten de blokken goedkoop ogen — meer web-app default dan premium calendar.

Bug fix

De Categorieën-card werd bij scroll bovenaan afgekapt — sticky top was 20px terwijl de portal-topbar ~80px hoog is

Bij scroll viel een kwart van de "Categorieën" sidebar-card weg achter de topbar — alleen de items waren zichtbaar, de titel niet meer.

Polish

AI Samenvatting verplaatst van 5e KPI-card naar donkere sidebar-card met live-pulse indicator

De "The Future of Social Media 2026"-card in de sidebar was een statische promo waarvan de "Download rapport"-button geen onClick had — klikte je erop, gebeurde er niks. Tegelijkertijd zat de AI-samenvatting als 5e KPI in een rij die daardoor te druk en breed werd.

Polish

Gradient gaat nu van 10% kleur bij de strip naar 1% bij 60% en helemaal transparant aan de rechterkant

Vorige gradient (22% naar 4%) was nog te dominant — kleuren overheersten de tekst en het overzicht.

Polish

Up next, Verdeling deze week en Deze week krijgen dezelfde kop-stijl als Kalenders / Mijn agenda's

Inconsistente kop-typografie in de sidebar: Kalenders/Mijn agenda's waren uppercase 11px letter-spaced (label-stijl) terwijl Up next / Verdeling deze week / Deze week 14-16px regular case (title-stijl) waren.

Polish

Event-blokken hebben nu een linear-gradient achtergrond i.p.v. uniforme tint

De achtergrond was overal gelijk getint (12% kleur), wat te fel/zwaar voelde. Mockup-vibe wilde subtieler en gericht: feller bij de kleur-strip links, lichter naar rechts.

Polish

Alle drukke kleur-tiles, paarse cards, gekleurde icon-vlakjes en 3D-renders verwijderd ten gunste van monochroom editorial design

De pagina voelde druk, kinderachtig en goedkoop aan met cartoony 3D-floating tiles op blog-cards, gekleurde icon-vlakjes (blauw/mint/roze/paars) op KPI-cards, een fel-paarse AI-samenvatting card, een paars-violette featured rapport-banner, en volle gekleurde pill-tags. Niets daarvan zou je verwachten op een echt premium SaaS-product.

Polish

Vandaag-knop + datum-label + view-toggles + Nieuwe-meeting knop staan nu in een eigen witte card, los van de kalender-grid eronder

De toolbar en de week/dag/maand-grid zaten samen in één witte card met alleen een border-bottom als scheiding. Voelde plakkerig en niet zoals het mockup waar ze visueel apart staan.

Polish

Content Strategie, Algoritmes, Tools & Tips en Advertising krijgen elk een eigen gekleurde brand-style tile

De Categorieën-sidebar gebruikte een mix van platform-brand-logo's (mooi gekleurd) en losse emoji's (🎯 📊 🛠 📢). Stijlbreuk: emoji's zien er flat en OS-afhankelijk uit naast de strakke SVG-platform-logo's.

Polish

Aparte logo-upload op Meetings → Instellingen → Branding verwijderd

Twee plekken om hetzelfde logo in te stellen: de centrale Huisstijl-pagina (waar ook favicon staat) en een aparte per-booking-page override in Meetings → Branding. Verwarrend en redundant. Bovendien wilde gebruiker single source of truth voor logo+favicon.

Bug fix

Host-card schoof omlaag bij de form-stap doordat de rechterkant langer werd

.bp-host-card had margin-top: auto wat het flexbox naar de absolute onderkant duwde. Bij de form-stap (Naam/E-mail/Bedrijf/Telefoon/Toelichting fields) wordt het rechterpaneel veel langer, de shell rekt mee, en het host-blok zakte mee naar beneden zodat het pas onder de fold zichtbaar was. Visueel oneerlijk: host "schoof" tussen stappen.

Polish

Footer-tekst toont bedrijfsnaam (Tenant.name) i.p.v. portalName

Footer op /boek/[user] en /boek/[user]/[slug] gebruikte data.branding.portalName ("Bedrijfsportaal"), maar bureaus willen hun eigen naam zien (bv. "Studio X Marketing").

Polish

Elke rij toont nu een floating brand-tile of GenericContentIcon — geen lege pastel-vakjes meer

De 44px thumb links van elke rij was alleen een platte pastel-vlakje met een puntje "•" (bij algemeen) of klein flat platform-icoontje. Saai, en bij algemene rijen ontbrak elk visueel anker.

Polish

Browser-default border/focus styling op de tijdzone <select> verwijderd

In de tijdzone-pill (Europe/Amsterdam) was een grijze rechthoek rond de tekst zichtbaar — browser-default focus border van het <select> element kwam door mijn appearance:none reset heen.

Bug fix

De datum-picker op /boek/[user]/[slug] toonde maar 3 kolommen i.p.v. 7, dagen wrapten over meerdere rijen

In BookingPage.tsx werd .bp-cal-grid gebruikt voor twee verschillende grids: de datum-picker (7 kolommen voor weekdagen) EN de "Toevoegen aan agenda" knoppen op de success-screen (3 kolommen voor Google/Outlook/Apple). Door CSS-cascade overschreef de tweede definitie (repeat(3, 1fr)) de eerste (repeat(7, 1fr)), waardoor de datum-picker met 3 kolommen renderde en alle weekdagen + dagen wrapten naar belachelijk grote vakjes.

Polish

Spacings over de hele trends-pagina verhoogd voor rustigere "high-end SaaS"-uitstraling

De pagina voelde compact aan; KPI-cards, tabs, blog-grid en inzichten zaten te dicht op elkaar waardoor de cinematic premium-look verloren ging.

Bug fix

Type-error: Property "portalDomain" is missing in default BrandingConfig object

v6.56 voegde portalDomain toe als verplicht veld aan BrandingConfig interface, maar hooks/useBranding.ts had een DEFAULT constante getypeerd als BrandingConfig zonder dat veld. Railway deploy gefaald: Type error: Property portalDomain is missing.

New feature

manageUrl in booking-bevestigingsmail en host-notificatie respecteren nu het tenant portalDomain

v6.56 fixte alleen de link-chip in de UI maar de booking-confirmation email naar de klant en de host-notificatie e-mail bevatten nog hardcoded NEXTAUTH_URL voor de "Annuleren/verzetten"-link. Resultaat: klant ontvangt mail van bookings.jouwbureau.nl maar de manage-link wijst naar senly.io.

New feature

Nieuwe "Laad meer"-knop onder de Laatste inzichten-lijst — start op 8, +10 per klik, met counter voor resterende items

De "Alle trends"-tab beweerde 50 items te bevatten, maar zichtbaar waren alleen 3 trending blogs + 8 inzichten — de overige 39 waren onbereikbaar zonder filter. De vaste slice(3, 11) kapte de lijst stilletjes af.

New feature

Als bureau een eigen portalDomain heeft ingesteld worden meeting-booking links automatisch op dat domein gegenereerd

BookingLinkChip en TypesPanel gebruikten altijd window.location.origin voor de URL ("senly.io/boek/..."), ook als de tenant een eigen white-label domein had ingesteld in Admin > Instellingen. Voor wederverkoper-bureaus geen herkenbare URL voor hun klanten.

Polish

Background van event-blokken krijgt nu een lichte tint (12%) van de eigen meeting-kleur

In plaats van pure witte achtergrond gebruiken alle event-blokken (week-bk, week-ext, day-bk, day-ext) nu color-mix met 12% saturatie van --block-color tegen var(--bg-elev). De border krijgt 20% saturatie van dezelfde kleur. De halve verticale kleur-strip blijft full color. Resultaat: doorzichtige achtergrond in dezelfde kleur als de strip — past beter bij de Apple-stijl met meer visuele samenhang.

Polish

De grote "Meetings" titel met kalender-icoon en de subtitel verwijderd

De .meet-hero-title h1 en .meet-hero-sub p zijn uit JSX gehaald. Alleen de tabs (Kalender / Instellingen) en de publieke booking-link blijven nu in de header. Hero-padding verlaagd van 32px top naar 16px omdat de grote titel weg is. Direct meer ruimte voor de kalender zelf.

Polish

Witte achtergrond met grijze border + halve verticale kleur-strip links als enige kleur-accent

Event-blokken hadden pastel-tinted achtergrond + gekleurde border. User wilde de schonere Apple/Linear-stijl: witte achtergrond met slechts een kleine verticale kleur-strip linksboven die niet de volle blokhoogte beslaat.

New feature

Nieuwe sectie "Verdeling deze week" toont meetings + uren per kalender met progress-bars

Taak overzicht-sectie suggereerde een echt taken-systeem maar telde alleen booking-statussen (te-voorbereiden = confirmed, follow-ups = completed, etc). Verwarrend en bij gebruikers zonder Senly-bookings altijd 0.

Polish

Titels naar single-line ellipsis i.p.v. 2-regel wrap, min-hoogte event-blok verhoogd

Titel had -webkit-line-clamp: 2 wat 2 regels mocht innemen. Bij korte events (30 min = 30px) kwam de subtitle (locatie/Zoom-URL) daaronder en werd half afgesneden door overflow:hidden. Resultaat: regels die halverwege werden afgekapt — lelijk.

Polish

Titels en subtitels in alle event-blokken staan nu links uitgelijnd

Browser-defaults op <button> elementen gaven text-align: center, waardoor de tekst in elk event-blok in het midden uitgelijnd was. Mijn text-align: left op de parent button werkte niet door naar de strong/span children, vooral niet bij display: -webkit-box (line-clamp).

Polish

Lange titels worden nu na 2 regels netjes afgekapt met "...", en font-weight verlaagd van 700 naar 600

Bij events met lange titels (zoals "Kennismakingsgesprek | Social Media Beheer / Groeiservice") en lange locatie-URLs liep de tekst door en werd half afgesneden. Plus de title-font was 700 wat te dik aanvoelde voor de kleine grid-tekst.

Polish

Mini-grafieklijn op de 4 KPI-cards loopt niet meer dwars door de cijfers en labels

De sparkline (groene/roze trendlijn) lag over de volle breedte van elke KPI-card. Door de lichte opacity (0.55) scheen de lijn door de teksten "Trending nu / 50 / Actieve trends" heen — onleesbaar en visueel rommelig.

Performance

localStorage-cache voor de trends-feed (TTL 24 uur)

De Social Media Trends-pagina riep bij elk bezoek /api/trends opnieuw aan. Zelfs met de bestaande server-side cache betekende dat ~15 seconden wachten zodra de Node-proces was herstart (Railway redeploy / idle-scaling wipes _mem en .trends-cache.json).

Bug fix

Events zonder calendarName kregen verschillende kleuren in het grid maar werden in de sidebar als één groep getoond

colorForExternal() viel terug op event-titel voor de hash bij ontbrekende calendarName, terwijl de sidebar terugviel op "{provider} ({email})". Resultaat: zelfde sidebar-groep maar verschillende grid-kleuren per event. Ook waren de pastel-tints (12% saturatie) te licht waardoor het visueel niet duidelijk was dat groen=Werk en geel=Gezinsagenda overeenkwamen.

Bug fix

Events buiten 08:00-18:00 werden niet getoond — terwijl ze wel meetelden in de stats

Het week- en dag-grid had hardcoded tijdrange 08:00-18:00 (11 rijen). Events die vroeg in de ochtend of laat in de avond startten werden niet gerenderd, maar wel meegeteld in "X Meetings" / totale tijd. Gevolg: stats zeiden "11 meetings" terwijl je er maar 8 in beeld zag.

New feature

Mijn agenda's sidebar toont nu elke individuele Google/Outlook/iCloud agenda als losse checkbox met eigen kleur

Sidebar had één algemene "Externe events" toggle + een hardcoded "Verjaardagen" item. Maar gebruiker heeft meerdere agendas (Werk/Gezin/Privé/Gezinsagenda) en wil die los kunnen aan/uit zetten — net zoals in de Apple Calendar agenda-beheer modal.

New feature

Klik "Bekijk volledige agenda" om de kalender over het hele scherm uit te klappen

Nieuwe fullscreen state op CalendarView. Wanneer actief krijgt .meet-cal-wrap een is-fullscreen class die hem omtovert tot position:fixed inset:0 met z-index 999 — bedekt sidebar, hero header, en alle andere UI. Zijkolommen (mini-cal/filters links, stats rechts) en de Vandaag-strip worden verborgen via display:none. Alleen de hoofd-kalender vult het scherm, met fade-in animatie. Toggle-knop met expand/collapse icon naast "+ Nieuwe meeting" doet hetzelfde. Sluiten kan met de toggle-knop OF de Escape-toets.

New feature

Klik op elk event in de kalender (ook externe Google/Outlook events) en er opent een Apple-Calendar-style detail-card

Externe events waren niet klikbaar (pointer-events: none) — frustrerend want je kon ze niet inspecteren. Senly-bookings hadden wel een slide-in panel maar dat zat aan de rechterzijde verstopt.

Bug fix

Op zondag toonde de toolbar de wéék erna (1-7 juni) terwijl het grid de huidige week (25-31 mei) liet zien

De maandag-berekening voor het week-label gebruikte `start.getDate() - start.getDay() + 1`. Op zondag is getDay() = 0, dus dat wordt `31 - 0 + 1 = 32` → 1 juni. Fout. Op andere dagen klopte het wel toevallig.

Polish

Up next items zijn nu visueel met elkaar verbonden via een verticale lijn in de meeting-kleur

Elk item krijgt via ::after een 1.5px verticale lijn die naar het volgende item loopt, in dezelfde kleur als de dot (via CSS custom property --line-color). De dots krijgen een witte ring (box-shadow) zodat ze "boven" de lijn drijven. Duration wordt nu een afgeronde pill (15m, 30m, 60m) i.p.v. plain tekst. Exact als de mockup-timeline look.

New feature

Stat-cards (Meetings/Totale tijd/Bezettingsgraad/Gem. duur) tonen nu echte cijfers uit zowel Senly bookings als gekoppelde Google/Outlook agenda's

Eerste versie telde alleen Senly bookings, en de trend-percentages (+12%, +8%, +5%, +3%) waren hardcoded uit de mockup. Wie alleen externe agenda gebruikt zag overal 0 staan met liegende trend-percentages eronder.

Bug fix

Floating "+ Nieuwe meeting" knop rechtsonder verwijderd omdat hij botste met de chat-widget

Mijn nieuwe teal FAB cirkel piepte rechtsonder bovenuit achter de bestaande chat-widget (Crisp/Intercom). Gaf een lelijke dubbele-cirkel look.

Polish

Mini-kalender, filter-secties, hoofd-kalender, Up next en Taak overzicht zijn nu losse witte cards

Alle secties stonden direct op de body achtergrond zonder visuele scheiding. Voelde plat en ongestructureerd, anders dan de mockup waar elke sectie een duidelijke card-container is.

Polish

Elke externe agenda-event krijgt automatisch een eigen kleur via deterministische hash

Externe Google/Outlook events kregen allemaal dezelfde paarse tint, terwijl de design-mockup een gevarieerd kleurenpalet toont. Saaie one-color look.

Polish

Custom-styled checkboxes met volledige type-kleur i.p.v. native accent-color

Vorige poging gebruikte CSS accent-color, maar dat geeft browser-inconsistente render en lichte tint i.p.v. de volle kleur. Mockup heeft volledig groene/blauwe/oranje vakjes met wit vinkje.

Polish

Vandaag-cards krijgen verticale kleur-strip links, duration-pill rechtsboven, en avatar-cirkels onderaan

De today-cards lijken nu visueel op de design-mockup: 3px verticale type-kleur strip aan de linkerzijde (via ::before), duration als afgeronde pill (60m, 30m) i.p.v. plain tekst, twee avatar-cirkels met initialen die overlappen, en sterkere hover-state met type-kleur border. Nieuwe-meeting empty-card heeft nu een subtielere look.

Polish

Sidebar en datum-headers in lijn met design

Eerste pas van de redesign had nog visuele resten van de oude layout: teal-streep links van datum-headers, "Accounts beheren"- en "Campagnes"-rijen in de sidebar, "Spam"-map zichtbaar, "Gevlagd"-label i.p.v. "Met ster", en de labels-lijst was uitgegrijsd.

Polish

De donkergroene pulse-rings achter de support-FAB zijn weg

De .support-fab had twee animerende pseudo-element rings (::before en ::after) die continu uitwaaierden in de huisstijl-kleur. Op een witte achtergrond zag dat eruit als een vlek of glow achter de knop — onrustig.

Polish

Body-achtergrond in light mode is nu #ffffff op elke pagina

De light-mode body-background had een complexe radial-gradient stack met #f2f7f7 + teal/purple tints. Dat gaf overal een licht groen-gewassen sfeer — gebruiker wilde gewoon strak wit.

Polish

Meetings opent nu standaard in Week-view en alle UI-elementen matchen exact het mockup-design

De v6.20 redesign had de juiste layout-structuur (3-kolom + vandaag-strip) maar de details week visueel af van het mockup: stat-cards waren te plat, toolbar-knoppen te basic, week-view bookings hadden solid kleuren i.p.v. pastel-tint, en de standaard view was Maand.

Polish

Off-white #f3f5f8 vervangen door pure white

.smtr-root background is nu #ffffff i.p.v. de off-white tint van v6.24. Dark-mode override blijft staan zodat het portaal-thema in dark gewoon donker rendert.

Polish

Pagina-achtergrond gewijzigd naar #f3f5f8 (zachte koel-grijze tint)

De Trends-pagina had de standaard portaal-achtergrond met een groen-zweem, terwijl de mockup een rustig off-white toonde dat de witte cards beter laat ademen.

Polish

3-koloms e-mail layout krijgt de high-end look van de design-screenshot

De oude EmailInbox voelde plat — geen visuele scheiding tussen mappen / lijst / lezer, geen sectie-groepering in de sidebar, en geen "ademruimte" rond de gelezen mail. Vergeleken met de mockup oogde 't functioneel maar niet premium.

Polish

Initialen-cirkels (LV / BS / CM, JM / AK / RT, EK / PD / NW) vervangen door echte portretfoto's

De auteur-avatars op de Trending Blogs-cards toonden 2-letter-initialen op gekleurde cirkels. Zag er goedkoop uit en suggereerde fake-content.

Polish

Inline SVG-componenten in officiële merkkleuren voor Instagram, TikTok, LinkedIn, YouTube en Facebook

De filter-chips en categorie-sidebar gebruikten emoji (📷 voor IG, 🎵 voor TikTok, etc.) die op verschillende OS-versies anders renderen en niet matchen met de huisstijl van elk platform.

New feature

Meetings heeft nu een 3-kolom layout met hero header, mini-kalender, weekstats, en vandaag-strip

De Meetings-pagina had een simpele 2-kolom layout zonder overzicht van statistieken, aankomende afspraken, of een dagweergave-strip onderaan.

New feature

TrendsDashboard volledig herschreven naar het nieuwe ontwerp

De oude trends-pagina had geen samenhangende structuur — KPI's, trend-cards en bookmarks stonden los van elkaar zonder duidelijke hiërarchie.

Infra

Nieuwe trends.css (~960 regels) met .smtr-* prefix

Aparte stylesheet voor de trends-pagina, geïmporteerd vanuit page.tsx. Alle styling via design-tokens en color-mix() voor pastel-tints. i18n: 19 nieuwe keys (smt_*) in nl/en/de/fr. Pseudo-stats (leestijd, bereik %) zijn deterministisch op item-id zodat refreshes consistent zijn.

Polish

Elke pagina bereikbaar vanuit de zijbalk heeft nu dezelfde 20px eigen padding

Na de eerste ronde (Dashboard, Kalender, Trends) hadden de overige pagina's nog hun oude padding: .container-pagina's 40px, Launchpad 40px, Onboarding/Affiliate 40px inline, Email 0px, Integratie-detail 28px. Hierdoor verschilde de inhoudsuitlijning per sectie.

Polish

De 3 drijvende teal-radial-orbs op de Launchpad-achtergrond zijn verwijderd

De decoratieve <div class="lp-bg-decor"> met 3 animerende huisstijl-orbs is uit LaunchpadView.tsx gehaald. De CSS-keyframes blijven staan voor het geval we ze later opnieuw willen aanzetten — geen impact want het element wordt niet meer gerenderd.

Polish

Alle hoofdpagina's starten en eindigen nu op precies dezelfde horizontale positie

Content-kalender had een eigen wrap met max-width: 1600px + 40px zij-padding + auto-margin, waardoor de inhoud op brede schermen gecentreerd werd met overdreven veel witte ruimte rechts (asymmetrisch t.o.v. de sidebar). Dashboard en Trends hadden weer 0 zij-padding op hun root, terwijl Meetings via .meet-topbar standaard 20px gebruikt. Effect: vier pagina's die naast elkaar inconsistent voelden.

Polish

Maandwinst, Laatste activiteit, Snelle acties en Aankomende deadlines hebben nu semi-bold i.p.v. bold titel

.taskio-card-head h3 font-weight van 700 naar 600. Eén tandje dunner, oogt rustiger naast de gradient KPI-tegels en past beter bij de premium typografie van de rest van het portaal. Letter-spacing -0.015em blijft voor de optical correction.

Polish

Achtergrond-orbs op de Launchpad waren te subtiel — bijna onzichtbaar

De body heeft zelf al een teal-tinted gradient. Mijn extra orbs op 35% opacity met 80px blur en 32% kleurverzadiging vielen daar volledig in weg — je zag visueel niks veranderen.

Polish

Vier extra pagina's krijgen ⓘ naast de titel i.p.v. uitleg-tekst onder

Na de uitrol op admin-pagina's (v6.12) bleven nog vier pagina's achter met de oude lange uitleg-paragraaf onder de titel.

Polish

Custom rollen, Ingediende claims, Overzicht, Activiteiten, Commissieregels

Onder de titel van die pagina's stond steeds een lange uitleg-alinea die ruimte innam en de hero "log" maakte. Op Launchpad en Takenbeheer was dat patroon al vervangen door een ⓘ-icoontje — dat moest naar de rest.

Polish

Achtergrond ademt mee in de bureau-kleur — elegant, niet afleidend

De Launchpad-pagina had een platte witte achtergrond — voelde leeg en weinig "wow" voor de eerste indruk waar gebruikers binnenkomen.

Polish

Launchpad-titel staat nu netjes uitgelijnd met Tools / CRM / Trends

.lp-root had padding: 32px 0 64px — geen horizontaal padding. Daardoor plakte de "Launchpad"-titel tegen de menubalk-rand terwijl andere pagina's 40px margin van die kant kregen via .container.

Polish

Pagina /admin/roles niet meer ingesnoerd op 1320px

Net als Launchpad had de Custom rollen-pagina nog de oude .container wrapper (max-width 1320px) waardoor de inhoud gecentreerd stond in een smaller frame i.p.v. mee te lijnen met de rest van het admin-deel.

Polish

Launchpad gebruikte de oude .container wrapper (max-width 1320px) — nu full-width

De Launchpad-pagina werd geclamped op 1320px breed met 40px horizontale padding extra erbovenop. Op brede schermen (of zoals bij gebruiker met 80% Chrome-zoom) zag dat er ingesnoerd uit naast het dashboard dat wél de volle breedte gebruikt.

Polish

Actie-knoppen en stats plakten direct onder de titel

Doordat de uitleg-alinea verdween en achter het (i)-icoontje verschoof, plakten de actie-knoppen / stats / KPI-grid direct onder de h1 — voelde te krap, niet ademend.

Polish

Herbruikbare <InfoPopover /> component + 4 pagina's aangepast

Op Tools, Launchpad, CRM Leads en Social Media Trends stond de uitleg-alinea permanent in beeld onder de titel — terwijl je die info maar één keer hoeft te lezen. Verschillende stijlen tussen pagina's ook.

Polish

Vier kolommen krijgen elk een eigen glass-card met tone-gekleurde radial glow

De deadlines-widget was visueel "vlak en saai": alle taken in een grijze rij met dunne 4px border-left, kolom-headers waren alleen tekst, "VANDAAG"-empty toonde een dood "—". Niet passend bij de premium look van de Maandwinst- en Klanten-widgets.

Bug fix

Info-knop hing onder de titel i.p.v. midden ernaast

De heading op de Takenbeheer-pagina had margin-bottom: 14px ingebakken — daardoor stond de h1-box hoger dan z'n visuele tekst en kwam de (i)-knop met align-items: center optisch op de bodem van het tekst-blok terecht.

Polish

Info-popover naast de titel i.p.v. een alinea eronder

De subtitel onder "Takenbeheer" nam veel ruimte in en stond ongelukkig op "synchroniseert automatisch met GoHighLevel" — terwijl Takenbeheer prima standalone werkt, GHL is maar één van de optionele integraties.

Polish

Inline-uitklap vervangen door gecentreerde popup met blur achtergrond

De inline-uitklap (v6.01) maakte het dashboard heel lang scrollbaar als je 18+ klanten had — alles werd onder elkaar gepropt en duwde de rest van het dashboard naar beneden.

Bug fix

Knop linkte naar /financieel maar deed visueel niets bruikbaars

De "Bekijk alle 18 klanten →" knop was een Link naar /financieel. Voor een manager zonder viewFinance-permissie deed dat niets, en zelfs met permissie kreeg je de algemene financieel-pagina i.p.v. specifiek de klantenlijst met bedragen.

Polish

Beschrijving naast de titel i.p.v. een blok eronder

De uitleg-alinea onder "Verdien 30% MRR per verwijzing" nam veel verticale ruimte in voor informatie die je maar één keer hoeft te lezen.

Bug fix

Titel "Massa-koppeling" stond naast i.p.v. onder de eyebrow

Door de inline-flex op .sa-title-row zat de h1 op dezelfde regel als de "SOCIAL ACCOUNTS" eyebrow ernaast i.p.v. eronder.

Polish

Stats omgezet naar compacte gekleurde mini-pillen

De "72 slots · 0 gekoppeld · 5 verlopen"-regel was puur tekst met scheidings-puntjes. Niet meteen visueel onderscheidbaar.

Bug fix

Manager-widget gebruikt nu .taskio-revenue-* CSS i.p.v. .monthly-bar-*

Er bestaan twee admin "Maandwinst"-implementaties: één op /financieel (.monthly-bar-*, brede capsules) en één op het admin-dashboard (.taskio-revenue-*, smalle 8-18px pillen). v5.94 koppelde de manager-widget aan de eerste — daarom kreeg de manager BREDE rechthoeken in plaats van de smalle pillen die admin op zijn dashboard ziet.

Polish

Beschrijving als popover i.p.v. permanent zichtbare alinea

De uitleg-tekst onder de titel "Massa-koppeling" nam veel verticale ruimte in voor info die je maar een keer hoeft te lezen.

Polish

Jaar-overzicht is nu span 3 (75% breed) i.p.v. span 2 (50%)

De Jaar-overzicht widget had defaultSpan 2 — half scherm. Admin Maandwinst (revenueChart) heeft defaultSpan 3 — driekwart scherm. Daardoor oogden de bars op het manager-dashboard smaller dan op het admin-dashboard, ondanks dat de CSS sinds v5.94 1:1 gedeeld wordt.

New feature

Inkomen wordt nu opgesplitst in klant-fees (teal, basis) en vast maandbedrag (violet, toeslag)

Een staaf per maand toonde alleen het totaal — geen onderscheid tussen waar het inkomen vandaan komt. Manager kon niet snel zien hoeveel deel klant-fees vs flat fee was per maand.

New feature

Filter-chips bovenaan: Beide / Klant-fees / Vast bedrag

Drie chips in de header (vergelijkbaar met legend van admin maar klikbaar). Klik "Klant-fees" → alleen die kolom getoond. Klik "Vast bedrag" → alleen flat fee. Klik "Beide" → terug naar gestapeld. Jaartotaal in de sub-header past zich aan op het actieve filter. Hover-detail toont altijd beide bedragen + totaal ongeacht filter.

Infra

i18n: 3 nieuwe keys × 4 talen = 12 strings

mgrwidget_year_filter_all (Beide / Both / Beide / Les deux), mgrwidget_year_legend_clients en mgrwidget_year_legend_flat. CSS-class .mgr-year-chip toegevoegd voor de chip-styling (pill-shape, teal-active-state).

Polish

ManagerIncomeYearWidget gebruikt nu DIRECT de admin .monthly-bar-* CSS-classes

Vorige versies probeerden de admin-stijl te imiteren via aparte .mgr-year-* classes, maar het kwam visueel niet exact overeen (bar-hoogte, profit-label positie, hover-bubble, projectie-tonen).

Polish

Beide manager-widgets ~25% korter in de hoogte

De widgets namen veel verticale ruimte in. Het jaar-overzicht had 220px hoge bars, het inkomen-blok 18-26px padding rondom. Op normale schermen scrolde de rest van het dashboard daardoor te ver omlaag.

Polish

Premium glass-effect + gradient bars met inner highlight

Cards krijgen nu een echte glass-look: backdrop-filter blur(10px) + saturate(140%), inset highlight bovenaan, drop-shadow voor diepte, en op hover een subtiele teal-glow ring. Bars zijn niet meer flat-teal maar een gradient (lichter teal bovenaan → teal mid → donker teal onder) met een witte inner-highlight aan de top, plus een drop-shadow eronder. Hero-cijfer gebruikt een gradient met drop-shadow filter voor luxe glow. Klant-rijen schuiven 2px naar rechts bij hover, sub-stat blokjes lichten subtiel op met teal-border, "Bekijk alle klanten" knop heeft nu een echte ghost-button stijl met teal border. Alles werkt in dark én light mode.

v0.16
Saturday, 30 May 2026

Manager widgets brought in line with the house style — identical to the admin Monthly profit chart

Polish

The bar chart gets teal capsule bars, a hover amount on top and a nice card frame

The manager Yearly overview widget showed dark grey pills instead of teal bars, because the stack background visually overpowered the teal segment. On top of that, the styled-jsx light-mode overrides didn't work (the same scoping issue as v5.90). As a result the widget didn't fit the admin Monthly profit style.

Polish

"My income this month" widget readable in light mode

The two sub-stat blocks (Fixed monthly amount + Client fees) were dark grey with illegible text in light mode.

New feature

Widget "Mijn inkomen deze maand" voor account managers

Een manager kon nergens snel zien wat de huidige maand-inkomsten zijn — alleen via /financieel/tab=employees waar admins kijken. Geen eigen overzicht op het eigen dashboard.

New feature

Widget "Jaar-overzicht per maand" — bar-chart van het hele jaar

Hetzelfde gemis aan trend-overzicht: hoe stabiel was mijn inkomen het afgelopen jaar? Welke maand was uitschieter? Niet zichtbaar.

Infra

Nieuwe helper lib/manager-income.ts

computeManagerIncome(userId, periodMonth) + buildManagerYearSeries(userId, year). Period-overlap query voor FlatFeeAgreement (zelfde patroon als employee-cost-overview), één DB-call voor het jaar i.p.v. 12 losse queries. Pauze-detectie via Client.isActive. Beide widgets fetchen server-side in app/(dashboard)/page.tsx zodat het dashboard meteen rendert zonder client-roundtrip. 20 nieuwe i18n-keys × 4 talen = 80 strings. Widgets automatisch zichtbaar via audience: 'manager' in WIDGET_CATALOG.

Bug fix

Invulvelden in Account manager + Sales attributie waren onleesbaar in light mode

De light-mode CSS-overrides stonden in <style jsx> binnen de componenten zelf. styled-jsx scope't echter de selector `html[data-theme="light"]` naar de component-instance i.p.v. het globale html-element — waardoor de overrides nooit aansloegen. Resultaat: donkere inputs op witte card-achtergrond (rgba(0,0,0,0.25) viel terug op de dark-mode default).

New feature

Nieuwe "Account manager"-sectie op klantprofiel (Financieel-tab)

Voor een manager kon je geen vast maandbedrag per klant instellen. Sales attributie ondersteunt alleen percentages voor setter/closer/sales_manager — geen vast bedrag voor de operationele manager die de klant beheert.

New feature

Managers zien voortaan alleen klanten die aan hen gekoppeld zijn

Iedereen met MANAGER-rol zag álle klanten van het bureau — geen scheiding tussen wie welke account beheert. Voor bureaus met meerdere account managers gaf dat te veel ruis en privacy-issues.

Infra

Prisma-schema: Client.managerId + Client.managerMonthlyFee + index

Beide velden zijn optional dus geen risico voor bestaande klanten — die starten met managerId=null en blijven gewoon zichtbaar voor admin. Named relation "ClientManager" met onDelete: SetNull zodat een verwijderde User automatisch de koppeling losmaakt. Index op (tenantId, managerId) voor snelle visibility-queries. Railway pakt de schema-wijziging op via prisma db push bij deploy.

New feature

Tab-structuur op /financieel — Overzicht / Per klant / Medewerkers / Overige & eenmalig

De pagina was één lange scroll met 7 secties achter elkaar (KPI's, grafiek, maand-override, dienstverlening, per klant, overige, eenmalig). Lastig om snel naar wat je nodig had.

New feature

Nieuw "Medewerkers"-tab: zie hoeveel je per maand kwijt bent + hoe lang elke commissie-koppeling nog loopt

Geen centraal overzicht voor de bureau-eigenaar van flat fees + commissies + verloopdatums per klant-koppeling. Risico: een commissie-afspraak loopt langer door dan afgesproken zonder dat het opvalt.

Polish

Oude /financieel/medewerkers URL blijft werken (redirect naar tab)

Bug fix

De 3 koppel-kaartjes (setter/closer/sales manager) waren wit in dark mode

ClientSalesAttribution gebruikte fallback CSS-vars (var(--surface, white)) en hardcoded kleuren (#fde9e9, #f3f3f3, white text op buttons) die in dark mode niet meeswitch'ten — drie witte cards midden in een verder donker klantprofiel.

Bug fix

Notitie-veld viel buiten de drawer-rand

Het Flat-fee blok stond als 3-koloms (Rol + Bedrag + Notitie). De drawer is maar ~440px breed, waardoor de Notitie-input over de rechterrand viel en niet meer aanklikbaar was.

Polish

Pagina krijgt nu dezelfde teal/violet/mint-tinted gradients als de dashboard-bg

De /changelog dark-mode bg was een platte donkere kleur — terwijl het portaal een zachte meerlagige radial-gradient stack heeft. Visueel voelde de pagina los van de rest van het portaal.

Polish

Bezoekers via de website zien altijd de witte changelog, niet dark mode

Als een bezoeker dark-mode had ingesteld in zijn browser/cookie, zag hij ook op de publieke senly.io/changelog de donkere variant — terwijl de marketing-site verder altijd in licht is.

Polish

Wit cirkeltje achter het teal Senly-logo, ook in dark mode

In dark mode kreeg het logo-rondje achter de teal Senly-S een donkere achtergrond — daardoor was het logo nog nauwelijks zichtbaar tegen de bijna-zwarte achtergrond.

New feature

Élk bureau ziet de /changelog in zijn eigen primary + accent kleur

De pagina gebruikte hardcoded Senly-teal voor de orbs, hero-accent, version-badge en filter-pill. Een bureau dat zijn portaal in bordeauxrood of paars had ingesteld, zag de changelog-pagina alsnog in teal — voelde niet als deel van hún portaal.

Bug fix

Stat-cards, item-cards en tekst waren in dark mode nog onleesbaar

In mijn vorige dark-mode passes had ik selectors gebruikt die niet bestaan (.cl-card, .cl-hero-stat, .cl-version-pill...). Daardoor bleef de helft van de pagina wit-met-witte-tekst.

Bug fix

Op de Huisstijl-tab kon je in demo-modus nog gewoon invulvelden aanpassen

De middleware blokt al elke POST/PATCH/PUT/DELETE in demo (server-side veilig), maar de UI liet inputs en knoppen gewoon klikken. Daardoor leek het alsof je wijzigingen kon maken, terwijl ze nooit opgeslagen werden.

Bug fix

Hero-blok van /changelog bleef wit in dark mode

Mijn vorige dark-mode pass had het page-canvas en de cards al donker gemaakt, maar de bovenste hero-sectie hield een hardcoded wit-naar-grijs gradient. Daardoor was de titel "Wat is er nieuw in Senly" lichte tekst op een witte achtergrond — onleesbaar.

Polish

Flat fee-sectie krijgt premium opmaak in dark mode

De "Flat fee instellen"-rij in de gebruiker-modal had witte tekst op een teal-knop (laag contrast) en de inputs voelden vlak.

New feature

Closer-rol heeft eigen kolom in de bevoegdheden-tabel + correcte default-permissies

In de "Bevoegdheden per rol"-tabel stond de Closer-rol er niet tussen, terwijl die wel in het systeem bestaat. Ook ontbrak Closer in getDefaultPermissions — daardoor kreeg een Closer effectief géén rechten als er geen custom-role override stond.

Polish

Changelog-pagina past zich nu aan aan dark/light thema

De /changelog pagina toonde altijd een wit canvas — ook als je in het portaal voor dark-mode had gekozen. Inconsistent en fel.

Bug fix

Flat-fee invoerveld bij gebruiker-bewerken was wit in dark mode

De "Flat fee instellen"-sectie gebruikte hardcoded var(--surface-muted, #fafafa) wat in dark mode terugviel op bijna-wit — daardoor was de hele inputrij niet leesbaar.

Bug fix

Achtergrond van Gebruiker-toevoegen / Gebruiker-bewerken was transparant

De drawer rechts in beeld liet de achterliggende pagina nog doorschemeren, waardoor labels en knoppen onleesbaar werden.

Polish

"+1 tags" en "Web Dev & Design" passen nu netjes binnen de card

De "+N tags" pill brak op twee regels (woord viel onder de pill door) en de subject-tag "Web Dev & Design" wrap-te ook over twee regels — beide zagen er rommelig uit.

Bug fix

Rode "Verwijderen"-knop in Riskante acties was rood-op-rood

In de gebruiker-bewerken-drawer was de tekst op de Verwijderen-knop bijna onzichtbaar — rode letters op een rode achtergrond.

New feature

Drag-and-drop op de kolom-headers om stages te herordenen

Stages kwamen altijd in de volgorde waarin ze aangemaakt waren. Wilde je "Lead binnen" vooraan zetten of "Gewonnen" helemaal rechts, dan moest je dat via de database doen.

New feature

Selectie-modus met meerdere leads aanvinken en in één klap verwijderen

Je kon alleen leads één voor één verwijderen via de modal. Voor opruim-acties (bv. 100+ duplicates wegtikken) was dat onwerkbaar.

New feature

Detecteer en herstel een bulk-batch leads die door stage-delete is verschoven

Als je per ongeluk een stage verwijdert, worden alle leads in die stage automatisch naar de eerstvolgende stage verplaatst. Daardoor zat ineens een berg "Lead binnen"-leads onder "Gekwalificeerd" — niet duidelijk welke je terug moest klikken.

New feature

Importeer alleen opportunities uit één GHL-stage i.p.v. alle contacten

De Import GHL-knop trok blind alle GoHighLevel-contacten binnen via /contacts/ en plaatste alles in de eerste Senly-stage. Daardoor kwamen er ook contacten uit Gekwalificeerd / Gebeld / Klant terecht in "Lead binnen" en zat je met 155 leads i.p.v. de gewenste 105.

New feature

Naast bellen en mailen ook WhatsApp, notitie en taak vanaf de card

De quick-action rij onderaan een lead-card had alleen bellen en mailen. WhatsApp is in de praktijk het meest gebruikte kanaal voor sales-follow-up, en je kon niet zien of er al notities of taken zijn zonder de card te openen.

Polish

Lead-cards tonen bedrijf, bron, waarde + frequentie, laatste contact en quick-actions

De kanban-cards toonden alleen bedrijf · bron in één regeltje en een waarde-bedrag. Te weinig info om in één oogopslag te scannen.

Bug fix

Nieuwe lead op "Gewonnen" zetten vloog na opslaan terug naar Open

Bij het aanmaken van een nieuwe lead werd de in de modal gekozen status ("Gewonnen" of "Verloren") door de API genegeerd — POST destructureerde de body wel maar nam de status-key niet mee. Resultaat: lead werd altijd als "open" opgeslagen en je moest hem na opslaan opnieuw op "Gewonnen" zetten.

v0.15
Friday, 29 May 2026

CRM lead: link to an existing customer + automatic status sync

New feature

Link a lead to an existing active customer — status follows the customer status

You could only convert a lead into a NEW customer via "Convert to customer". For existing customers you had to track it manually — and if such a customer later went inactive, the matching lead stayed "won", even though it was effectively lost.

Polish

Klik op "Lead toevoegen" onder "Offerte verstuurd" opent modal in die stage

Welke stage-kolom je ook aanklikte, de Nieuwe-lead-modal opende altijd in "Lead binnen" (de eerste stage). Daardoor moest je elke keer alsnog handmatig de juiste fase kiezen.

New feature

Lead handmatig ingevuld? Contact wordt automatisch aangemaakt of gematcht

Als je een lead handmatig invulde zonder eerst een bestaand contact te koppelen, ging die lead langs de contactenlijst heen. Daardoor ontstonden er deals zonder centraal contactbeeld en moest je achteraf alsnog handmatig een contact aanmaken.

New feature

"Toegewezen aan"-dropdown in de lead-modal

Je kon op het kanban-bord wel zien aan wie een lead toegewezen was (via de avatar rechtsboven), maar je kon de toewijzing niet aanpassen vanuit het lead-formulier zelf.

New feature

Nieuwe pagina /mijn-commissie voor sales-rollen

Setters/closers/sales managers hadden geen eigen overzicht van klanten, verdiende commissie en uitbetalingen — alleen een kleine widget op het dashboard. Onmogelijk om snel te zien hoeveel maanden nog open staan per klant of wat al echt is uitbetaald.

New feature

Admin Setter-portfolio toont nu ook lifetime uitgekeerde commissie + open-claims badge

Per setter een extra stat-blok "Uitbetaald (lifetime)", oranje badge "X open claim(s)" bij pending werk en twee nieuwe kolommen in de klanten-tabel: "Ingediend / Max" en "Uitbetaald". Zo zien admin én setter precies dezelfde cijfers.

New feature

API-laag levert per-assignment claim-statistieken

/api/me/compensation en /api/admin/sales-portfolio geven per assignment het aantal ingediende claims, betaalde claims, totaal-uitbetaald-bedrag en resterende maanden mee. Berekend via parsing van CommissionClaim.breakdown JSON (achterwaarts-compatibel met oude claims).

Polish

In één oogopslag zien wie verantwoordelijk is voor welke deal

Op het CRM-bord zag je wel de naam en de waarde van een lead, maar niet wie er aan toegewezen was. Daarvoor moest je de lead openen — en met veel kaartjes op het bord werd dat vermoeiend.

New feature

Bij elke deal kun je nu aangeven of de waarde eenmalig, per uur, per maand of per jaar is

Een lead-waarde was puur een bedrag in euro's — je kon niet zien of die "€80" voor een eenmalige opdracht stond, een uurtarief was of een maandelijks abonnement. Daardoor gaf de pipeline-totaal ook een vertekend beeld voor recurring deals.

Polish

Downloader-cards tonen nu het echte merklogo i.p.v. een leeg rondje

In de horizontale rijen (Recent gebruikt, Aanbevolen voor jou, Favorieten) toonden de downloader-cards (TikTok, YouTube, Snapchat, Instagram, Facebook, LinkedIn) een generieke grijze cirkel — terwijl in de hoofdtabel de echte platform-logo's wel zichtbaar waren.

Polish

Tool-aantal in copy klopt nu weer met het werkelijke aanbod

De feature-lijst op de login-pagina en in de onboarding-tour zei nog "15+ tools" — terwijl het tools-aanbod intussen ruim 30 hulpmiddelen telt.

New feature

Sorteer je 234+ contacten op nieuwste/oudste, alfabetisch (A→Z / Z→A) of recent contact

De Contacten-tab toonde alles in de ruwe DB-volgorde — geen manier om snel je nieuwste leads bovenaan te zetten of alfabetisch te bladeren als je een naam zoekt.

Polish

Goudgele gradient i.p.v. neon-geel achter het ghost-icoon

Brand-geel (#FFFC00) is zo licht dat het witte ghost-icoon er nauwelijks van afstak — visueel verdween het spookje.

Bug fix

Witte initial-letter werd onleesbaar tegen de lichte tile-achtergrond

De avatar van een CRM-contact had een witte letter (#fff) op een teal gradient. In dark mode prima leesbaar, maar in light mode rendert die gradient veel zachter waardoor de letter visueel verdween.

Polish

Snapchat-merklogo nu in juiste brand-stijl

Het Snapchat-logo gebruikte een zwart ghost-icoon op de gele tile. Officieel is het Snapchat-spookje wit, niet zwart. Was zichtbaar in zowel de tool-rij als in de bubbel-view.

Polish

Licht-mode kreeg een rijkere, high-end achtergrond

In licht thema oogde de bubbel-view bijna pure wit met nauwelijks zichtbare kleur — daardoor voelde de tab kaal en niet premium.

Polish

Categorie-labels altijd zichtbaar boven hun cluster

Door de grotere cluster-radius schatting verdween het Sales-label boven de viewport. Tegelijk plakten labels van naast-elkaar liggende clusters bijna tegen de iconen van de buurcluster.

Polish

Labels staan altijd boven hun cluster, ook bij grotere groepen

Bij clusters met veel tools (Sales, Analyse) dreven bubbels soms over het categorie-label heen, waardoor je de cluster-naam niet meer kon lezen.

Polish

Schone tool-iconen zonder donker rondje of category-glow erachter

Achter elk icoon zat nog een zachte category-halo plus een dark drop-shadow van de tile zelf — die combinatie liet visueel een "zwart rondje" achter de tile zien.

Polish

Geen kleur-bubbel meer om elk icoon — en bubbels schuiven nauwelijks nog

Iconen zaten in een kleur-bubbel waardoor het tabblad visueel druk werd (icoon in icoon). Bovendien bewogen alle bubbels constant rond — dat voelde onrustig.

Polish

Elke bubbel toont nu het officiële merklogo of gradient-icoon van de tool

Bubbels lieten alleen een kleine emoji of tekst-glyph zien — daardoor was het lastig om in één oogopslag te herkennen welke tool achter welke bubbel zat.

Bug fix

Logo, favicon en andere uploads bleven 404 op productie

Bij Huisstijl-instellingen werd het logo na upload niet zichtbaar — alleen het alt-tekst-icoon ("Logo voorbeeld" of broken-image). Oorzaak: Next.js neemt op Railway een snapshot van de public/-map bij build. Bestanden die ná de deploy via POST /api/upload op disk komen, worden door de standaard static-server niet meer geserveerd → /uploads/abc.png gaf 404.

Polish

Bubbel-modus sluit visueel aan op de rest van het portaal

De fullscreen bubbel-view had zijn eigen donkerblauwe radial-gradient achtergrond. Daardoor voelde de tab los van de rest van het portaal — alsof je in een aparte app zat.

Polish

Tekst onder Google Calendar in de integraties-kaarten ingekort

De NL-tekst "Synchroniseer boekingen automatisch met je Google Calendar. Auto Google Meet-links." brak naar 3 regels in de kaart, terwijl de andere providers maar 2 regels nodig hadden — visueel onbalans.

Polish

De plat-zwarte achtergrond op /tools is vervangen door de standaard portal-mesh

/tools dekte de globale teal/violet body-gradient af met een eigen platte linear-gradient — daardoor voelde de pagina los van de rest van het portaal, kaler en zwarter dan bv. Contacten of Takenbeheer.

Polish

Bubbels rakten visueel tegen de schermranden — nu meer marge

In de fullscreen bubbel-modus zaten de zij-clusters en het bovenste/onderste cluster te dicht op de viewport-rand. Bubbels werden visueel "afgekapt" tegen de schermrand.

Polish

Outlook-icoon vervangen door het 100% officiële Microsoft Outlook 2018-2024 logo

De vorige inline SVG-recreatie liet maar de helft van het logo zien en kwam visueel niet overeen met het echte Microsoft-merk.

New feature

"Toegewezen aan"-dropdown ook in het detail-paneel van een contact

Bij een NIEUW contact kon je vorige update al direct iemand toewijzen, maar bij bestaande contacten (bv. uit de CSV-import) was er geen manier om dat alsnog te regelen via de UI.

Polish

Outlook-icoon op /meetings → Integraties is nu het officiële logo

De vorige inline SVG was alleen een blauwe rounded square met een witte "O" — herkenbaar maar niet het iconische Outlook 2019+ logo dat mensen verwachten.

Bug fix

Brand-logo's van Outlook en Zoom werden aan de randen geclipt

De SVG-content vulde de hele 48x48 viewBox tot aan de randen, waardoor in de integratie-kaart de hoeken en/of bovenkant van de envelope respectievelijk de camera werden afgesneden.

New feature

Eigen meeting-duur instellen (bv. 50 of 75 min) i.p.v. vaste keuzes

Het duur-veld was een select met alleen 15/30/45/60/90/120 min — geen ruimte voor coaching-sessies van 50 min of demos van 75 min.

Polish

Google / Outlook / Apple iCloud / Zoom hebben nu hun echte logo

De integratie-kaarten en de Apple koppel-modal toonden emoji (📅, 🍎, 🎥) als icoon, wat amateur oogt en op verschillende OS-versies anders rendert.

Bug fix

Apple iCloud / Zoom / Outlook koppel-modals hadden geen witruimte rond de inhoud

.meet-modal had geen padding waardoor de header, formulier-velden en knoppen direct tegen de randen van de modal stonden — geen visuele ademruimte.

Security

Terug-knop op /login kon je in een ander account droppen via document.referrer

De vorige versie van de Terug-knop bouwde de target-URL op uit document.referrer. In een browser met meerdere Senly-tabs open (verschillende accounts) kon de referrer naar een dashboard-URL van een andere actieve sessie wijzen — klik op Terug navigeerde dan naar die URL en de user "verdwaalde" in een vreemd account.

New feature

Dropdown "Toegewezen aan" in de "+ Nieuw contact"-modal

Bij het aanmaken van een nieuw CRM-contact kon je nog niet aangeven wie er binnen het bureau eigenaar van is. Achteraf moest je dat alsnog handmatig instellen — irritant bij grotere teams.

Bug fix

Terug-knop op /login vereiste soms meerdere klikken na een logout

De knop gebruikte window.history.back() — na uitloggen stond de vorige history-entry op een dashboard-URL die direct weer terug-redirectte naar /login. Effect: oneindige bounce, je moest soms 3-4× klikken voordat je in de echte vorige pagina belandde.

New feature

Zoekbalk bovenaan de "Nieuwe lead"-modal vindt contacten uit je contactenlijst

Bij elke nieuwe lead moest je naam, bedrijf, e-mail en telefoon opnieuw intypen — ook al stond het contact al in je contactenlijst (bv. via de CSV-import).

Polish

Bubbels meer verspreid — minder klont, meer cryptobubbles-feel

In de fullscreen bubbel-modus stonden de zes clusters in een kleine cirkel midden op het scherm. De zijkanten en de bovenste/onderste rand waren leeg, terwijl de bubbels binnen één cluster juist op elkaar geplakt zaten.

New feature

Drie-puntjes menu naast "+ Nieuw contact" met "Exporteer als CSV"

Wel een import-knop, maar geen export. Wie wil overstappen naar een andere tool of een backup wil hebben moest handmatig contact voor contact kopiëren.

Polish

Bubbel-tab opent als overlay over de hele viewport

Bij wisselen naar de bubbels-tab bleven de Senly-sidebar en de bovenste topbar zichtbaar — daardoor voelde de "fullscreen" weergave nog steeds als een dashboard-pagina i.p.v. een eigen experience zoals cryptobubbles.net.

New feature

Hele contactenlijst importeren via een CSV in plaats van rij voor rij invoeren

Een nieuwe gebruiker of iemand die overstapt vanuit GoHighLevel moest elke contact handmatig aanmaken. Bij een lijst van honderden leads is dat onbegonnen werk.

Polish

Luxere bubble-stijl met layered highlights en color-glow

De bubbels zagen er nog vlak en speelgoed-achtig uit. Bovenop botste het Sales-label tegen de top-headerbalk en stonden bubbels binnen één cluster te dicht op elkaar.

New feature

Foto-raster en HEIC-preview in de in-portal Drive browser

Lijst-weergave werd lang en onhandelbaar bij mappen vol foto's — je moest op iedere "Bekijken" klikken om te zien wat er achter zat. Daarnaast faalde de preview van HEIC-bestanden (Apple-formaat) volledig omdat browsers HEIC niet inline kunnen renderen.

Polish

Clusters meer ruimte + categorie-naam duidelijk leesbaar boven elke cluster

Drie issues: (1) bubbles konden naar andere categorie gesleept worden, (2) clusters zaten te dicht op elkaar, (3) categorie-labels stonden achter de bubbles waardoor je niet zag bij welke cluster welke categorie hoorde.

Bug fix

Drive/Dropbox/OneDrive browser modal stond achter de tab-navigatie

Bij klik op "Bladeren in portaal" verscheen de modal binnen de parent stacking context van het tab-paneel — de Content-tab schoot eroverheen en de breadcrumb-header werd onzichtbaar.

Polish

Bubbel-canvas vult de hele content-area i.p.v. een kleine doos

De bubble-view zat opgesloten in een 640px hoge container met witte achtergrond — voelde klein en eilandachtig. Geïnspireerd door cryptobubbles.net hoort hij over het hele tabblad te vallen.

Polish

Gradient-mesh achter de pagina is verwijderd

De zachte teal/violet/cyan gradient die achter het trends-dashboard zweefde voelde toch te druk. Alleen het mesh is weg — alle andere upgrades (glassmorphism stat-tiles, hero-accent, count-up cijfers, ping-ring op de LIVE-badge, gradient borders op cards) blijven staan.

Polish

Trends-dashboard kreeg een premium "stil-luxe" upgrade

De pagina zag er functioneel maar saai uit — veel witte ruimte, plat-vlakke KPI-tegels, en geen visuele hiërarchie tussen "trending nu" en de overige stats. Geen sense of "data leeft".

New feature

Nieuwe bubbel-view voor de Tools-pagina

De grid met witte cards voelde voor sommige gebruikers statisch. Aangevraagd: een speelse visualisatie waarin tools per categorie zwerven en je ze kunt verkennen.

New feature

In-portal file browser voor Google Drive, Dropbox en OneDrive submappen

Klik op een map in het Content-tabblad opende een nieuw tabblad naar drive.google.com / dropbox.com / onedrive.live.com — je verloor de portaal-context en zag de externe interface.

Polish

Animaties + hover-effects geven de tools-pagina leven

Cards waren identieke witte rechthoeken zonder enige beweging — statisch en niet modern, vooral nu de gradient-wash weg is.

Polish

"Sync vanuit GHL" → "Sync vanuit integratie"

De label was technisch en sloot niet aan op hoe bureaus over hun setup praten. De knop heet nu "Sync vanuit integratie" — generiek genoeg dat 'ie ook klopt als we straks andere bronnen aansluiten. Vertaalt mee in alle 4 talen (NL/EN/DE/FR).

Polish

Cleaner header zonder decoratieve achtergrond

De Tools-pagina had een paarse/oranje/roze gradient-wash achter de header plus een set zwevende icoontjes (#, @, ⚡) rechts. Voor een rustigere, premium look ongewenst.

Polish

Strakke grijze rechthoek-rand vervangen door subtiele premium styling

Het zoekveld in de Bezwaren Library had een harde 1px grijze border die opvallend gesloten aanvoelde — vooral op de zachte gradient-achtergrond van de tool. Niet bij de rest van de premium look.

New feature

Per ongeluk een taak verwijderd? Klik op de Prullenbak-tab om 'm terug te halen

Als je een taak verwijderde via het potlood- of prullenbak-icoontje was 'ie meteen weg — uit GoHighLevel én uit het portaal. Geen weg terug, zelfs niet als je per ongeluk op de verkeerde rij klikte.

Bug fix

Reply Scorer en andere tools gaven 503 omdat gemini-2.5-flash overbelast was

Onze Gemini-fallback in claudeJson() gebruikte alleen gemini-2.5-flash. Dat model krijgt regelmatig piekbelasting waardoor je een 503 "high demand" terugkrijgt — de tools toonden dan "AI gaf een fout — probeer opnieuw" zonder verdere uitleg.

Bug fix

Reply Scorer (en alle andere Sales-tools) gaven "AI niet geconfigureerd"

De Sales Suite tools (Reply Scorer, DM Opener, Hook Analyzer, Content Ideas, Bio Generator, Trend Radar, Username Generator) gebruiken allemaal claudeJson() uit lib/anthropic.ts. Op productie was ANTHROPIC_API_KEY leeg → harde "AI niet geconfigureerd op de server" fout. GEMINI_API_KEY stond wel ingesteld maar werd niet gebruikt.

Polish

Cleaner spacing en radio-knoppen op één regel

Binnen elke rol-card (Setter/Closer/SalesManager) zaten Gebruiker en Commissie/Looptijd te dicht op elkaar. Plus de radio-buttons in Looptijd wrapten boven de "12 mnd"/"Levenslang" labels in plaats van ernaast — door te smalle 1fr 1fr grid en geen flex-wrap: nowrap op de label-flexbox.

Polish

3 rollen (Setter/Closer/Sales Manager) naast elkaar i.p.v. opgestapeld

De Sales-attributie sectie deelde de .cp-finance-wrap class met de financiele kaart die op 600 px gemaxed is. De grid (auto-fit, minmax 280px) past binnen 600 px maar 1 kolom — daardoor stonden Appointmentsetter, Closer en Sales Manager onder elkaar in een smalle kolom in plaats van naast elkaar.

Polish

Subtiele Terug-knop linksboven

Bezoekers die vanuit een interne link op /status landden konden niet terug naar de vorige pagina — geen navigatie-header op de status-view.

Polish

Historische dagen zonder check-data tonen groen i.p.v. grijs

De cron die per-uur checks doet heeft pas recent data; voor de meeste van de 90 dagen waren geen StatusCheck records → grijze blokjes die de indruk wekten dat er problemen waren.

v0.14
Thursday, 28 May 2026

Sales tools foundation + first tool: DM Opener Generator

New feature

DM Opener Generator — reference for an 8-part sales tool series

Sales roles (Setter / Closer / Sales Manager) had no tools of their own on /tools — only the existing content tools, which aren't relevant for outreach.

New feature

Sales tools category and role gating on /tools

The tools page previously showed only content tools and was accessible only to ADMIN + MANAGER.

Polish

Shared design system for all sales tools

New .sales-* CSS classes (sales-chip, sales-card, sales-grid, sales-tone-badge, sales-copy) built on top of the existing .dl-* tool framework. Gradient border per tone color, hover lift, copy-to-clipboard with feedback animation. Mobile-responsive grid.

Polish

Resterende ~60 hardcoded Nederlandse strings vertaald in 4 talen

In de TikTok-instellingen-modal, evaluatiegesprekken-sectie en alle empty-states (lege lijsten, "Geen taken vandaag", "Nog geen leads", etc.) stonden nog Nederlandse strings hardcoded. EN/DE/FR-gebruikers zagen daardoor Nederlandse meldingen.

Bug fix

Browsers kozen soms het Senly-icoon i.p.v. het bureau-favicon

Next.js voegt automatisch <link rel="icon" href="/icon.png" sizes="512x512"> toe. Onze tenant-favicon werd dáárna gerenderd, maar zonder size-hint — browsers kunnen het auto-icon dan voorrang geven omdat dat een specifieke maat opgeeft.

Polish

Tabs en cards op /admin/instellingen voelen nu écht premium aan

De eerste tabbed-versie was functioneel klaar maar de bestaande .branding-section styling klopte niet helemaal met de luxe look — cards liepen in elkaar en de tabs voelden te basic.

Polish

Resterende hardcoded Nederlandse strings vertaald

Na de eerste i18n-pass bleven nog placeholders ("Bedrijfsnaam", "Zoek een dag…"), editor-tooltips ("Vetgedrukt", "Cursief", "Onderlijnd", "Voeg link toe", "Lijst", "Verwijder opmaak") en aria-labels ("Vorige", "Volgende", "Toon/Verberg wachtwoord", "Stage verwijderen") hardcoded staan.

Polish

Knoplabels in modals/dialogen vertaald in 4 talen

Vele knoppen in CRM-modals, meetings-modals, onboarding-, admin-, integratie- en booking-management-pagina's stonden hardcoded in het Nederlands ("Annuleren", "Opslaan", "Verwijderen", "Aanmaken", "Bewerken", "Toevoegen"). EN/DE/FR gebruikers zagen daardoor Nederlandse buttons in popups.

Polish

Identiteit / Kleuren / Domein / E-mail als aparte sub-tabs binnen Huisstijl

De Huisstijl & branding pagina was één lange scroll met 7 secties (logo donker, logo licht, favicon, namen, kleur, eigen domein, systeem-mailadres) — overweldigend en weinig premium aanvoelend, vooral nu het aantal opties is gegroeid.

Bug fix

Production build faalde door duplicate field op Tenant

In v4.94 voegde ik een nieuw faviconUrl-veld toe aan het Tenant-model, maar het bleek al door een andere PR toegevoegd te zijn. Prisma weigerde te genereren ("Field faviconUrl is already defined") en de Railway-build faalde — daardoor was de favicon-feature niet bereikbaar in de UI.

New feature

Upload je eigen favicon in Huisstijl — verschijnt in alle klant-tabs

De browser-tab toonde voor klanten van een whitelabel-bureau nog altijd het Senly-S-logo. Een klein detail, maar het verraadt direct dat het platform niet van het bureau zelf is.

New feature

Cookie-expiry herinnering komt van bureau-adres i.p.v. noreply@senly

De dagelijkse cron-mail naar bureau-werknemers met de social-accounts die binnen 3 dagen verlopen werd nog via Resend met master FROM verstuurd, en de "Open social accounts"-knop verwees ook naar app.senly.io. Dat doorbrak de whitelabel-illusie voor bureau-teams.

New feature

Booking-confirmation, reminder, reschedule, cancel én host-notification respecteren tenant-default sender

De boekingsmails naar prospects probeerden eerst het gekoppelde mail-account van de host (werknemer) te gebruiken — heel netjes — maar vielen daarna direct terug op noreply@socialmediatools.nl als de host zelf geen mail-account had gekoppeld. Plus de notificatie naar de host (werknemer die bij de kalender hoort) ging altijd via Resend met master-branding, los van wat het bureau ingesteld had.

New feature

Toegewezen user krijgt een notificatie zodra een CRM-taak bijna verloopt

Het was wel mogelijk om taken met deadline toe te voegen aan een lead, maar er was geen waarschuwing — je moest het zelf onthouden of dagelijks de CRM-board scannen.

New feature

Kies in Huisstijl welk gekoppeld e-mailadres systeem-mails verstuurt

Welkomstmail, password-reset en MFA-meldingen werden altijd verstuurd vanaf noreply@socialmediatools.nl. Klanten van een whitelabel-bureau zagen daardoor "Social Media Tools" als afzender, niet hun bureau — een grote whitelabel-leak die het zelfs onmogelijk maakte om "Reply" te doen naar een echt aanspreekpunt.

Bug fix

Domein opnieuw opslaan toonde onterecht "Railway-koppeling mislukt"

Bij een herhaalde save van hetzelfde domein gaf Railway een generieke "Failed to create custom domain, please try again" terug zonder de tekst "already exists". Onze regex herkende dat niet als duplicate → status werd onterecht "failed" → rode "mislukt"-banner in de UI terwijl het domein gewoon gekoppeld stond.

Bug fix

Railway API gebruikte verkeerde DNS-record veldnaam

lib/railway-api.ts probeerde `value` te lezen uit de Railway GraphQL response, maar Railway gebruikt `requiredValue` (en `currentValue`) als veldnaam. Daardoor zou de auto-koppeling een GraphQL validatiefout geven zodra deze geactiveerd werd door een nieuwe domein-save.

Polish

Bureau-tenants behouden originele logo-grootte, partner krijgt grotere variant

De vorige polish maakte het logo overal 38px, ook voor bureaus die hun eigen logo gekoppeld hadden.

Polish

Logo in de brand-tile beter zichtbaar

Het sidebar-logo was relatief klein in de 52px tegel waardoor het wat verloren stond.

New feature

Custom domein wordt automatisch in Railway gekoppeld voor TLS-certificaat

Tot nu toe moest een bureau dat een whitelabel-domein wilde gebruiken zelf het domein in het Railway dashboard toevoegen voordat het TLS-certificaat uitgegeven werd — anders kreeg de bezoeker een certificaat-error of een 404.

New feature

Login redirect respecteert nu het whitelabel-domein

Een klant die inlogde op portaal.bureau.nl belandde na inloggen op app.senly.io — de NextAuth redirect callback dwong altijd terug naar de master-NEXTAUTH_URL.

Bug fix

Senly-logo in partner-sidebar zonder witte plak eromheen

De SVG-export bevatte een witte rechthoek-achtergrond, waardoor het logo op de donkere sidebar-tegel een lelijke witte plak liet zien.

Security

Tweede audit-pass dicht resterende cross-tenant routes

Een tweede grondige audit-pass na de eerste fix-ronde vond nog 5 endpoints waar bureau-data niet voldoende geïsoleerd was. Het ernstigst: de Dropbox file-proxy accepteerde elk ?path= zonder check, waardoor iedere ingelogde user willekeurige Dropbox-paden kon downloaden. Daarnaast: OneDrive file-download zonder folder-check, /api/activity lekte activity-log via raden van clientId, drie CRM-endpoints (leads POST, stages POST, GHL-import) valideerden pipeline/stage/contact niet tegen tenant, en Trello-card updates checkten niet of de card op het board van de huidige klant lag.

Security

Meeting-type PATCH/DELETE alleen voor host of admin

Elke collega binnen een bureau kon de meeting types ("30-min discovery call", "Strategie sessie") van andere collega's bewerken of verwijderen. Niet cross-tenant lek, maar wel kon een Sales-collega per ongeluk de boekingskalender van een collega weghalen.

Bug fix

Senly-logo werd geblokkeerd door middleware in partner-sidebar

Het nieuwe SVG-bestand stond niet in de middleware-whitelist, waardoor de browser een broken image kreeg.

Bug fix

Verificatie-badge sprong terug naar "Nog niet geverifieerd" na elke opslag

Direct na het klikken op Verifieer toonde de huisstijl-pagina "Geverifieerd". Maar bij elke daaropvolgende opslag — zowel de inline "Domein opslaan" knop als de hoofd-"Wijzigingen opslaan" — sprong de status weer terug naar pending. Oorzaak: 1) onSaveDomain zette de status hard op pending na opslaan, en 2) bij elke page-reload werd de status opnieuw geïnitialiseerd omdat hij niet in de database stond.

Polish

Wit Senly-logo (originele SVG) in de affiliate-sidebar

De handgemaakte inline SVG en de eerdere PNG matchten het officiële logo niet exact.

Bug fix

Eigen domein koppelen voor whitelabel werkte niet voor portaal.socialmediatools.nl

De middleware deed een 301-redirect van portaal.socialmediatools.nl naar app.senly.io vóór de tenant-resolutie plaatsvond. Daardoor kon een bureau dat exact dit host als whitelabel-domein wilde koppelen nooit zijn eigen portal zien — alle requests werden direct doorgestuurd naar de master-app.

Security

Cross-tenant lekken in 17 API-routes gedicht

Een audit op alle API-routes vond meerdere endpoints waar een bureau in theorie data van een ander bureau kon lezen, bewerken of verwijderen als het het ID kende. Het ging om o.a. contentposts (PATCH/DELETE zonder tenantcheck), de bulk financiële editor, alle social-accounts subroutes (LinkedIn/TikTok/Instagram jobs, logout, keywords), pin-toggle op klanten, evaluaties, notes, note-suggestions, feed-style, Dropbox- en Trello-koppelingen, CRM-pipelines, onboarding entries/stages, en taken (POST + recurring).

Bug fix

Dubbele tel-bug bij maanden met handmatige override opgelost

De Maandwinst-staaf op het dashboard toonde een hoger bedrag dan dezelfde maand op /financieel. Oorzaak: bij maanden met een handmatige override telde het dashboard de eenmalige inkomsten/kosten DUBBEL — eerst zaten ze al verwerkt in het override-bedrag, en daarna werden ze nog eens opgeteld via oneTimeProfit. Ook het jaartotaal (top-right "Totaal €X") werd lokaal herberekend met dezelfde buggy formule i.p.v. de correcte server-waarde te gebruiken.

Bug fix

Eigen domein verdween na "Wijzigingen opslaan"

Na het invullen en opslaan van portaal.jouwbedrijf.nl was het veld direct daarna weer leeg. Oorzaak: de hoofd-save (PATCH /api/branding) stuurde de stale lege portalDomain mee uit de form-state, terwijl het ingevulde domein in een aparte `domain` state stond. Daardoor overschreef de hoofd-save het zojuist via /api/branding/domain opgeslagen domein meteen weer met null.

Polish

Senly S-logo in partner-sidebar altijd zichtbaar via inline SVG

Extern PNG-bestand laadde niet altijd correct in de sidebar tile.

Polish

Affiliate-accounts zien het witte Senly-logo in de sidebar

Partners zagen het SMT-logo in de sidebar.

Polish

Instellingen en taalwisselaar rechtsboven in partner-header

Zonder center-cluster (chat/zoek/bell) belandden deze knoppen in het midden van de header.

Polish

Instellingen en taalwisselaar staan links naast het profiel in de partner-header

Voor partner-accounts stonden het tandwiel en de taalwisselaar in het midden van de header door een CSS grid-kolom-misplaatsing.

Polish

Header en sidebar voor PARTNER ontdaan van irrelevante features

Affiliate-only accounts zagen team-chat (sidebar + header), de globale zoekbalk en de meldingen-bell in de header staan — geen van die functies werkt voor hun scope.

Bug fix

TypeScript build-error in /api/clients gefixt

suggestNextNumber kreeg recent een tenantId-param maar de POST-call gebruikte nog de oude signature. Tenant-lookup verplaatst naar boven en call bijgewerkt.

Polish

Affiliate-only accounts hebben nu hetzelfde klantenportaal-gevoel

PARTNER-users zagen alleen het /affiliate-paneel zonder header of sidebar — geen logout, geen taalwissel, geen toegang tot hun profiel.

Bug fix

Ingelogde partners zagen het volledige dashboard op /

De PARTNER-role-scope check zat binnen de auth-guard, die alleen draait voor non-public paths. Maar / staat als publiek pad (landing), dus een ingelogde PARTNER kwam daar gewoon door en zag het volledige dashboard met klanten/taken/etc.

Polish

Partner-activatie pagina in Senly design DNA

De /partner-signup/[token] pagina zag er functioneel maar plain uit: donkere transparante velden (slecht leesbaar), basic styling, geen visuele hiërarchie.

Bug fix

Publieke pagina's (zoals /partners) bleven Nederlands na taalwissel in nav

PublicNav schreef de gekozen taal alleen naar `senly-lang` localStorage, maar getServerLocale() leest uit de `portal_locale` cookie. Twee gescheiden storage-systemen → de server kreeg de nieuwe taal nooit door, alleen de nav-labels veranderden.

New feature

Aanvragers krijgen een eigen partner-account zonder Senly-trial

Bij goedkeuring werden aanvragers naar /signup gestuurd waar ze een 14-dagen trial-account met tenant moesten aanmaken. Verwarrend, en ze kregen toegang tot het hele Senly-platform terwijl ze alleen het affiliate-dashboard nodig hebben.

New feature

PartnerApplication tracked of een aanvraag is geconverteerd

Nieuwe velden `convertedAt` en `convertedUserId` tonen in /super-admin/partner-aanvragen of de goedgekeurde aanvrager daadwerkelijk een account heeft aangemaakt.

New feature

Formulieren aanmaken en koppelen aan meeting-types

Via Meetings → Formulieren maak je vragenlijsten aan (vrije tekst en meerkeuze). Je koppelt een formulier aan een meeting-type; bezoekers beantwoorden de vragen vóór ze een datum kiezen.

Bug fix

Pagina verdween bij taalwissel op publieke pagina's zonder localized variant

Vanaf /partners (of /security, /contact, /helpcentrum, etc.) gooide de taalswitcher de bezoeker terug naar de homepage — verwarrend, ze verloren hun plek.

Bug fix

"Aanvraag verstuurd!" + uitleg onleesbaar op donkere achtergrond

De success-state gebruikte donkere tekst-kleuren die ik voor een lichte achtergrond had gestyled — op de donkergroene CTA-card zijn ze bijna onzichtbaar.

Polish

"Validatiefout" toont nu welk veld + waarom

Bij motivatie korter dan 20 tekens kreeg de bezoeker alleen een vage "Validatiefout" — geen aanwijzing welk veld of waarom.

Bug fix

Aanvragen vanaf /partners landden op login-redirect

De middleware liet de publieke /partners-pagina door, maar /api/partners/apply (POST) niet — die werd als beveiligde route gezien en redirected naar /login. Het formulier kreeg dus HTML terug i.p.v. JSON.

Bug fix

"Unexpected token <" bij aanvraag versturen

Als de API een HTML 500-pagina teruggaf (bv. omdat de DB-tabel nog niet bestaat na een verse deploy), probeerde de client die te parsen als JSON en faalde met een crypto error die de bezoeker niets vertelt.

Polish

Header, filters, modal en knoppen op partner-aanvragen volgen nu de taalswitcher

Alle teksten waren hardcoded NL — eyebrow, titel, beschrijving, filter-tabs, statussen, agency-type labels, modal-velden en knoppen veranderden niet bij wissel naar EN/DE/FR.

Bug fix

Input/select/textarea velden waren grijs i.p.v. wit

De witte achtergrond verloor het van bredere base-styles op input — specificity was te laag.

Bug fix

Verstuur-knop op /partners was te breed

De button erfde een breedte via de algemene .sn-pg-btn cascade en spande te ver uit voor zo weinig tekst.

Polish

Form-velden op /partners zijn weer goed leesbaar

Op de donkergroene CTA-card waren de input-velden bijna onzichtbaar (donker op donker) en de labels eveneens.

Polish

Hartje toegevoegd aan elke tabel-rij in /tools

De favorite-toggle stond alleen op de kaart-rijen bovenaan ("Aanbevolen voor jou"). Wie direct naar de tabel scrolde kon niets als favoriet markeren — en omdat de "Favorieten"-rij pas verschijnt nadat je iets hebt gemarkeerd, was het hele feature onzichtbaar.

New feature

Admin UI voor meeting routers in /meetings → Routers

Nieuwe tab met inline question-builder: meerdere vragen, meerdere antwoorden per vraag, elk antwoord routet naar een meeting-type. Activeren/pauzeren, slug auto-generated uit naam, één-klik verwijderen.

New feature

Verzetten-knop op de manage-pagina

Bezoekers konden alleen annuleren — verzetten betekende cancellen en zelf opnieuw vinden waar te boeken.

New feature

Manage-link in de bevestigings-e-mail

De boekingsbevestiging bevat nu een "Verzetten of annuleren"-knop die naar /b/manage/[token] linkt — bezoeker kan zijn afspraak op elk moment beheren zonder de oorspronkelijke succespagina te hoeven hervinden.

Polish

Privacy + AV datums auto-updaten via git-log

Nieuwe lib/legal-date.ts leest het laatste commit-tijdstip van de pagina-files; geen handmatige `LAST_UPDATED` constants meer.

Polish

Profiel-pagina: rol-badge, "lid sinds", taal-voorkeur en lock-indicator op e-mail

Nieuwe taal-keuze (NL/EN/DE/FR) via setLocale, premium rol-pill, expliciete lock-uitleg op non-admin e-mail-veld, en "lid sinds Maand Jaar" in de hero.

New feature

Launchpad: tijdsindicatie + waardepropositie per taak + confetti bij 100%

`estimatedMinutes` + `valueProp` op elke taak ("3 min · Klanten zien jouw merk"), CSS-confetti burst zodra alles klaar is, en een blijvende Senly Pro-badge.

New feature

Partner-aanvraagformulier op /partners

"Word partner" leidde naar /signup?ref=partners — een bureau-trial-signup, niet een partner-aanvraag.

New feature

CRM: taken & follow-up reminders per lead

Nieuw CrmTask-model, panel in de lead-modal met inline-add (titel + datum + tijd), pill-badges voor "vandaag / over X dagen / verlopen", en check-off met optimistische updates.

New feature

Meeting routing-formulieren — kwalificatievragen vóór de boeking

Nieuw MeetingRouter-model + publieke flow op /boek/[user]/router/[slug]. Bezoeker beantwoordt 1–N vragen, elk antwoord routet naar het juiste MeetingType met antwoorden als prefill.

New feature

Booking: add-to-calendar (Google / Outlook / .ics) + zelf annuleren + 1u-vooraf reminder

Drie kalender-knoppen op de bevestigingspagina, manage-token in BookedMeeting voor self-service cancel via /b/manage/[token], en nieuwe cron /api/cron/meeting-reminders-1h voor de extra reminder een uur voor de afspraak.

New feature

Tools: "Recent gebruikt" + "Favorieten" + persoonlijke aanbevelingen

"Aanbevolen voor jou" was een hardcoded FEATURED_SLUGS-lijst — voor iedereen identiek.

Polish

Cookie-consent balk volgt nu de taal van de bezoeker

De banner stond hardcoded in het Nederlands ("Accepteren", "Alleen noodzakelijk"), terwijl Duitse en Franse bezoekers de rest van de pagina al vertaald kregen.

Polish

Alle resterende NL/EN-only stukken op de landingspagina nu ook DE/FR

Op meerdere plekken (hero, floating cards, calculator, onboarding, feature-bodies, marquee, vergelijking, pricing, final CTA) viel een DE/FR-bezoeker terug op Engels of zelfs Nederlands.

Polish

Alle 10 reviews op de landingspagina volgen nu de taalwissel

De Duitse en Franse varianten van de testimonials bevatten gewoon de Engelse tekst, waardoor de carousel voor DE/FR-bezoekers nog in het Engels bleef.

New feature

AI-support bot antwoordt nu in nl/en/de/fr

De chatbot antwoordde altijd in het Nederlands, ook als de bezoeker de pagina op Engels of Duits had staan.

New feature

Stappenplan-popup (linksonderin) volgt nu de gekozen taal

Alle 10 vragen, antwoordopties, categorieën, resultatenscherm en CTA-teksten zijn vertaald in Nederlands, Engels, Duits en Frans.

New feature

Support-widget volgt nu de gekozen taal van de landingspagina

Tooltip, paneel, tabs, berichten en helpcentrum-teksten zijn volledig vertaald in Nederlands, Engels, Duits en Frans.

New feature

Verlaagd tarief: €50 per klant/maand, €40 bij 21+

Staffel verlaagd van €70/€60 naar €50/€40. Geldt direct voor de maandelijkse berekening en de weergave op de abonnementspagina.

Polish

Aantal bureaus op de landingspagina bijgewerkt van 120 naar 300

trust-stats.ts is de enige plek — alle pagina's die dit getal tonen zijn automatisch bijgewerkt.

Bug fix

Instagram-analyse faalde stilletjes met generieke "kon niet ophalen"-error

Instagram blokkeert datacenter-IPs zoals Railway met een 429 rate-limit. De API gaf dan een vage "fetch_failed" terug en de UI toonde alleen "Kon de gegevens niet ophalen". Bezoekers wisten niet dat TikTok wél direct zou werken.

Bug fix

Hero title verschijnt nu instant in plaats van na 3 seconden JS-hydration

Op trage Android-devices bleef de hero-titel ("Het all-in-one platform voor social media agencies") seconden lang onzichtbaar — alleen een grijze placeholder-streep en de knoppen verschenen. Oorzaak: Framer Motion startte de title met inline-style opacity:0 en animeerde pas naar opacity:1 nadat React JS-hydration klaar was (2-3s op low-end Android).

Performance

Vijf zware orb-blurs vervangen door simpele radial-gradient op mobiel

De hero gebruikte 5 orbs van 500-900px met filter:blur(60-75px) + continuous animations. Op Android met low-end GPU was dat een killer: page-rendering kon 4-5s blokkeren waardoor de hero compleet leeg leek.

Bug fix

Auto-detect taal nu in useState-initializer — geen NL→EN re-render flicker meer

De auto-detect uit v4.39 draaide in useEffect, na de eerste render. Voor EN/DE/FR bezoekers betekende dat: render in NL → setState in EN → re-render → flicker. Plus Chrome bood "Translate page? Dutch to English" aan omdat de SSR-HTML in NL was.

v0.13
Wednesday, 27 May 2026

Notifications bell now loads all items within the 14-day window

Bug fix

API limit raised so that scrolling through notifications actually makes sense

The bell's CSS already had a max-height of 380px with overflow-y: auto (scrollable), but the API delivered at most 5 overdue tasks and 10 in-app notifications — so there was never much to scroll through.

Polish

Sortering omgedraaid — recente meldingen eerst

In de meldingen-bell verscheen "13d verlopen" boven "8d verlopen". Dat is logisch vanuit "meest urgent eerst" maar voelt verwarrend: een notification-feed hoor je in volgorde van nieuw naar oud te scannen.

Bug fix

Meldingen-bell update nu betrouwbaar (10s open / 30s gesloten)

De NotificationBell pollte elke 60s, maar gebruikte een gewone `fetch()` zonder cache-control. Browsers en Next.js cachen die response standaard, waardoor de poll keer op keer dezelfde stale data ophaalde. Resultaat: nieuwe overdue-taken of booking-meldingen verschenen pas na een page refresh.

Security

Meldingen-API filtert nu op tenant — geen cross-bureau task-lek

De overdue-taken query in /api/notifications gebruikte alleen `client: { isActive: true }` zonder tenantId-check. Theoretisch kon een gebruiker daardoor overdue taken van klanten van een ander bureau in de meldingen-bell zien.

Bug fix

Geen 25-dagen-oude verlopen taken meer in de meldingen-bell

Open taken bleven oneindig als melding verschijnen, ook als ze al 25+ dagen verlopen waren. Resultaat: de bell stond steeds vol met TODO-items i.p.v. echte meldingen.

Security

Werklast, productiviteit per weekdag, login-activiteit en team-in-dienst verborgen voor managers

Op /statistieken zag élke manager de Productie & team-sectie: open taken per teamlid, beste werkdag, login-tijdstempels en het volledige dienstverband-overzicht van collega's. HR-gevoelige info die je rolverdeling niet rechtvaardigt.

Security

Dashboard respecteert nu viewFinance-permissie voor managers

De Maandwinst-grafiek (Monthly profit) verscheen op het dashboard voor élke gebruiker met dashboard-toegang — ook managers waarbij de admin de viewFinance-permissie expliciet uit had staan. Zo zagen ze totale omzet, marges en YoY-cijfers per maand die niet voor hun ogen bestemd waren.

Bug fix

Specifieke melding bij te veel inlogpogingen

Bij rate-limiting (meer dan 10 pogingen in 15 minuten) toonde de login-pagina altijd "Onjuist e-mailadres of wachtwoord", waardoor je dacht dat je gegevens fout waren terwijl je in werkelijkheid tijdelijk geblokkeerd was. Pre-flight en authorize delen dezelfde teller — 5x in/uitloggen telt al als 10 attempts.

New feature

Manager-rol heeft nu volledige toegang tot Platformen-sectie in klantprofielen

Managers zagen de "Verbind" knop niet en konden geen accounts koppelen via klantprofielen.

New feature

Social accounts tab toegankelijk voor managers

Managers konden de massa-koppeling pagina niet bereiken via de sidebar of zoekbalk.

New feature

Groep aanmaken knop verborgen voor niet-admins

Alle gebruikers konden zelf groepen aanmaken in de teamchat.

Polish

Font-weight titel "Abonnement & incasso" gecorrigeerd naar 500 (medium)

Titel gebruikt nu dezelfde font-weight en -size als de overige paginatitels in het portaal.

Bug fix

€70 stat zichtbaar op light-theme achtergrond

Wit gradient vervangen door var(--text) zodat het cijfer leesbaar is in lichte modus.

Polish

Titelfont "Abonnement & incasso" gelijkgetrokken met portaalstijl

Gradient op "& incasso" vervangen door solid var(--teal), font-size naar 44px passend bij owner-overview-title.

Polish

Abonnement & incasso pagina volledig vernieuwd naar premium stijl

Glassmorphic cards, teal gradient stat-nummers, scoped styling en een pricing-tabel voor de tarieven — in lijn met de rest van het portaal.

Polish

Filter-tab "Veiligheid" zichtbaar op changelog pagina

De categorie bestond al in de data maar ontbrak als filter-knop. Nu klikbaar naast Polish en Infra.

Polish

Commissieregels editor volledig herontworpen

Pagina had een kale flat layout met standaard HTML radio-buttons en checkboxes.

v0.12
Tuesday, 26 May 2026

Connect social accounts via the Senly Connector extension

New feature

Connecting social accounts now works through the Chrome extension

Connecting always returned "Connection failed" on the online portal, because the old approach used Puppeteer (local Chrome on the server) — which doesn't work in the cloud.

New feature

Sales-portfolio: overzicht per setter/closer/sales manager

Er was geen centrale plek om te zien welke medewerker welke klanten heeft, hoeveel commissie ze verdienen en hoelang een klant al actief is.

Polish

Klantenlijst altijd zichtbaar in CompensationWidget

Setters en closers moesten op "Bekijk opbouw" klikken om te zien voor welke klanten ze commissie ontvangen.

New feature

Klikbare klantlinks in commissie-breakdown (claims queue)

In de detailweergave van een claim stond de klantnaam als platte tekst. Admins moesten handmatig zoeken naar het profiel.

Bug fix

Client deactiveren stopt nu automatisch commissie-assignments

Als een klant op inactief werd gezet, bleef de commissie-assignment actief. De setter zou bij heractivering opnieuw commissie opbouwen zonder dat de admin dit had bevestigd.

Bug fix

Transactie-beveiliging bij gelijktijdige commissie-assignments

Twee gelijktijdige verzoeken konden allebei een actieve assignment aanmaken voor dezelfde klant + rol, omdat Postgres NULL ≠ NULL in de unique constraint.

Bug fix

Misleidende opmerking over pauze-maanden gecorrigeerd

De code-comment zei "pauze telt niet mee in de maandtelling", maar de implementatie telt kalender-maanden zonder onderscheid.

New feature

Setter automatisch toegewezen via CRM

Een appointmentsetter moest achteraf handmatig gekoppeld worden aan een klant. Er was geen link tussen wie de lead ingevoerd had en wie commissie zou ontvangen.

New feature

"Omzetten naar klant" flow in CRM

Gewonnen leads hadden geen directe koppeling naar een klantprofiel. Admin moest klant handmatig aanmaken en dan nog commissie-ontvangers koppelen.

New feature

Klantprofiel direct te openen na conversie

Na het omzetten toont de modal een directe link naar het nieuwe klantprofiel. Commissies zijn direct aanpasbaar in het Financieel-tabblad van de klantpagina.

Polish

Conversie- en Win-rate widgets: donut ring met dynamische kleur

Widgets toonden alleen een getal in XL-tekst zonder visuele context.

Polish

Touchpoints-week widget: gesegmenteerde pie-donut met legenda

Vier contactpunten (meeting/call/WhatsApp/e-mail) stonden als losse tekstrijen zonder verhouding.

Polish

Follow-up ratio widget: halfcirkel-gauge met naald

Ratio als kale decimaal gaf geen gevoel voor schaal of doelwaarde.

Polish

Gewonnen per week widget: verbeterde staafgrafiek met graduele opaciteit

Staven hadden geen labels, geen visueel accent op de topprestatie.

New feature

Server-side locale support via cookie (lib/i18n/server.ts)

Server-rendered pagina's (zoals /status) konden de taalvoorkeur van de gebruiker niet lezen omdat die alleen in localStorage stond.

Polish

/status pagina respecteert taalvoorkeur (NL/EN/DE/FR)

Status-pagina toonde alles in NL: "Alle systemen werken", "Werkt normaal", "Componenten", "90 dagen uptime", "Bijgewerkt", incident-labels etc.

Polish

Affiliate dashboard hero + KPI cards vertaald

Affiliate-pagina was hardcoded NL: "Verdien", "Verwezen bureaus", "Jouw persoonlijke link", "Uitbetaling", "Verbind met Stripe" etc.

Polish

Team-Chat "Iedereen" en "+ Groep" knop vertaald

Team-chat toonde "Iedereen" (DB-naam van system room) en "+ Groep" hardcoded — ook in DE/EN/FR view.

New feature

Meetings-pagina respecteert nu de taalvoorkeur van de gebruiker

De /meetings UI was hardcoded Nederlands — ongeacht of een gebruiker DE/EN/FR als taal had ingesteld zag hij/zij "Kalenders", "Beschikbaarheid", "Verbinden", weekdagen "Ma/Di/Wo" etc. in het Nederlands.

New feature

Klant-zijbalk, MRR-snapshot, TaskioDashboard, override-tabel en CRM-activiteit converteren nu ook

Volledige audit vond nog 5 plekken die hardcoded EUR toonden ondanks de vorige migratie: MonthlyOverrideTable, MrrSnapshot (owner-panel), ClientSidebar (klant-detail), CrmActivityView (lead-waarde wijzigingen), TaskioDashboard (hoofd-dashboard widgets) + PremiumDashboard (FinStat + RevenueChart).

New feature

Bedragen in CRM, Financieel en master SaaS-dashboard volgen nu ook de tijdzone

Vorige batch deed alleen Sales / Affiliate / CRM Reports — andere pagina's toonden nog hardcoded €.

Polish

Meetings-pagina: "Calendars" / "Nieuw calendar" → "Kalenders" / "Nieuwe kalender"

In de NL-versie van de Meetings-instellingen stonden nog engelse termen ("Calendars", "+ Nieuw calendar", "Calendar bewerken", "deze calendar") die niet matchten met de rest van de Nederlandse UI.

Polish

Support-artikelen NL en DE bijgewerkt naar "Kalender" terminologie

Helpcentrum-artikelen verwezen nog naar "Calendar bewerken" / "Calendars" — verwarrend voor klanten die net de juiste NL/DE labels in de UI zagen.

New feature

Sales- en Affiliate-dashboard tonen bedragen in de valuta van de gebruiker

Alle bedragen werden altijd in EUR getoond, ook voor gebruikers in de VS, UK of Zwitserland. Verwarrend en niet professioneel voor internationale teams.

Polish

Sales-dashboard Pipeline-widget toont het juiste valuta-icoon

Het pipeline-widget toonde altijd een dollarteken, ook voor Europese gebruikers — verwarrend omdat de bedragen in euro's staan.

Security

localStorage-cache van vorige gebruiker werd ~500ms zichtbaar voor nieuwe gebruiker

Op /meetings (en andere stale-while-revalidate caches) bleef data van de vorige sessie in localStorage staan. Bij inloggen met een ander account zag je daardoor eerst de meetings/bookings van de vorige user voordat de fetch voor jouw account binnenkwam.

New feature

Appointment Setters en Sales Managers kunnen takenbeheer openen

Sales-rollen hadden geen toegang tot /admin/ghl terwijl ze wel taken toegewezen krijgen via GHL.

Security

Appointmentsetters / Sales managers zien geen klantprofielen meer via zoeken

De /api/search-route gaf alle klanten en taken in de tenant terug, ongeacht rol. Een appointmentsetter kon zo via Cmd+K klantnamen + slugs zien en doorklikken naar klantpagina's die buiten zijn scope vallen.

New feature

Cmd+K toont CRM-leads voor sales-rollen

Sales-rollen zien nu standaard hun eigen leads in het zoekpalette (ipv klanten die ze toch niet mogen openen). Admin/Manager zien klanten + taken zoals voorheen.

Bug fix

Affiliate-dashboard noemde nog 20% terwijl backend al 30%/40% uitkeert

De headline op /affiliate stond op "Verdien 20% MRR per verwijzing" en de FAQ-artikelen herhaalden dat. De daadwerkelijke commissie is al 30% standaard en 40% vanaf 10 actieve verwijzingen.

Bug fix

Actieve CRM-tab (Pipeline / Contacten / etc.) toonde witte tekst op transparente achtergrond

De gradient op de actieve tab gebruikte var(--accent) zonder fallback. Bij bureaus zonder custom branding was --accent undefined, waardoor de hele gradient invalid werd en de tekst onleesbaar.

v0.11
Monday, 25 May 2026

Growth-potential figures less bold

Polish

+1.5% / 2.5× / 80+ teaser figures on the landing page now semi-bold instead of black

font-weight reduced from 900 to 600 for a calmer look.

Bug fix

Status-link nu zichtbaar in senly.io footer

De Status-link werd toegevoegd aan LandingPage.tsx-footer, maar senly.io gebruikt SiteFooter component — dus de link verscheen niet.

Polish

Status-page draait standalone — geen handmatig onderhoud meer nodig

De cron startte pas elke 2 min, dus de eerste uptime-bars bleven uren grijs na deploy. Onbetrouwbaar voor verse installaties.

New feature

Status-link in marketing + portaal footer

De status-pagina was alleen bereikbaar via directe URL — niet vindbaar voor gebruikers.

Polish

PasswordStrength-indicator op profielpagina

Bij het wijzigen van je wachtwoord in je profiel was er geen feedback over de sterkte.

v0.10
Sunday, 24 May 2026

Outlook + Google calendar OAuth — redirect na koppelen niet meer naar localhost, Klantdossier — "wachtwoord vergeten?" reset-flow voor admins & 14 meer

Bug fix

OAuth callback eindigde op ERR_CONNECTION_REFUSED (localhost:8080)

Na succesvol koppelen van Outlook of Google Calendar werd je doorgestuurd naar een interne Railway-URL (http://localhost:8080/meetings...) ipv app.senly.io. Resultaat: blanco "Deze site is niet bereikbaar"-pagina, terwijl de koppeling wél succesvol was opgeslagen.

New feature

Reset-knop in DossierLock + nieuw /api/dossier/reset endpoint

Als een bureau-admin het dossier-wachtwoord vergat of een ex-medewerker het zonder over te dragen had ingesteld, was er geen weg terug — gebruiker zat vast op "Onjuist wachtwoord" zonder reset-optie.

New feature

Nieuwe bureaus kunnen nu zelf hun klantdossier uploaden

De Klantdossier-feature las alleen uit een lokale folder op de server (BEDRIJVEN_FOLDER_PATH). Nieuwe bureaus die zich aanmeldden konden de feature niet gebruiken — geen mogelijkheid om hun dossier-bestand erin te krijgen, dood spoor in de UX.

Polish

Tool /tools/content-kalender van kale inline-styles naar high-end CSS module

De tool stond visueel niet op het niveau van de rest van het platform — kale witte cards, basic tabs, geen hero, geen depth.

Polish

Collapsible-section titels van semi-bold naar medium

Titels van klantprofiel-secties (Notities & wensen, Documenten, AI Content Generator, Metricool, etc.) stonden op font-weight 600 — leek visueel zwaar t.o.v. de body-tekst eromheen.

Polish

Financieel-tab werkt nu voor alle CRM-systemen, niet alleen GoHighLevel

De Financieel-tab in het Klantgegevens-modal noemde overal expliciet "GHL" of "GoHighLevel" (Wordt opgehaald uit GHL, Laatste GHL-sync, leeg = uit GHL, etc.). Niet elk social media bureau gebruikt GoHighLevel — voor bureaus met andere CRM's voelde dit als een lock-in vermelding.

New feature

Elk bureau stelt nu zelf een dossier-wachtwoord in bij eerste gebruik

Eén globale DOSSIER_PASSWORD env var was gedeeld over álle bureaus. Dat is geen schaalbare oplossing voor een multi-tenant SaaS: bureaus kunnen geen eigen wachtwoord kiezen en moeten via support het wachtwoord vragen.

Bug fix

Postgres-fout 42P01 bij opslaan van klantgegevens

Bij het bewerken van een klantprofiel kreeg je in het modal de foutmelding: "Invalid prisma.$executeRaw() invocation: Raw query failed. Code: 42P01. Message: relation client does not exist." Daardoor konden klantgegevens niet meer opgeslagen worden.

Polish

LinkedIn-SVG nu met chunky bold "in" zoals officieel brand-logo

Eerste LinkedIn-icoon op de SSO-knop oogde dun en niet als het herkenbare LinkedIn-favicon.

Polish

Login-pagina SSO-keuze compacter — vierkante platform-logo knoppen

De full-width "Doorgaan met Google/LinkedIn/Facebook"-knoppen onder elkaar namen veel verticale ruimte in. Met 3+ providers werd de loginflow lang en herhalend.

New feature

Vierde SSO-provider toegevoegd: "Doorgaan met Facebook"

Naast Google, Microsoft en LinkedIn was er nog geen Facebook-login. Voor social media bureau-eigenaren is Facebook ook een veelgebruikte login, zeker omdat zij dagelijks Facebook Pages voor klanten beheren.

New feature

Derde SSO-provider toegevoegd: "Doorgaan met LinkedIn"

Bureaus konden alleen inloggen via Google of Microsoft. Voor agency-eigenaren is LinkedIn vaak hun primaire professionele login — het ontbreken daarvan voelde als gemiste optie.

Bug fix

Welkomstmail + admin-notif faalden stil door onverified senly.io afzender

In v3.30 stond de afzender op noreply@senly.io maar dat domein is niet in Resend geverifieerd. Resend weigerde de send stil — de DB-save lukte wel (gebruiker zag "Je staat erop"), maar er kwam geen welkomstmail aan en jij kreeg geen notificatie.

New feature

Nieuwe "Team in dienst" sectie op statistieken-pagina

De statistieken-pagina toonde wel inlog-frequentie van teamleden, maar niet hoe lang elke medewerker al actief is binnen het bureau. Bureau-eigenaren misten een snapshot van team-stabiliteit en retentie.

New feature

Hogere blog→trial conversie via 3 nieuwe in-article elementen

Blog-artikelen hadden enkel één CTA helemaal onderaan. Lezers haakten af voor ze de bottom-CTA bereikten, en mobile readers zagen vrijwel nooit een trial-call.

New feature

GoogleAnalytics-component met AVG-conforme opt-in

Geen enkele meting van websiteverkeer op senly.io — geen zicht op welke blog-posts werken, welke kanalen converteren of hoeveel unieke bezoekers er per dag komen.

v0.09
Saturday, 23 May 2026

Public nav now truly identical to the homepage — duplicate CSS stripped

Bug fix

Subpages still had divergent nav styling (font + the NL toggle falling outside the pill)

public-nav.css contained 250+ lines of duplicate styles for .sn-nav-* that conflicted with landing.css. CSS load order isn't predictable in Next.js; sometimes the wrong rules won, leaving /contact, /vergelijk and other subpages with a different font and pushing the NL button outside the pill while scrolling.

Bug fix

Mobile hamburger-button kwam ten onrechte op desktop in beeld

Bij v3.13 was public-nav.css uit PublicNav verwijderd. Daardoor was de `display: none` op .sn-nav-mobile-btn voor desktop weg en werd het hamburger-icoon onder de nav zichtbaar op blog, helpcentrum, etc.

Polish

Teal eyebrow-pill compacter gemaakt over alle publieke pagina's

De teal "eyebrow"-pill (dot + uppercase text in pill-vorm) was 12.5px met 7×18px padding — visueel te dominant boven de section-titels en stal aandacht weg van de hoofdtekst.

Bug fix

Compact-view toggle bleek niet betrouwbaar te werken

De zoom toggle gaf inconsistente resultaten tussen Chrome's native zoom en CSS zoom, en bracht weinig toegevoegde waarde.

Bug fix

Compact-view button toggelde wel het icoon maar niet de zoom

In v3.07 werd data-compact-view op body gezet, maar Chrome past CSS zoom op body soms niet correct toe — de pagina bleef visueel hetzelfde ondanks de actieve toggle.

New feature

Nieuwe knop in header: schakel het hele portaal naar 80%

Sommige gebruikers willen meer overzicht in één blik zonder eerst Chrome's zoom-menu te openen. En een geforceerde 80% voor iedereen kreeg veel pushback omdat tekst dan te klein werd voor wie het niet wilde.

Bug fix

html { zoom: 0.8 } en bijbehorende fixes teruggedraaid

Het automatisch op 80% renderen via html { zoom } veroorzaakte een wit gat onderaan de sidebar dat niet schoon op te lossen was zonder de layout te breken. Zowel de height: 125vh correctie, de position: fixed sidebar, als de ::before backstop bleken niet de juiste richting.

Bug fix

Witte gat onder Team chat-knop in sidebar opgelost

Bij zoom 0.8 stopte de donkere sidebar-achtergrond halverwege — achter de Team chat-knop en sidebar-footer zat een witte strook. Position: sticky met height: 125vh werd door zoom alsnog geclipt.

Bug fix

Fixed-position sidebar uit v3.01 brak de layout

In v3.01 was de sidebar van position: sticky naar position: fixed gezet om het witte gat onderaan te fixen, maar dit brak de layout: sidebar verscheen als smalle icoon-kolom en main-content kwam op de verkeerde plek terecht.

Bug fix

Sidebar-achtergrond stopte halverwege bij 80%-zoom

Na het aanzetten van html { zoom: 0.8 } liep de donkere sidebar-achtergrond niet door tot onderaan — achter de Team chat-knop en sidebar-footer was een witte/transparante strook zichtbaar. De eerdere fix (height: 125vh) werkte niet omdat position: sticky in combinatie met zoom de hoogte alsnog clipt.

Polish

Standaard portal-zoom op 80%

Het portaal vulde standaard 100% van het scherm — voor veel gebruikers te groot om in één oogopslag het hele dashboard te overzien. Eerder geprobeerd via html { zoom } maar disabled omdat de sidebar en app-shell een wit gat onderaan kregen (vh-units negeren zoom-factor).

New feature

Inloggen met Microsoft (Office 365 / Azure AD / persoonlijke account)

Veel social media bureaus draaien op Office 365 — voor hen voelt Google SSO niet natuurlijk. Met alleen Google sloten we een groot deel van de doelgroep uit.

Security

Demo is nu 100% read-only — geen enkele write meer mogelijk

In v2.86 blokkeerden we alleen DELETE en specifieke destructive POSTs. Maar in demo-modus mogen bezoekers überhaupt geen wijzigingen kunnen opslaan — anders raakt demo-data corrupt voor volgende bezoekers.

Security

Demo-bezoekers kunnen geen content meer verwijderen of externe acties triggeren

De assertNotDemo() guard stond alleen op DELETE /api/clients/[id]. Andere DELETE-routes (kalender, notities, evaluaties) en externe POST-acties (Metricool publish, social scrapers) konden door demo-bezoekers worden getriggerd — risico voor demo-data integriteit en echte API-kosten.

Polish

Eén centrale config voor alle marketing-claims (bureaus, rating, tooling kosten)

Trust-cijfers stonden hardcoded op meerdere plekken (landing 4x, over-ons 2x, security metadata 1x). Een wijziging vereiste handmatig zoeken-en-vervangen en leidde in de platformanalyse al tot inconsistenties (300+/200+/120+ door elkaar).

Polish

SiloCrossLinks component verwijderd van Tools / Trends / CRM / Onboarding

De "Verder werken" chip-rij voegde meer ruis toe dan waarde — boven elke silo-pagina stond een rijtje shortcuts dat afleidde van de daadwerkelijke pagina-inhoud.

Bug fix

Demo-start endpoint redirectte naar interne Railway hostname

/api/demo/start gebruikte req.url als basis voor de redirect. Op Railway resolveert req.url naar de interne container-hostname (localhost:8080), waardoor de browser na de signin een onbereikbare URL kreeg en een error-pagina toonde ipv het dashboard.

Infra

Het portaal draait nu op app.senly.io (was portaal.socialmediatools.nl)

Het marketing-merk (senly.io) en het portaal-domein (portaal.socialmediatools.nl) waren niet op elkaar afgestemd, wat verwarring gaf bij nieuwe gebruikers.

Polish

Login email-placeholder generieker gemaakt

"naam@socialmediatools.nl" als placeholder oogde alsof Senly een interne tool was voor één bedrijf.

Infra

Idempotente demo-seed in npm start

Voor het werken van de "Bekijk demo" knop moest npm run db:seed-demo handmatig gedraaid worden — een extra handeling die makkelijk vergeten wordt.

Polish

Header-topbar ≤640px: overtollige iconen verborgen

Op smalle schermen stonden 9 iconen naast elkaar in de fundio2-topbar. Dit leidde tot crowding en onbruikbare aanraakdoelen.

Polish

Dashboard grafiek ≤640px: bar-waarde-labels verborgen

12 kolommen van ~25px elk — €-labels overlapten volledig op mobiel.

Polish

Client-slider ≤640px: breedte naar calc(100vw - 48px)

max-width: 320px was te restrictief — kaarten werden afgekapt op smalle telefoons.

Polish

Tools-pagina: negatieve marges afgestemd op main-padding per breakpoint

De tools-page negatieve marges (-28px) kwamen niet overeen met de daadwerkelijke padding op mobiel.

Polish

Factuurpagina: volledig responsief gemaakt

De factuurpagina gebruikte uitsluitend inline React-styles — niet overschrijfbaar door media queries.

Polish

Signup-formulier: 2-koloms grid valt terug naar 1 kolom op ≤480px

Inline stijl vervangen door .signup-fields-2col klasse met responsieve breakpoint in globals.css.

Polish

Boekingspagina: extra ≤480px polish voor kleine schermen

Padding van bp-left, bp-right en bp-card krimpen op ≤480px voor bruikbaarheid op kleine telefoons.

Polish

Alle auto-vertaalde EN/DE/FR sleutels herschreven naar correcte professionele vertalingen

Grote blokken sleutels in de DE- en FR-secties van translations.ts waren automatisch vertaald met gemengd Engels/Duits en Engels/Frans (bijv. "Nein Posts", "January", "Run sync now", "Agency name *"). Gebruikers in Duitsland en Frankrijk zagen plaatselijk Engelse tekst door het hele portaal.

Security

Onterechte "ISO 27001"-badge verwijderd van de loginpagina

De loginpagina toonde een ISO 27001-certificering die het bureau (nog) niet bezit. Dit sprak de security-pagina tegen en is een fatale claim voor enterprise-vertrouwen.

New feature

Realtime wachtwoord-sterkte-indicator op signup en wachtwoord-reset

Het signup-formulier en de wachtwoord-reset hadden alleen minLength=8 zonder visuele feedback. Gebruikers wisten niet hoe sterk hun wachtwoord was, en welke verbetering ze konden maken.

New feature

Google SSO — "Doorgaan met Google" op de loginpagina

Inloggen vereiste altijd handmatige email + wachtwoord. Voor terugkerende gebruikers van een SaaS-bureau-tool is dit een onnodige drempel — concurrenten bieden allemaal SSO.

Polish

Knop staat nu op de juiste plek: rechtsboven, op één lijn met "Content"

De "Deel review-link" knop stond ondergeschikt aan de sectietitel "Content" — links eronder gestapeld in plaats van rechts ernaast. De .cp-section-header-row wrapper had geen CSS-styling, waardoor de flex-layout niet werkte.

Bug fix

Modal opent nu altijd in het midden van het scherm

De "Stuur naar Metricool" modal verscheen onder de fold — je moest helemaal naar beneden scrollen om hem te zien. Dit kwam omdat de modal binnen de CollapsibleSection wrapper rendeerde, en die Framer Motion container met overflow:hidden brak de position:fixed van de modal-backdrop.

Bug fix

Hardcoded Nederlandse en Engelse strings in de modal vertaald

De modal toonde "Posts/week:", "Stories/week:" en "Voorbeelden laden" altijd in dezelfde taal, ongeacht de geselecteerde taalinstelling. Resultaat: mixed-language UI (bv. Franse modal met Nederlandse tekst).

Polish

Review portaal compleet heronworpen naar premium dark design

Het review portaal zag er generiek en goedkoop uit: witte achtergrond, emoji platform-badges, brede groene knoppen en lege thumbnails.

Bug fix

Metricool post-afbeeldingen worden nu correct geladen

Media-thumbnails toonden niets vanwege CORS-blokkade op de Metricool CDN.

Polish

Beslissing herzien werkt nu correct

De "Beslissing wijzigen" knop resettte alleen lokale state, zonder de server te informeren.

v0.08
Friday, 22 May 2026

Review portal: review and approve scheduled Metricool posts

New feature

The review link now shows posts directly from Metricool

The review portal only showed internal ContentPost records from the database. So the client couldn't review posts from the Metricool planner.

New feature

Multi-platform badges and a media thumbnail in the review card

Cross-posts (e.g. Instagram + Facebook + LinkedIn at once) now show all platforms as small emoji badges next to the primary platform chip. Metricool posts with an image show a thumbnail. The Metricool status (Draft / Scheduled / Published) is visible as a color-coded chip.

New feature

Source selector and date-range picker in the "Share review link" modal

When creating a review link, you now first choose the source: Metricool or Internal posts. For Metricool, you set a from/to date period (default: today + 60 days). If Metricool isn't connected to the client, the Metricool option is disabled.

Infra

Prisma schema: 3 new fields on ClientReviewSession

contentSource (internal|metricool), decisions (JSON string with review decisions) and dateRange (JSON string with from/to) added. Prisma db push runs automatically on deploy.

Bug fix

Klanttabs ("Overzicht", "Taken", "Content", "Klantinfo", "Financieel") vertaald

De tabs op de klant-detailpagina gebruikten hardcoded Nederlandse labels in een server component, waardoor ze nooit meeveranderden met de taalinstelling.

Bug fix

Sectietitels "Content", "Klantinfo" en "Evaluatiegesprekken" vertaald

Drie sectie-headers in ClientPageSections.tsx waren hardcoded in het Nederlands.

Bug fix

Google Drive foutmelding toonde server-gegenereerde Nederlandse tekst

De GDrive sectie toonde {data.message || tr('gdrive_no_folder')} — de server stuurde altijd een Nederlandse foutmelding die de client-side vertaling overschreef.

New feature

~98 hardcoded Nederlandse strings vervangen door tr()-calls in 4 pagina's

De Affiliate Admin, Audit Log, Massa-koppeling (Social Accounts) en Tools-pagina toonden altijd Nederlandse tekst ongeacht de taalinstelling van de gebruiker.

Polish

Review-header toont nu bureau-logo (of naam-pill) + klant-initiaal avatar

De header gebruikte het client.icon veld als <img> src, maar dat veld bevat een emoji of icon-naam — geen URL. Resultaat: een kapotte afbeelding.

New feature

Agency logo wordt nu meegestuurd vanuit de API

GET /api/review/[token] geeft nu ook agency.logo terug (Tenant.logoLightUrl of logoUrl). Zodra je in de Tenant-instellingen een logo uploadt, verschijnt het automatisch op alle review-pagina's.

Bug fix

KPI-raster stond op desktop-breedte vast op mobiel door !important-conflict

Het CSS-bestand bevatte 4 conflicterende .stats-kpi-grid definities. De laatste (Taskio-stijl, zonder media query) gebruikte !important op grid-template-columns, waardoor de mobiele breakpoints (≤640px en ≤860px) die eerder in het bestand stonden werden overschreven. Op mobiel werden KPI-kaarten dus te smal weergegeven.

Polish

Touch-targets vergroot naar WCAG-minimum (44×44px)

De sluitknoppen van de mobiele navigatie (36px) en het instellingenpaneel (32px) lagen onder het WCAG-minimum van 44×44px, waardoor ze op touchscreens moeilijk te raken waren.

Polish

CRM kanban: scroll-snap op mobiel/tablet voor soepele swipe

Op telefoon/tablet kon de kanban-board horizontaal scrollen maar zonder snapping, wat leidde tot kolommen die halverwege stopten. De inline padding was ook rechts-eenzijdig (40px rechts, 0 links).

Bug fix

CRM detail-pane niet breder dan viewport op telefoon

De klantdetail-pane gebruikte clamp(380px, 42vw, 580px), wat op schermen <380px buiten de viewport stak.

Bug fix

FinanceTabel: data-mobile-label attributen toegevoegd aan alle cellen

De CSS verwachtte data-mobile-label voor de ::before-labels op mobiel, maar alle tabelcellen misten dit attribuut — labels waren dus leeg.

Polish

WeekGrid kalender: scroll-snap en tablet-breakpoint op 881-1200px

Op tablets (881-1024px) werden 8 kolommen (tijdbalk + 7 dagen) dichtgepakt zonder scrollhint.

Bug fix

Kalender filter & datumkiezer popovers overschreden viewport rechts

De filter-popover (right: 0) en de daterange-popover (left: 50%, transform) konden op smalle schermen buiten de rechterkant van de viewport vallen.

Polish

Maandgrafiek financieel: 2 rijen van 6 op telefoon

De maandgrafiek toonde 12 vaste kolommen op elk scherm, waardoor staven op telefoon niet leesbaar smal werden.

New feature

Publiek review-portaal: klanten keuren content goed via unieke link

Contentgoedkeuring verliep via WhatsApp of e-mail — geen gestructureerd feedbackproces, geen overzicht per klant.

New feature

"Deel review-link" knop in de klant-Content-sectie

Managers kunnen vanuit het dashboard een review-sessie aanmaken: optionele titel, begeleidend bericht en geldigheidsperiode (7–90 dagen). De gegenereerde link is direct te kopiëren.

New feature

Review-UI: voortgangsbalk, filtermenu en status-badges

De review-pagina toont een live voortgangsbalk (x van y beoordeeld), filtermenu (alle / te beoordelen / goedgekeurd / afgewezen), platform-gradiënt-badges, uitklap-caption, hashtag-chips, visuele briefing en een "Kopieer tekst" knop. Op mobiel volledig responsief.

Infra

Prisma-model ClientReviewSession toegevoegd

Nieuw model met uniek token, koppeling aan Client, optionele post-selectie (postIds JSON-array), verloop-datum en aangemaakt-door veld. Relatie toegevoegd aan Client.

Polish

Duits en Frans compleet: alle 3.182 sleutels nu aanwezig

DE en FR misten 142 sleutels (dashboard widgets, statistieken, social-account koppeling, tools, kalender-filters). Gebruikers in deze talen zagen de sleutelnaam i.p.v. een vertaling.

Bug fix

Instagram downloader werkt nu via snapinsta.app proxy

Railway's IP-reeksen worden geblokkeerd door Instagram, waardoor yt-dlp altijd faalde.

Bug fix

YouTube downloader: iOS-client bypass voor yt-dlp

YouTube vereist sinds 2024 een proof-of-origin token (po_token) voor de web-client, waardoor server-side yt-dlp faalt.

Bug fix

Snapchat: short-URL resolver + betere user-agent

snapchat.com/t/... short-URLs werden niet omgezet voordat ze naar yt-dlp gingen.

Bug fix

LinkedIn: duidelijke foutmelding bij auth-wall

LinkedIn blokkeert server-IPs met een login-wall. Generieke foutmelding gaf geen richting.

Bug fix

Proxy-whitelist uitgebreid met nieuwe CDN-domeinen

snapinsta.app, media.licdn.com en snap-video.net ontbraken in de proxy-whitelist.

Bug fix

Navigatie ontbrak op tablet (769–1024px)

De sidebar verdween al vanaf 1024px, maar de hamburger/topbar verschenen pas onder 900/768px — daartussen was er geen enkele navigatie.

Bug fix

E-mail inbox was onbruikbaar op mobiel

Onder 768px werden de mappen- én threadkolom verborgen, waardoor alleen een leeg leesvenster overbleef.

Polish

Tool-detailpagina's ruimer op mobiel

Smallere zijmarges op kleine schermen voor meer content-breedte.

Polish

Brede admin-tabellen scrollbaar op mobiel/tablet

Social-accounts bulk-tabel en affiliate-tabellen kappen niet meer af maar scrollen horizontaal.

New feature

Trend radar is nu een werkende tool

Trend radar was een lege placeholder ("binnenkort beschikbaar") terwijl hij wel als tool werd getoond.

Bug fix

Username checker geeft geen valse uitslagen meer

Voor X, Pinterest, Reddit en Facebook gaf de check vaak onterecht "bezet" of "vrij" (JS-shells, bot-walls, login-redirects).

Bug fix

Content ideeën kapt niet meer af bij lange AI-calls

maxDuration op 60s gezet zodat de generatie niet vroegtijdig door het platform wordt afgebroken.

Polish

Geen zichtbare horizontale scrollbalk meer op de pipeline-boards

Scrollbalk verborgen op het kanban-board (CRM/Leads én Onboarding/Flows); horizontaal scrollen blijft mogelijk via swipe/trackpad.

Polish

CRM-content schuift naar links, gelijk aan het linker uiteinde van de horizontale scrollbalk

De header en pipeline-kolommen hadden 40px linker-padding, terwijl de horizontale scrollbalk al op de board-rand begon — dat zag er niet uitgelijnd uit.

Polish

Geen zichtbare scrollbalk meer onder de aanbevolen-tools

De horizontale scrollbalk is verborgen; scrollen gaat via de ‹ ›-pijltjes of een swipe.

Bug fix

Witte strook tussen de menubalk en de hero-achtergrond weg

De achtergrond-wash zat binnen de 28px horizontale padding van de content-zone, waardoor er een witte rand tegen de menubalk overbleef.

Polish

High-end hover-animatie op elk tool-icoon

Bij hover maakt het icoon (carousel én tabel, inclusief de downloader-logo's) een vloeiende 360°-draai met een lichte schaal-pop en kleur-glow. Premium easing met subtiele overshoot; respecteert prefers-reduced-motion.

Polish

Hero-titel "Slimme tools, maximale impact" past nu op één regel

Lettergrootte iets verkleind + nowrap op desktop; op smalle schermen breekt hij netjes af.

Polish

Titel-gewicht gelijk aan de Takenbeheer-titel

font-weight teruggebracht van 600 naar 500 (zelfde dunne uitstraling als de th2-title).

Bug fix

Bovenkant van de aanbevolen-kaarten werd afgesneden

De horizontale scroll-container clipte ook verticaal, waardoor de hover-lift en schaduw bovenaan wegvielen.

Polish

Echte platform-logo's voor de downloader-tools

De downloaders (Instagram, Facebook, TikTok, YouTube, LinkedIn, Snapchat) toonden een grijze placeholder.

Polish

Overbodige meta-regel in de hero weggehaald

"23 tools · 9 platforms · geen registratie" verwijderd voor een rustiger hero.

Polish

Achtergrond van de Tools-hero opgeschoond

De drie losse gekleurde orbs gaven een vlekkerige wash met een zichtbare overgang naar wit halverwege de pagina.

New feature

Nieuwe Tools-pagina: hero, aanbevolen-carousel, categorie-chips en overzichtstabel

Het oude tools-overzicht was een lange reeks losse grids zonder duidelijk overzicht of zoekflow.

New feature

Tool aanvragen

Mis je een tool? Via de knop "Tool aanvragen" dien je er een in; aanvragen worden opgeslagen en verschijnen onder het tabblad "Aangevraagde tools" met een status (in behandeling / gepland / toegevoegd / afgewezen).

Infra

ToolRequest-model + API

Nieuw Prisma-model en /api/tools/requests endpoints (aanmaken, lijst, status bijwerken) — tenant-gefilterd zodat elk bureau de eigen aanvragen ziet.

New feature

Internet snelheidstest

Meet download, upload, ping en jitter tegen de Senly-server — zo weet je of je vanaf je locatie vlot kunt werken.

New feature

Storingen checker voor social platforms

Checkt bereikbaarheid van Instagram, Facebook, WhatsApp, Threads, TikTok, YouTube, X, LinkedIn, Snapchat en Pinterest, met directe link naar de officiële statuspagina.

New feature

Gratis, permanente QR-code generator

Genereert QR-codes die de URL direct bevatten (geen redirect, verloopt nooit), met kleur- en formaatopties en PNG/SVG-download.

New feature

AI Bio generator

Schrijft vier bio-varianten binnen de tekenlimiet van Instagram, TikTok, LinkedIn, Facebook, X of YouTube, met instelbare toon en emoji.

New feature

Username generator met beschikbaarheidscheck

AI bedenkt tien handles op basis van naam, niche en stijl; één klik checkt of ze nog vrij zijn op de grote platforms.

New feature

Viral hook analyzer

Scoort je openingszin op scroll-stop, nieuwsgierigheid, duidelijkheid en emotie, met sterke/zwakke punten en drie verbeterde varianten.

Polish

Nieuwe categorie "Handige hulpmiddelen" op de Tools-pagina

Snelheidstest, storingen checker en QR-generator gebundeld; bio + hook analyzer onder Schrijven & ideeën, username generator onder Analyse & onderzoek.

Polish

Inloggen / Registreren en de taalknop staan nu rechts uitgelijnd, met witruimte tot het logo

Op mobiel bleef de nav een CSS-grid (1fr auto 1fr); met de verborgen menu-links belandde de knoppen-groep in de middelste kolom i.p.v. rechts, en justify-content had geen effect op die grid.

Polish

Logo + Senly staat nu even ver van de linkerrand als de NL-knop van de rechterrand

De nav-inner had asymmetrische padding (links 24px, rechts 14px) waardoor het logo verder van de rand stond.

Bug fix

Witte balk onder de login-card op mobiel verdwenen

html[data-theme="light"] body stelde een lichte achtergrond in die buiten de login-container zichtbaar was als de body verder reikte dan 100dvh.

Polish

Login-card staat nu in het midden van het scherm op mobiel

align-items: center op de container zodat de card verticaal gecentreerd staat, met padding-top voor de Terug-knop.

Polish

Marges van hero, nav, CTA en metrics-balk teruggebracht van 14px naar 6px op mobiel

De hero en nav hadden 14px marge aan alle kanten waardoor de content er "ingekaderd" uitzag op mobiel.

Bug fix

Card is nu auto-height, achtergrond vult de rest van het scherm

min-height: 100dvh op de card zelf maakte hem veel groter dan de content. Wit onder de card was de body-achtergrond die doorscheen.

Bug fix

Formulier begint direct bovenaan zonder grote lege ruimte

justify-content: center + margin-top: 64px op de form-card creëerde een grote lege witte ruimte boven BEDRIJFSPORTAAL.

Bug fix

Mobiel-logo (lp-form-mobile-logo) verborgen op mobiel/tablet

Het SMT-logo flikkerde 1 seconde bij het openen van de loginpagina op mobiel, omdat lp-form-mobile-logo in de media query op display: flex stond.

Bug fix

Login-card vult nu altijd de volledige schermhoogte op mobiel

Zonder de linkerkolom was de card korter dan het scherm, waardoor de witte body-achtergrond zichtbaar was onder de card.

Polish

Branding-kolom verdwijnt op mobiel en tablet — alleen het inlogformulier getoond

display: none op .lp-brand bij max-width: 980px zodat het formulier de volledige breedte krijgt.

Polish

Oog-icoon in wachtwoordveld is nu een consistente SVG op alle apparaten

De emoji 👁/🙈 rendert per platform anders en oogt onprofessioneel.

Polish

Metrics op homepage aangepast

100+ Agencies → 300+, 1.000+ Gebruikers → 2.500+

Polish

Beide nav-knoppen op mobiel krijgen een vaste height: 36px

Font-size en line-height verschilden tussen de twee knoppen waardoor ze nooit exact even hoog waren.

Bug fix

Checkmarks stonden te laag naast de bullets in de CTA-sectie op mobiel

Oude mobiele overrides (margin-top: 2px + align-items: flex-start) waren bedoeld voor een enkelvoudige lange tekstregel en duwden de checkmarks nu onnodig omlaag.

Bug fix

Tekst in support-tooltip niet meer afgekapt door de sluitknop

De absoluut gepositioneerde sluitknop viel over de bodytekst heen, waardoor "Ons supportteam staat voor je klaar" aan het einde werd afgekapt.

Bug fix

Sluitknop tooltip is nu een perfect rondje op iOS Safari

iOS Safari renderde de sluitknop als een ovaal/ei-vorm.

Polish

Animerende gradientkleuren van hero-titel vervangen door lichtere tinten

De animatie schoof door naar #2563eb (diepblauw) wat op de donkere navy achtergrond te weinig contrast had en onleesbaar werd.

Bug fix

Drie losse bullets onder de CTA-knoppen i.p.v. één lange zin

De lange tekst "Geen creditcard · 14 dagen full access · Opzeggen wanneer je wilt" als inline-flex met één checkmark brak raar af op mobiel.

Polish

NL taalknop in de mobiele nav heeft nu dezelfde hoogte als "Inloggen / Registreren"

De NL-knop had een vaste height: 34px en zag er daardoor ronder/ovaler uit dan de CTA-knop.

Bug fix

Tabel op privacybeleid-pagina scrollt horizontaal op mobiel

`display: block; overflow-x: auto` op een <table> werkt niet betrouwbaar in mobile Safari — de pagina scrollde mee in plaats van de tabel.

New feature

Swipe links/rechts om categorie te wisselen op mobiel

onTouchStart/onTouchEnd handlers toegevoegd aan de stage; swipe >30px schakelt naar volgende of vorige categorie.

Bug fix

Ronde hoeken op carousel-kaarten nu zichtbaar op iOS/mobiel

overflow: hidden op de .sn-bc-stage knipt border-radius van 3D-getransformeerde kaarten weg in Safari.

Bug fix

Prijstiers gecorrigeerd: EUR €50/€40, USD $60/$50

Er waren ten onrechte 3 EUR-schijven (€70/€50/€40) in plaats van 2.

Polish

CTA-eyebrow tekst staat nu midden in de pill

Zonder expliciete line-height gebruikte de browser ~1.4, waardoor de tekst te hoog in de badge hing.

Bug fix

"SENLY" in tabelkop volledig zichtbaar op smalle schermen

Bij ≤560px/420px kregen de kolomkoppen 18px padding terwijl de kolom maar 70px/58px breed was — "SENLY" viel buiten de kolom en werd door overflow:hidden afgeknipt.

New feature

Drie EUR-tariefschijven zichtbaar op registratiepagina

Alleen het €70-tarief was zichtbaar; €50 (11-20 klanten) en €40 (21+) ontbraken.

New feature

USD-prijzen voor Engelstalige bezoekers ($60 / $50)

useLanguage locale gebruikt: EN → USD ($60 basis, $50 bij 21+), overige talen → EUR.

Bug fix

"← Terug" knop nu wit op de donkere achtergrond

Knop had kleur #475569 (donkergrijs) wat onleesbaar was tegen de donkere gradient-achtergrond.

Polish

"Inloggen / Registreren" terug in nav op mobiel

Knop was verborgen op ≤980px; nu zichtbaar met compactere padding (9px 13px) zodat [S Senly] + [Inloggen] + [NL] naast elkaar passen.

Bug fix

"Klaar om te schalen?" nu gecentreerd op mobiel

Eyebrow-badge stond niet gecentreerd en had te veel ruimte erboven op kleine schermen.

Bug fix

Checkmark naast "Geen creditcard" niet meer langwerpig of verschoven

Icoon rekte mee met de gewrapte tekst in het flex-item en stond niet op de juiste positie.

Polish

Bureau-scan popup verborgen op mobiel

De bureau-scan popup overlapte de support-chat widget op schermen ≤768px.

Polish

"Senly" tekst zichtbaar naast logo op mobiel

"Senly" was verborgen op mobiel zodat de CTA en NL zouden passen, maar de gebruiker wil het logo-woord zien.

Polish

"NL" netjes gecentreerd in de taalknop

Asymmetrische padding (0 9px 0 12px) vervangen door symmetrisch (0 10px) + justify-content: center zodat NL + chevron visueel gecentreerd staan.

v0.07
Thursday, 21 May 2026

Nav items centered on mobile

Polish

Logo + CTA + NL are now centered in the nav on mobile

On mobile the logo sat at the far left and the two action buttons at the far right (justify-content: space-between with an empty gap because the nav links are hidden).

Polish

Actieve slide-indicator is nu een dun gekleurd streepje

De actieve dot was een dik ovaal bolletje (8px hoog, 28px breed) — te opvallend en niet passend bij het design.

Bug fix

"Begin met één." breekt niet meer over twee regels op mobiel

white-space: nowrap toegevoegd op de em-tag zodat "Begin met één." altijd op één regel blijft.

Bug fix

Teal/blauwe glitch in hoeken van hero-sectie op mobiel

iOS Safari clipt overflow:hidden + border-radius niet betrouwbaar voor z-index:-1 elementen. De orb-glows lekten door de afgeronde hoeken van de hero-kaart.

Polish

Hero-kaart toont nu rondom witruimte op mobiel

De hero-sectie had margin: 14px 14px 0 — geen ondermarge — waardoor de kaart onderaan doorliep tot de rand van het scherm zonder witte rand.

Bug fix

Hero-titel stond op 5+ regels op mobiel — nu exact 2 regels

De SVG-underline binnen de gradient-span had display:block en width:100%, waardoor de inline-block span de volledige containerbreedte innam en "voor" naar een eigen regel werd gedwongen.

Polish

Hero-titel font-size vergroot op mobiel (28px)

Op mobiel was de titel (18px) veel te klein ten opzichte van de beschrijvingstekst eronder — de regels vulden maar 60% van de containerbreedte.

Polish

Responsive breakpoints toegevoegd aan alle publieke pagina's

Sub-pagina's zoals integraties, partners, vergelijk, contact, FAQ en helpcentrum hadden weinig of geen tablet-/mobielstijlen.

Bug fix

integraties.css had nul media queries — volledig opgelost

Platform-knoppen schalen nu mee op mobiel en gaan op <420px vol-breed.

Polish

Nav en footer verfijnd op klein scherm

Nav-inner krijgt minder marge en padding op <480px. Footer-bottom wordt gecentreerd gestapeld op <480px.

Bug fix

Partners: "featured" tier-card offset verwijderd op mobiel

De translateY(-8px) op de featured commissie-kaart gaf een vreemde layout als de grid naar 1-kolom stapelt.

Bug fix

CRM-contactenzoekbalk toonde een wit kader achter de tekst

In het lichte thema kreeg het zoekveld een witte achtergrond en rand van de globale formulier-stijl, waardoor er een wit blokje achter de placeholder-tekst stond binnen de grijze zoekbalk.

Polish

Volledige footer (Product · Hulpmiddelen · Bedrijf) nu op elke pagina

De homepage had de rijke 3-koloms footer, maar de sub-pagina’s (FAQ, Integraties, Vergelijk, Helpcentrum, Contact, Over ons, Blog, Security en de juridische pagina’s) toonden een simpele, afwijkende footer.

Polish

Hint met aanbevolen logo-formaat onder de upload-knop

Bij het uploaden van een logo voor de boekingspagina was niet duidelijk welk formaat het beste werkt.

Bug fix

Taalvoorkeur werd niet onthouden tussen homepage en sub-pagina’s

De homepage sloeg de taal op onder “senly-lang” en de sub-pagina’s onder “senly_lang” — twee verschillende sleutels, dus de keuze ging verloren bij navigeren.

Polish

Login- en signup-kaartje weer wit, achtergrond blijft donker-teal

Het volledig donkere inlogscherm was te donker; gevraagd werd een wit kaartje met behoud van de donkere achtergrond.

Polish

Taalkiezer in de publieke nav gelijkgetrokken met de homepage

Op sub-pagina’s stonden NL/EN/DE/FR nog los naast elkaar, terwijl de homepage al een nette dropdown had.

Polish

Publieke nav (op alle sub-pagina’s) toont nu Platform · Opties · Onboarding · Concurrentie · Prijzen

De gedeelde PublicNav had nog de oude menu-items (Platform met dropdown-pijltje, Blog, Partners) en week af van de bijgewerkte homepage-navigatie.

New feature

Ingelogd blijven via "Onthoud mij"

Er was geen keuze om wel of niet ingelogd te blijven na het inloggen.

Bug fix

Bovenrand van publieke pagina's nu licht i.p.v. donker

Door margin-collapse ontsnapte de 14px bovenmarge van de hero naar de body, waardoor er een donkere rand boven de hero verscheen terwijl links/rechts licht waren.

Polish

Login-accentkop en achtergrondgrid in homepage-stijl

De login miste de signatuur van de homepage-hero (gradient-kop en zichtbaar grid).

Polish

Menu-items staan nu in het midden van de navbar

Met flex/space-between stonden de links iets links van het midden, afhankelijk van de breedte van logo en knoppen.

Polish

NL/EN/DE/FR samengevouwen tot een nette dropdown

Alle vier de talen stonden los naast elkaar in de navbalk, wat ruimte innam en rommelig oogde.

Polish

Login minder donker, gelijk aan de homepage-hero

De login was bijna zwart (#0a0e14) terwijl de homepage-hero juist door teal-radialen wordt opgelicht.

Polish

Inlog- en registratiepagina sluiten visueel aan op de homepage

De auth-pagina's stonden in een licht thema dat botste met de donkere homepage-hero.

Polish

Affiliate (partnerprogramma) staat nu in de footer onder Bedrijf

Na het verplaatsen van Partners uit de nav stond de affiliate-link nergens meer; alleen Blog stond al in de footer.

Polish

Nieuwe nav: Platform, Opties, Onboarding, Concurrentie, Prijzen

De nav had een dropdown-pijltje bij Platform en bevatte Blog en Partners, terwijl die in de footer thuishoren.

Polish

"werktempo en kwaliteitswinst" blijft samen op de tweede regel

Non-breaking spaces toegevoegd zodat de woordgroep als blok naar de tweede regel zakt in plaats van halverwege af te breken.

Polish

Senly-cursor met zachte glow, schaduw en vloeiende follow

De custom cursor gebruikte mix-blend-mode multiply, waardoor het logo dof en nauwelijks zichtbaar werd op de donkere hero.

Polish

Eyebrow "Gratis bureau-scan · 2 min" van bold naar medium

Fontgewicht van het eyebrow-label verlaagd van 700 naar 500 voor een fijnere, minder schreeuwerige uitstraling.

Polish

Titel optimalisatietest-teaser van bold naar semibold

Fontgewicht van de teaser-titel verlaagd van 700 naar 600 voor een iets fijnere, elegantere uitstraling.

Polish

Workflow getoond als snelheids-multiplier in plaats van percentage boven 100%

Een score als "291% workflow optimalisatie" was niet uitlegbaar en kon ongeloofwaardig overkomen.

Polish

Kwaliteitsverbetering weer binnen een geloofwaardige 64–95%

Percentages boven 100% voor kwaliteit hadden geen natuurlijke betekenis.

Polish

Disclaimer toegevoegd onder de uitkomst

De getallen konden als harde belofte worden gelezen.

Polish

Teaser-popup verfijnd naar premium uitstraling

De teaser was een vlakke witte kaart en de ondertitel beloofde alleen uren besparing, terwijl de test meer toont.

Polish

Translucentie cookiebanner verhoogd voor betere kleuraansluiting

Het glaspaneel was nog net iets te dicht, waardoor de kleur afweek van de eerste sectie.

Polish

Uitkomst toont uren bespaard per klant per maand

De besparing stond op weekbasis, terwijl maandbasis aansprekender en gangbaarder is.

Polish

Losse, zwevende cookiebanner met translucente teal-tint

De banner zat vast als volle balk onderin en de achtergrondkleur week af van de eerste sectie.

Polish

Workflow-optimalisatie en kwaliteitsverbetering lopen op tot ~300%

De percentages waren gemaximeerd rond 95%, wat de potentiële winst onderschatte.

Polish

Bespaarde uren nu duidelijk per klant per week

Het label "bespaard per week" was dubbelzinnig over of het de hele agency of per klant betrof.

Polish

Cookiebalk sluit kleurtechnisch aan op de homepage-hero

De balk had eerst een paarsblauwe ondertoon en daarna een te donkere tint vergeleken met het navy-teal van de eerste sectie.

Polish

Workflow-optimalisatie en kwaliteitsverbetering tonen altijd een hoge score

Bezoekers die al efficiënt werkten kregen lage uitkomsten (rond 20%), wat weinig motiveerde om Senly te proberen.

Polish

Gelijkmatig uitdijende pulse-ring met rustpauze

De ring dijde gelijkmatig uit, maar startte te snel telkens opnieuw.

Bug fix

Optellende getallen op het resultatenscherm tellen nu vloeiend

De getallen telden schokkerig op via setInterval en flikkerden tussen heel getal en decimaal, wat de animatie liet glitchen.

Polish

Gelijkmatig uitdijende pulse-ring

De ring schoot eerst weg of bleef juist even hangen — geen rustige beweging.

Polish

Quiz volledig herontworpen: fullscreen modal, 10 vragen, framer-motion animaties

De eerste versie had slechts 3 vragen en een basic uiterlijk zonder premium uitstraling.

Polish

Pulserende ring achter chat-knop beweegt kalmer

De ring pulseerde te snel (elke ~1,2s), wat onrustig oogde.

Polish

Tooltip boven chat-knop: modern kaartje met logo en supporttekst

De oude tooltip was een platte tekstwolk zonder branding.

New feature

Gratis optimalisatietest linksonderin na 10 seconden

Bezoekers hadden geen directe manier om te zien hoeveel tijd en kwaliteitswinst Senly hen oplevert.

New feature

Cookie-toestemmingsbanner op alle pagina's

Bezoekers werden niet geïnformeerd over cookies — wettelijk verplicht onder de AVG.

Polish

Tooltip "Heb je een vraag?" verschijnt na 3 seconden boven de chat-FAB

Klikken opent het support-venster; wegklikken slaat de keuze op in sessionStorage.

New feature

Commissie gecorrigeerd van 20% naar 30%

Code had 20% hardcoded terwijl de partnerpagina 30% belooft.

New feature

Automatische tier-upgrade naar 40% bij 10+ actieve bureaus

Geen upgrade-logica aanwezig terwijl dit wel beloofd werd op de partnerpagina.

v0.06
Wednesday, 20 May 2026

Partner program: 30% standard, 40% from 10 active agencies

New feature

New commission structure: 30% standard / 40% premium

The old tiered structure (20%/25%/30%) was too complex and gave new partners little sense of urgency.

Polish

Calculator simplified: just "Customers per month"

Removed the conversion input; a single direct input (default 5) calculates month-1, after-6-months and year-1 commission with automatic tier transition.

Polish

/partners hero + stats aligned with the new structure

Hero copy, stat cards and tier heading now explicitly state 30%/40% for life.

New feature

Duits en Frans toegevoegd aan de landingspagina

COPY-object uitgebreid met `de` en `fr` blokken; alle inline strings omgezet naar 4-talige lookups.

New feature

Taal-toggle toont nu NL | EN | DE | FR

Zowel de LandingPage-nav als de PublicNav (blog, partners, etc.) tonen alle vier talen. Voorkeur wordt opgeslagen in localStorage.

Polish

Schoner hero — geen vage dashboard-mockup meer op de achtergrond

De .sn-hero-v2-dash-bg toonde een zwak doorschemerende "Goedemiddag"-dashboardafbeelding achter de hero, wat afleidde van de copy.

New feature

Luxe testimonial carousel met 10 reviews

Reviews stonden in een statische 2×2 grid — weinig premium en moeilijk uit te breiden.

New feature

Locale-aware currency en pricing

Alle bezoekers zagen euro’s, ongeacht herkomst.

Polish

Browser chrome verwijderd uit slider-screenshots

Teal Senly browser-bar uit 8 portal-screenshots (kalender, statistieken, trends, inbox, integraties, huisstijl, klanten, klantdetail) gecropped — clean look matchend met de Tools image.

Polish

KPI-cards: compact, aligned op hero-edges, met overloop-kleur

4 metric cards verkort (113px hoog), exact aligned op hero-randen (14px), achtergrond-gradient die natuurlijk doorloopt vanuit de hero. Verplaatst tussen hero en Growth-calculator.

Polish

Final CTA + Marquee headline tweaks

"Klaar om te schalen?" CTA-card kreeg dark-teal blueprint look, eyebrow optisch gecentreerd. "Krachtige extras." nu op 1 regel (head max-width 1100px). Marquees 4× duplicatie voor brede zoom-out viewports.

Bug fix

Dashboard page.tsx crash voor anonieme bezoekers

(dashboard)/page.tsx gebruikte session! non-null assertion en crashte daardoor voor uitgelogde bezoekers op /; rendert zich naast LandingPage met mixed output.

Polish

Signup terug-knop gaat naar vorige pagina

Knop op /signup ging altijd naar /login, ook als bezoeker vanaf landing of changelog kwam.

Bug fix

HTTP 500 op productie / opgelost

De nieuwe app/page.tsx conflicteerde met (dashboard)/page.tsx — beide route-resolvers naar /, runtime-crash in productie (build slaagde wel).

Polish

sn-calc-input: licht grijze achtergrond, inset schaduw, border-radius 14px, teal focus ring

Polish

sn-calc-mc box-shadow verdiept: drie lagen (dichtbij, mid, ver)

0 1px 2px + 0 4px 12px + 0 16px 40px zodat de kaarten duidelijk boven de pagina lijken te zweven.

Polish

text-shadow en filter van sn-calc-mc-teaser-num verwijderd

Polish

sn-calc-mc-teaser-num: 42→58px, font-weight 800→900, text-shadow glow in eigen kleur

text-shadow met currentColor zodat elk cijfer gloeit in zijn eigen accent (paars, teal, amber).

Polish

sn-calc-mc-icon: 44→52px, border-radius 12→16px, inset gloss + drop shadow

Glanzende top-highlight (inset 0 1px 0 rgba wit), subtiele bottom-dimming en diepe drop shadow geven een premium iOS-icon gevoel.

Polish

Eyebrow tekst puur wit, achtergrond en rand iets meer zichtbaar

color #ffffff, background rgba(255,255,255,0.14), border rgba(255,255,255,0.28), dot glow sterker.

Polish

Hero padding-bottom ingesteld op 90px na fine-tuning

Polish

NL/EN taalknop wit gekleurd wanneer nav transparant op dark hero staat

Actieve taaloptie (NL) was donker en niet zichtbaar op donkere hero achtergrond.

Polish

Hero padding-bottom clamp(48px,6vh,80px) → clamp(100px,13vh,160px)

Onderkant van de hero card voelde te abrupt — weinig ruimte binnen de card onderaan waardoor de witruimte daaronder relatief groot leek.

Polish

Hero CTA van solid teal naar witte knop met donkere tekst

Solid teal knop zag er goedkoop uit op de donkere hero achtergrond.

Polish

Eyebrow pill: witte tint in plaats van donker teal

color rgba(255,255,255,0.88), background rgba(255,255,255,0.08), border rgba(255,255,255,0.18).

Polish

Hero CTA-buttons overschreven voor dark context

Primaire knop: solid teal gradient. Secundaire knop: transparant/glass met witte rand en witte tekst.

Polish

Hero margin: 14px → 14px 14px 0, .sn-calc margin-top 24px → 64px

Bottom-margin van de hero card op 0 gezet zodat alleen de 64px sectie-ruimte van .sn-calc de overgang bepaalt.

Polish

.sn-calc margin-top van 64px naar 24px

GrowthCalculator had 64px bovenmarge waardoor er te veel witruimte zat tussen de hero card en de eerste sectie.

Polish

Hero margin: 14px 14px 0 → margin: 14px (ook onderkant)

Onderkant van de hero card had geen marge, waardoor de witruimte onderaan groter leek dan links/rechts/boven.

Polish

bg-base naar #ffffff, sn-root ambient orbs uitgeschakeld

Lichte blauwtint zichtbaar tussen hero-card en volgende sectie door de ambient gradient-orbs op .sn-root.

Polish

Hero sectie omgebouwd naar inset card-stijl (margin + border-radius)

De hero was full-bleed en had een donker→wit gradient nodig als overgang naar de rest van de pagina.

Polish

Horizontale lijntjes tussen prijs/desc/features in alle pricing-cards

Senly.io heeft subtiele horizontale divider-lijntjes die de secties binnen een card scheiden. Localhost miste die

Bug fix

Pagina was niet meer scrollbaar door browser-quirk

overflow-x: hidden op body en .sn-root triggerde een browser-quirk: de browser verandert overflow-y automatisch van visible naar auto wanneer overflow-x op hidden staat. Daardoor werd .sn-root zelf een scroll-container terwijl zijn scrollHeight bijna gelijk was aan zijn clientHeight (geen scroll-ruimte) — viewport-scroll werd opgeslokt en de pagina kon niet meer bewegen. Op andere pagina's viel het niet op omdat ze minder content hebben

Performance

Hero orbs blur(80px) → filter:none

Vier ambient orbs met filter: blur(80px) op de hero — enorme paint-cost per scroll-frame

Performance

Globale noise-overlay verborgen

body::before in globals.css zat als fixed SVG-textuur op z-index 9999 over de hele viewport. Browser moest hem elke frame herevalueren tijdens scroll, ook al was hij visueel marginaal

Performance

Marquee tracks geïsoleerd met contain: layout paint

Marquee-animaties draaien nu in eigen compositor layer en kunnen niet meer indirecte repaints triggeren in de rest van de pagina

Performance

Permanente will-change weggehaald van featured pricing + image glows

Was overbodig — kostte continu GPU-memory zonder hoorbaar voordeel

Bug fix

Logo "Senly" + menu-items waren onzichtbaar in de hero

Nav had nog rgba(255,255,255,0.72) tekstkleuren — wit op cream = onzichtbaar

Performance

Scroll-jank bij 2x naar beneden scrollen — meerdere bronnen aangepakt

(1) onScroll handler vuurde elke wheel-event en kon scrolled-state rapid togglen rondom drempel 40px; (2) HeroV2 had useScroll + useTransform parallax op orbs die elke scroll-frame herrekend werd; (3) HeroV2 mousemove handler bleef CSS-vars updaten ook al was spotlight uit; (4) permanente will-change op nav-inner met 5 properties; (5) backdrop-filter blur(24px) op nav-pill

Performance

overscroll-behavior: none op body

Voorkomt rubber-band scrolling op macOS dat soms hapering veroorzaakte

Polish

Hero achtergrond volledig licht

Hero had nog dark teal radial-mesh achtergrond — knipte hard met cream body eronder

Polish

Hero-elementen aangepast voor lichte bg

Title #0a0e1a zonder text-shadow, sub #475569, bullets #64748b, badge teal-on-light, secondary button white-outline ipv glass

Polish

Float cards aan zijkant: light glass

rgba(255,255,255,0.92) bg + zachte border + soft shadow ipv dark glass — leesbaar op cream

Polish

Custom cursor + dashboard-bg + noise overlay + grid-bg verwijderd

Allemaal dark-only effects die niet meer bij lichte hero passen

Polish

Hero-bridge fade weggehaald

Niet meer nodig want hero is al cream — geen overgang meer tussen secties

Performance

scroll-behavior: smooth verwijderd van html

CSS smooth-scroll forceerde elke wheel-event door browser-animatieloop, waardoor scrollen schokkerig voelde op trackpad/muiswiel

Performance

backdrop-filter blur verwijderd van alle cards

backdrop-filter is de duurste CSS-operatie tijdens scroll — moet voor elke kaart de achtergrond opnieuw blurren bij elke scroll-frame. Op meerdere kaarten tegelijk = paint-jank

Performance

Ambient orbs: position fixed → absolute

Twee 1400×1400 radial-gradient pseudo-elements op position:fixed forceerden permanent paint van de hele viewport bij elke scroll

Performance

will-change weggehaald van permanent-promoted elements

Permanente will-change op orbs en nav-pill kostte continu GPU-memory zonder voordeel. Alleen tijdelijke translateZ(0) op nav-inner gehouden voor de pill-morph

Bug fix

Slider labels "Klanten" en huidige waarde waren onleesbaar

Slider-labels stonden nog op rgba(255,255,255,0.52) — wit op cream = onzichtbaar

Polish

Pricing kaarten beter gepresenteerd

Cards hadden verschillende hoogtes door verschillende content, CTA-knoppen niet uitgelijnd

Polish

Featured Growth-kaart sterker geaccentueerd

Subtiele teal-fade gradient bovenin, dikkere teal border (1.5px), prominentere shadow met dual glow. POPULAIRST badge groter (8x20px), stevigere shadow

Polish

Slider track + thumb premium voelend

Track op rgba dark-tint ipv glas, thumb met white core + teal ring + soft glow

Bug fix

GrowthCalculator teaser-cijfers (2.5×, +1.5%, 80+) waren onzichtbaar

Bestaande regel had wit→grijs gradient-clip die op cream achtergrond letterlijk wit op wit werd

Bug fix

VS-vergelijking tool-chips: alleen prijs zichtbaar, naam ontbrak

rgba(255,255,255,0.65) tekstkleur op wit → onzichtbaar

Bug fix

Pricing featured kaart: €50 amount nauwelijks leesbaar + POPULAIRST badge afgesneden

Featured amount had wit→mint gradient op witte bg + card had overflow:hidden

Performance

Scrollen voelde schokkerig, nav-pill inklap was niet smooth

Fixed ambient orbs + veel backdrop-filter blur(20px) op cards = dure repaints elke scroll-frame

Polish

Volledige body switch naar warm cream (#f6f5f1)

Alle secties hadden eigen dark bg (#060e0d / #0a1c1b) waardoor visuele knipperingen tussen secties; voelde als losse blokken

Polish

Hero-bridge: zachte fade van dark naar cream

220px gradient die door 5 tussenstadia (#060e0d → muted greys → cream) loopt voor luxe overgang

Polish

Alle glass cards naar light variant

rgba(255,255,255,0.7-0.85) bg + blur + zachte dark borders + soft shadows ipv dark glass

Polish

CTA card blijft dark gradient — accent eiland op cream

Dark CTA card valt nu op tegen cream achtergrond voor dramatische focus

Polish

Nav-pill, footer, alle section heads, clock face en text colors aangepast

Polish

ClockSection volledig nieuw met Framer Motion

De "Hoe het werkt" sectie had geen enkele animatie — enige sectie op de pagina zonder Framer Motion

Polish

Gedeelde secHead/secHeadItem/scaleIn/slideLeft varianten toegevoegd

Alle section heads gebruiken nu één consistent stagger-parent patroon met 0.1s tussenpoos per child

Polish

TestimonialCard — tilt + whileHover spring effect

Dezelfde useTilt als pricing/bento cards, plus whileHover y:-4 lift en stagger voor sterren en auteur

Polish

CTA sectie — gesequenced stagger voor dramatische climax

Eyebrow → h2 → body → actions → foot verschijnen elk 100ms na elkaar voor maximale impact

Polish

Platform, Extras, Vergelijking, Prijzen, Reviews heads — stagger varianten

Alle section heads vervangen door motion.div variants={secHead} met children die secHeadItem gebruiken

Polish

Footer fade-in entrance toegevoegd

Infra

Design Skill gecodificeerd in .claude/skills/frontend-design/SKILL.md

Design DNA (dark teal, glassmorphism, glow, eyebrow pills) zat alleen impliciet in code — niet herbruikbaar voor nieuwe sessies

Polish

Globale page-achtergrond donker (#060e0d) ipv lichtblauw

Tussen alle premium dark secties zaten witte gaten die het luxe gevoel braken

Polish

Zoom-scène + clock-sectie volledig dark glassmorphism

Donkere base met meervoudige teal radial glows, glow-effecten op clock hands en active steps, capsule eyebrow-pills

Polish

Flow-visualisatie en insights cards naar dark glass

Glass nodes met blur, gloeiende teal icon backgrounds, premium hover liften

Polish

Platform-section (feature carousel) dark premium achtergrond

Donkere base met dubbele teal radial glows + subtiele grid, glass pill-tabs met teal active glow, gloeiende dots-indicator

Polish

Marquee-sectie dark glass cards

Glass marquee cards met blur, donkere fade-mask aan beide kanten, icon shadows

Polish

Calculator-sectie volledig dark glassmorphism

Calc-widget was flat wit en voelde niet als hetzelfde premium product als de hero

Polish

Pricing-sectie omgezet naar dark premium SaaS look

Pricing cards waren wit op licht — geen wow-effect tussen de andere donkere secties

Polish

Testimonials premium dark cards met cinematic accenten

Glassmorphism cards op donkere base, gloeiende quote-icoon, dunne teal top-accent gradient, hover lift met teal aura

Polish

Trust-stats glassmorphism + gloeiende cijfers

Dark glass cards met teal radial spotlight achter de calc, witte logos met juiste invert filter

Polish

Premium section-eyebrow pills (capsule met teal border + blur)

Eyebrows op donkere secties krijgen nu een echte capsule-pill stijl ipv vlakke tekst — voelt als Linear/Stripe

Polish

Donkere vignette-structuur op hero — midden springt er dramatisch uit

Vier donkere hoek-gradienten over lichtere kern — geeft echte diepte en focus op de content

Polish

Spotlight orb-6 feller en lager — exact achter de heading

Opacity tot 0.36, blur 45px, positie iets omlaag zodat hij de heading verlicht

Polish

Heading teal glow verdubbeld in intensiteit

text-shadow van 0.25 naar 0.55 opacity — heading gloeit nu zichtbaar

Polish

Floating cards: witter glas, sterkere schaduw, hogere leesbaarheid

Border van 0.20 naar 0.28, shadow 0.60 zwart, subtekst van 0.62 naar 0.72

Polish

Spotlight orb-6 veel sterker — zichtbaar lichtpunt boven de heading

Opacity verhoogd, blur verminderd van 70px naar 55px voor scherpere lichtspot

Polish

Heading tekst-glow toegevoegd

Subtiele text-shadow zodat de witte titel loskоmt van de achtergrond

Polish

Floating cards zichtbaarder: meer glaseffect en glow

Achtergrond van 0.06 naar 0.10, border van 0.12 naar 0.20, teal glow shadow toegevoegd

Polish

Badge helderder: teal kleur, sterkere border en glow

Kleur van donker teal-vivid naar helder #5eead4, border opacity omhoog, box-shadow glow

Polish

Hero heeft nu zichtbare gradient-variatie in de achtergrond

Achtergrond was overal even donker — geen diepte of contrast

New feature

Automatische valuta op basis van regio

Alle bezoekers zagen dollartekens, ook Europese bezoekers voor wie euro relevanter is

Bug fix

Lijst-items in VS-vergelijkingskaart waren grijs en onleesbaar

Na omzetten naar donkere achtergrond bleef de tekstkleur #475569 (grijs) — onzichtbaar op donker

Polish

VS-sectie omgezet naar donkere teal achtergrond

Vergelijkingssectie viel uit toon met de hero

Polish

CTA-blok omgezet naar donkere teal stijl

CTA-sectie had lichtblauwe achtergrond die niet aansloot bij het merkgevoel

Polish

Finale CTA-kaart aligned op teal kleurpalet

Achtergrond was navy, em-gradient bevatte hemelsblauw buiten het merkpalet

Polish

Ambient orbs subtiel versterkt

Vaste orbs in achtergrond iets meer zichtbaar gemaakt voor doorgaande teal sfeer door lichte secties

Polish

Primaire button: solid teal merkkleur; secundaire button: glazen outline

De donkere primary button loste op in de hero-achtergrond, en de witte secondary button stak te hard af.

Polish

Achtergrond is nu een donkere versie van de exacte letterkleur

Hero achtergrond: #0a1c1b — dit is dezelfde hue (174°) als de teal-accentkleur #14b8a6, maar verdonkerd naar 11% lightness. Alle diepte-orbs en de bridge-gradient gebruiken nu dezelfde RGB-verhouding (G≈B, H≈174°).

Polish

Bridge-gradient verrijkt met logo-teal doorheen de overgang

De brug tussen hero en pagina liep via neutraal grijs, zonder merkkleur.

Polish

Achtergrondkleur gecorrigeerd naar ware teal van het logo

Eerdere #050d0b achtergrond had een groen-zwaar tint (G>B) die niet overeenkomt met de balanced teal van het Senly-logo.

Polish

Teal-intensiteit verlaagd voor rustigere, premium uitstraling

Orb-1 opacity verlaagd van 0.42 naar 0.22, orb-4 van 0.10 naar 0.05. Teal is nu een zachte atmosferische hint op de donkere achtergrond — merkkleur aanwezig zonder opdringerig te zijn.

Polish

Hero en paginakleur volledig afgestemd op Senly-merkkleur

De hero-achtergrond (#050816) en gradient-accenten hadden een blauw/indigo tint die afweek van het teal-groene merklogo.

Polish

Hero-orbs opnieuw gebalanceerd: navy + één teal lichtpunt

Vijf teal/groene orbs tegelijk gaven een overweldigende groene waas die niet premium oogt.

Polish

Alle niet-brand kleuren vervangen door teal-varianten

Hero-mesh en sectie-achtergronden bevatten indigo, violet en roze accenten die niet passen bij de teal merkidentiteit van Senly.

Polish

Naadloze dark-to-light transitie tussen hero en content

De harde grens tussen de donkere hero (#050816) en de lichte pagina zag er slordig uit — eerdere pogingen met een overlay of donkere gradient in de trust-sectie maakten tekst onleesbaar of creëerden een vage grijze wolk.

Polish

Subtiele kleurgradiënten door de hele pagina

Pagina onder de hero was puur wit en saai.

Polish

Hero-sectie volledig vernieuwd met animerend gradient-mesh

De hero-achtergrond zag er vlak en weinig indrukwekkend uit op een wit canvas.

v0.05
Tuesday, 19 May 2026

Landing: scroll-jacked dashboard tour section removed

Polish

ZoomScene section removed from the landing page

The scroll-jacked dashboard tour (ZoomScene + DashboardTour) has been completely removed from the landing page.

Polish

Dashboard-tour exact nagebouwd als het echte Senly dashboard

De eerste versie gebruikte een donker dark-mode mockup dat nauwelijks leek op het echte platform.

New feature

Scroll-in dashboard tour op de landing pagina

Bezoekers zagen het dashboard alleen klein in de hero — geen gevoel hoe het écht voelt om erin te werken.

v0.04
Monday, 18 May 2026

Support chat: the AI focuses on the latest question + manual scrolling works

Bug fix

The AI answered based on old context instead of the new question

The assistant received all 20 previous messages and got confused — if "thank you" appeared somewhere, it replied with "you're welcome" to a new question.

Bug fix

The chat automatically scrolled back to the bottom while reading

Polling every 4 seconds dragged you back to the end of the chat — scrolling up to re-read something was impossible.

Polish

Bot-berichten leesbaar opgemaakt

Antwoorden van de assistent kwamen als één muur van tekst met zichtbare asterisken (**term**) in plaats van vetgedrukte woorden.

Bug fix

Support-chatbot reageerde niet op berichten

De AI-assistent was geconfigureerd met de Anthropic SDK, maar de ANTHROPIC_API_KEY was niet ingesteld in de productie-omgeving. Daarna bleek ook het Gemini contents-object formaat niet te werken met de bestaande SDK-versie.

New feature

AI-chatbot beantwoordt support-vragen automatisch

Klanten moesten wachten op een handmatig antwoord terwijl de meeste vragen over standaard platformfuncties gaan.

New feature

Overdracht naar medewerker op verzoek

Zodra een klant aangeeft een echte medewerker te willen ("verbind met medewerker"-knop of vrij getypte tekst), zet de bot de room in human mode en stuurt een bevestiging. De support-inbox toont het gesprek direct met een oranje "Medewerker gevraagd"-badge.

Polish

Typing-indicator en bot-avatar in de widget

Tijdens het genereren van een antwoord zijn drie bouncende stippen zichtbaar. Bot-berichten hebben een herkenbaar slotpictogram-avatar en worden gelabeld als "Assistent".

New feature

Meer onboarding-taken zodat bureaus het platform volledig kunnen benutten

De Launchpad is uitgebreid met taken voor social accounts koppelen, klantdossiers invullen, content plannen, eerste boeking ontvangen, e-mailcampagnes sturen en designs importeren. Completion wordt automatisch afgeleid uit de werkelijke database-state.

Polish

Elk bureau ziet zijn eigen logo in de welkomst-animatie

De intro-animatie op de Launchpad gebruikt nu het logo uit de huisstijl-instellingen van het bureau. Heeft een bureau nog geen logo ingesteld, dan wordt het platform-logo getoond.

New feature

Logo-intro bij eerste keer openen van de Launchpad

Bij het allereerste bezoek aan de Launchpad speelt een korte animatie af: het logo verschijnt in het midden van het scherm met een persoonlijke begroeting, waarna het vloeiend wegglijdt. Daarna nooit meer te zien.

New feature

Klantenservice-chat aan/uit zetten in je eigen instellingen

De chat-knop rechtsonder stond altijd aan, ook voor admins die er geen behoefte aan hebben of een schoon scherm willen tijdens een demo.

New feature

Compacte weergave voor wie meer info op één scherm wil

De standaard ruimere weergave is prettig voor grote schermen maar voelt voor power-users en laptops aan als verspilde ruimte.

New feature

Uitleg-rondleidingen opnieuw bekijken met één klik

Zodra je een page-tour wegklikte was er geen makkelijke manier om hem opnieuw te starten — handig bij nieuwe teamleden of om iets te laten zien tijdens een demo.

Polish

Sectie "Metricool standaarden" weggehaald uit Instellingen

De drie velden over post-tijdstippen zaten verstopt in het algemene instellingen-paneel, terwijl dat eigenlijk een feature-specifieke setting is.

Polish

"Rollen" link in het admin-menu

Via het tandwiel-menu is er nu een directe link naar de rollen-pagina waar je aangepaste rollen kunt bekijken en verwijderen.

Bug fix

Badge toont nu de naam van de aangepaste rol

Gebruikers met een aangepaste rol (bijv. "op") kregen in de gebruikerslijst toch "Manager" te zien als rol-badge.

Polish

Gebruikers-modal heeft nu een generieke titel

De kop en eyebrow van de gebruiker-toevoegen-modal tonen nu "Nieuwe gebruiker" en "Gebruiker toevoegen" in alle talen, in plaats van de rol-specifieke "Nieuwe manager".

Polish

Modal verbreedt automatisch in stap 2 van rol-aanmaken

Bij het kiezen van permissies voor een nieuwe rol braken de labels (bijv. "Klantenlijst en klantprofielen bekijken") over meerdere regels en werd de tekst afgekapt — moeilijk te zien welke rechten je precies gaf.

Polish

Modal-titels in lichter, kleiner lettertype

De kop "Manager toevoegen" (en andere modal-titels) stond in een dik en groot heading-formaat — voelde zwaarder dan de rest van de UI.

Polish

Externe CRM-koppeling duidelijker gemarkeerd als optioneel

Het veld voor het koppelen aan een externe CRM-id stond zonder uitleg dat het optioneel is, en de hint verwees naar een externe tool bij naam — kon verwarrend zijn.

Polish

"Aanpassen"-icoon in de topbar verschijnt alleen waar het werkt

De knop om widgets te verslepen stond op elke pagina in de topbar, ook waar het geen functie had — visuele ruis op pagina's buiten het dashboard.

Polish

Custom rol maken zit nu in dezelfde flow als nieuwe gebruiker toevoegen

Custom rollen had een eigen menu-item, los van waar je ze daadwerkelijk gebruikt — bij het uitnodigen van een teamlid. Twee schermen, twee stappen, onnodige zoektocht.

New feature

Bestaande custom rollen blijven herbruikbaar in dezelfde dropdown

Eenmaal aangemaakte rollen verschijnen automatisch als opties bij het uitnodigen of bewerken van volgende teamleden, zodat je een "Content-medewerker"- of "Junior setter"-rol kunt hergebruiken zonder telkens opnieuw permissies te configureren.

New feature

Eigen rollen aanmaken naast Admin / Manager / Setter / Sales Manager

De vier system-rollen waren rigide — een teamlid dat wel content moet kunnen aanmaken maar niet bij financieel mag, of een junior setter zonder pipeline-rechten, was niet mogelijk zonder workarounds.

New feature

Permissie-tree volgt module-structuur van het portaal

De catalog dekt Klanten, Taken, Financieel, Meetings, E-mail, Content & designs, CRM, Onboarding, Tools & AI, Rapporten, Team, Instellingen, Affiliate en Audit-log. Per module zijn specifieke acties (bekijken, aanmaken, bewerken, verwijderen, etc.) afzonderlijk in te schakelen.

Polish

Launchpad-titel gebruikt nu font-weight 500 (zelfde als Takenbeheer)

De Launchpad-titel had font-weight 700 (vet), terwijl Takenbeheer font-weight 500 gebruikt — visueel inconsistent.

Polish

Hero-tekst is nu compacter en heeft dezelfde dikte als andere overzichtpagina's

De vorige versie gebruikte een groter font, waardoor de letters zwaarder oogden dan op Takenbeheer of Statistieken. Launchpad gebruikt nu exact dezelfde formaat-clamp (30-40px) als die pagina's.

Polish

Titel "Launchpad" krijgt dezelfde dikte als "Goedenavond" en andere hero-titels

De display-font Ciutadella rendert zonder expliciete font-weight en tight letter-spacing iets dunner. Launchpad gebruikt nu dezelfde styling (font-weight 700, letter-spacing -0.04em, line-height 1.05) als de andere koppen, dus 1 visuele lijn door het hele portaal.

New feature

Persoonlijke startlijst leidt nieuwe gebruikers door alle setup-stappen

Nieuwe gebruikers wisten niet welke instellingen ze moesten doen om het portaal volledig te benutten — huisstijl, eerste klant, e-mail-koppeling, agenda-integratie, 2FA, AI-sleutel, etc. Allemaal nuttig maar verspreid over verschillende pagina's.

New feature

Eigen Launchpad per rol — setters zien geen huisstijl-taken

Admins krijgen alle 14 taken inclusief huisstijl, team-uitnodigen en integraties. Managers zien 9 taken zonder admin-only zaken. Appointment Setters krijgen 6 sales-gerichte taken (profiel, e-mail-koppeling, kalender, eerste lead). Sales Managers krijgen daar ook de pipeline-configuratie bij.

New feature

Knop verdwijnt automatisch als alles klaar of overgeslagen is

Een taak die irrelevant voor jou is kun je per stuk overslaan. Zodra alle taken óf voldaan óf overgeslagen zijn, verdwijnt de Launchpad-menuknop uit de zijbalk en kun je hem later altijd nog rechtstreeks bezoeken via /launchpad om een taak weer aan te zetten.

New feature

Volledige sidebar-navigatie nu in het Cmd+K zoek-paneel

Het zoek-paneel (Cmd+K) toonde slechts 4 pagina's en miste de meeste recent toegevoegde modules zoals Meetings, CRM, Contentkalender, Onboarding, Affiliate, Updates en alle admin-secties.

Security

Zoek-resultaten respecteren rollen en permissies

Een setter of sales-manager zou via het zoek-paneel pagina's kunnen vinden die buiten zijn werkscope vallen (bv. Statistieken, Takenbeheer, Financieel).

Polish

Onboarding-tab krijgt een raket-icoon

Het icoon van Onboarding was identiek aan dat van Takenbeheer (allebei een vinkje-in-een-vakje) — verwarrend bij hover.

Bug fix

Geen onge-stylede flits meer bij Cmd+R op de updates-pagina

Bij het openen of refreshen van de Updates-pagina zag je een halve seconde de ruwe inhoud zonder opmaak voordat de styling werd toegepast.

Bug fix

Geen onge-stylede flits meer bij Cmd+R op de Meetings-pagina

Bij een harde refresh zag je een halve seconde de Meetings-pagina zonder opmaak: blote knoppen, geen kalender-raster, geen kleuren. De pagina-styling werd pas na hydration ingeladen via een React-component.

v0.03
Sunday, 17 May 2026

Time-zone dropdown in the profile neatly styled

Polish

Selects in the Profile now follow the brand styling

The time-zone dropdown used the default browser look and stood out among the polished input fields.

Polish

Meetings-pagina toont nu "Kalender" en "Instellingen" in plaats van Calendar / Settings

De tabbladen bovenaan de Meetings-pagina waren nog in het Engels — dat past niet bij de rest van de Nederlandse UI. Tekst is aangepast naar Kalender en Instellingen.

Polish

Duidelijker label voor de contentplanning-pagina

De zijbalk-tab heet voortaan Contentkalender in plaats van Kalender, zodat het verschil met Meetings (afspraken) direct duidelijk is. Ook vertaald in EN/DE/FR.

New feature

Live preview van booking-mails terwijl je ze bewerkt

Bij het bewerken van een notificatie-mail (Afspraak geboekt, Herinnering, Annulering, etc.) moest je gokken hoe het eruit zou komen. De enige manier om het echt te zien was een echte boeking maken.

New feature

Test-mail-knop verstuurt direct naar je eigen adres

Onder elke notificatie-bewerk-dialog staat een "Test verzenden"-knop. Eén klik en de mail (met je huidige conceptwijzigingen, mét [TEST]-prefix in het onderwerp) komt op je eigen mailbox aan. Geen echte boeking meer nodig om te checken.

New feature

Verzender-keuze per calendar bij meerdere gekoppelde e-mailaccounts

Wie meerdere mailaccounts gekoppeld had, kon niet kiezen vanaf welk adres boekingsmails verstuurd werden — automatisch werd het eerst-gekoppelde adres gebruikt.

Polish

Strakkere settings-zijbalk met getekende symbolen

De emojis bij Calendars, Beschikbaarheid, Integraties en Branding zijn vervangen door minimalistische line-icons in dezelfde stijl als de hoofdnavigatie. De icoon-kleur volgt de tab-tekst zodat de actieve tab vanzelf in de huisstijl staat.

Polish

Vinkjes naast kalender-types nemen je primary-color over

De checkboxes in de Calendars-zijbalk gebruikten de standaard browser-blauw. Ze volgen nu de accent-kleur die in je huisstijl is ingesteld.

Bug fix

Light-mode wordt vanaf de eerste pixel toegepast

Wie het portaal in light-mode gebruikte zag bij een harde refresh kort een donkere versie verschijnen voordat het thema correct werd toegepast. De thema-keuze stond alleen in browser-opslag en de server kon dus niet weten welke variant te renderen.

Bug fix

Tenant-logo verschijnt direct in de sidebar, niet meer na een halve seconde

De huisstijl-kleuren werden al server-side gezet, maar het logo en de portaal-naam in de sidebar werden nog client-side opgehaald. Bij Cmd+R zag je daarom kort het standaard Senly-logo voordat jouw eigen logo verscheen.

Bug fix

Branding-kleuren werken nu in beide thema's vanaf de eerste paint

De vorige fix dekte alleen dark-mode af. Wie het portaal in light-mode gebruikte zag tóch nog de Senly-teal flits omdat de light-mode CSS-regels de tenant-overrides overrulen.

Bug fix

Tenant-huisstijl wordt vanaf de eerste paint correct getoond

Bij een harde refresh zag je eerst kort de standaard Senly-kleuren voordat jouw eigen huisstijl ingeladen werd. Dat kwam omdat de kleuren pas na hydration via JavaScript werden gezet.

Bug fix

Cmd+R toont voortaan meteen je gepersonaliseerde dashboard

Bij een hard refresh zag je eerst kort de default-layout (en lege activiteiten-feed), daarna sprong het naar jouw gepersonaliseerde versie. De widget-volgorde, breedtes en hoogtes stonden alleen in de browser-opslag, dus de server kon ze niet rendereen.

New feature

Direct kopieerbare URL bij elke calendar-kaart

Op Meetings → Settings → Calendars zag je alleen een ingekort pad zoals /boek/.../slug. Om de echte link te delen moest je telkens een booking openen of de URL handmatig samenstellen.

New feature

Booking-detail, dag- en maand-kalender en sync-tijden gebruiken jouw profiel-tijdzone

Tijden in de meetings-module volgden alleen de browser-tijdzone. Een gebruiker die in zijn profiel een andere tijdzone instelde, zag op de meeting-detailpagina nog steeds de browser-tijd — verwarrend als je in een andere zone werkt dan je laptop.

New feature

Stel je tijdzone in via Mijn profiel

Iedereen kreeg Nederlandse tijden te zien — onlogisch voor collega's die in een andere tijdzone werken.

Bug fix

Changelog en activiteiten-feed tonen tijd in Amsterdam-tijdzone

Bij eerste page-load flikkerden tijden van UTC naar lokaal omdat server en browser verschillende tijdzones gebruikten.

Infra

Disk-write logging in LinkedIn-connector verwijderd

Elke aanroep schreef een regel naar /tmp/li-connector-debug.log — kon de schijf op de productie-server vol laten lopen.

Bug fix

yt-dlp wordt nu correct gevonden op de productie-server

Twee tools verwezen naar een hardgecodeerd lokaal Mac-pad, waardoor ze op de Railway-server stil faalden.

Infra

Élke deploy verschijnt voortaan automatisch in de changelog

Interne projectregel zorgt ervoor dat geen update meer onopgemerkt blijft. Tijden komen direct uit het deploy-moment in plaats van handmatig.

New feature

Bell-icoon toont nu meeting-events

Nieuw AppNotification model + helper. Booking-created/cancelled/rescheduled triggeren een melding bij de host. Volgt de channels.inApp toggle per meeting-type. Nieuwe POST /api/notifications endpoint voor mark-all-as-read.

New feature

Outlook mail-send module via Microsoft Graph

lib/email/outlook.ts met sendEmail() via /me/sendMail + auto refresh-token rotation. sendFromHostAccount routeert nu naar Gmail, Outlook of IMAP afhankelijk van de gekoppelde EmailAccount.

New feature

Reschedule + cancellation mails bij booking PATCH/DELETE

PATCH detecteert scheduledAt-wijziging en vuurt sendMeetingReschedule. PATCH+DELETE vuren sendMeetingCancellation bij status=cancelled.

Polish

SMS en WhatsApp channels uit de UI

Channels teruggebracht naar { email, inApp }. Voorkomt verwarrende toggles voor channels die nog niet aangesloten waren.

Performance

Externe busy-slots parallel ophalen + 30s cache

collectBusySlots() loopt nu via Promise.allSettled door alle providers parallel. Resultaten gecached per {userId,from,to} met 30s TTL + cache-covering zodat per-dag slots-calls binnen het eerder opgehaalde 60d-venster geen externe API-calls meer triggeren.

New feature

Eerste beschikbare dag + tijdsloten in één call

Nieuw GET /api/meetings/availability/first-available scant tot 60 dagen vooruit, vindt eerste dag met slots, en retourneert beide in 1 respons. BookingPage gebruikt dit zodat de pagina direct met data verschijnt — geen wachtende kalender meer.

New feature

Branding-tab in Meetings: logo, kleur, bedrijfsnaam

User-velden bookingLogoUrl/Color/Name. Nieuwe tab in /meetings settings met logo-upload, color picker en live preview. /boek/[user] gebruikt deze branding met fallback naar Tenant.

Polish

Volledige redesign /boek/[user]/[slug]

Two-pane layout: links pane met logo/info, rechts pane in huisstijlkleur met tijdzone-pill, kalender + tijdsloten 50/50. Tenant-logo als favicon op de tab. Responsive: stack op mobiel.

New feature

Klikken op edit-icoon opent modal met channel-tabs

Modal met E-mail/In-app tabs, "Ingeschakeld" toggle, recipients-sectie (Contact / Toegewezen gebruiker / Aanvullende e-mails). Bewerken per channel ipv inline uitklappen.

New feature

5 notification-types per meeting (Afspraak geboekt, Annulering, Verplaatst, Herinnering, Vervolg)

Lijst met channel-chips (E-mail / In-app) per notification. Klik edit-icoon voor subject + body + recipients per kanaal. requireApproval toggle verwijderd — alles wordt nu automatisch confirmed.

New feature

Custom onderwerp + bericht per meeting-type

MeetingType.emailConfig (JSON) met bevestiging/herinnering/annulering. Tokens: {{attendeeName}}, {{hostName}}, {{meetingTypeName}}, {{date}}, {{durationMinutes}}, {{meetingUrl}}. Cron-reminder respecteert nu per-type hoursBefore.

New feature

Bevestigingen, herinneringen en annuleringen via Gmail / IMAP

sendFromHostAccount-helper: gebruikt EmailAccount van de host (Gmail OAuth of IMAP/SMTP) om mails te versturen. Fallback op Resend noreply zonder gekoppeld account.

Polish

Volledige tekst-replace door codebase (93 bestanden)

Brand-namen, CSS-class prefixes, cookie-namen (senly_ref), DOM-events, Chrome-extensie protocol, email-templates en alle user-zichtbare teksten.

New feature

Onder welke agenda komen nieuwe boekingen?

Per kalender-integratie (Google/Outlook/Apple) selecteer je welke sub-agenda boekingen ontvangt. createOutlookEvent gebruikt nu writeCalendarId (Google + Apple deden dit al).

New feature

Selecteer welke sub-agenda's meetellen voor beschikbaarheid

listGoogleCalendars/listOutlookCalendars/listAppleCalendars + checkboxes-modal. Alleen aangevinkte agenda's tellen mee voor busy-slots. Standaard: alles.

New feature

Tijdzone-selector, checkboxes per dag, datum-specifieke uren

AvailabilityPanel volledig herontworpen. Per dag aanvinken (was: handmatig slots toevoegen), tijdzone-dropdown, en datum-overrides voor vakantie/feestdag.

New feature

Calendar-form uitgebreid met buffer + boekingsregels

Buffer voor/na, min. aanmeldtijd, max. vooruit boeken in het edit-formulier.

New feature

Zoom OAuth end-to-end werkend in productie

ZOOM_CLIENT_SECRET had een extra teken (33i.p.v. 32 chars) in Railway, waardoor Zoom invalid_client teruggaf bij de token exchange.

v0.02
Saturday, 16 May 2026

Zoom OAuth callback redirect gecorrigeerd, E-mail toegankelijk voor setters en sales managers & 13 meer

Bug fix

Zoom koppelen stuurde gebruiker naar localhost i.p.v. productie-URL

req.url in de Zoom callback-route bevatte Railway's interne localhost:8080 adres, waardoor de redirect na de OAuth flow naar de lokale dev-server ging.

New feature

E-mail pagina zichtbaar voor appointment setter en sales manager rollen

hideForSales flag verwijderd van e-mail nav-item en isSalesRole redirect op /email/page.tsx verwijderd.

Bug fix

Zoom OAuth redirect naar localhost in productie opgelost

ZOOM_REDIRECT_URI was ingesteld op een localhost-URL in Railway, waardoor Zoom-koppeling in productie naar localhost:8080 redirectte.

Bug fix

Affiliate pagina werkt nu voor alle rollen

Gebruikers zonder bureau-koppeling (tenantId null) kregen een lege foutpagina op /affiliate.

Polish

CRM contacten-zoekbalk: rand verwijderd

Zoekbalk gebruikt nu een subtiele achtergrond-tint zonder zichtbare border.

Polish

Setter dashboard header herontworpen in admin-stijl

Grote greeting met geaccentueerde naam, 4 live KPI-chips (open deals, meetings, calls, maandtarget) in de taskio-hero layout met fade-in animatie. Widget-tints versterkt van 4% naar 8% voor meer visuele diepte.

Bug fix

Railway deploy crash door NOT NULL updatedAt op ChatRoom

De nieuwe updatedAt kolom op ChatRoom was verplicht (NOT NULL) maar kon niet worden ingevuld voor de 8 bestaande rijen in productie. Prisma db push brak hierdoor en de service crashte.

New feature

Custom chat-groepen met eigen ledenlijst

Team chat had één vaste "Iedereen"-groep. Geen manier om bv. een aparte sales-team chat of een managers-only kanaal te maken.

New feature

Auto-include op rol (admin-only)

Admin kan bij groep-creation een "auto-include rol" kiezen (alle setters / managers / sales managers). Users met die rol worden automatisch toegevoegd. Handig voor "Sales team" of "Management" groepen die altijd up-to-date moeten zijn.

Infra

Nieuwe Prisma-modellen: ChatRoom uitgebreid + ChatRoomMember

ChatRoom krijgt: description, color, createdBy, isSystem (true voor "Iedereen"), autoIncludeRole. Nieuwe ChatRoomMember many-to-many tabel met lastReadAt per-user-per-room voor ongelezen-tracking.

Infra

Chat API uitgebreid met groups-endpoints

/api/chat/groups (list + create), /api/chat/groups/[id] (read/update/delete), /[id]/members (add/remove), /[id]/messages (post), /[id]/poll (live updates per actieve room). Cross-tenant guards op alle endpoints via room.tenantId membership-check.

New feature

Drag-and-drop reorder voor sales-dashboard widgets

Klik "Bewerken" rechtsboven → dashed accent-outline + drag-grip per widget → sleep om volgorde aan te passen → klik "Klaar". Volgorde blijft per-user in localStorage staan. Zelfde patroon als het bureau-dashboard.

New feature

Affiliate-programma nu beschikbaar voor sales-rollen

Setters en sales managers konden geen eigen referral-link genereren — alleen ADMIN-rol mocht. Daardoor konden zij geen klanten verwijzen naar Senly en commissie verdienen.

Polish

Content-kalender verbergen voor sales-rollen

/kalender (Metricool content-feature) verschijnt niet meer in de sidebar voor setters/sales managers + page-guard redirect naar /. Was per ongeluk nog zichtbaar.

Bug fix

Doorzichtige slide-over panes (Widgets + CRM Contacten)

Vier CSS-regels verwezen naar var(--bg-base) wat geen gedefinieerde CSS-variabele is, waardoor de Widgets-beheren modal en de Contacten detail-pane volledig doorzichtig waren.

Bug fix

Zoom OAuth-redirect debug-instrumentatie

ZOOM_REDIRECT_URI op Railway gezet + tijdelijke /api/debug/zoom-config endpoint + console.logs in /zoom/start om te zien waarom de OAuth-flow nog steeds op localhost:8080 uitkwam. Onderzoek loopt.

New feature

Configureerbaar sales-dashboard met 19 widgets in 5 categorieën

Setters en sales managers krijgen een eigen dashboard (vervangt TaskioDashboard voor hun rol). Registry-pattern met KPI tiles (7), Pipeline & deals (5), Activity & follow-up (3), Meetings (2), Team & performance (2). Picker-modal rechts opent slide-over met categorie-groepering en checkbox per widget. Persistence in localStorage per user.

New feature

PermissionsExplainer toont nu 4 rollen

Admin / Manager / Setter / Sales Manager kolommen naast elkaar. Sales-rollen krijgen "Eigen" scope-badges waar ze gefilterd zijn op assignedTo. Nieuwe rijen voor CRM pipeline, Contacten, Activiteitenlog, Sales-rapportages, Meetings, Tools, Affiliate. Title: "Bevoegdheden per rol".

New feature

Externe agenda-events tonen in /meetings

getAppleEvents / getGoogleEvents / getOutlookEvents helpers + nieuwe /api/meetings/calendar-events endpoint. Maand/Week/Dag view tonen iCloud/Google/Outlook events als dimmed grijs-gestreepte achtergrond-blokken naast Senly-bookings. Toggle "Externe events" in sidebar.

Performance

Stale-while-revalidate caching op /meetings

Telkens als je naar /meetings ging zag je 2-3s "Laden…" voor de calendar geladen werd, ook bij snelle terugkeer.

Polish

"Nieuwe manager" → "Nieuwe gebruiker" (4 talen)

Per rol counts blijven (admin/manager/setter/sales_manager) maar generieke labels zijn nu rol-neutraal: gebruiker / user / Benutzer / utilisateur.

New feature

Twee nieuwe rollen: Appointment Setter + Sales Manager

User.role uitgebreid (geen DB-migratie nodig, is een string). lib/permissions.ts: nieuwe predicates + permissions matrix + crmScopeWhere() helper voor own-scope filtering + page-gates. Sidebar verbergt bureau-pagina's (Onboarding/Email/Statistieken/Trends/Takenbeheer) voor sales-rollen. Sales-rollen krijgen eigen dashboard via rol-branched home-page (skipt onnodige bureau-data fetching).

New feature

CRM omgebouwd naar 4-tab layout

Pipeline (bestaande kanban) / Contacten (nieuwe view) / Activiteit / Rapportages. Tab in URL-hash zodat refresh + deeplinks werken.

New feature

Aparte Contacten-tabel (1 bedrijf, meerdere deals)

Nieuw CrmContact model + CrmLead.contactId FK. API: /api/crm/contacts CRUD met sales-scope. UI: grid van contact-cards + zoek + "+Nieuw contact" + slide-over detail-paneel met edit-mode + social links + gekoppelde deals lijst.

New feature

CRM Activiteitenlog met auto-logging

Nieuw CrmActivity model + lib/crm-activity.ts write-only logger. Auto-events op alle mutaties: lead_created/moved/status_changed/assigned/note/value/deleted, contact_created/updated/deleted, touchpoint. Tijdlijn-UI per dag gegroepeerd met type-iconen + natural-language sentences. Type-filter + zoek. Sales-scope auto-filter.

New feature

CRM Rapportages-tab

6 KPI-tiles (pipeline-waarde, gewonnen omzet, conversie, gem. dealwaarde, meetings, verloren), pipeline funnel met per-stage kleur, performance-tabel top 20, trend-charts (won/created per maand). Period-filter 7d/30d/90d/YTD/All.

New feature

Touchpoint quick-action overal

Nieuw TouchpointQuickAction component met kind-selector (call/whatsapp/email/meeting/note) + summary. Ingebed in CrmBoard lead-modal én CrmContactsView. Schiet POST /api/crm/activities → updaten lastContactAt op lead + contact automatisch.

New feature

Last-contact badge in lead-cards

Pill per lead-card: warm (≤3d, groen) / mid (4-14d, amber) / cold (>14d, grijs). Visuele cue welke deals aandacht nodig hebben.

New feature

Maandtarget per sales-user

User.salesTargetMonthly veld. UserModal toont input alleen bij sales-rollen. Progress-ring op sales-dashboard met kleur-shift good/mid/low.

Infra

Backfill-script voor bestaande CRM-leads

scripts/backfill-crm-contacts.ts — clustert leads op tenant + companyName/email naar nieuwe Contact-records. Dry-run default, --apply om door te voeren. Idempotent.

Security

Privacyverklaring uitgebreid met Senly Connector cookie-disclosure

Sectie 2 (Welke gegevens verwerken wij?) krijgt nieuwe rij over social media sessie-cookies + uitgebreide subsectie 2.1 die uitlegt hoe de Senly Connector werkt: cookie-capture alleen na expliciete gebruikersactie, AES-256-GCM versleuteling, per-tenant scoping, geen wachtwoorden, ontkoppel-flow. Vereist voor Chrome Web Store approval (privacy policy URL).

Infra

GitHub Actions workflow voor dagelijkse cookie-expiry check live

.github/workflows/cron-cookie-expiry.yml triggert elke dag 09:00 UTC POST /api/cron/cookie-expiry-check. Stuurt 1 mail per admin met overzicht van koppelingen die binnen 3 dagen verlopen + al verlopen koppelingen. Gebruikt bestaande PORTAL_URL + CRON_SECRET secrets.

Polish

Premium promo tile (440×280) voor Chrome Web Store

chrome-extension/store-assets/promo-tile-440x280.png — accent gradient achtergrond met witte Senly "S"-mark in box. Klaar om in de Web Store listing te uploaden voor betere featured-visibility.

New feature

Dagelijkse e-mail notificatie bij bijna-verlopen social koppelingen

Cookies van Instagram/Facebook/LinkedIn/TikTok verlopen na 1-3 maanden. Zonder waarschuwing kwam je er pas achter als de automation stopte met werken — soms na dagen aan gemiste activiteit.

New feature

Smart account-detectie: extensie pakt nu de echte gebruikersnaam

Na koppeling stond er "Facebook account" of "LinkedIn account" — niet duidelijk welk specifiek account gekoppeld was. Verwarrend bij 20+ klanten.

Polish

Premium branded icons voor de extensie

Vervangen van solide cirkel placeholder met rounded square + Senly-teal gradient (#2a8a83→#1c5e58) + witte 3-balks "S"-mark. 16/48/128 px varianten — schaalt mooi in Chrome toolbar én Web Store listing.

Infra

Chrome Web Store submission gids

WEB-STORE-SUBMISSION.md met stap-voor-stap publicatieproces: ZIP commando, listing-content (NL+EN), permission justifications voor review, screenshot-richtlijnen, post-publicatie URL-update instructies. Klaar om in te dienen.

New feature

Live connection-status per platform op klantprofiel

Na koppelen wist je niet of cookies nog geldig waren — pas bij de eerstvolgende automation-run kwam je erachter dat de sessie was verlopen.

New feature

Bulk-koppel pagina: alle klanten × platforms in één overzicht

Voor bureaus met 20+ klanten was per-klant navigeren tijdrovend. Onboarding voor een nieuw bureau betekende 80+ kliks door 4 platforms × 20 klanten.

New feature

Cookie-status helper detecteert verlopen sessies proactief

lib/cookie-status.ts kijkt naar de expirationDate van key-cookies per platform (li_at voor LinkedIn, c_user+xs voor FB, sessionid voor TikTok/IG). State = connected/expiring (≤7d)/expired/never_connected. Geen HTTP-calls naar het platform nodig — 100% gratis en snel.

Polish

Sidebar: nieuwe "Social accounts" link voor admin/manager

Tussen Activiteiten en Affiliate verschijnt nu een Social accounts icoon (ketting-symbool) dat naar de bulk-koppel pagina linkt. NL/EN translations toegevoegd.

New feature

Chrome-extensie "Senly Connector" voor account-koppeling

Bureau-eigenaren moesten Instagram/Facebook/LinkedIn/TikTok accounts van hun klanten koppelen door op de server een Chrome-venster te laten openen (Puppeteer headless: false). Dat werkte alleen lokaal op een Mac met Chrome geïnstalleerd — niet op Railway, en niet voor team-leden vanaf hun eigen laptop.

New feature

Batch-koppel: per klantprofiel "Verbind" knop met automatische klant-binding

Bij 20 klanten × 4 platforms = 80 koppelingen moesten in de oude flow allemaal handmatig met user/password worden gedaan — error-prone en risicovol vanwege 2FA, CAPTCHAs en datacenter-IP bans.

Infra

Puppeteer naar headless mode + cross-platform Chrome-detectie

De 4 grote Puppeteer features (Facebook inviter, LinkedIn inviter, LinkedIn connector, TikTok groeitool) draaiden met headless: false en hardcoded macOS Chrome-paden. Onbruikbaar op Railway.

Security

Cookie-vault met AES-256-GCM + tenant-scoping

Eerder werden cookies als JSON-bestanden op disk opgeslagen (cookieFile). Op Railway (ephemeral filesystem) overleefden ze geen deploy, en zonder encryptie waren ze gevoelig voor data-breach.

Polish

Platform automation cards op klantprofiel maximaal premium

Card 24px radius, 5-laagse shadow met inset white highlight, 4px brand-accent strip bovenaan met 30px blur-glow (Instagram tri-color, TikTok cyan/rood, etc.), 44px icons met glow, premium CTA buttons met accent gradient + lift on hover. 200px min-height voor visueel ritme.

New feature

CRM + Onboarding: Scholarly bento-stijl kanban met gekleurde cards

Gekleurde card-achtergronden per kolom-tone (rotating pink/lavender/yellow/mint/gray pastels), colored dots, subject-pill bovenaan elke card, "+ Toevoegen" knop verhuisd naar bovenaan met dashed border. Cleaner column headers met 02-style count badges.

Polish

8 pagina edge-distance uniform aan Financieel (max-width 100%)

Tools, Takenbeheer, Statistieken, CRM, Onboarding, Eigenaar overzicht, Activiteiten en Affiliate gebruiken nu allen max-width: 100% voor consistente brede content-area zoals Financieel, ipv de standaard 1320px container.

Polish

Header profile-chip 24% compacter

Avatar 42→32px, naam 15→13px, role 11.5→10.5px, badges 15→12px. Verified-badge en account-dot proportioneel kleiner met dunnere border.

New feature

Statistieken: 4-sectie bento layout (Health/Klanten/Team/Systeem)

4 logische groepen op urgentie/doel met 6-koloms bento-grid en variabele card-groottes (span-2/3/4/6). Featured "Op tijd geleverd" card met accent gradient + meter-visualisatie. Activiteit-sectie weggehaald (er is een aparte /activiteiten pagina). 3 nieuwe inzichten: klant-groei trend (12 mnd), klanten met achterstand, inactiviteits-risico met gekleurde border-lefts per stilte-niveau.

Bug fix

Tools-pagina platform-iconen: outline én filled werken correct in wit

Instagram outline-camera werd een wit blok omdat een eerdere fix fill: currentColor !important op ALLE SVG-elementen forceerde, waardoor de rect-outline gevuld werd ipv geöutline.

Bug fix

Featured card op statistieken: inner-rectangle artifact opgelost

Bestaande .stats-card::before regel rendert een 1px inset border in elke stats-card. Op witte cards onzichtbaar maar op de groene gradient van de "Op tijd geleverd" featured card als donkere inner rectangle zichtbaar.

Bug fix

Trends pagina dark mode parity

Title was 32px in dark mode (oude default) en 28px in light mode (nieuwe Taskio styling). Structurele typografie-regels stonden alleen onder html[data-theme="light"].

New feature

E-mail pagina: stale-while-revalidate cache + refresh-knop

Module-cache + localStorage zorgt dat bij terugkomst op /email de laatste threads direct getoond worden, terwijl op de achtergrond geverifieerd wordt. Refresh-knop rechts naast map-titel met spin-animatie. Polling + post-actie refreshes zijn nu silent (geen skeleton flash meer).

v0.01
Thursday, 14 May 2026

External images in emails now always load

Bug fix

Broken-image icon with Cloudinary, Stripe and other CDNs fixed

An iframe srcDoc has an opaque origin — the browser sends no Referer header, and many CDNs (Cloudinary, Stripe images) block image requests without a Referer as an anti-hotlinking measure. Result: complete=true, naturalWidth=0 and a broken icon showing.

Performance

IMAP connection pool — mail-opens van 2.5s naar 500ms

Bij elke mail-klik werd een nieuwe IMAP-verbinding opgezet (TLS-handshake + LOGIN, ~1-1.5s overhead). Daarbovenop werden 12 mail-folders sequentieel doorzocht voor een thread, ook als de mail geen reply-chain had.

Polish

Skeleton-state tijdens image preload

Bij het openen van een mail met externe images zag je 500ms-1s broken-image-icons voordat ze vanuit het netwerk binnenkwamen.

New feature

Apple iCloud koppelen via CalDAV

Direct werkbaar zonder server-side OAuth setup. Klanten geven hun iCloud-email + app-specific password (versleuteld opgeslagen via EMAIL_ENCRYPTION_KEY). Boekingen verschijnen automatisch in hun iCloud-kalender, en bestaande events blokkeren beschikbaarheid.

New feature

Google Calendar OAuth flow

Volledige OAuth 2.0 met auto Google Meet-link generatie bij elke booking. Wacht op GOOGLE_CLIENT_ID/SECRET in Railway env-vars (kan delen met Gmail OAuth).

New feature

Outlook / Microsoft 365 via Microsoft Graph

OAuth flow + auto Teams-meeting links. Wacht op MICROSOFT_CLIENT_ID/SECRET in Azure App registration.

New feature

Zoom OAuth + auto-meeting generatie

Bij elke booking wordt automatisch een Zoom-meeting aangemaakt en de join-URL wordt aan attendee + host doorgegeven via mail én calendar-events. Wacht op ZOOM_CLIENT_ID/SECRET via zoom.us/marketplace.

New feature

Booking-flow integreert met alle gekoppelde kalenders

Bij elke nieuwe boeking: Zoom-URL eerst, dan event in alle gekoppelde calendars met die URL ingesloten. Bij beschikbaarheids-checks worden externe events ook als busy meegenomen — geen dubbele bookings meer.

Polish

Compacte rood/groene aan/uit-switches

De Onderhoudsmodus en Aankondigingsbanner toggles waren 466px brede grijze balken — ze namen .platform-toggle styling over die voor periode-selectors bedoeld was.

Bug fix

Kalender gridlijnen weer zichtbaar in light mode

De gridlijnen tussen uren en dagen in de week-view waren verdwenen omdat de --border CSS-variabele in light mode te licht was (alpha 0.09). Visueel oplosbaar tegen witte cellen.

New feature

Resend integratie volledig actief

Welkomstmails, password reset, meeting confirmations, factuurmails — allemaal werken nu via Resend met geverifieerd domein socialmediatools.nl. Test bevestigd via /api/admin/test-email.

New feature

Interne cron scheduler via node-cron

Geen externe cron-service nodig (Railway Cron, cron-job.org).

New feature

Foutmonitor — server- en gebruikersfouten kanaal

Realtime error-monitoring via /admin/saas → Foutmonitor. Server-errors (500-codes met stack trace) en user-errors (4xx validatie) apart filterbaar. Mark-as-resolved en delete werken.

New feature

/admin/env-check diagnostic dashboard

Visueel overzicht van alle 17 integraties met status (volledig/gedeeltelijk/ontbreekt). Bovenaan een rode actie-lijst met verplichte env-vars die nog ontbreken op productie.

Polish

Cyan undertone op KPI/dash cards verwijderd

In light mode had de card-achtergrond een mint-tint (#fafdfc) en schaduw bevatte rgba(12,36,34,0.04..0.07) — beide gaven een onbedoelde cyan undertone die als "blauw randje" werd waargenomen, zelfs voor brand-kleuren als pink.

Bug fix

Meldingen-bolletje rechts naast bedrijfsnaam

De .notif-item grid had 2 kolommen [icon | body] maar 3 children (icon + body + unread-dot). Resultaat: de dot viel naar rij 2 / kolom 1, recht onder het icoon.

Polish

Support chat + team chat avatar gecentreerd met naam

Avatar (24-32px) stond top-aligned naast een korte naam-regel (~14px), waardoor de avatar visueel veel lager doorliep dan de naam.

Bug fix

Team chat bubble zichtbaar in light mode

Bubble background was rgba(255,255,255,0.07) — werkt op donkere achtergrond, maar op witte light-mode achtergrond onzichtbaar.

Bug fix

IMAP koppelen mag ook als SMTP timeout

Als SMTP onbereikbaar was (Railway trial blokkeerde outbound 25/465/587), kon de hele IMAP-koppeling niet worden opgeslagen.

Bug fix

Maandwinst chart bar-hoogte matcht het label

Bar-hoogte werd berekend uit Math.max(0,rec) + Math.max(0,one), waardoor negatieve eenmalige kosten genegeerd werden en bars dus hoger leken dan het label aangaf.

Infra

IPv4-first DNS resolutie tegen ENETUNREACH

Railway container had geen IPv6 outbound, maar DNS resolveerde soms eerst AAAA-records van de mailserver. Resultaat: ENETUNREACH errors bij IMAP/SMTP.

Bug fix

Team chat overlapt sidebar niet meer

Het chat-paneel werd gerenderd binnen een `aside` element met position:sticky — daardoor zat het visueel verstopt achter de sidebar in light mode.

Bug fix

Group chat toont nu groepsberichten ipv support chat

De backend nam de eerste room van de tenant — vaak de __support__ 1-op-1 room ipv de "Iedereen" groepschat.

Bug fix

Modal "Stuur naar Metricool" zichtbaar over topbar

Topbar had hogere z-index dan modals, waardoor het bovenstuk van modals achter de topbar verdween.