Wat we hebben gebouwd. Wanneer het live ging.
We shippen continu. Dit is het logboek. Geen jaarlijkse release-theater. Het platform dat je in december gebruikt, is beter dan waarmee je in september begon.
Openen en hervatten van receiving-sessies brengt operators nu terug naar het juiste intake-scherm, zonder routeromweg.
Data-bearing assets mogen een workflow stage niet meer verlaten zonder wipe of destruction, met shredding en certified recycling correct behandeld.
Universal search kreeg command-palette acties, recents en modes. Market deals sluiten nu two-sided en wijzen naar invoicing of escrow.
Deal rooms, settlement workspaces, counterparty labels, channel clarity, empty states en realtime-copy zijn rechtgezet. Tenant billing settings landden ook.
Pipeline toont upstream receiving work, receiving-sessies zijn hervatbaar, first-run empty states begeleiden setup en Core CRM-acties herhalen zich niet meer.
Compliance-schermen kregen de nuchtere tekstlaag: risico's, bewijs, mediawaarschuwingen, gates en “waarom kan ik hier niet klikken?”-momenten leggen zichzelf nu uit vóór iemand een zijonderzoek in Slack start. Package enforcement is ook strenger. Het product blijft droog; nu wel droog met bonnetjes.
Het founder-dashboard kreeg velocity charts, PR-regels, handmatige correcties, infoknoppen en een meerpagina-PDF-export voor mensen die cijfers graag netjes op papier zien. ReVend kreeg ook een herbruikbare chartbibliotheek, nettere outbound-PDF-branding en minder package-matrixruis. Investor-update-energie, zonder de rituele deckpaniek.
Saved views doen niet langer alsof. Teams krijgen nu starterweergaves uit een echte tenant-gescheiden tabel, kunnen privé of gedeelde filtersets bewaren, en elke operator pint en kiest zijn eigen default zonder de rest van het team mee te sleuren. Asset history en workflow counts leunen ook niet meer op nep-snapshots. Kleine knop, echt geheugen, minder kartonnen decor.
Contracten duwen nu workflows, SLA's, erasure-gates en disposition preferences het echte werk in. Drivers kregen mobiele routes, stopacties, foto's, handtekeningen, GPS-stempels en outbound proof-of-delivery. Storage quota's, sourcing-polish, early-access capture en secret-decrypt recovery kwamen dezelfde dag mee. Het clipboard is gevraagd om pensioen te overwegen.
Imports, archiveren/verwijderen en dispute evidence zijn veiliger geworden. Het import center staat er, audit trails zijn harder, lifecycle-acties tonen afhankelijkheden vóór iets verdwijnt, en dispute evidence is per partij gescheiden. Serieus adminwerk mag nog; het komt nu met minder voetzoekers in de doos.
De gebruikershandleiding en het behavior handbook groeiden uit tot echte werkdocumenten in plaats van ongedocumenteerde folklore. Dashboard, support, rollen, workflows, settings, sourcing, escrow, auction, market en core kregen dekking, waarna de vertalingstrein begon te rijden. Documentatie blijft documentatie, maar nu met kaart en snacks.
Public API V2 vulde de ontbrekende surface aan, contract- en OpenAPI-referenties liepen bij, webhook plumbing werd netter, admin invitation resend stopte met mokken, en Activity Audit kreeg een tamper-evident hash chain. Saaie woorden, stevige ruggengraat. Exact het soort release waar auditors stiekem blij van worden.
Packages zijn niet langer alleen verkoopcopy. De publieke pricing komt uit de catalogus, ReVend OS kent per tenant modules, features en limieten, en gates blokkeren acties die niet in het pakket horen. Auction deposits, trade-in draft resume en de beta-healthcheck zijn ook live. Minder belofte op slides, meer gedrag in het product.
Auction-verkopers kunnen een buy-now-prijs zetten, en kopers kunnen het ellebogenwerk overslaan wanneer de prijs klopt. Eén klik reserveert het lot, start het dealpad en schuift alles richting outbound en escrow. Voor die momenten waarop een biedoorlog leuk klinkt tot finance vraagt waarom die serverpallet er nog staat.
ITADs die hun operatie al elders draaien, kunnen verkoopbare voorraad nu in ReVend OS krijgen via CSV, XLSX, XML, JSON of API. Assets kunnen gegroepeerd worden tot lots, gepubliceerd naar Market of Auction, en via webhooks teruggekoppeld zodra de commerciële kant beweegt. Eindelijk een brug voor teams waarvan het ERP nogal uitgesproken meningen heeft.
Data-wipebewijs is sneller te vertrouwen. Assets tonen nu of gegevenswissing klaar is, gefaald is, bewijs mist of nog wacht op een geïmporteerd rapport, met het brondocument aan de import gekoppeld. Minder jagen door Blancco-exports; meer “mag dit apparaat het gebouw uit?”
Documentdeling is volwassener geworden. Klantzichtbare bestanden zijn expliciet, downloads worden fail-closed gelogd en admins kunnen per document de access history openen. Perfect voor de klassieke auditvraag: “wie zag dit certificaat?” nu beantwoord zonder groepschat-archeologie.
De Activity-log kreeg duidelijkere labels, meer gevoelig platformwerk laat een spoor achter en featurepakketten kregen een echte adminmatrix. Dit is het soort release waar niemand een screenshot van maakt, maar waardoor support “wat is hier gebeurd?” kan beantwoorden zonder een spreadsheetseance.
Een publieke REST-API en webhooks staan live. Uw andere systemen kunnen het platform nu vragen stellen over orders, documenten en assets — en het platform roept terug zodra er iets interessants gebeurt. Retries met backoff, een test-webhook knop, een mislukkingen-inbox in de UI. Het tijdperk van CSV-per-mail is officieel voorbij, en iedereen mag daar een beetje weemoedig over zijn.
Zoekmachines kunnen ons nu lezen. Per-pagina metadata, gestructureerde breadcrumbs, een sitemap en robots.txt die ook echt geserveerd worden, en de marketingsite spreekt alle vier de talen met de juiste canonical URL's. Loginschermen, account-closed/suspended/maintenance-pagina's en de cookiebanner onthouden eindelijk welke taal u koos. Plus stil loodgieterswerk: bezoekersanalytics met IP-naar-bedrijf resolutie — zodat we weten welke prospect afhaakte op welke pagina, zonder hem een formulier te laten invullen om dat te bekennen.
De app spreekt nu Nederlands, Frans en Duits, bovenop Engels. Elk scherm waar een operator, klant, koper of admin ooit zal landen — van het dashboard tot aan de cookiebanner op de marketingsite — werd vertaald en aangesloten. Kies uw taal in de header; de rest van het platform volgt u naar huis. Aan de securitykant: een stille ronde browser-header verstrenging — het soort dat niemand opvalt totdat een penetration tester langskomt, waarna iedereen het opvalt. Ruwweg tweeduizend vertaalde strings deze week, die u hopelijk nooit hoeft te tellen.
Tweestapsverificatie staat live. Operators koppelen een authenticator-app, verifiëren één keer, en vinden de controls in settings — werd tijd, gezien de vorige verdediging een wachtwoord en een hoopvolle blik was. Eronder sloot de eerste golf van een securitysweep negen punten af: login-redirects die vreemden vertrouwden, role gates die de verkeerde rol doorlieten, en de stukken van het platform die de URL-balk iets te letterlijk namen. Audit logging is nu wall-to-wall — elke betekenisvolle wijziging die een tenant maakt laat een spoor achter. Handig als iemand vraagt waarom iets gebeurde. Heel handig als iemand volhoudt dat het niet gebeurde.
Een zware feature-dag. De app stopte met vergeten waar u was — klik door naar een deal, klik terug, en hetzelfde tabblad en filter staan voor u klaar, in plaats van bovenaan opnieuw te beginnen als een goudvis. Een publieke REST API is geland, met webhooks die uw team zelf configureert, zodat uw andere tools met het platform kunnen praten zonder dat er iemand een scherm hoeft te scrapen. Klantzichtbare documenten vereisen nu een expliciete share — niets lekt meer per ongeluk weg. Het audit log dekt elke plek waar data daadwerkelijk verandert — als het bewoog, staat het opgenomen. En auction bidding leerde te overleven op het moment dat biedingen écht snel binnenstromen, want een bod dat stilletjes verdwijnt is een klant die stilletjes vertrekt.
Vijf fixes voor dashboards die stilletjes logen. Omzetcijfers tellen geen geld meer mee dat nog niet echt binnen is. SLA-klokken tellen weekends niet langer alsof het magazijn op zaterdag draait, en pauzeren nu wanneer een aanvraag op de klant wacht. Elke widget kreeg een info-icoon dat uitlegt wat hij meet. Waarschuwingsdrempels zijn per tenant — vijfduizend assets per maand is niet hetzelfde werk als vijftig. En wie een drempel wijzigt, moet nu een reden en reviewdatum geven, want een getal dat iemand om 2 uur 's nachts oproept verdient een beslissing, geen klik.
Een lange onderhoudsdag, en niets ervan past op een screenshot. Notificatiemails worden niet meer dubbel verstuurd wanneer er halverwege iets hapert. Vastgelopen digestmails geven na veertien dagen op in plaats van hetzelfde dode adres eeuwig opnieuw te proberen. Een asset uitfaseren schrijft de reden terug naar de audit trail, precies waar R2v3 die verwacht. Twee van de traagste dashboards krijgen hun antwoord nu in één keer, in plaats van door honderden rijen te malen. En het warehouse-team kan niet meer zomaar naar Escrow, Auction, Market of Sourcing wandelen — die pagina’s zijn nu netjes per rol afgeschermd.
Nieuwe tenants moesten vroeger hun weg vinden door overal op te klikken tot er iets gebeurde. Nu leidt een onboarding tour hen rond. De hubtour toont dashboardwidgets en waar de modules zitten; negen diepere tours nemen het daarna over — Core, Market, Auction, Escrow, Trade-In, Sourcing, Compliance, Admin, Settings — elk wegklikbaar, hervatbaar via een stille kompasicoon in de header en exact één keer automatisch voorgesteld. Sourcing kreeg een kleinere toevoeging die bieders merken: compliance- en securityvereisten staan nu inline op de biedingsdetailpagina, zodat u ziet wat de klant echt vraagt vóór u prijst.
Trade-in intake is volwassen geworden. Elk device in een pickup request krijgt nu zijn eigen rij — fabrikant, model, conditie, serienummers en of de drive data bevat — want “340 gemengde laptops” is geen manifest maar een gok. Twee nieuwe intake-stappen leggen compliance- en securityvereisten vast vóór een aanvraag live gaat, ondersteund door een seeded catalogus met servicecodes waardoor “gecertificeerde gegevenswissing” hetzelfde betekent bij elke ITAD. Disposition-voorkeuren reizen nu mee door de levenscyclus van de aanvraag, zodat de toegewezen ITAD vooraf weet wat u wilt met wat niet opnieuw verkocht kan worden.
Een lang polish-weekend voor de trade-in module. Klantzichtbare facturen renderen eindelijk iets dat finance kan lezen. De identiteit van de toegewezen ITAD wordt bij award zichtbaar voor de klant, met één klik om die relatie naar de CRM van de ITAD te klonen. Pickup-request intake werd rijker — fabrikant, model, specs en serienummers per device — in een wizard waarmee u grades onderweg kunt corrigeren. Operator dashboards bundelden hun widgets in rolgerichte presets, zodat warehouse en finance niet langer naar elkaars KPI’s staren. En admin support kreeg trade-in account impersonation als echte detailpagina met audit, plus een corporate funnel die corporate accounts eindelijk noemt wat ze zijn.
Het webmanifest is geland en de app kreeg een echte icoon. Installeer hem op het startscherm van een warehouse-tablet en hij opent als een app, niet als een Chrome-bladwijzer met een adresbalk die bovenaan vijftig pixels steelt. Kleine winst, groot verschil aan de receiving dock wanneer de linkerhand van de operator op een scanner ligt en er geen tijd is om door tabs te zoeken.
Een dockingstation werd met de laptop meegeleverd. Twee SFP-transceivers kwamen met de switch. Acht RAM-modules kwamen uit één server. Het dock is geen los ding op de inboundlijst — het hoort bij de laptop, en als u dat niet vastlegt, is de relatie weg zodra iemand de laptop verkoopt zonder aan het dock te denken. Nu weet het datamodel dat ook. Parent-child relaties op assets, met een picker die geen cycli toelaat, en een history die de familielijn in beide richtingen volgt.
Mollie payment primitives zijn geland en aangesloten op de trade-in award flow. Het platform verplaatst nu echt geld, in plaats van alleen te noteren dat geld verplaatst had moeten worden. Trade-in billing settings kregen hun eigen pagina, zodat elke tenant kan instellen waar de euro’s terechtkomen. De eerste transactie die het platform verwerkt, gaat voelen als een kleine ceremonie.
Een volledig nieuwe module is in één lang weekend gebouwd, van M0 tot M5. Een klant publiceert een pickup request vanuit een portaal met eigen auth, RLS en shell — gescheiden van de operator-app, zoals het hoort. Tenants ontdekken de aanvraag via Coverage-config en bieden met een formulier voor variant-pricing. De operator kent toe, een fee ledger rekent af en beide kanten zien een vergelijkingsview. Pickup events lopen door de bestaande notificatiepijplijn. Aan klantzijde: invite flow met domeinverificatie en signup auto-link, approval workflow, documenttoegang met certificate viewer, notificatievoorkeuren en bid revision history. Slimme relaxatiesuggesties voor zero-bid requests, want een klant die stilte hoort vertrekt en komt niet terug. Mobiele carousel voor bid comparison en camera-upload voor locatiefoto’s, omdat de helft van deze aanvragen naast de kit met een telefoon wordt ingediend.
Wanneer een tenant vastloopt — escrow komt niet vrij, signup stuurde nooit de verificatiemail, subscription_status wijkt af van de werkelijkheid — had platform staff vroeger een SQL-console en een vaste hand nodig. Nu zijn er knoppen. Drie nooduitgangen voor vastgelopen escrows. Force-completer endpoints met UI voor vastgelopen operationele flows. Manuele Blancco sync per tenant. Email-verificatiecontrols en herstel voor gestrande signups. Directe subscription_status override. audit_events werd append-only op triggerniveau — geen geschiedenis herschrijven meer. Impersonation met session tracking en een middleware-level write-block op mutating methods, zodat support kan onderzoeken zonder per ongeluk als klant te posten. En een first-login welcome tour met driver.js, omdat nieuwe tenants geen Loom-video nodig zouden moeten hebben om Inventory te vinden.
Service fees per order, met correcte restafronding. Een round2 utility standaardiseerde geldafronding op een dertigtal plaatsen die elk net anders afronden. Vitest met property-based tests voor fee- en settlementberekening, omdat “ziet er juist uit” en “reconcilieert tot op de cent” twee verschillende dingen zijn. De escrow cron schrijft settlementrijen vóór hij de status omklapt, en faalt op ontbrekende configuratie in plaats van stil niets te doen. Atomic asset_tag allocatie per tenant via RPC sluit de race waarin twee gelijktijdige receives allebei tag #481 probeerden te pakken. GDPR Artikel 20 account export, plus een geharde Artikel 17 delete. En subscription limits kregen tanden — soft-block wanneer tenants hun plan overschrijden, in plaats van dat pas op het einde van de maand te ontdekken.
Dashboards halen niet langer alles opnieuw op bij elke navigatie. Receiving kreeg een trigger-maintained counter in plaats van items bij elke page load opnieuw te tellen. Blancco sync batcht inserts en paralleliseert assetupdates. Evidence-zip batcht DB-queries en downloadt storage in parallelle chunks. De unread-bell counter kreeg een user-aware partial index, want de bel checken mag niet de hele notifications table scannen. Postgres-backed rate limiting via rate_limit_check RPC over publieke en geauthenticeerde mutations, in drie tiers — geen externe Upstash dependency. En de Blancco parser stopt beleefd wanneer iemand een XML van 200MB uploadt, in plaats van de worker uit geheugen te duwen.
Een langverwachte security pass. Drieënzeventig SECURITY DEFINER functions kregen hun callers dichtgezet. RLS policies geconsolideerd, audit_events INSERT afgesloten, search_path gepind op veertien functions. MFA TOTP aangezet op auth. Defense-in-depth tenant_id filters op report read paths. Atomic bulk-receive via Postgres RPC, in plaats van een N+1 INSERT-loop met half-eerlijke transaction boundary. Centrale storage governance met signed-URL TTLs per asset class. Cron auth faalt dicht wanneer CRON_SECRET niet staat. Auth-flow gaten gesloten in password-reset, email-verificatie en account-deletion. Immutable asset chain-of-custody trail. Geüpgraded naar Next 16.2.4.
Escrow deposit confirmation vereist nu twee owners: één stelt voor, de tweede keurt goed. Het soort controle waar auditors naar zoeken en waar finance beter van slaapt. Platform settings zijn samengebracht in één parser library, zodat admin, security, maintenance en analytics niet elk opnieuw uitvinden hoe dezelfde JSON gelezen moet worden. Deferred-data route handlers maken zware SSR-pagina’s slanker en laden secundaire panels client-side. Drivers groeiden op: e-mail is nu optioneel (warehouse crew heeft vaak geen werkadres), “inactive” vervangt hard delete zodat history aan voertuigtoewijzingen blijft hangen, en een license-categories subpagina laat elke tenant codes voor zijn eigen jurisdictie beheren.
Admin activity laadt eindelijk netjes — één load path met abort, retry bij errors, sorteren op echte event time in plaats van op “wat de API toevallig terugstuurde.” Strike pardon kreeg een expliciete busy state en leesbare toasts wanneer iets faalt. De password policy API geeft de merged tenant policy terug wanneer er een sessie is, zodat de hint op de accountpagina van een tenant echt overeenkomt met wat die tenant heeft ingesteld — en niet met de platformdefault die stilletjes uiteenliep.
Bulk-receive landde op de manifest-tab van inbound detail, in plaats van de operator één item tegelijk te laten scannen op een tablet met het geduld van een tiener. Pickups kunnen nu multi-trip zijn — drie trucks voor één collection, geen toneelstuk meer dat alles in één rit past. Tenant-configureerbare nummering voor asset tags, orders en shipments, omdat elke tenant zijn eigen schema heeft en R-001 opdringen aan een bedrijf dat OPS/2026/00481 wil gebruiken een verloren gevecht was. window.prompt en window.confirm zijn vervangen door echte dialogs op zestien callsites — want niets zegt “professioneel ITAD-platform” als een native browserprompt uit 1995.
Place bid- en Watch-knoppen zijn niet langer decoratie. Watcher notifications waaieren uit voor nieuwe biedingen en ending-soon, met een 24-uurs reminder naast de bestaande 1-uurs reminder — voor bieders met een alarm en bieders zonder. Non-escrow disputes krijgen hetzelfde trust-attribution path als escrow-disputes, zodat een klacht buiten de escrow flow geen doorgestuurde e-mailthread meer is die niemand een week later terugvindt. En het buyer-side dispute path dat vroeger doodliep, opent nu echt een klacht.
Blancco wipe certificates kunnen nu per asset worden ingelezen (PDF, XML of CSV), in batch geïmporteerd met een match preview vóór er iets schrijft, of live worden opgehaald via de Blancco API op een hourly Vercel Cron. Unmatched certs landen in een review queue in plaats van stil op de vloer te vallen — iemand ziet elk certificaat dat niet automatisch matcht. ESG dashboards kregen een echte PDF-export met klantcertificaat en one-click e-mail, want auditweek is niet het moment om PDFs met de hand uit screenshots samen te stellen.
Drie knoppen stopten met liegen. Edit Asset op inventory opent nu vijf dialogs per sectie — identity, specs, status, location, lifecycle — elk met audit-trail. New Invoice heeft een echte services + credit-note flow met audit, in plaats van de placeholder die glimlachte en niets deed. En Make-offer op listing detail loopt via een market audit-trail in plaats van in een leegte te verdwijnen waar later niemand kon antwoorden: “wat boden we hen drie weken geleden?”
Escrow kreeg tanden. Kopers storten naar een geblokkeerde rekening, verkopers verzenden zodra funds zichtbaar held zijn, en het platform releaset automatisch wanneer de inspectieklok afloopt. Disputes krijgen een gestructureerd formulier met de originele grading en het inspectierapport op het scherm, in plaats van een doorgestuurde e-mailthread waarin niemand nog vindt wat echt was afgesproken. Trust scores doen niet langer alsof: certificaatverificatie schakelt de score realtime om, response-time wordt een vijfde dimensie, en snelle biedbursts triggeren platform-tunable thresholds — drie escrow-deposit timeouts in 180 dagen blocklisten de bidder automatisch. Demanufacturing kreeg een echte flow met sellable-quality gate. En de scanner pikt Code128 op racklabels op met camera fallback voor Safari en Firefox, zodat de receiving-dock tablet blijft werken wanneer de browser dwarsligt.
Tien corepagina’s ruilden hun mismatched outfits in voor het huisuniform: dezelfde knoppen, dezelfde tabellen, twee kleuren, één product. Pallets kregen een echte thuis met move, merge en split actions die met de database praten in plaats van te doen alsof. Carriers zijn geen dropdown meer die naar niets wijst — kies er één uit uw catalogus en hij volgt de shipment tot aan de collection. Watchlists, trust scores, cycle counts, governance, parts — allemaal uit de mock drawer en in de database. En inventory kreeg een saved-views bar, omdat “de filters die ik gisteren instelde” vandaag niet opnieuw ingesteld zouden moeten worden.
Ongeveer 1.800 regels dode mockdata pakten stilletjes hun koffers. Vier settingspagina’s — catalog, shipping, integrations en het publieke collection-request form — kregen de nette two-colour rebuild waar niemand om vroeg maar iedereen nodig had. Zestien querymodules stopten met om het typesysteem heen te lopen en begonnen fatsoenlijk met Postgres te praten. De “mock” fault-code catalog bleek helemaal geen mock te zijn — het was altijd al de stock catalog van het platform, dus we hebben hem genoemd wat hij altijd was. De app is nu meetbaar minder geneigd om op een dinsdag te ontploffen.
De market inventory page is gestopt uw geduld te testen. Elke rij toont nu of hij Available, Draft, Published of Sold is — zodat u geen drie tabs meer opent om dat uit te zoeken. Quick filter pills bovenaan, elk met live count: klik “Published” voor alleen wat live staat, klik “Sold” voor wat weg is. Vink een dozijn rijen aan en archiveer ze in één keer. Elk item krijgt tags en private notes — het soort veld waarin uw trader om 2u ’s nachts schrijft: “hold for Gregor, he’ll take all of these at list price.” En wanneer het warehouse een laptop van C naar B hergradeert, haalt één knop die update binnen zonder aan uw prijs of notities te raken.
Twee kleine dingen, allebei te laat. Inventory rows en detail pages tonen nu een stale warning badge wanneer een listing te lang zonder beweging blijft staan — het soort duwtje dat vroeger op een sticky note achter iemands monitor woonde. En foto’s op asset detail kregen een echte lightbox, want een afbeelding in een nieuw browsertabblad openen om ze groter dan een postzegel te zien was een 2014-move.
De app heeft geleerd u dingen te vertellen. Berichten in deal rooms komen binnen zonder dat iemand refresh drukt. Een bel in de topbar met een degelijk notification center, zodat u ziet wat u miste tijdens de lunch. Pings voor wat echt telt — nieuw bod, nieuw bericht, veiling sluit, stale inventory — met een voorkeurenpagina waar u kiest wat de moeite is om u voor te storen. En een ochtenddigest die twaalf notificaties over dezelfde deal samenrolt tot één leesbare samenvatting, want twaalf notificaties over dezelfde deal zijn er twaalf te veel.
Auctions werden volwassen. Publiceer een lot, browse lots, plaats biedingen, kijk hoe de timer doet wat timers doen. En wanneer een veiling eindigt, doet de machine stilletjes wat vroeger op maandagochtend een mens nodig had — winnaar kiezen, betaling afrekenen, inventory naar de buyer overdragen, lot sluiten. Geen “wacht, is die veiling eigenlijk gesloten?” meer. Er is een winnaar, er is een settlement, er is een record dat zegt wat er gebeurd is.
Market was vroeger een mooie demo. Fictionele data, nul gevolgen. Nu is het echt. Een wizard in vier stappen om een batch te bouwen, zodat u nooit met een half gepubliceerde batch om 2u ’s nachts eindigt. Een herbouwde deal room die exact zegt wat de volgende actie is. Cross-tenant browsing, zodat u echt ziet wat andere sellers hebben gelist. Een counter-offer flow die niet langer doet alsof een prijs definitief is wanneer beide kanten weten dat dat niet zo is. En het platform suggereert stilletjes matches tussen buy en sell intents, zodat u geen netten meer in de leegte gooit.
Niet elke laptop in uw warehouse is klaar voor verkoop. Sommige worden getest, sommige zijn contractueel geblokkeerd, sommige zien er cosmetisch twijfelachtig uit en iemand zou echt nog een foto moeten nemen. De app had geen woord voor wat WEL klaar is — tot nu. Sellable items staan op hun eigen schap, elk met een quality score, plus een thuis voor niet-core materiaal (spares, accessoires, netwerkspul dat van de decommissioning van vorige maand kwam binnenwaaien). Import vanuit CSV met een echte wizard. Upload foto’s en documenten per item. Stel een stale threshold in en alles wat te lang blijft liggen verdwijnt stilletjes van de market, want niets doodt een marketplace sneller dan een listing voor een laptop die iemand in februari al mee naar huis nam.
Foto’s waren vroeger het probleem dat niemand oploste. Genomen met uw telefoon, naar uzelf gemaild, vast aan een thread die in oktober verdween — en drie weken later vraagt iemand of deze Dell een gedeukte hoek had toen hij binnenkwam, en niemand weet het. Nu: elk asset heeft een photos tab. U maakt foto’s met uw telefoon via een QR-code. Thumbnails verschijnen zo snel als u uploadt. En een warehouse-wide library laat u alles bekijken zonder door twaalf assets te klikken. “Defect Exports” werden “Evidence Packages,” omdat niemand een defect export fileert — ze maken een evidence package. Ondertussen zakte het designsysteem naar twee kleuren. Twaalf tinten betekenis werden er twee. Niemand mist het paars.
Het oude dashboard toonde zes cijfers aan iedereen en deed alsof het warehouse-team en de CFO dezelfde zes dingen wilden zien. Dat wilden ze niet. Nu zijn er zevenenveertig widgets, vijf role-based presets (Warehouse Ops, Sales, Finance, Admin, Executive) en een grid waarin u alles kunt verslepen. Kies een preset, gooi weg wat u niet nodig hebt, voeg toe wat u wel nodig hebt, bewaar het, maak een tweede en wissel ertussen alsof het browsertabs zijn.
Receiving was vroeger een gevoel. U klikte “start,” scande dingen tot het klaar leek, en daarna bestond de pallet in het systeem zonder dat iemand helemaal zeker wist wat erop lag. Nu is het een echte sessie — met begin, einde en een getekende handoff die zegt: “deze assets zijn nu inventory, stop met vragen.” Geen Schrödinger-pallets meer. De receiving list toont geen orders meer die niets ontvangen (drafts, cancellations, drie weken geleden) en de progress column beledigt u niet langer met “0/0” wanneer er niets te tellen valt. De warehouses page, die vroeger crashte bij elk bezoek, werkt nu — wat pagina’s horen te doen.
Collections werken eindelijk end-to-end. Plan een pickup bij het kantoor van uw klant, bevestig de datum, wijs een driver toe, volg alles tot delivery — en wanneer de truck aan uw warehouse arriveert, maakt het systeem automatisch een inbound order aan met alles ingevuld. Geen klantnaam opnieuw typen, geen contractreferentie copy-pasten. Open eender welk contract en u ziet exact welke collections en inbound orders erbij horen, in plaats van tussen drie schermen te schakelen om het samen te puzzelen. Zes extra platformpagina’s — inbound orders, receiving, outbound, settlements en invoices — kregen schonere tabellen met search, filters en een consistente look waardoor de hele app voelt als één product in plaats van twaalf aan elkaar genaaide prototypes.
De contractdetailpagina toonde vroeger dezelfde informatie op drie plaatsen en noemde dat grondig. Nu zegt de header de contractnaam en niets anders. Services staan in een eenvoudige tabel in plaats van versierde cards die mooi waren maar u vertraagden. Pricing, SLA terms en renewal details hebben elk hun eigen sectie die u in twee seconden scant. Een lease contract bewerken gebeurt rechtstreeks op de pagina — veertien velden zonder één dialog te openen. De admin pages voor users en activity logs laden in één keer in plaats van u te laten wachten terwijl ze vier keer na elkaar data ophalen.
Uw warehouses hebben eindelijk een degelijk adresboek. Zones en racks zaten vroeger in elk warehouse record als één grote blob — onmogelijk om naar te verwijzen, onmogelijk om te doorzoeken. Nu is elke zone, elk rack en elk zonetype een eigen ding. Een nieuwe Locations settings page laat u uw floor plan tekenen: warehouses toevoegen, zones erin nesten, racks erin plaatsen. Ook de activity log stopte met liegen — die beweerde vroeger dat u negen settings wijzigde terwijl u er maar één aanraakte.
Contracts groeiden op. Maak er één vanaf nul met company, services, pricing model en certifications — alles in één form. Bewerk alles inline. Beheer services via een dialog waar u klikt om toe te voegen en nooit een submit button aanraakt. Terminate met een modal die vraagt waarom. Company certifications zijn niet langer fake. En een nieuwe two-color badge rule zorgt ervoor dat de hele UI eindelijk overeenkomt over wat kleuren betekenen.
Vierentwintig certificeringen die ertoe doen in ITAD — van R2v3 tot B Corp — staan nu in een echte catalogus. Elk met issuing body, scope en renewal period, zodat u niet telkens “what does NAID AAA require” hoeft te googelen wanneer een klant het vraagt. Zet aan wat uw organisatie belangrijk vindt, voeg custom certs toe voor de nichegevallen waar niemand anders van gehoord heeft.
Documents kregen een thuis. Upload een PDF, tag hem, link hem aan een company, vind hem drie maanden later terug zonder door e-mail te graven. Elk gelinkt document verschijnt op de company detail page. Tags werden universeel — één systeem voor contacts, companies en documents in plaats van drie aparte systemen die deden alsof ze niet hetzelfde waren.
Currency ging van een hardcoded dropdown naar 147 echte munten met live wisselkoersen die elke ochtend verversen. Eén formatting function verving vierendertig kopieën van dezelfde code die allemaal nét iets anders deden. De Languages settings page werd verwijderd, want door honderd talen scrollen om Dutch te vinden is geen user experience.
De app leerde onthouden hoe u uw datums wilt zien. Kies DD/MM/YYYY, MM/DD/YYYY of YYYY-MM-DD en elke pagina volgt. Custom services kunnen nu verwijderd worden terwijl platform defaults beschermd blijven. Floating bottom bars die uw content bedekten zijn vervangen door buttons die blijven waar ze horen.
Vijfendertig ITAD-services over zeven categorieën, elk met een korte code en default rate. Versleep om te reorderen, toggle om te deactiveren, krijg een waarschuwing wanneer u op het punt staat een dependency te breken. Het soort configuratiepagina dat u redt van telkens dezelfde cijfers opzoeken wanneer u een contract schrijft.
Het platform leerde zichzelf beheren. Organisatieprofielen met echte bedrijfsvelden. Gebruikersbeheer waarmee je mensen kunt schorsen, maar niet jezelf. Een activiteitenlog die alles vastlegt. Vijf demoklanten met echte adressen, zodat de overzichtspagina eindelijk echte aantallen toont.
De app weet eindelijk wat van wie is. Organisaties, memberships en een tenant-systeem waarmee collega’s een workspace delen in plaats van naar lege schermen te kijken. Zeven rollen in plaats van vier, omdat je magazijnteam geen dealonderhandelingen hoeft te zien. Elke pagina kreeg een ID-nummer. En 761 lintproblemen zijn opgeruimd als een garage die sinds januari werd vermeden.
Companies en Contacts kregen hun definitieve vorm. Van nul opnieuw opgebouwd met strakkere layouts, consistente patronen en genoeg aandacht voor detail om de UI uit de weg te laten verdwijnen. Voor het eerst voelt CRM alsof het ontworpen is, niet samengesteld.
Elke contactpersoon en elk bedrijf kan nu notities krijgen. Een echt communicatielog in plaats van het plakbriefje op je scherm dat in 2024 achter je bureau viel. Zes socialmediavelden kwamen erbij op contacts, want leveranciers zitten op LinkedIn en kopers onderhandelen via WhatsApp.
De marketingsite ging van functioneel naar iets dat je echt naar een prospect stuurt. Dertig blogartikelen met titels als “Grade B Is Not a Grade.” Elke pagina herschreven met echte persoonlijkheid. Plus een 404-pagina die Rack A3 controleert voor je verdwenen URL.
Het mockdata-tijdperk eindigde. Elke resterende Core-entiteit verhuisde naar een echte database. Settlements berekenen zichzelf vanuit contractprijzen. Invoices verwerken btw en creditnota’s. De oude mockbestanden staan nog in de codebase als meubels in een huis waar niemand meer woont.
De features die een verzameling modules in een volledig product veranderen. Barcode-scanning met vijf modi, een cross-module analyticsdashboard en de API-blauwdruk: endpointcatalogus, UI voor keybeheer en concepten voor webhookabonnementen. Publieke endpoints volgen met het launchpakket.
Twee modules in één sessie. Auctions kreeg vier formaten met anti-snipingbescherming en een simulatiepagina waarop je de timer ziet panikeren. Escrow werd een eigen module met zeven stappen van “deal agreed” tot “money in the bank.”
De Market-module ging van idee naar elf features. Batch builder, deal rooms met kleurgecodeerde onderhandelingen, intent matching, trust scores en seller analytics.
De assettabel verhuisde naar een echte database. Tweehonderd assets met volledige specificaties, grading en gegevenswissingsrecords. Vijf pagina’s stopten met doen alsof en begonnen te queryen.
Kwaliteitscontrole met inspectiechecklists. ESG-dashboards die tonen hoeveel CO₂ per gerecycled toestel is bespaard. Lease-returnbeheer voor wanneer je klant laptops terug wil en jij moet bewijzen wat ermee gebeurd is.
Fleetmanagement om collections over voertuigen en routes te volgen. Demanufacturing-workflows voor toestellen die uit elkaar moeten, niet alleen gewist. Integratie-instellingen voor de systemen die je al gebruikt.
R2- en e-Stewards-compliancedashboards met audit-readiness scores. De eerste versie van cross-module samenwerking: gedeelde notities, activity feeds en de structuur waarop de authenticated client portal later kan aansluiten.
Settlements die automatisch berekenen op basis van contractprijzen en gradingresultaten. Revenue share-splits. Chargebacktracking. De wiskunde die vroeger in iemands hoofd en in een spreadsheet zat.
Multi-warehousebeheer met zones, rekken, posities en pallets. Drag-and-drop rack layouts. Capaciteitsopvolging. De fysieke realiteit van een ITAD-magazijn, gedigitaliseerd.
Grote UI-herwerking. De sidebar werd georganiseerd in vijf modules: Core, Market, Auction, Escrow, Admin. De navigatie stopte eindelijk met zichzelf tegen te spreken.
Contractbeheer met zes prijsmodellen. Want “standard pricing” bestaat niet wanneer één klant per toestel betaalt, een andere per kilo en een derde vasthoudt aan revenue share.
Authenticatie. Login. Signup. Beveiligde routes. Het moment waarop niet langer iedereen met een URL alles kon zien.
Opschoning van het design system. Consistente spacing, typografie en componentpatronen over elke pagina. Het soort werk dat niemand opmerkt tot het ontbreekt.
De marketingwebsite kreeg persoonlijkheid. About page, pricing page, changelog. Copy die klinkt alsof ze geschreven is door iemand die echt in een magazijn heeft gestaan.
Verhuisd van Pages Router naar App Router. Alles opnieuw bedraad. Zichtbaar veranderde er niets. Het soort refactor dat nul screenshots oplevert voor het investeerdersdeck.
Code cleanup, dependency-updates en het verwijderen van dingen die om 2 uur ’s nachts goede ideeën leken, maar dat niet waren. Technische schuld vroeg afbetaald.
Testing- en diagnostiekwachtrij met priority levels en toewijzing aan testers. Inbound order processing met device scanning. De transportband kwam in beweging.
Eerste warehouse views. Asset list, asset detail pages en basisformulieren voor grading. Het skelet van wat later Core zou worden. Zag er vreselijk uit. Werkte correct.
Dashboardlayout, sidebar navigation en dark mode. Het absolute minimum om iemand te tonen wat dit kon worden zonder dat ze moesten lachen.
npx create-next-app op kerstdag. Eerste commit. Eerste hero section. Eerste herschrijving van de hero section, de ochtend erna. Sommige dingen veranderen nooit.
Wil je zien waar we naartoe gaan?
Early Access Partners krijgen 6 maanden gratis en zitten op de eerste rij bij elke update.
Vroege toegang aanvragen