Ce que nous avons livré. Quand nous l’avons livré.
Nous livrons en continu. Ceci est le journal. Pas de théâtre de “release annuelle”. La plateforme que vous utilisez en décembre est meilleure que celle avec laquelle vous avez commencé en septembre.
Ouvrir ou reprendre une receiving session ramène maintenant l’opérateur au bon écran d’intake, sans détour router.
Les assets data-bearing ne peuvent plus quitter une stage sans wipe ou destruction, avec shredding et certified recycling correctement traités.
Universal search gagne actions de command palette, recents et modes. Les deals Market se ferment désormais à deux côtés et pointent vers invoicing ou escrow.
Deal rooms, settlement workspaces, labels counterparty, channel clarity, empty states et copy realtime ont été remis d’aplomb. Tenant billing settings aussi.
Pipeline montre le travail receiving upstream, les sessions receiving peuvent reprendre, les empty states guident le setup et les actions Core CRM ne se répètent plus.
Les écrans compliance ont reçu leur couche de texte sobre : risques, preuves, avertissements media, gates et moments “pourquoi je ne peux pas cliquer ?” s’expliquent avant que quelqu’un ne lance une enquête parallèle dans Slack. L’enforcement des packages est aussi plus strict. Le produit reste sec ; maintenant, il est sec avec des reçus.
Le dashboard founder a reçu des velocity charts, règles PR, corrections manuelles, boutons info et un export PDF multipage pour les personnes qui aiment voir les chiffres bien assis sur papier. ReVend a aussi gagné une bibliothèque de charts réutilisable, un branding PDF outbound plus propre et moins de bruit dans la matrice packages. Énergie update investisseur, sans la panique rituelle du deck.
Les saved views ne font plus semblant. Les équipes reçoivent maintenant des vues de départ dans une vraie table isolée par tenant, peuvent enregistrer des filtres privés ou partagés, et chaque opérateur épingle et choisit son default sans déplacer celui des autres. Asset history et workflow counts ont aussi arrêté de s’appuyer sur de faux snapshots. Petit bouton, vraie mémoire, moins de décors en carton.
Les contrats poussent maintenant workflows, SLA, erasure gates et disposition preferences dans le travail réel. Les drivers ont des routes mobiles, actions de stop, photos, signatures, tampons GPS et proof-of-delivery outbound. Storage quotas, polish sourcing, capture early access et recovery secret-decrypt sont arrivés le même jour. Le clipboard a été invité à envisager la retraite.
Imports, archive/delete flows et preuves de dispute sont devenus plus sûrs. L’import center est là, les audit trails sont plus solides, les actions lifecycle prévisualisent les dépendances avant qu’une chose disparaisse, et les preuves de dispute sont séparées par partie. Le travail admin sérieux reste possible ; il arrive avec moins de pièges dans la boîte.
Le manuel utilisateur et le behavior handbook sont devenus de vrais documents de travail au lieu d’un folklore non documenté. Dashboard, support, rôles, workflows, settings, sourcing, escrow, auction, market et core sont couverts, puis le train de traduction a démarré. La documentation reste de la documentation, mais maintenant avec une carte et des snacks.
Public API V2 a comblé la surface manquante, les références contract et OpenAPI ont suivi, la plomberie webhook est plus propre, le renvoi d’invitation admin a arrêté de bouder, et Activity Audit a gagné une hash chain tamper-evident. Des mots ennuyeux, une vraie colonne vertébrale. Exactement le genre de release qu’un auditeur prétend ne pas aimer.
Les packages ne sont plus seulement du texte commercial. La page pricing vient du catalogue, ReVend OS connaît les modules, features et limites de chaque tenant, et les gates bloquent les actions hors package. Les deposits d'auction, la reprise des drafts trade-in et le health check beta sont aussi live. Moins de promesses dans les slides, plus de comportement dans le produit.
Les vendeurs Auction peuvent ajouter un prix buy-now, et les acheteurs peuvent éviter la mêlée quand le chiffre convient. Un clic réserve le lot, lance le chemin de deal et l’envoie vers l’outbound et l’escrow. Pour les moments où une guerre d’enchères semble amusante, jusqu’à ce que la finance demande pourquoi la palette de serveurs est toujours là.
Les ITADs qui gèrent déjà leurs opérations ailleurs peuvent maintenant envoyer du stock vendable vers ReVend OS via CSV, XLSX, XML, JSON ou API. Les assets peuvent être regroupés en lots, publiés sur Market ou Auction, puis suivis par webhooks quand le côté commercial bouge. Enfin un pont pour les équipes dont l’ERP a des opinions très fortes.
Les preuves d’effacement de données sont plus faciles à vérifier d’un coup d’œil. Les assets montrent désormais si l’erasure est prête, échouée, sans preuve, ou en attente d’un rapport importé, avec le document source lié à l’import. Moins de chasse dans les exports Blancco ; plus de “cet appareil peut-il quitter le bâtiment ?”
Le partage de documents est devenu plus adulte. Les fichiers visibles au client sont explicites, les téléchargements sont journalisés fail-closed, et les admins peuvent ouvrir l’historique d’accès par document. Parfait pour la question d’audit classique : “qui a vu ce certificat ?” désormais résolue sans archéologie de groupe chat.
L’activity log a reçu des labels plus clairs, davantage de travaux sensibles de plateforme laissent une trace, et les packages de fonctionnalités ont rejoint une vraie matrice admin. C’est le genre de release que personne ne capture en screenshot, mais qui permet au support de répondre à “que s’est-il passé ?” sans invoquer un tableur.
Une API REST publique et des webhooks sont en ligne. Vos autres systèmes peuvent désormais interroger la plateforme sur les commandes, documents et assets — et la plateforme crie en retour dès qu’il se passe quelque chose d’intéressant. Retries avec backoff, un bouton de test webhook, une boîte aux échecs dans l’UI. L’ère du CSV-par-email est officiellement terminée, et un peu de nostalgie est tolérée.
Les moteurs de recherche peuvent enfin nous lire. Métadonnées par page, fils d’Ariane structurés, un sitemap et un robots.txt qui sont réellement servis, et le site marketing parle les quatre langues avec les bonnes URL canoniques. Écrans de connexion, pages account-closed/suspended/maintenance et bannière cookies se souviennent enfin de la langue que vous avez choisie. Plus de la plomberie discrète : analytics visiteurs avec résolution IP-vers-entreprise — pour qu’on sache quel prospect a rebondi sur quelle page, sans lui faire remplir un formulaire pour l’avouer.
L’application parle maintenant néerlandais, français et allemand, en plus de l’anglais. Chaque écran sur lequel un opérateur, client, acheteur ou admin atterrira un jour — du dashboard jusqu’à la bannière cookies du site marketing — a été traduit et câblé. Choisissez votre langue dans l’en-tête ; le reste de la plateforme vous suit jusqu’à la maison. Côté sécurité : une ronde discrète de durcissement des en-têtes navigateur — le genre que personne ne remarque jusqu’à ce qu’un testeur de pénétration passe, après quoi tout le monde le remarque. Environ deux mille chaînes traduites cette semaine, que vous n’aurez heureusement jamais à compter.
L’authentification à deux facteurs est en ligne. Les opérateurs enrôlent une application d’authentification, vérifient une fois, et trouvent les contrôles dans les paramètres — il était temps, vu que la défense précédente était un mot de passe et un regard optimiste. En dessous, la première vague d’un balayage sécurité a fermé neuf items : des redirections de login qui faisaient confiance à des inconnus, des gates qui laissaient passer le mauvais rôle, et les morceaux de la plateforme qui prenaient la barre d’adresse un peu trop au pied de la lettre. Audit logging est maintenant complet du sol au plafond — chaque changement significatif qu’un tenant effectue laisse une trace. Utile quand quelqu’un demande pourquoi quelque chose s’est passé. Très utile quand quelqu’un insiste que ce n’est pas arrivé.
Une grosse journée de fonctionnalités. L’application a arrêté d’oublier où vous étiez — cliquez dans un deal, cliquez retour, et le même onglet et le même filtre vous attendent, au lieu de tout recommencer en haut comme un poisson rouge. Une API REST publique est arrivée, avec des webhooks que votre équipe configure elle-même, pour que vos autres outils puissent parler à la plateforme sans que personne n’ait à scraper d’écran. Les documents visibles aux clients exigent maintenant un partage explicite — plus rien ne fuit par accident. L’audit log couvre chaque endroit où des données changent réellement — si ça a bougé, c’est enregistré. Et l’auction bidding a appris à survivre au moment où les offres affluent vraiment vite, parce qu’un bid qui disparaît silencieusement, c’est un client qui part silencieusement.
Cinq corrections pour des dashboards qui mentaient discrètement. Les chiffres de revenu n’incluent plus l’argent qui n’est pas encore réellement arrivé. Les horloges SLA ne comptent plus les week-ends comme si l’entrepôt tournait le samedi, et se mettent en pause quand une demande attend le client. Chaque widget a gagné une icône info qui explique ce qu’il mesure. Les seuils d’alerte sont désormais par tenant — cinq mille assets par mois, ce n’est pas le même métier que cinquante. Et modifier un seuil demande maintenant une raison et une date de revue, parce qu’un chiffre qui réveille quelqu’un à 2h du matin mérite une décision, pas un clic.
Une longue journée de maintenance, dont rien ne se voit sur une capture d’écran. Les e-mails de notification ne partent plus deux fois quand quelque chose tousse au milieu de l’envoi. Les digests bloqués abandonnent après quatorze jours au lieu de relancer éternellement la même adresse morte. Retirer un asset écrit la raison dans l’audit trail, là où R2v3 s’attend à la trouver. Deux des dashboards les plus lents obtiennent maintenant leur réponse en une seule requête au lieu de broyer des centaines de lignes. Et l’équipe warehouse ne peut plus errer sur les pages Escrow, Auction, Market ou Sourcing — elles sont désormais correctement protégées par rôle.
Les nouveaux tenants trouvaient auparavant leur chemin en cliquant partout jusqu’à ce que quelque chose réagisse. Désormais, une visite d’onboarding les guide. La visite hub couvre les widgets du dashboard et l’emplacement des modules ; neuf visites plus profondes prennent ensuite le relais — Core, Market, Auction, Escrow, Trade-In, Sourcing, Compliance, Admin, Settings — chacune dismissible, reprenable via une icône boussole discrète dans le header, et proposée automatiquement une seule fois. Sourcing a reçu un ajout plus petit que les bidders verront : les exigences compliance et sécurité demandées par une request s’affichent maintenant inline sur le détail du bid, pour voir ce que le client veut vraiment avant de chiffrer.
L’intake trade-in a grandi. Chaque appareil dans une pickup request reçoit maintenant sa propre ligne — fabricant, modèle, état, numéros de série et présence de données sur le disque — parce que “340 laptops mixtes” n’est pas un manifeste, c’est une estimation. Deux nouvelles étapes d’intake capturent les exigences compliance et sécurité avant qu’une request parte live, avec un catalogue seedé de codes service pour que “effacement certifié des données” signifie la même chose quel que soit l’ITAD qui lit la demande. Les préférences de disposition suivent désormais tout le cycle de vie de la request, afin que l’ITAD attribué sache d’avance quoi faire de ce qui ne peut pas être revendu.
Un long week-end de polish sur le module trade-in. Les factures visibles par le client rendent enfin quelque chose qu’une équipe finance peut lire. L’identité de l’ITAD attribué est révélée au client au moment de l’award, avec un clone en un clic vers le CRM de l’ITAD pour que la relation commence dans la bonne base. L’intake pickup-request s’est enrichi — fabricant, modèle, specs, numéros de série par appareil — dans un assistant qui permet de corriger les grades à la volée. Les dashboards opérateur ont consolidé leurs widgets en presets par rôle, pour que warehouse et finance arrêtent de fixer les KPI de l’autre. Et le support admin a gagné l’impersonation de comptes trade-in comme vraie page détail avec audit, plus un funnel corporate qui appelle enfin les comptes corporate par leur nom.
Le web manifest est arrivé et l’app a reçu une vraie icône. Installez-la sur l’écran d’accueil d’une tablette warehouse et elle s’ouvre comme une app, pas comme un favori Chrome avec une barre d’adresse qui mange cinquante pixels en haut. Petite victoire, gros impact au dock de réception quand la main gauche de l’opérateur est sur un scanner et qu’il n’a pas le temps de fouiller dans les onglets.
Une station d’accueil est arrivée avec le laptop. Deux transceivers SFP étaient avec le switch. Huit modules RAM sont sortis d’un serveur. Le dock n’est pas un objet séparé sur la liste inbound — il fait partie du laptop, et le traiter autrement perd la relation au moment où quelqu’un vend le laptop sans se souvenir du dock. Maintenant, le modèle de données le sait. Relations parent-enfant sur les assets, avec un picker qui empêche les cycles, et un historique qui parcourt l’arbre familial dans les deux sens.
Les primitives de paiement Mollie sont arrivées et ont été câblées dans le flow d’award trade-in. La plateforme déplace maintenant réellement de l’argent, au lieu de seulement enregistrer que l’argent aurait dû bouger. Les settings de billing trade-in ont leur propre page pour que chaque tenant configure où ses euros arrivent. La première transaction traitée par la plateforme va ressembler à une petite cérémonie.
Un module entièrement nouveau a été livré sur un long week-end, des milestones M0 à M5. Un client publie une pickup request depuis un portail avec sa propre auth, son RLS et son shell — séparé de l’app opérateur, comme il se doit. Les tenants découvrent la request via la configuration Coverage et soumettent un bid avec un formulaire de variant-pricing. L’opérateur attribue, un fee ledger règle, les deux côtés voient une vue de comparaison. Les events pickup passent par le pipeline de notifications existant. Côté client : invite flow avec vérification de domaine et auto-link signup, workflow d’approbation, accès documents avec certificate viewer, préférences de notification, historique de révision des bids. Suggestions intelligentes de relaxation pour les zero-bid requests, parce qu’un client qui entend les criquets part et ne revient pas. Carousel mobile pour la comparaison de bids et upload caméra pour les photos de lieu, parce que la moitié de ces demandes se remplit depuis un téléphone à côté du matériel.
Quand un tenant se bloque — escrow qui ne se libère pas, signup qui n’a jamais envoyé l’e-mail de vérification, subscription_status qui dérive de la réalité — le staff plateforme avait besoin d’une console SQL et d’une main prudente. Maintenant, il y a des boutons. Trois sorties de secours pour escrows bloqués. Endpoints force-completer avec UI pour flows opérationnels coincés. Déclencheur manuel de sync Blancco par tenant. Contrôles de vérification e-mail et récupération de signups échoués. Override direct de subscription_status. audit_events est devenu append-only au niveau trigger — plus de réécriture de l’histoire. Impersonation avec session tracking et write-block middleware-level sur les méthodes mutating, pour que le support enquête sans poster accidentellement comme le client. Et une visite de bienvenue au premier login avec driver.js, parce que les nouveaux tenants ne devraient pas avoir besoin d’une vidéo Loom pour trouver Inventory.
Frais de service par commande avec arrondi résiduel correct. Un utilitaire round2 a standardisé l’arrondi monétaire à une trentaine d’endroits qui arrondissaient chacun légèrement à leur façon. Vitest avec tests property-based pour les calculs de fees et settlements, parce que “ça a l’air juste” et “ça réconcilie au centime” ne sont pas la même chose. Le cron escrow écrit les lignes de settlement avant de basculer le statut, et lève une erreur si la configuration manque au lieu de ne rien faire en silence. L’allocation atomique des asset_tag par tenant via RPC ferme la race où deux réceptions simultanées tentaient toutes deux de prendre le tag #481. Export de compte GDPR Article 20, plus suppression Article 17 durcie. Et les limites d’abonnement ont maintenant des dents — soft-block quand les tenants dépassent leur plan, au lieu de le découvrir en fin de mois.
Les dashboards ne re-fetchent plus tout à chaque navigation. Receiving a reçu un compteur maintenu par trigger au lieu de recompter les items à chaque page load. La sync Blancco batch les inserts et parallélise les mises à jour d’assets. Evidence-zip batch les requêtes DB et télécharge le storage en chunks parallèles. Le compteur de cloche unread a reçu un index partiel user-aware, parce que vérifier la cloche ne devrait pas scanner toute la table notifications. Rate limiting backed par Postgres via RPC rate_limit_check sur les mutations publiques et authentifiées, en trois tiers — sans dépendance externe Upstash. Et le parser Blancco s’arrête poliment quand quelqu’un uploade un XML de 200MB, au lieu de mettre le worker OOM.
Un passage sécurité attendu depuis longtemps. Soixante-treize fonctions SECURITY DEFINER ont vu leurs callers verrouillés. Policies RLS consolidées, INSERT sur audit_events verrouillé, search_path fixé sur quatorze fonctions. MFA TOTP activé sur auth. Filtres tenant_id defense-in-depth sur les chemins de lecture de rapports. Bulk-receive atomique via RPC Postgres, au lieu d’une boucle INSERT N+1 avec une frontière transactionnelle à moitié honnête. Gouvernance storage centralisée avec TTL de signed URL par classe d’asset. Cron auth fail closed quand CRON_SECRET n’est pas défini. Trous d’auth-flow fermés dans password-reset, vérification e-mail et suppression de compte. Trace immutable chain-of-custody des assets. Passage à Next 16.2.4.
La confirmation de dépôt escrow exige maintenant deux owners : l’un propose, le second approuve. Le genre de contrôle que les auditeurs cherchent et qui aide les équipes finance à mieux dormir. Les settings plateforme sont consolidés dans une seule librairie de parsing, pour qu’admin, security, maintenance et analytics ne réinventent pas chacun comment lire le même JSON. Les route handlers deferred-data allègent les pages SSR lourdes et chargent les panels secondaires côté client. Les drivers ont grandi : l’e-mail est désormais optionnel (les équipes warehouse n’ont pas toujours une adresse de travail), “inactive” remplace le hard delete pour que l’historique reste lié aux affectations de véhicule, et une sous-page license-catégories laisse chaque tenant gérer les codes de sa juridiction.
Admin activity charge enfin proprement — un seul load path avec abort, retry sur erreur, tri par vrai event time au lieu de “ce que l’API a renvoyé.” Strike pardon a gagné un busy state explicite et des toasts lisibles quand quelque chose échoue. L’API password policy renvoie la politique tenant fusionnée lorsqu’il y a une session, pour que l’indice sur la page account d’un tenant corresponde réellement à ce que son tenant a configuré — et non au default plateforme qui divergeait tranquillement.
Bulk-receive est arrivé sur l’onglet manifest du détail inbound, au lieu d’obliger l’opérateur à scanner un item à la fois sur une tablette avec la patience d’un adolescent. Les pickups peuvent désormais être multi-trip — trois camions pour une collection, fini de prétendre que tout rentre en une fois. Numérotation configurable par tenant pour asset tags, orders et shipments, parce que chaque tenant a son propre schéma et imposer R-001 à une société qui veut OPS/2026/00481 était un combat perdu. window.prompt et window.confirm ont été remplacés par de vrais dialogs sur seize callsites — parce que rien ne dit “plateforme ITAD professionnelle” comme un prompt navigateur natif de 1995.
Les boutons Place bid et Watch ont cessé d’être décoratifs. Les notifications watchers se diffusent pour les nouveaux bids et les ending-soon, avec un rappel 24 heures en plus du rappel 1 heure existant — pour les bidders qui mettent une alarme et ceux qui ne le font pas. Les disputes non-escrow reçoivent le même chemin trust-attribution que celles liées à escrow, pour qu’une plainte hors escrow ne soit plus un thread e-mail transféré que personne ne retrouve une semaine plus tard. Et le chemin buyer-side dispute qui finissait dans une impasse ouvre maintenant réellement une plainte.
Les certificats d’effacement Blancco peuvent maintenant être ingérés par asset (PDF, XML ou CSV), importés en batch avec preview de matching avant toute écriture, ou tirés live via l’API Blancco sur un Vercel Cron horaire. Les certificats non matchés arrivent dans une review queue au lieu d’être silencieusement abandonnés — quelqu’un voit chaque certificat qui n’a pas auto-matché. Les dashboards ESG ont reçu un vrai export PDF avec certificat client et envoi e-mail en un clic, parce que la semaine d’audit n’est pas le moment d’assembler des PDFs à la main depuis des screenshots.
Trois boutons ont arrêté de mentir. Edit Asset sur inventory ouvre maintenant cinq dialogs par section — identity, specs, status, location, lifecycle — chacun avec audit-trail. New Invoice a un vrai flow services + credit-note avec audit, au lieu du placeholder qui souriait sans rien faire. Et Make-offer sur le détail listing passe par un audit-trail market au lieu de disparaître dans un vide où personne ne pouvait répondre plus tard : “qu’avons-nous offert il y a trois semaines ?”
Escrow a pris des dents. Les acheteurs virent vers un compte held, les vendeurs expédient quand les fonds sont visiblement held, la plateforme libère automatiquement quand l’horloge d’inspection expire. Les disputes obtiennent un formulaire structuré avec le grading original et le rapport d’inspection à l’écran, au lieu d’un thread e-mail transféré où personne ne retrouve ce qui avait été convenu. Les trust scores ont arrêté de faire semblant : la vérification de certification bascule le score en temps réel, le response-time devient une cinquième dimension, et les rafales de bids rapides déclenchent des thresholds réglables par tenant — trois timeouts de dépôt escrow en 180 jours auto-blocklistent le bidder. Demanufacturing a gagné un vrai flow avec sellable-quality gate. Et le scanner lit Code128 sur les labels rack avec fallback caméra pour Safari et Firefox, pour que la tablette du receiving dock continue de fonctionner quand le navigateur refuse de coopérer.
Dix pages core ont troqué leurs tenues dépareillées contre l’uniforme maison : mêmes boutons, mêmes tables, deux couleurs, un seul produit. Les pallets ont reçu un vrai foyer avec des actions move, merge et split qui parlent à la base de données au lieu de faire semblant. Les carriers ne sont plus un dropdown qui pointe vers rien — choisissez-en un dans votre catalogue et il suit le shipment jusqu’à la collection. Watchlists, trust scores, cycle counts, governance, parts — tous sortis du tiroir mock pour rejoindre la base de données. Et inventory a gagné une barre saved-views, parce que “les filtres que j’ai mis hier” ne devraient pas devoir être remis aujourd’hui.
Environ 1 800 lignes de mock data morte ont discrètement fait leurs valises. Quatre pages settings — catalog, shipping, intégrations et le formulaire public collection-request — ont reçu le rebuild two-colour propre que personne ne demandait mais dont tout le monde avait besoin. Seize modules de requêtes ont arrêté de contourner le type system et se sont mis à parler correctement à Postgres. Le catalogue de fault codes “mock” n’était pas mock du tout — c’était depuis le début le stock catalog de la plateforme, donc nous l’avons renommé pour ce qu’il était. L’app est maintenant mesurablement moins susceptible d’exploser un mardi.
La page market inventory a cessé de tester votre patience. Chaque ligne indique maintenant si elle est Available, Draft, Published ou Sold — vous n’ouvrez plus trois onglets pour le savoir. Quick filter pills en haut, chacun avec un compteur live : cliquez “Published” pour ne voir que ce qui est live, cliquez “Sold” pour ne voir que ce qui est parti. Cochez une douzaine de lignes et archivez-les d’un coup. Chaque item reçoit tags et notes privées — le genre de champ où votre trader écrit à 2h du matin : “hold for Gregor, he’ll take all of these at list price.” Et quand le warehouse re-grade un laptop de C vers B, un bouton ramène cette mise à jour sans toucher votre prix ni vos notes.
Deux petites choses, toutes deux attendues. Les lignes d’inventory et les pages détail affichent maintenant un badge stale warning quand un listing reste trop longtemps sans mouvement — le genre de rappel qui vivait autrefois sur un post-it derrière l’écran de quelqu’un. Et les photos sur asset detail ont reçu une vraie lightbox, parce qu’ouvrir une image dans un nouvel onglet navigateur juste pour la voir plus grande qu’un timbre était très 2014.
L’app a appris à vous dire les choses. Les messages dans les deal rooms arrivent sans que personne ne refresh. Une cloche dans la topbar avec un vrai notifications center pour voir ce que vous avez manqué pendant le lunch. Des pings pour ce qui compte vraiment — nouvelle offre, nouveau message, enchère qui ferme, inventory stale — avec une page de préférences où vous choisissez ce qui mérite de vous interrompre. Et un digest du matin qui regroupe douze notifications sur le même deal en un seul résumé lisible, parce que douze notifications sur le même deal, c’est douze de trop.
Auctions a grandi. Publiez un lot, parcourez les lots, placez des bids, regardez le timer faire ce que font les timers. Et quand une enchère se termine, la machinerie fait discrètement ce qui demandait auparavant un humain le lundi matin — choisir le gagnant, régler le paiement, transférer l’inventory au buyer, fermer le lot. Plus de “attends, cette enchère est vraiment close ?” Il y a un gagnant, un settlement, un record qui dit que c’est arrivé.
Market était une jolie démo. Données fictives, zéro conséquence. Il est maintenant réel. Un wizard en quatre étapes pour construire une batch, afin de ne jamais finir avec une demi-batch publiée à 2h du matin. Une deal room reconstruite qui indique exactement la prochaine action. Cross-tenant browsing, pour voir réellement ce que d’autres sellers ont listé. Un flow counter-offer qui arrête de prétendre qu’un prix est final quand les deux côtés savent qu’il ne l’est pas. Et la plateforme suggère discrètement des matches entre buy et sell intents, pour que vous arrêtiez de lancer des filets dans le vide.
Tous les laptops de votre warehouse ne sont pas prêts à être vendus. Certains sont en test, certains sont contractuellement bloqués, certains ont une cosmétique douteuse et quelqu’un devrait vraiment prendre une autre photo. L’app n’avait pas de mot pour ceux qui SONT prêts — jusqu’à maintenant. Les sellable items vivent sur leur propre étagère, chacun avec un quality score, plus un espace pour ce qui n’est pas core (spares, accessoires, matériel réseau échappé du décommissionnement du mois dernier). Import depuis CSV avec un vrai wizard. Upload photos et documents par item. Définissez un stale threshold et ce qui reste trop longtemps se retire discrètement du market, parce que rien ne tue une marketplace plus vite qu’un listing pour un laptop que quelqu’un a déjà emporté en février.
Les photos étaient autrefois le problème que personne ne résolvait. Prises sur votre téléphone, envoyées à vous-même par e-mail, attachées à un thread disparu en octobre — et trois semaines plus tard, quelqu’un demande si ce Dell avait un coin enfoncé à l’arrivée, sans réponse. Maintenant : chaque asset a un onglet photos. Vous les prenez avec votre téléphone en scannant un QR code. Les thumbnails apparaissent aussi vite que vous uploadez. Et une librairie warehouse-wide permet de tout parcourir sans cliquer dans douze assets. “Defect Exports” est devenu “Evidence Packages,” parce que personne ne classe un defect export — on constitue un evidence package. Pendant ce temps, le design system est descendu à deux couleurs. Douze nuances de sens sont devenues deux. Personne ne regrette le violet.
L’ancien dashboard montrait six chiffres à tout le monde et supposait que l’équipe warehouse et le CFO voulaient les mêmes six. Ce n’était pas le cas. Maintenant il y a quarante-sept widgets, cinq presets par rôle (Warehouse Ops, Sales, Finance, Admin, Executive), et une grille où vous pouvez tout déplacer. Choisissez un preset, jetez ce dont vous n’avez pas besoin, ajoutez ce qu’il vous faut, sauvegardez-le, créez-en un second, passez de l’un à l’autre comme entre des onglets navigateur.
Receiving était auparavant une sensation. Vous cliquiez sur “start,” scanniez des choses jusqu’à ce que ça semble terminé, puis la palette existait dans le système sans que personne sache vraiment ce qu’elle contenait. Maintenant, c’est une vraie session — avec un début, une fin et un handoff signé qui dit : “ces assets sont maintenant inventory, arrêtez de demander.” Fini les palettes de Schrödinger. La receiving list n’affiche plus les orders qui ne reçoivent rien (drafts, cancellations, il y a trois semaines) et la colonne progress ne vous insulte plus avec “0/0” quand il n’y a rien à compter. La page warehouses, qui crashait à chaque visite, fonctionne maintenant — ce qui est censé être le cas des pages.
Collections fonctionne enfin de bout en bout. Planifiez un pickup au bureau de votre client, confirmez la date, assignez un chauffeur, suivez jusqu’à delivery — et quand le camion arrive à votre warehouse, le système crée automatiquement un inbound order avec tout rempli. Pas de nom client à retaper, pas de référence contrat à copier-coller. Ouvrez n’importe quel contrat et vous voyez exactement quelles collections et inbound orders lui appartiennent, au lieu de passer entre trois écrans pour reconstituer l’histoire. Six pages supplémentaires de la plateforme — inbound orders, receiving, outbound, settlements et invoices — ont reçu des tables plus propres avec search, filters et un look cohérent qui fait enfin sentir toute l’app comme un seul produit plutôt que douze prototypes cousus ensemble.
La page détail contract affichait autrefois les mêmes informations à trois endroits et appelait ça de la rigueur. Maintenant le header indique le nom du contrat, rien d’autre. Les services sont dans une table simple au lieu de cards décorées qui étaient jolies mais vous ralentissaient. Pricing, SLA terms et renewal details ont chacun leur propre section, scannable en deux secondes. Éditer un lease contract se fait directement sur la page — quatorze champs sans ouvrir un seul dialog. Les pages admin pour users et activity logs chargent en une seule fois au lieu de vous faire attendre pendant quatre fetchs successifs.
Vos warehouses ont enfin un vrai carnet d’adresses. Zones et racks étaient auparavant coincés dans chaque record warehouse comme un gros blob — impossible à référencer, impossible à rechercher. Maintenant chaque zone, chaque rack et chaque zone type est un objet propre. Une nouvelle page Locations settings vous laisse dessiner votre floor plan : ajouter des warehouses, imbriquer des zones, placer des racks. Et l’activité log a arrêté de mentir — il prétendait auparavant que vous aviez modifié neuf settings quand vous n’en aviez touché qu’un.
Contracts a grandi. Créez-en un de zéro avec company, services, pricing model et certifications — tout dans un seul form. Éditez tout inline. Gérez les services via un dialog où vous cliquez pour ajouter sans jamais toucher un submit button. Terminate avec une modal qui demande pourquoi. Les company certifications ne sont plus fake. Et une nouvelle règle two-color badge fait enfin que toute l’UI s’accorde sur le sens des couleurs.
Vingt-quatre certifications importantes en ITAD — de R2v3 à B Corp — vivent maintenant dans un vrai catalogue. Chacune avec issuing body, scope et renewal period, pour arrêter de googler “what does NAID AAA require” chaque fois qu’un client demande. Activez celles qui comptent pour votre organisation, ajoutez des certs custom pour les niches dont personne d’autre n’a entendu parler.
Documents a reçu un foyer. Uploadez un PDF, taguez-le, liez-le à une company, retrouvez-le trois mois plus tard sans fouiller dans vos e-mails. Chaque document lié apparaît sur la page détail company. Les tags sont devenus universels — un seul système pour contacts, companies et documents au lieu de trois systèmes séparés qui prétendaient ne pas être la même chose.
Currency est passé d’un dropdown hardcodé à 147 vraies devises avec taux de change live rafraîchis chaque matin. Une seule fonction de formatting a remplacé trente-quatre copies du même code qui faisaient toutes légèrement la même chose différemment. La page Languages settings a été supprimée, parce que scroller dans cent langues pour trouver Dutch n’est pas une user experience.
L’app a appris à se souvenir de votre format de date préféré. Choisissez DD/MM/YYYY, MM/DD/YYYY ou YYYY-MM-DD et chaque page suit. Les custom services peuvent maintenant être supprimés tandis que les defaults plateforme restent protégés. Les floating bottom bars qui recouvraient votre contenu ont été remplacées par des boutons qui restent à leur place.
Trente-cinq services ITAD répartis en sept catégories, chacun avec un code court et un default rate. Drag pour réordonner, toggle pour désactiver, avertissement avant de casser une dépendance. Le genre de page de configuration qui vous évite de rechercher les mêmes chiffres chaque fois que vous écrivez un contrat.
La plateforme a appris à se gérer elle-même. Des profils d’organisation avec de vrais champs métier. Une gestion des utilisateurs qui permet de suspendre des personnes, sauf vous-même. Un journal d’activité qui enregistre tout. Cinq clients de démo avec de vraies adresses, pour que la page d’aperçu affiche enfin de vrais chiffres.
L’app sait enfin à qui appartient quoi. Organisations, memberships et système de tenants permettent aux collègues de partager un workspace au lieu de regarder des écrans vides. Sept rôles au lieu de quatre, parce que l’équipe warehouse n’a pas besoin de voir les négociations commerciales. Chaque page a reçu un numéro d’ID. Et 761 problèmes lint ont été nettoyés comme un garage évité depuis janvier.
Companies et Contacts ont reçu leur apparence finale. Reconstruits de zéro avec des layouts plus nets, des patterns cohérents et une attention au détail qui fait disparaître l’UI. Pour la première fois, le CRM donne l’impression d’avoir été conçu, pas assemblé.
Chaque contact et chaque entreprise peuvent désormais avoir des notes. Un vrai journal de communication au lieu du post-it sur l’écran, tombé derrière le bureau en 2024. Six champs de réseaux sociaux sont arrivés sur contacts, parce que vos fournisseurs sont sur LinkedIn et vos acheteurs négocient sur WhatsApp.
Le site marketing est passé de fonctionnel à quelque chose qu’on envoie vraiment à un prospect. Trente articles de blog avec des titres comme « Grade B Is Not a Grade. » Chaque page réécrite avec une vraie personnalité. Et une page 404 qui vérifie Rack A3 pour retrouver votre URL disparue.
L’ère des mock data est terminée. Chaque entité Core restante est passée dans une vraie base de données. Les settlements se calculent à partir des prix contractuels. Les invoices gèrent la TVA et les notes de crédit. Les anciens fichiers mock existent encore dans le codebase comme des meubles dans une maison où plus personne n’habite.
Les features qui transforment une collection de modules en produit complet. Scan de codes-barres avec cinq modes, dashboard analytics cross-module et blueprint API : catalogue d’endpoints, UI de gestion des clés et concepts d’abonnements webhook. Les endpoints publics suivront avec le package de lancement.
Deux modules en une session. Auctions a reçu quatre formats avec protection anti-sniping et une page de simulation où l’on voit le timer paniquer. Escrow est devenu son propre module, avec sept étapes de « deal agreed » à « money in the bank. »
Le module Market est passé d’une idée à onze features. Batch builder, deal rooms avec négociations codées par couleur, intent matching, trust scores et seller analytics.
La table assets est passée dans une vraie base de données. Deux cents assets avec spécifications complètes, grading et enregistrements d’effacement des données. Cinq pages ont arrêté de faire semblant et ont commencé à queryer.
Contrôle qualité avec checklists d’inspection. Dashboards ESG montrant le CO₂ économisé par appareil recyclé. Gestion des retours de leasing quand votre client veut récupérer ses laptops et qu’il faut prouver ce qui leur est arrivé.
Gestion de flotte pour suivre les collections entre véhicules et routes. Workflows de demanufacturing quand les appareils doivent être démontés, pas seulement effacés. Paramètres d’intégration pour les systèmes que vous utilisez déjà.
Dashboards de conformité R2 et e-Stewards avec scores d’audit readiness. Première version de la collaboration cross-module : notes partagées, activity feeds et structure à laquelle le portail client authentifié pourra se connecter plus tard.
Settlements calculés automatiquement à partir des prix contractuels et des résultats de grading. Répartitions de revenue share. Suivi des chargebacks. Le genre de calculs qui vivaient auparavant dans la tête de quelqu’un et dans un spreadsheet.
Gestion multi-warehouse avec zones, racks, positions et pallets. Rack layouts en drag-and-drop. Suivi de capacité. La réalité physique d’un entrepôt ITAD, numérisée.
Grande refonte UI. La sidebar a été organisée en cinq modules : Core, Market, Auction, Escrow, Admin. La navigation a enfin arrêté de se contredire.
Gestion de contrats avec six modèles de prix. Parce que le “standard pricing” n’existe pas quand un client paie par unité, un autre au kilo et un troisième insiste sur le revenue share.
Authentification. Login. Signup. Routes protégées. Le moment où une URL ne suffisait plus pour tout voir.
Nettoyage du design system. Spacing, typographie et patterns de composants cohérents sur chaque page. Le genre de travail que personne ne remarque avant qu’il manque.
Le site marketing a reçu sa personnalité. About page, pricing page, changelog. Une copy qui donne l’impression d’avoir été écrite par quelqu’un qui a vraiment mis les pieds dans un entrepôt.
Passage de Pages Router à App Router. Tout a été recâblé. Rien de visible n’a changé. Le genre de refactor qui ne produit aucune capture pour le deck investisseurs.
Code cleanup, mises à jour de dépendances et suppression de choses qui semblaient de bonnes idées à 2 h du matin, mais ne l’étaient pas. Dette technique remboursée tôt.
File d’attente testing et diagnostics avec niveaux de priorité et assignation des testeurs. Traitement des inbound orders avec device scanning. La ligne de convoyage s’est mise en mouvement.
Premières vues warehouse. Asset list, asset detail pages et formulaires de grading basiques. Le squelette de ce qui deviendrait Core. C’était horrible. Ça fonctionnait correctement.
Layout dashboard, sidebar navigation et dark mode. Le strict minimum pour montrer ce que cela pouvait devenir sans provoquer de rire.
npx create-next-app le jour de Noël. Premier commit. Première hero section. Première réécriture de la hero section, le lendemain matin. Certaines choses ne changent jamais.
Vous voulez voir où nous allons ?
Les Early Access Partners bénéficient de 6 mois gratuits et d’une place au premier rang pour chaque mise à jour.
Demander un accès anticipé