Synaplan
기업을 위한 오픈소스 AI 플랫폼
음성·문서로 작업 내용을 입력하면 견적 초안과 정확한 부가세, 가격표를 반환합니다 모든 직종(주택·자동차·행사·기업·개인) 지원합니다
Racconti il lavoro a voce o per iscritto: ti torna la bozza con i prezzi del tuo listino e l'IVA giusta. Per ogni mestiere: casa, auto, eventi, aziende e persone.
비즈니스TypeScript · HTMLGitHub @sofianekhatib30-ui온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Dal sopralluogo a voce alla bozza di preventivo: Claude estrae le lavorazioni, il codice le abbina al listino.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Progetto dimostrativo. L'impresa edile del listino e i clienti dei sopralluoghi sono inventati. I numeri invece sono veri: li misura un comando su un banco di prova di 30 casi scritto prima del motore. Demo online: preventivolampo.vercel.app — la home racconta il prodotto, /progetto è il caso di studio, /prova fa girare il motore vero. Gli esempi partono subito; per un testo tuo serve un codice d'accesso, perché ogni bozza è una chiamata a pagamento all'API di Claude: chiedimelo.README 전문 보기 ↗
Progetto dimostrativo. L'impresa edile del listino e i clienti dei sopralluoghi sono inventati. I numeri invece sono veri: li misura un comando su un banco di prova di 30 casi scritto prima del motore.
Demo online: preventivolampo.vercel.app — la home racconta il prodotto, /progetto è il caso di studio, /prova fa girare il motore vero. Gli esempi partono subito; per un testo tuo serve un codice d'accesso, perché ogni bozza è una chiamata a pagamento all'API di Claude: chiedimelo.
L'artigiano edile, dopo il sopralluogo, racconta il lavoro come lo direbbe a un collega. PreventivoLampo estrae le lavorazioni, le abbina al suo listino, gli prepara una bozza da controllare dal telefono e, dopo la sua approvazione, genera il PDF del preventivo con l'IVA edile e un link con cui il cliente lo accetta.
L'AI propone, l'artigiano decide.
Da misure/2026-10-08.md. Generato da npm run misura (non scritto a mano). Modello: claude-sonnet-5-5. Casi: 30 eseguiti su 30.
| Misura | Valore |
|---|---|
| Righe giuste senza correzioni (voce, quantità e unità) | 158 su 159 (99,4%) |
| Voci di listino abbinate correttamente | 136 su 137 (99,3%) |
| Voci «da prezzare» riconosciute come tali | 22 su 22 (100,0%) |
| Abbinamenti sbagliati con prezzo di listino (l'errore pericoloso) | 0 |
| Prezzi inventati | 0 |
| Domande di chiarimento corrette | 12 su 12 (100,0%); domande in più: 0 |
| Regime IVA corretto (casi con contesto completo) | 15 su 15 |
| Regime IVA dato senza che il vocale bastasse a stabilirlo | 0 su 15 |
| IVA corretta al centesimo (casi calcolabili senza l'artigiano) | 9 su 10 |
| Righe in più rispetto all'atteso | 0 |
| Tempo medio per preventivo | 12,96 s |
| Costo medio per preventivo | $0.0354 ≈ 0,03 € (token reali; $2/$10 per milione di token, cambio 0.86 €/$) |
Dopo la prima misura ho letto gli errori e cambiato tre regole generali: righe separate per le cose che si pagano a parte, una riga anche per quello che è fuori listino, una voce di listino = una riga (in codice, mergeSameItem). Rimisurare sugli stessi 30 casi dà un numero ottimistico, perché le regole nascono proprio da quei casi: per questo ho scritto 6 casi nuovi con i loro attesi (testset/verifica/) prima di farci girare il motore.
Secondo giro (8 ottobre): ho letto le 16 righe ancora sbagliate e corretto quattro famiglie di errori con regole generali, non caso per caso. I conti delle quantità ora li fa il codice (il modello scrive l'espressione, lib/motore/calcolo.ts); quando una voce si misura a modo suo («al m² di porta», «per ogni lastra») la quantità si ricalcola con le misure dette; togliere e rimettere sono due righe, «anzi» cancella solo quello che contraddice, un accessorio («col telaio») non raddoppia il pezzo; un'unità non detta si chiede invece di indovinarla. Per arrivarci ho fatto tre giri di prova sui 30 casi (151, 157 e 155 righe giuste su 159) prima della misura qui sotto. Attenzione: i 2 errori dei 6 casi di verifica li avevo letti dopo il primo giro, quindi anche quel gruppo ora non è più del tutto cieco; per un numero davvero pulito servono casi nuovi.
| Misura | Prima (2026-10-05.md) | Dopo (2026-10-08.md) | Verifica, 6 casi nuovi (2026-10-08-verifica.md) |
|---|---|---|---|
| Righe giuste senza correzioni (voce, quantità e unità) | 138 su 159 (86,8%) | 158 su 159 (99,4%) | 26 su 26 (100,0%) |
| Voci di listino abbinate correttamente | 124 su 137 (90,5%) | 136 su 137 (99,3%) | 25 su 25 (100,0%) |
| Voci «da prezzare» riconosciute come tali | 19 su 22 (86,4%) | 22 su 22 (100,0%) | 1 su 1 (100,0%) |
| Abbinamenti sbagliati con prezzo di listino (l'errore pericoloso) | 7 | 0 | 0 |
| Prezzi inventati | 0 | 0 | 0 |
| IVA corretta al centesimo (casi calcolabili senza l'artigiano) | 6 su 10 | 9 su 10 | 3 su 3 |
| Righe in più rispetto all'atteso | 7 | 0 | 0 |
Come leggerli: gli attesi dei 30 casi (testset/atteso/) sono stati scritti leggendo solo il copione e il listino, prima che il motore esistesse, e non si correggono guardando le uscite. Il report completo, caso per caso, e le uscite grezze del motore sono in misure/.
vocale / testo ──► 1. Estrazione (Claude, JSON a schema fisso)
cliente, lavorazioni, quantità calcolate dalle misure dette, esclusioni, contesto IVA
──► 2. Candidati (codice deterministico)
sinonimi di cantiere, parole della voce, unità di misura → max 8 voci per riga
──► 3. Scelta (Claude, solo fra i candidati, con confidenza)
──► 4. Regole (codice)
sotto soglia o fuori dai candidati → «da prezzare»
materiale fornito dal cliente su voce «fornitura e posa» → «solo posa», da prezzare
quantità mancante o unità diversa dal listino → domanda
regime IVA dalle tre risposte (abitazione, tipo di intervento, chi compra i beni)
──► 5. Revisione dal telefono → Approva → PDF → link di accettazione per il cliente
Ardesia #343645 come base, lime #B2F601 solo per l'azione principale, azzurro #62C0F6 per l'informazione, ambra per le voci da sistemare. Le schermate di lavoro sono chiare e ad alto contrasto (si usano in cantiere, sotto il sole); i contrasti sono verificati da un test (test/contrasto-token.test.ts). Il marchio è un foglio con l'orecchia e un fulmine: si anima all'apertura della pagina e nella favicon.
Dalla ricerca sui concorrenti (Jobber, Tradify, Joist, app «vocale → preventivo») sono entrati: stato esplicito di ogni riga con la frase detta accanto, un solo pulsante che porta al prossimo dato mancante, conferma prima dell'approvazione, invio su WhatsApp, linea del tempo approvato → visto → accettato, pagina del cliente col nome dell'impresa in alto e totale in evidenza. Gli esempi della pagina di prova usano l'uscita registrata del motore: sono immediati e non chiamano l'API.
Next.js 16 (App Router) e TypeScript, Claude API (claude-sonnet-5-5, uscite strutturate), zod per gli schemi, pdf-lib per il PDF, Vitest. Listino di prova dal Prezzario Regionale dei Lavori Pubblici della Lombardia 2026, con la fonte per ogni voce (dati/listino.json). I preventivi sono file JSON in locale e oggetti privati su Vercel Blob nella demo online (raggiungibili solo dal server, per id o token casuale); per un servizio reale il disegno prevede Supabase (UE) con RLS.
npm install
# crea .env.local con ANTHROPIC_API_KEY=... (mai nel repository)
npm run dev # http://localhost:3000/prova
npm test # test senza rete: Claude è sostituito da un finto
npm run misura # i 30 casi del banco contro la API vera → misure/AAAA-MM-GG.md
npm run readme # copia qui sopra la tabella dell'ultima misura
Variabili d'ambiente: vedi .env.example. Online servono ANTHROPIC_API_KEY, PROVA_ATTIVA=1, PROVA_CODICE e un Blob store collegato al progetto.
Su /prova si incolla il testo di un vocale (o si sceglie uno dei 30 sopralluoghi inventati), si corregge la bozza, si approva e si apre il PDF e la pagina del cliente.
pl_*, RLS chiusa, accesso solo dal server con filtro per impresa): schema in supabase/migrations/.n8n/. La trascrizione degli audio (F4) è predisposta nel flusso: il servizio si sceglie misurandolo sugli stessi 30 casi./api/pulizia) cancella tutto quello che non è stato toccato da 7 giorni; Claude API elabora il testo negli USA con clausole contrattuali UE. Per un servizio reale vanno decisi regione dei dati, conservazione degli audio (30 giorni) e informativa.Costruito con Claude Code e una squadra di agenti (orchestratore, sviluppo, collaudo, legale, ricerca) con revisioni da remoto; architettura, regole e verifiche restano mie. Prima il banco di prova con gli attesi, poi il motore, poi la misura: nessun numero in questa pagina è scritto a mano. Le note di lavoro interne restano in un repository privato; qui ci sono il codice, il banco, le misure e la specifica della home (documentazione/index/SPEC.md).