Before
A chatbot workflow
- Answers generated inside n8n
- Short conversation memory
- Contact detected in the last message
- AI summary sent by email
- Limited visibility after handoff
Geoekoproekt case study
A useful consultation, a clear project brief, and a reliable lead handoff in one conversation.
The starting point
The n8n version answered questions from company documents and emailed a summary when it noticed contact details. That was enough for a prototype.
An engineering enquiry is rarely one question. A specialist needs to know what is being built, where it is located, which survey may be required, and what information is still missing. The application must also retain the enquiry when email delivery fails and keep it visible after the conversation ends.
The useful part of the conversation should happen before the bot asks for a phone number.
We stopped extending the workflow. Instead, we designed the consultation, lead capture, delivery, and reporting as one product.
The assistant handles the first consultation without turning it into a long form.
The visitor describes a house, site, survey, or concern in their own words.
The assistant identifies the likely service and asks only for the next missing detail.
Location, building type, dimensions, project stage, and open questions become structured data.
After validating a phone number or email, the application creates the lead and sends the full context to the team.
A chatbot workflow
A digital consultation product
Every conversation with at least one visitor message is available in a private dashboard. The team can review the transcript, project details, requested service, contact status, and delivery result.
The screenshot uses local test conversations. The figures are not production performance metrics.
Company pages answer questions about services and contacts. Approved technical documents support engineering questions. Old prices, internal calculations, and uncertain material stay out of public answers.
When the website changes, the sync service receives a signed update and reads the public page again. The chat does not rely on an old copy of the site.
If email delivery fails, the enquiry remains in the application and the delivery worker can try again.
Repeated submissions return the existing lead instead of creating another notification.
An unfinished number or a cadastral reference cannot be mistaken for a phone number.
The application keeps the lead locally and can retry delivery after a temporary provider error.
n8n was useful for proving that people would use the assistant. The next version needed reliable state, clear ownership of data, automated tests, security controls, and a user interface designed around the consultation.
A dedicated application made each of those parts easier to understand and control. It also removed the core product's dependency on a visual workflow.
Geo Chat runs as a Dockerized Node.js 22 and Express application. SQLite in WAL mode stores sessions, messages, project profiles, leads, delivery jobs, and product events. SQLite FTS5 provides local full-text search across website content and approved documents.
Session access uses signed HMAC tokens. Public endpoints have origin checks, rate limits, payload limits, and prompt-injection guardrails. A signed Drupal webhook and a daily sitemap pass keep website knowledge current.
The widget is plain JavaScript and CSS, so the main website only needs one script tag. The AI service, keys, storage, and delivery workers stay on a separate server.
Is your automation becoming a customer-facing product?