Yachtxchange: un’app con accessi per ruolo, cinque funzionalità IA e uno stack dai costi di inattività quasi nulli per le agenzie nautiche
Un diario di sviluppo di Yachtxchange — il SaaS B2B di SEYSO per le agenzie nautiche. Immagina una navigazione di livello YachtWorld per gli acquirenti, venduta però alle agenzie come software a piani: un’app mobile su entrambi gli store, un portale broker che prepara annunci dalle foto in tre minuti e una spesa infrastrutturale prossima allo zero mentre l’agenzia dorme.
1 app
Entrambi gli store, accessi per ruolo
5
Ruoli, un’unica base di codice
30→3
Minuti per annuncio
~$0
Infrastruttura inattiva per tenant
Il punto d’ingresso: le agenzie comprano software, gli acquirenti ottengono un marketplace
I marketplace di yacht monetizzano gli annunci; le agenzie che fanno il lavoro concreto usano ancora fogli di calcolo, cartelle di foto e descrizioni copiate da Word. Scrivere un buon annuncio — titolo, testo per l’acquirente, inventario delle dotazioni, note sulle condizioni — richiede circa trenta minuti per barca, e l’incoerenza si vede nelle pagine di qualsiasi agenzia.
Yachtxchange ribalta il modello: il cliente è l’agenzia . Sottoscrive un piano, ottiene un portale che svolge il lavoro noioso e il suo inventario alimenta un’esperienza per acquirenti da marketplace di prima classe, web e mobile nativo, senza che l’agenzia debba costruire nulla.
Quattro piani, applicati nel codice, non in un PDF
Solo a $99/mese (5 annunci, 1 utente), Pro a $299 (25 annunci, 3 utenti, valutazione lead), Brokerage a $799 (100 annunci, 10 utenti, analisi dei prezzi) e un piano Enterprise personalizzato con accesso API e white label. La parte interessante è dove risiedono i limiti: ensureCanCreateListing , ensureCanAddSeat e ensureAiCreditsAvailable sono controlli chiamati nelle Server Actions e nelle route API, con Stripe come fonte autorevole e un webhook che replica localmente lo stato dell’abbonamento. Nessun limite basato sulla fiducia, nessun processo notturno di riconciliazione.
L’uso dell’IA viene misurato allo stesso modo: ogni chiamata al copilota scrive una riga in una tabella usage_events , così i crediti del piano sono conteggiabili, fatturabili e verificabili fin dal primo giorno.
Cinque ruoli, un’unica base di codice e agenzie che si organizzano da sole
Esiste esattamente un’app mobile su entrambi gli store e un’app web su un dominio. Ciò che vedi dipende da chi sei:
buyerRegistrazione autonoma. Esplora, salva ricerche, contatta i broker.
broker_leadPrima registrazione dal dominio email di un’agenzia. Tutti i permessi broker, più fatturazione e gestione del team.
broker_backupSeconda registrazione dallo stesso dominio. Permessi completi e promozione automatica a responsabile se il responsabile lascia. La successione è una regola di provisioning, non un ticket di assistenza.
broker_agentInvitato dal responsabile o dal sostituto. Annunci e lead, configurabili per utente.
adminStaff Yachtxchange. Amministrazione completa della piattaforma.
Le agenzie corrispondono a Clerk Organizations e la gestione di responsabile, sostituto e agente risiede in un unico modulo di provisioning. Un piccolo controllo di grande importanza: i domini email gratuiti, come Gmail, non vengono mai associati automaticamente a un’agenzia esistente, così un estraneo con un indirizzo Gmail non può entrare nel tenant altrui.
Il monorepo: gli schemi Zod sono il contratto
Due app: apps/web (Next.js 16 App Router, gruppi di route per marketing, acquirenti, broker e amministratori) e apps/mobile (Expo + EAS), basate su sei pacchetti condivisi: db (Drizzle ORM su Neon), auth (wrapper Clerk + provisioning), ai, billing , ui e types . Il pacchetto types è la chiave di volta: gli schemi Zod sono l’unico contratto condiviso da Server Actions web, route API, client API mobile e strumenti IA. Una modifica allo schema si propaga ovunque il compilatore possa vederla.
Un modello dati che va oltre l’annuncio
La directory degli schemi racconta la vera storia del prodotto: annunci, lead, offerte, appuntamenti, periti e archivio documentale. Yachtxchange sta costruendo discretamente lo spazio per le trattative, non solo la vetrina.
Multi-tenant per disciplina
Ogni riga appartenente a un tenant contiene un brokerage_id e ogni query filtra per questo valore o è protetta da un controllo amministrativo. Gli importi sono salvati in centesimi come bigint — mai come float.
Il livello IA: cinque funzionalità, nessun vincolo a un fornitore
Tutto passa attraverso Vercel AI Gateway con semplici stringhe "provider/model" — nessun SDK del fornitore incorporato nel codice, quindi sostituire modelli o eseguire test A/B richiede solo di cambiare una stringa, con osservabilità e fallback inclusi.
Copilota per annunci: la funzione da 30 a 3
Il broker carica foto e specifiche puntate; un modello visivo restituisce una bozza strutturata tramite generateObject secondo uno schema Zod: titolo SEO, descrizione per l’acquirente di 3–5 paragrafi, punti salienti subito visibili, elenco delle dotazioni dedotto dalle foto, valutazione delle condizioni e tag automatici. Due scelte progettuali contano più di tutte. Il prompt vieta specifiche inventate: solo dati forniti o visivamente deducibili. Inoltre, lo schema include un array warnings che evidenzia contraddizioni e affermazioni da verificare, così il broker esamina gli avvisi anziché correggere il testo. La creazione degli annunci scende da ~30 minuti a ~3.
Ricerca semantica
Similarità coseno pgvector sugli embedding degli annunci: funziona “trawler stabile per il Loop sotto i 400k”, non solo filtri per marca e modello.
Valutazione dei lead
Richieste classificate da 0 a 100 con un’azione successiva raccomandata: i broker del piano Pro smettono di ordinare la posta a intuito.
Estrazione dalle perizie
Dati strutturati dai PDF delle perizie nautiche: il documento da cui dipende ogni trattativa, finalmente leggibile dalle macchine.
Verifica dei periti
Informazioni di verifica sul registro dei periti che alimentano il flusso degli appuntamenti: la fiducia, codificata.
Prossime funzionalità predisposte: analisi dei prezzi, miglioramento delle foto e tag automatici, ricerca per immagini, traduzione e rilevamento delle frodi tramite foto duplicate.
L’economia: uno stack a costo zero quando è inattivo
I margini del SaaS B2B dipendono dalle scelte infrastrutturali. Un’agenzia è attiva forse otto ore al giorno: lo stack è scelto affinché le altre sedici non costino nulla:
Tariffazione Vercel Active CPU — paghi la CPU durante il lavoro effettivo, non mentre una funzione attende il database o una chiamata IA.
Riduzione a zero di Neon — Il costo del calcolo Postgres scende a $0 quando è inattivo. Un’agenzia attiva 8 ore al giorno paga per 8 ore.
Un’unica distribuzione multi-tenant — ogni agenzia condivide un progetto e un database, con isolamento tramite brokerage_id: nessuna infrastruttura per tenant da sorvegliare.
Riutilizzo delle istanze Fluid Compute — le richieste simultanee condividono istanze già attive; gli avvii a freddo sono l’eccezione, non la regola.
Il vero limite di costo è l’archiviazione di foto e video: gli annunci di yacht sono pesanti. Sono già previste misure di contenimento, come ridimensionamento e AVIF al caricamento e caching aggressivo, con una soglia concordata: se i costi del traffico in uscita superano ~$500/mese, l’archiviazione passa a R2. Definire i criteri di uscita prima dell’arrivo della fattura è la revisione architetturale più economica che si possa fare.
A che punto siamo
Web e mobile funzionano oggi sullo schema attivo: navigazione per acquirenti, portale broker con copilota per annunci, fatturazione dei piani e app mobile con accessi per ruolo sono operativi nello sviluppo privato. I profili EAS sono configurati per l’invio agli store. L’area trattative — offerte, appuntamenti, pianificazione dei periti e archivio documentale — viene realizzata sullo schema già presente.
Se gestisci un’agenzia e vuoi verificare sul tuo inventario la promessa di passare da 30 a 3 minuti per annuncio, stiamo aprendo un numero limitato di colloqui per progetti pilota.
Parliamo di un progetto pilota
Yachtxchange è realizzato dal team di LiftCrew AI, Sentinel e Liftline, e lo stesso modello di abbonamento alimenta la nostra offerta Mobile Apps as a Service.