[verdetto][prompt curato][fonte: animam.ai]
Posso vibecodare Animam.ai?
// si costruisce in un weekend, ma restano buchi veri
La chat è un weekend; tutto quello che la rende sicura davanti ai clienti, no. A resistere è la metà noiosa: un importo calcolato dal server e mai dal modello, l'email verificata prima che inneschi qualcosa, webhook firmati con i retry e un dominio di invio con una reputazione che non costruisci in un pomeriggio.
confidenza: alta
cos’è: Un agente che risponde con i contenuti del tuo sito, raccoglie lead, fa preventivi e prende appuntamenti · lato server.
Indice di costruibilità · gioco editoriale
- Prezzo 32 $/mese peso: più 3
- Tempo un weekend peso: più 2
- Categoria app no-code non pesa
- Moat scala dell'infrastruttura · qualità di esecuzione peso: meno 3
- Confidenza alta peso: più 1
- Cosa perdi 7 voci peso: meno 3
- Sito animam.ai (si apre in una nuova scheda) non pesa
Si pareggiano. È il caso in cui decide quanto ti sta antipatico l’abbonamento.
Gioco editoriale: il verdetto dice se un agente può, l’indice se conviene.
Cosa costruisci
Fare il crawl della sitemap, togliere il contorno, salvare il testo, recuperare per keyword i 5 passaggi migliori, streammare una risposta ancorata a quel contesto e rifiutarsi di rispondere fuori da lì.
cosa ti serve
- Una API key di un LLM (Anthropic, OpenAI o un modello locale)
- Un posto dove far girare un piccolo server Node (basta un VPS da 5 €)
- SQLite, o qualunque database già in casa
- Un dominio da cui servire il widget
Segnalato da chi lo vende. Il verdetto onesto è «quasi», non «non proprio»: sostenere che il nostro layer di chat non si possa rifare in un weekend sarebbe una bugia, e questo pubblico se ne accorgerebbe. Il prompt qui sotto è quello vero · non è stato indebolito per proteggere l'abbonamento. Quello che lascia fuori di proposito sta nella lista di cosa ci si perde, e quella lista è il prodotto.
Il prompt
Un weekend con un agente di coding. I buchi che restano sono qui sotto, in «cosa perdi».
Build a website chat widget that answers strictly from a site's own content. Node 20 + TypeScript, no framework.
1. Install hono, @anthropic-ai/sdk, cheerio, turndown, better-sqlite3.
2. scripts/ingest.ts takes a sitemap.xml URL as argv and fetches every page, concurrency 4, skipping non-HTML.
3. Strip nav, header, footer and script tags with cheerio, then convert what is left to markdown with turndown.
4. Upsert into SQLite pages(url PRIMARY KEY, title, body, fetched_at) so re-running updates rows instead of duplicating them.
5. src/search.ts takes the 3 to 6 most distinctive words of the question and runs SELECT url, title, substr(body,1,1200) FROM pages WHERE body LIKE ? for each.
6. Rank by number of hits and return the top 5. No embeddings: under ~500 pages LIKE is cheaper, instant, and you can read why a passage was picked.
7. src/server.ts is a Hono app with POST /chat {message, sessionId}.
8. Put the 5 passages and their URLs in the system prompt, call claude-haiku with stream:true, and pipe SSE to the client.
9. System prompt: "Answer only from the CONTEXT below, and cite the page you used."
10. Continue it: "If the answer is not in the context, say you do not know and offer to take a message."
11. And the line that matters: "Never state a price, a date or an availability that is not written in the context."
12. public/widget.js is an IIFE that injects a bubble into a shadow DOM and keeps sessionId in localStorage.
13. It consumes the SSE and writes every message with textContent, never innerHTML · the text comes from a model that read the internet.
14. Store sessions and messages in the same SQLite file, so you can read back what people actually asked.
15. ANTHROPIC_API_KEY lives in .env, server-side only, and never reaches the bundle.
16. No telemetry, no third-party script in the widget.
17. Serve /widget.js with CORS * and a 5 minute cache so a single <script> tag installs it on any page.
Out of scope on purpose, and each of these is a week rather than a line: booking on a real calendar, payments,
quotes with amounts computed server-side, human handover, transactional email that reaches the inbox,
multi-tenancy, GDPR consent, rate limiting and abuse protection. Prompt curato: scritto e rivisto a mano per questa app. In inglese di proposito — è la lingua in cui gli agenti di coding rendono meglio.
Cosa perdi
- Importi calcolati lato server a partire da un listino · il modello sceglie lo SKU, il numero non lo produce mai lui
- L'identità del visitatore verificata con un codice usa e getta prima che parta qualunque azione server-to-server
- Webhook in uscita firmati, con backoff esponenziale, log delle consegne e rispedizione manuale
- Protezione SSRF con risoluzione DNS su ogni URL che l'agente può chiamare
- Secret cifrati a riposo per ciascun tenant, e un isolamento tra tenant a cui non hai dovuto pensare
- La deliverability delle email · un dominio di invio scaldato non lo fai esistere con un prompt
- La sera in cui il fornitore del modello cambia un default e il tuo widget comincia a inventare
Perché pagano ancora
Perché la demo è la metà facile. Una chat che risponde è un weekend; una chat che puoi lasciare davanti ai clienti per un anno è un lavoro di operations · qualcuno tiene d'occhio la deliverability, ri-crawla il sito, impedisce al modello di inventarsi un prezzo ed è lì il giorno in cui si rompe. La gente paga la seconda metà, e fa bene.
moat: Scala dell'infrastruttura Qualità di esecuzione cos’è un moat
operations/compliance/deliverability
Chi l’ha già costruito
Partire da qui è vibecoding lo stesso: il prompt serve quando lo vuoi esattamente a modo tuo.
- Chatwoot (si apre in una nuova scheda) — Self-hosted support inbox with a website widget (open-source)
- Typebot (si apre in una nuova scheda) — Open-source conversational forms and chat flows (open-source)
- Onyx (ex-Danswer) (si apre in una nuova scheda) — Open-source RAG chat over your own documents (open-source)
Sei d’accordo?
La bilancia dei voti
Ancora nessun voto: il tuo è il primo.
Nessun voto ancora — il primo pesa.