Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证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).