Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Ce document décrit comment fonctionne le projet : architecture, flux métier, intégrations et déploiement. Une partie Résumé en fin de document présente le produit comme un pitch commercial.查看完整 README ↗
| Produit | Soline — Secrétariat IA & gestion pour artisans du BTP |
| Dépôt Git | OrbitArtisan (nom interne) |
| Éditeur | AlphaSysAI — Florian LAPERTOT |
| Site marketing | solinebtp.fr |
| Application | app.solinebtp.fr |
| Contact | [email protected] |
Ce document décrit comment fonctionne le projet : architecture, flux métier, intégrations et déploiement. Une partie Résumé en fin de document présente le produit comme un pitch commercial.
Soline est une application web SaaS (Progressive Web App) construite avec Next.js App Router. Elle centralise l'activité commerciale et administrative des artisans du bâtiment dans une seule plateforme.
| Principe | Implémentation |
|---|---|
| Rendu | Server Components Next.js + Server Actions pour les mutations |
| API | Route Handlers (/api/*) pour REST, webhooks et crons |
| Données | Supabase (PostgreSQL + Auth + Storage + RLS) |
| Multi-tenant | Chaque artisan ne voit que ses données (RLS) ; opérations cross-tenant via service role |
| IA | Mistral AI (texte) ; agent vocal ElevenLabs (voix) branché par tools REST |
| Paiements | Stripe (Connect pour encaissement artisan, Checkout pour factures client, Billing pour abonnements) |
Visiteur / Client / Artisan
│
▼
Next.js (Vercel) — middleware + App Router
│
├── Supabase Auth (sessions cookies SSR)
├── PostgreSQL + RLS (métier, quotas, audit)
├── Storage (lead-media, recovery-documents)
│
├── Mistral AI (assistant, leads, devis)
├── ElevenLabs + Twilio (secrétaire vocale)
├── Stripe (paiements, abonnements)
├── Plateforme Agréée (e-facturation B2B)
├── MySendingBox (LRAR) + RubyPayeur (recouvrement)
└── BAN data.gouv.fr (géocodage adresses FR)
| Couche | Technologie | Version |
|---|---|---|
| Framework | Next.js (App Router, Turbopack) | 16.1.7 |
| UI | React + Tailwind CSS v4 + shadcn/ui | React 19.2.3 |
| Langage | TypeScript | ^5 |
| Runtime | Node.js | 24.x (.nvmrc, engines) |
| BDD | Supabase (PostgreSQL, Auth, Storage, pgvector) | ^2.99 |
| IA texte | Mistral AI | API REST |
| Voix | Twilio (téléphonie, webhooks) + ElevenLabs (agent) | twilio ^5.13 |
| Paiements | Stripe | ^21.0 |
| Factur-X | @stackforge-eu/factur-x (prod, libxml2-wasm) | ^1.4 |
| pdf-lib | ^1.17 | |
| Validation | Zod | ^4.4 |
| Tests | Vitest | ^4.1 |
| Hébergement | Vercel (build + fonctions serverless + crons) | — |
Factur-X en production : génération XML CII via sérialiseur interne (
cii-to-xml.ts, sans libxmljs natif). Validation XSD/Schematron via@stackforge-eu/factur-x.@stafyniaksacha/facturxest réservé aux tests locaux (devDependency).
OrbitArtisan/
├── src/
│ ├── app/ # Routes App Router (pages + API)
│ │ ├── app/ # Espace artisan (/app/*)
│ │ ├── compte/ # Espace client
│ │ ├── admin/ # Super-admin plateforme
│ │ ├── estimation/ # Tunnel leads public
│ │ ├── site/[slug]/ # Vitrine artisan
│ │ ├── embed/[slug]/ # Widget iframe
│ │ └── api/ # REST, webhooks, crons
│ ├── components/ # UI (app, vitrine, landing, recovery, admin…)
│ ├── lib/ # Logique métier (ai, billing, leads, supabase…)
│ └── features/voice/ # Module vocal (tools, auth)
├── supabase/
│ ├── init.sql # Schéma complet idempotent (~3400 lignes)
│ └── migration/ # Migrations incrémentales 01 → 12
├── public/
│ ├── embed.js # Widget JavaScript embarquable
│ └── sw.js # Service Worker PWA
├── vercel.json # Crons Vercel
├── next.config.ts # Headers CSP embed, packages externes
└── .env.example # Variables d'environnement documentées
src/lib/ importants| Dossier | Rôle |
|---|---|
ai/ | Mistral, assistant artisan, qualification leads, embeddings pgvector |
billing/ | Devis, factures, Factur-X, e-reporting, abonnements, relances BTP |
leads/ | Tunnel estimation, dispatch, matching géographique |
recovery/ | Mise en demeure LRAR, quota, contexte recouvrement |
voice/ | Quota vocal mois civil, journal Twilio |
supabase/ | Clients browser / server / service-role |
auth/ | Types de compte, admin plateforme, impersonation |
domain-routing.ts | Séparation solinebtp.fr ↔ app.solinebtp.fr |
site-url.ts | URLs canoniques marketing / app |
En production, deux domaines coexistent :
| Domaine | Rôle | Variable |
|---|---|---|
solinebtp.fr | Landing marketing, tarifs, pages légales | NEXT_PUBLIC_MARKETING_URL |
app.solinebtp.fr | Application SaaS (artisan, client, vitrines) | NEXT_PUBLIC_SITE_URL |
src/middleware.ts)Le middleware exécute, dans l'ordre :
resolveDomainRouting) — sur le domaine marketing, seuls /, les pages légales et /embed.js sont servis ; le reste redirige vers l'app. Sur le domaine app, les pages légales redirigent vers le marketing.profiles) vs client (customer_profiles)./app/* réservé aux artisans, /compte/* et /mes-devis/* aux clients./admin/* via table platform_admins./app/suspended.En local ou sur preview Vercel mono-domaine, la séparation est désactivée si marketing et app partagent le même hostname.
/embed/[slug] : iframe du tunnel d'estimation, frame-ancestors * (seule route embarquable).public/embed.js : API window.Soline.open(), .close(), .toggle().X-Frame-Options: SAMEORIGIN).| Profil | Table | Espace | Accès |
|---|---|---|---|
| Artisan | profiles | /app/* | Devis, factures, RDV, messages, réglages, vitrine |
| Client final | customer_profiles | /compte/*, /mes-devis/* | Accepter devis, payer factures, messages |
| Visiteur anonyme | — | /, /estimation, /site/[slug] | Estimation, prise de RDV, consultation vitrine |
L'authentification repose sur Supabase Auth (email/mot de passe, callback /auth/callback). Le typage artisan/client est déterminé par la présence d'une ligne dans profiles ou customer_profiles (src/lib/auth/account-type.ts).
Le système platform_invitations permet à un artisan d'inviter un client (ou l'inverse) par email + token (/invitation/[token]).
public_token), pas d'INSERT direct anonyme./app)| Module | Route | Description |
|---|---|---|
| Tableau de bord | /app | Vue d'ensemble activité, raccourcis |
| Profil | /app/profile | Identité, logo, coordonnées |
| Réglages | /app/reglages | Métier, adresse (BAN), prestations, widget embed, vocal, abonnement |
| Prestations | /app/services | Catalogue services (durée, tarif) |
| Planning | /app/rdv | Calendrier, création/validation RDV |
| Appels Soline | /app/appels | Validation des propositions de devis issues des appels vocaux |
| Contacts | /app/contacts | Clients liés, historique |
| Messages | /app/messages | Conversations, pièces jointes (photos leads) |
| Devis | /app/quotes | CRUD, envoi, suivi statuts |
| Factures | /app/invoices | Conversion, finalisation, PDF/Factur-X, recouvrement |
| Chantiers | /app/chantiers | Suivi chantiers, saisie temps MO |
| Interventions | /app/interventions | Bons d'intervention, signature client |
| Ouvrages | /app/ouvrages | Bibliothèque ouvrages pré-chiffrés |
| Fournisseurs | /app/fournisseurs | Référentiel fournisseurs |
| Assistant IA | FAB flottant | Navigation, RDV, brouillon devis (texte ou voix) |
/compte)| Module | Route | Description |
|---|---|---|
| Accueil | /compte | RDV, statistiques |
| Recherche | /compte/recherche | Annuaire artisans par métier + proximité (haversine) |
| Devis | /mes-devis | Consultation, acceptation/refus (RPC sécurisées) |
| Factures | /compte/factures | Consultation, paiement Stripe Checkout |
| Messages | /compte/messages | Échanges avec artisan(s) |
| Réglages | /compte/reglages | Profil client |
| Module | Route | Description |
|---|---|---|
| Landing | / | Présentation, tarifs, CTA inscription |
| Estimation | /estimation | Tunnel IA en 4 étapes |
| Suivi lead | /estimation/suivi | Suivi via token porteur |
| Vitrine | /site/[slug] | Fiche publique, services, RDV, messages |
| Devis public | /devis/[token] | Consultation devis sans compte |
| Intervention | /intervention/[token] | Signature bon d'intervention |
| Widget | /embed/[slug] | Tunnel embarqué pour sites tiers |
/admin)Réservé aux platform_admins : métriques, liste/suspension des artisans (tenants), journal d'audit, impersonation.
Artisan crée brouillon (manuel, assistant IA ou appel vocal)
→ Ajoute prestations + matériaux (catalogue fournisseur pgvector optionnel)
→ Envoie au client (statut: sent)
→ Client accepte (RPC client_accept_quote) ou refuse
→ Si accepté : conversion en facture (standard, acompte, situation, solde…)
→ Finalisation (Factur-X B2B ou PDF + e-reporting B2C)
→ Paiement Stripe Checkout (optionnel)
→ Relances automatiques si impayé (cron)
→ Recouvrement LRAR puis RubyPayeur si nécessaire
Fichiers clés : src/app/app/quotes/, src/lib/billing/invoicing/invoice-service.ts.
Prospect sur vitrine / widget / (vocal en pause)
→ Créneau proposé selon disponibilités artisan
→ RDV créé (pending ou confirmed)
→ Si prospect sans compte : pending_vitrine_appointments
→ À l'inscription client : finalisation automatique du RDV
1. Prospect choisit un métier (~100 métiers BTP, taxonomy.ts)
2. Chat IA qualification (questions séquentielles)
3. Localisation (API BAN ou géolocalisation navigateur)
4. Upload photos/vidéos (bucket privé lead-media)
5. Qualification IA → JSON structuré (urgence, complexité, fourchette prix)
6. Matching géographique : 2-3 artisans dans ~40 km (RPC match_leads_to_artisans)
7. Prospect saisit coordonnées (nom, email, téléphone)
8. Dispatch automatique (dispatchLeadToArtisans) :
- Conversation artisan ↔ lead
- Message récap + pièces jointes
- Brouillon de devis pré-rempli
9. Suivi via token : /estimation/suivi
10. Conversion : prospect s'inscrit → claim_lead
Fichiers clés : src/app/estimation/, src/lib/leads/dispatch-lead.ts, src/lib/ai/qualify-lead.ts.
Fournisseur : Mistral AI (src/lib/ai/mistral.ts)
| Usage | Modèle | Endpoint / fichier |
|---|---|---|
| Chat général (assistant, leads, devis) | open-mistral-nemo (surchargeable MISTRAL_CHAT_MODEL) | /api/ai/assistant |
| Embeddings catalogue matériaux | mistral-embed (1024 dims) | src/lib/ai/embeddings.ts |
| Qualification lead | JSON structuré (Zod + Mistral) | /api/ai/qualify-lead |
| Brouillon devis depuis texte | Matching pgvector matériaux | /api/ai/generate-quote-from-chat |
POST /api/ai/assistant)assistant-fast-path.ts) pour réponses instantanées sans appel LLMassistant-data-query.ts)Table supplier_products avec embedding vector(1024). RPC match_supplier_products pour similarité cosinus lors de la génération de devis. Script seed : scripts/seed-supplier-embeddings.ts.
Soline est l'agent vocal qui répond aux appels des clients de l'artisan, 24h/24. L'agent est hébergé chez ElevenLabs ; il interroge l'application via des tools REST authentifiés.
Appel entrant (Twilio, numéro E.164 de l'artisan)
→ Agent vocal ElevenLabs
→ Tools REST Soline (Bearer VOICE_AI_TOOL_SECRET)
POST /api/voice/artisan/quota-status — quota avant acceptation
POST /api/voice/artisan/create-quote-draft — résumé + brouillon devis
POST /api/voice/artisan/availability — créneaux libres
POST /api/voice/artisan/appointment-info — info RDV existant
POST /api/voice/artisan/schedule — désactivé (RDV vocal en pause)
→ Artisan valide dans /app/appels
→ Webhook Twilio POST /api/webhooks/twilio/status
→ Journal voice_call_logs + décompte minutes
Table artisan_voice_numbers : association numéro E.164 ↔ artisan.
| Plan | Minutes incluses/mois |
|---|---|
| Base | 0 |
| Pro | 60 |
| Premium | 150 |
voice_call_logs — pas de compteur cumulatif à remettre à zéro (src/lib/voice/resolve-voice-quota.ts).profiles.voice_allow_overage : cochée = minutes supplémentaires refacturables ; décochée = refus des appels hors quota.Math.ceil(CallDuration / 60) minutes si statut completed.draft, sent, accepted, rejectedquote_services, quote_materialspublic_token → /devis/[token]GET /api/quotes/[quoteId]/pdfGET /api/quotes/[quoteId]/vat-attestationTypes : standard, deposit (acompte), progress (situation), final (solde), credit_note (avoir). Plusieurs factures peuvent être rattachées à un même devis accepté.
InvoiceService)Chargement document BDD
→ Classification client B2B vs B2C (SIREN + TVA)
→ B2B :
Génération Factur-X (XML CII EN16931 + PDF/A-3)
Soumission Plateforme Agréée (PA_PROVIDER)
Suivi statuts via webhooks PA
→ B2C :
PDF simple
Enqueue e_reporting_queue
Cron quotidien /api/cron/e-reporting → transmission PA
Fichiers : src/lib/billing/facturx/ (build-cii-invoice, generate-factur-x, validate-factur-x, render-invoice-pdf).
/compte/factures/[invoiceId]).subscription_status, essai 15 jours).POST /api/webhooks/stripe.Cron quotidien 0 7 * * * → /api/cron/invoice-reminders. Relance manuelle possible depuis l'UI facture.
Pipeline piloté par invoices.recovery_status :
none → formal_notice_sent → submitted_to_collection → in_progress → collected | failed
render-formal-notice-pdf.ts) : principal + pénalités + indemnité 40 € B2B.POST /api/webhooks/mysendingbox : suivi acheminement, preuves archivées dans bucket recovery-documents.Quota LRAR : 1 recommandé/mois civil inclus par plan, non cumulable. Compteur dérivé des formal_notices réellement affranchies (mysendingbox_letter_id). Au-delà : consentement acceptExtraCost: true dans l'UI avant surcoût.
POST /api/webhooks/rubypayeur (HMAC-SHA256) : encaissement, rétrocession partenaire (RUBYPAYEUR_COMMISSION_RATE, 20 % par défaut).UI : src/components/recovery/ (FormalNoticeCard, RecoveryCollectionModal). Actions : src/app/app/invoices/recovery-actions.ts.
Script public/embed.js injectable sur tout site :
window.Soline.open();
window.Soline.close();
window.Soline.toggle();
Configuration dans /app/reglages (snippet + prévisualisation).
src/lib/trades/taxonomy.ts : ~15 catégories, ~100 métiers. Utilisée pour filtrage, matching, thème vitrine.
RPC match_leads_to_artisans : 2-3 artisans dans un rayon configurable (~40 km), algorithme haversine via search_artisans_nearby.
lead-media privé, RLS stricte.Source : src/lib/billing/subscription-plans.ts
| Plan | Mensuel | Annuel | Soline (min/mois) | LRAR/mois |
|---|---|---|---|---|
| Base | 44,90 € | 449,90 € | 0 | 1 |
| Pro | 69,90 € | 699,90 € | 60 | 1 |
| Premium | 99,90 € | 999,90 € | 150 | 1 |
Le SaaS BTP (devis, factures, RDV, messagerie, vitrine, recouvrement) est identique sur les trois formules. Seule la secrétaire vocale Soline diffère.
TRIAL_DURATION_DAYS).Schéma complet : supabase/init.sql (idempotent, rejouable).
Migrations incrémentales dans supabase/migration/ :
| Fichier | Contenu |
|---|---|
01_voice_quota.sql | Quota vocal, voice_call_logs, RPC Twilio |
02_platform_admin.sql | platform_admins, statuts compte, suspension |
03_trial_subscription.sql | Essai 15j, IDs Stripe Billing |
04_work_library.sql | Catalogue ouvrages pré-chiffrés |
05_btp_invoicing.sql | TVA réduite, factures acompte/situation/solde/avoir |
06_retake_gaps.sql | Mentions légales, lien public devis, chantiers, BI, fournisseurs |
07_stripe_billing_events.sql | Journal événements Stripe Billing |
08_voice_call_intakes.sql | Intakes appels (résumé + brouillon à valider) |
09_e_invoicing_invoice.sql | Colonnes e-facturation sur invoices |
10_e_reporting_worker.sql | File e_reporting_queue |
11_recovery_and_legal_notices.sql | Recouvrement, formal_notices, debt_collection_cases, bucket recovery |
12_voice_quota_civil_month.sql | Quota vocal mois civil, voice_allow_overage |
profiles, services, appointments, quotes, quote_services, quote_materials, invoices, invoice_lines, conversations, messages, leads, lead_media, lead_matches, supplier_products, voice_call_logs, formal_notices, debt_collection_cases, e_reporting_queue, platform_admins.
pgcrypto — tokens, UUIDvector (pgvector) — recherche similarité catalogue matériaux| Bucket | Usage | Accès |
|---|---|---|
lead-media | Photos/vidéos leads | Privé, RLS |
recovery-documents | Mises en demeure, preuves La Poste | Privé, URLs signées serveur |
| Méthode | Route |
|---|---|
| POST | /api/ai/assistant |
| POST | /api/ai/qualify-lead |
| POST | /api/ai/generate-quote-from-chat |
| POST | /api/ai/suggest-reply |
| POST | /api/ai/suggest-quote-notes |
| POST | /api/ai/summarize-quote |
| POST | /api/estimation/chat |
| Méthode | Route |
|---|---|
| GET | /api/quotes/[quoteId]/pdf |
| GET | /api/quotes/[quoteId]/vat-attestation |
| GET | /api/invoices/[invoiceId]/pdf |
| GET | /api/invoices/[invoiceId]/factur-x |
| GET | /api/invoices/export-accounting |
VOICE_AI_TOOL_SECRET)| Méthode | Route |
|---|---|
| POST | /api/voice/artisan/create-quote-draft |
| POST | /api/voice/artisan/quota-status |
| POST | /api/voice/artisan/availability |
| POST | /api/voice/artisan/appointment-info |
| POST | /api/voice/artisan/schedule (désactivé) |
| Route | Auth | Rôle |
|---|---|---|
/api/webhooks/stripe | Signature Stripe | Abo SaaS, Connect, paiement factures |
/api/webhooks/twilio/status | Signature Twilio | Journal appels + minutes |
/api/webhooks/facturation-electronique | x-pa-signature | Callbacks Plateforme Agréée |
/api/webhooks/mysendingbox | Secret partagé | Suivi LRAR |
/api/webhooks/rubypayeur | HMAC-SHA256 | Cycle recouvrement |
vercel.json)| Schedule (UTC) | Route | Rôle |
|---|---|---|
0 7 * * * | /api/cron/invoice-reminders | Relances impayés |
0 3 * * * | /api/cron/e-reporting | Transmission e-reporting B2C |
Auth : Authorization: Bearer ${CRON_SECRET}.
Copier .env.example vers .env et renseigner les valeurs.
| Variable | Usage |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | URL projet Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Clé publique (client) |
SUPABASE_SERVICE_ROLE_KEY | Opérations admin / webhooks / crons |
NEXT_PUBLIC_SITE_URL | URL app (https://app.solinebtp.fr) |
NEXT_PUBLIC_MARKETING_URL | URL marketing (https://solinebtp.fr) |
CRON_SECRET | Protection routes /api/cron/* |
| Variable | Usage |
|---|---|
MISTRAL_API_KEY | API Mistral |
MISTRAL_CHAT_MODEL | Surcharge modèle chat (optionnel) |
MISTRAL_VISION_MODEL | Modèle vision (prévu) |
VOICE_AI_TOOL_SECRET | Auth tools vocaux ElevenLabs |
TWILIO_AUTH_TOKEN | Validation signature webhooks Twilio |
TWILIO_STATUS_CALLBACK_URL | Callback explicite (optionnel) |
| Variable | Usage |
|---|---|
PA_PROVIDER | noop, pennylane, http, docaposte, confactura |
PA_API_KEY, PA_API_URL, PA_WEBHOOK_SECRET | Plateforme Agréée B2B |
E_REPORTING_PROVIDER, E_REPORTING_API_URL, E_REPORTING_API_KEY | E-reporting B2C |
FACTURX_SKIP_* | Désactiver validations (dev) |
| Variable | Usage |
|---|---|
MYSENDINGBOX_API_KEY, MYSENDINGBOX_WEBHOOK_SECRET | LRAR papier |
RUBYPAYEUR_* | Dossiers contentieux + commission partenaire |
| Variable | Usage |
|---|---|
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | Paiements et abonnements |
STRIPE_PAYMENT_LINK_* | Liens Payment Link par plan (6 variables) |
| Variable | Usage |
|---|---|
RESEND_API_KEY, EMAIL_FROM | Envoi emails transactionnels |
.nvmrc)init.sql + migrations).env renseignénpm install
npm run dev # http://localhost:3000
npm run build # Build production
npm run test # Vitest
npm run lint # ESLint
Sans Supabase configuré, la landing et certaines pages de démo restent accessibles (le middleware dégrade gracieusement).
Exécuter dans l'ordre : supabase/init.sql (si base vierge), puis supabase/migration/01 à 12 dans le SQL Editor Supabase.
| Paramètre | Valeur |
|---|---|
| Framework | Next.js (auto-détecté) |
| Node.js | 24.x (engines + réglage projet) |
| Build | npm run build (défaut) |
| Crons | vercel.json (2 jobs, compatible Hobby) |
| BDD | Supabase (UE), indépendante de Vercel |
NEXT_PUBLIC_SITE_URL = https://app.solinebtp.frSoline, c'est le bureau digital complet de l'artisan du bâtiment — avec une secrétaire IA qui ne dort jamais.
Imaginez un plombier, un couvreur ou un électricien qui passe ses journées sur les chantiers. Le téléphone sonne, les devis traînent, les relances s'accumulent, et la facturation électronique — désormais obligatoire — paraît incompréhensible. Soline remplace cette pile d'outils dispersés (Excel, WhatsApp, agenda papier, logiciel comptable) par une seule application, accessible depuis le téléphone comme depuis un ordinateur.
Depuis app.solinebtp.fr, l'artisan gère l'intégralité de son activité :
/site/[slug]) et d'un widget à coller sur son site existant pour recevoir des demandes de devis directement.Le client accède à son espace /compte : il consulte ses devis, les accepte ou refuse en un clic, paie ses factures par carte bancaire (Stripe), prend rendez-vous et échange avec son artisan par message. Il peut aussi rechercher un artisan près de chez lui par métier.
Un particulier qui a un problème de toiture ou de plomberie n'a pas besoin de créer un compte pour commencer. Sur solinebtp.fr/estimation, il décrit son besoin en chat avec l'IA, indique où il habite, envoie des photos — et reçoit une fourchette de prix indicative. Soline qualifie la demande, géolocalise le prospect, et dispatch automatiquement son dossier vers 2 ou 3 artisans compatibles : conversation ouverte, photos transmises, brouillon de devis déjà pré-rempli. L'artisan n'a plus qu'à ajuster et envoyer.
Quand l'artisan est sur un échafaudage et ne peut pas décrocher, Soline répond à sa place. Branchée sur le numéro de l'artisan (Twilio), l'agent vocal (ElevenLabs) accueille l'appelant, comprend la demande, et peut proposer un brouillon de devis que l'artisan valide ensuite depuis son téléphone. Chaque plan inclut un quota de minutes ; au-delà, l'artisan choisit s'il accepte la facturation supplémentaire ou s'il préfère couper les appels.
Soline intègre nativement les exigences de la facturation électronique française : Factur-X, e-invoicing B2B, e-reporting B2C, relances automatiques des impayés. L'artisan n'a pas à choisir entre « outil métier » et « conformité légale » — les deux sont dans le même flux.
| Base | Pro | Premium | |
|---|---|---|---|
| Prix mensuel HT | 44,90 € | 69,90 € | 99,90 € |
| SaaS complet | ✓ | ✓ | ✓ |
| Recouvrement LRAR | 1/mois | 1/mois | 1/mois |
| Soline (min/mois) | — | 60 min | 150 min |
15 jours d'essai gratuit pour tester sans engagement.
En une phrase : Soline transforme l'artisan du BTP en entreprise digitalisée — il reçoit des leads qualifiés, répond par la voix ou le chat, convertit en devis signés, facture conformément à la loi, relance et recouvre les impayés, le tout depuis une application unique, avec une secrétaire IA disponible 24h/24.
Document mis à jour — septembre 2026. Dépôt : OrbitArtisan / Produit : Soline / AlphaSysAI.