Problem
A very large number of tickets reached the human support team, and many of them were the same questions over and over. The support team was overloaded with cases that could be handled automatically.
My role
I was part of the team that designed and built the chat. I was responsible for the whole frontend and the chat’s integration with n8n in React, for the solution’s architecture on both the frontend and the backend, and for improving the knowledge base the chat draws on.
What I built
- A chat interface in React integrated with n8n workflows, available in every Landingi app.
- Frontend and backend architecture: saving conversation history and letting users start a new chat without the context of the previous one.
- A knowledge base for the chat built from documentation, the help centre, articles and ticket history, developed so that answers keep getting more accurate.
- Handing the conversation over to a person when the user asks for it or when the chat recognises that they are frustrated.
Challenges
01 · Answers based on knowledge, not guesswork
Answer quality depended above all on the knowledge base. Where the chat got things wrong or answered too vaguely, we cleaned up and filled in its content.
02 · Conversation context
History has to be kept, but old context must not spoil the answer to a new problem. Hence history saved on the backend and a separate option to start a clean conversation.
03 · When to hand over to a person
The chat must not hold back someone who needs a human. The conversation goes to support when the user asks for it or when their messages show frustration.
Outcomes
- Fewer tickets reaching the human support team.
- Faster answers to recurring questions.
- Support available 24 hours a day, including outside the team’s working hours.
- The chat is available in every Landingi app and used by many users.


