Yachtxchange : une application avec accès par rôle, cinq fonctions IA et une pile presque sans coût au repos pour les courtiers en yachts
Journal de développement de Yachtxchange — le SaaS B2B de SEYSO pour les courtiers en yachts. Imaginez une navigation de niveau YachtWorld pour les acheteurs, vendue aux agences sous forme de logiciel à plusieurs offres : une application mobile sur les deux boutiques, un portail qui rédige des annonces à partir de photos en trois minutes et une facture d’infrastructure arrondie à zéro pendant que l’agence dort.
1 app
Les deux boutiques, accès par rôle
5
Rôles, une base de code
30→3
Minutes par annonce
~$0
Infrastructure au repos par tenant
Le point d’entrée : les agences achètent un logiciel, les acheteurs disposent d’une place de marché
Les places de marché de yachts monétisent les annonces ; les agences qui font le travail utilisent encore tableurs, dossiers de photos et descriptions Word copiées-collées. Rédiger une bonne annonce — titre, texte destiné aux acheteurs, inventaire d’équipement, notes d’état — prend environ trente minutes par bateau, et l’incohérence se voit sur les pages des agences.
Yachtxchange inverse le modèle : l’agence de courtage est le client . Elle souscrit une offre, reçoit un portail qui accomplit les tâches fastidieuses et son inventaire alimente une expérience acheteur digne d’une place de marché de premier plan — web et mobile natif — sans qu’elle construise quoi que ce soit.
Quatre offres, appliquées dans le code — pas dans un PDF
Solo à $99/mois (5 annonces, 1 utilisateur), Pro à $299 (25 annonces, 3 utilisateurs, qualification des prospects), Brokerage à $799 (100 annonces, 10 utilisateurs, analyse des prix) et une offre Enterprise sur mesure avec accès API et marque blanche. L’intérêt réside dans l’emplacement des limites : ensureCanCreateListing , ensureCanAddSeat et ensureAiCreditsAvailable sont des contrôles appelés dans les Server Actions et routes API, avec Stripe comme source de référence et un webhook répliquant localement l’état des abonnements. Aucune limite reposant sur la bonne foi, aucun rapprochement nocturne.
L’utilisation IA est mesurée de la même façon — chaque appel au copilote écrit une ligne dans une table usage_events , rendant les crédits d’offre comptables, facturables et faciles à auditer dès le premier jour.
Cinq rôles, une base de code — et des agences qui s’organisent seules
Il existe exactement une application mobile dans les deux boutiques et une application web sur un domaine. Ce que vous voyez dépend de votre rôle :
buyerInscription autonome. Parcourir les annonces, enregistrer des recherches, contacter les courtiers.
broker_leadPremière inscription depuis le domaine courriel d’une agence. Tous les droits de courtier, plus la facturation et la gestion d’équipe.
broker_backupDeuxième inscription depuis le même domaine. Tous les droits — et promotion automatique au rôle de responsable si celui-ci part. La succession est une règle de provisionnement, pas un ticket d’assistance.
broker_agentInvité par le responsable ou son adjoint. Annonces et prospects, configurables par utilisateur.
adminPersonnel Yachtxchange. Administration complète de la plateforme.
Les agences correspondent aux Clerk Organizations , et la répartition responsable/adjoint/agent réside dans un seul module de provisionnement. Un petit contrôle essentiel : les domaines de courriel gratuits — Gmail et autres — ne sont jamais automatiquement associés à une agence existante ; un inconnu avec une adresse Gmail ne peut donc pas entrer dans le tenant d’autrui.
Le monorepo : les schémas Zod font contrat
Deux applications — apps/web (Next.js 16 App Router, groupes de routes marketing, acheteur, courtier et administration) et apps/mobile (Expo + EAS) — reposent sur six packages partagés : db (Drizzle ORM sur Neon), auth (encapsulations Clerk + provisionnement), ai, billing , ui et types . Le package types est la clé de voûte : les schémas Zod constituent le contrat unique partagé par les Server Actions web, les routes API, le client API mobile et les outils IA. Une modification de schéma se propage partout où le compilateur peut voir.
Un modèle de données qui va au-delà de l’annonce
Le répertoire des schémas raconte la véritable histoire du produit : annonces, prospects, offres, rendez-vous, experts maritimes et coffre documentaire. Yachtxchange construit progressivement l’espace de transaction, pas seulement la vitrine.
Multitenant par discipline
Chaque ligne appartenant à un tenant porte un brokerage_id et chaque requête filtre dessus ou est protégée par un contrôle administrateur. Les montants sont stockés en cents sous forme de bigint — jamais en flottants.
La couche IA : cinq fonctionnalités, aucune dépendance à un fournisseur
Tout passe par Vercel AI Gateway avec de simples chaînes "provider/model" — aucun SDK fournisseur intégré à la base de code ; changer de modèle ou réaliser un test A/B ne demande qu’une modification de chaîne, avec observabilité et solutions de repli incluses.
Copilote d’annonces — de 30 à 3 minutes
Le courtier téléverse des photos et des caractéristiques ; un modèle de vision renvoie un brouillon structuré via generateObject selon un schéma Zod : titre SEO, description acheteur en 3–5 paragraphes, points forts visibles d’emblée, liste d’équipements déduite des photos, note d’état et tags automatiques. Deux choix comptent particulièrement. Le prompt interdit d’inventer des caractéristiques — uniquement celles fournies ou visuellement déductibles. Et le schéma comprend un tableau warnings signalant les contradictions et affirmations à vérifier, pour que le courtier examine les alertes plutôt que de relire le texte. La création d’annonce passe de ~30 minutes à ~3.
Recherche sémantique
Similarité cosinus pgvector sur les représentations vectorielles des annonces — « trawler stable pour la Great Loop à moins de 400k » fonctionne, au-delà des filtres marque/modèle.
Qualification des prospects
Demandes notées de 0 à 100 avec prochaine action recommandée — les courtiers Pro cessent de trier leurs courriels à l’instinct.
Extraction des expertises
Données structurées extraites des PDF d’expertise maritime — le document dont dépend chaque transaction, enfin lisible par machine.
Vérification des experts maritimes
Des indicateurs sur les antécédents du registre des experts alimentent le parcours de rendez-vous — la confiance, encodée.
Prochaines fonctions déjà préparées : analyse des prix, amélioration des photos et tags automatiques, recherche par image, traduction et détection de fraude par photos dupliquées.
L’économie : une pile au coût nul au repos
Les marges du SaaS B2B se jouent dans les choix d’infrastructure. Une agence est active environ huit heures par jour — la pile est choisie pour que les seize autres ne coûtent rien :
Tarification Vercel Active CPU — payez le CPU pendant le travail effectif — pas lorsqu’une fonction attend la base de données ou un appel IA.
Réduction à zéro de Neon — Le coût de calcul Postgres tombe à $0 au repos. Une agence active 8 h/jour paie pour 8 h.
Un déploiement multitenant unique — toutes les agences partagent un projet et une base de données, avec isolation par brokerage_id — aucune infrastructure par tenant à surveiller.
Réutilisation des instances Fluid Compute — les requêtes simultanées partagent des instances déjà actives ; les démarrages à froid sont l’exception, pas la règle.
Le véritable plafond de coût est le stockage des photos et vidéos — les annonces de yachts sont lourdes. Des mesures sont en place (redimensionnement et AVIF au téléversement, cache intensif) avec un seuil convenu : si les frais de sortie dépassent ~$500/mois, le stockage passe à R2. Définir les critères de sortie avant l’arrivée de la facture est la revue d’architecture la moins chère qui soit.
État d’avancement
Le web et le mobile utilisent aujourd’hui le schéma actif — navigation acheteur, portail courtier avec copilote d’annonces, facturation des offres et application mobile selon les rôles fonctionnent en développement privé. Les profils EAS sont configurés pour la soumission aux boutiques. L’espace de transaction (offres, rendez-vous, planification des experts, coffre documentaire) s’appuie sur le schéma déjà en place.
Si vous dirigez une agence et souhaitez tester le passage de 30 à 3 minutes par annonce sur votre inventaire, nous ouvrons un nombre limité d’échanges pour des pilotes.
Parlons d’un pilote
Yachtxchange est créé par l’équipe derrière LiftCrew AI, Sentinel et Liftline — et le même modèle d’abonnement anime notre offre d’applications mobiles en tant que service.