There's a specific type of frustration I kept running into as a freelance developer. Someone would land on my site, browse around for a few minutes, and then leave. No message, no inquiry, nothing. And I'd never know what they wanted or if they were even close to reaching out.
The ones who did reach out were great. But I started thinking about the ones who didn't. Some people genuinely don't like filling out contact forms. It feels formal, one-sided, a bit awkward. You're essentially writing a cold email to someone whose work you just discovered. A lot of potential clients just bounce instead of going through that friction.
So I started thinking about what the middle ground looks like. Something between "browse silently and leave" and "fill out a form and wait." That middle ground turned out to be a conversation.
The Idea
I wanted to build something that could talk to visitors the way I would if I were sitting right there with them. Answer their questions naturally. Tell them about what I do, how I work, what kinds of projects I take on. Not in a scripted, button-clicking chatbot way, but in an actual back and forth exchange.
And if at some point in that conversation the visitor started showing genuine interest in working together, the agent would smoothly ask for their contact details, put together a description of what they're looking for, and send it straight to me. No forms. No friction. Just a conversation that ends with a qualified lead in my inbox.
If you want to see what I mean before reading further, you can go talk to it yourself at iamtaqi.site it's live on the site right now.
The key thing I was careful about from the start: it should never push. If someone just has a general question, it answers it. If someone wants to know how I approach a certain type of project, it tells them. It only asks for contact info when the person themselves signals they want to move forward. That distinction mattered a lot to me.
How I Built It
The stack I used was LangChain and LangGraph on the backend, with a RAG pipeline powering the knowledge base.
The RAG layer is what makes the agent actually useful. RAG stands for Retrieval Augmented Generation, and the short version is this: instead of the AI making things up or relying on general training data, it retrieves real information from a specific knowledge base before forming a response. In this case, that knowledge base is everything about me and my work, my services, my process, the kinds of projects I've done, my tech stack, how I approach client relationships, turnaround times, all of it.
When a visitor asks something like "do you work with React?" or "have you built anything with AI before?", the agent doesn't guess. It goes and pulls the relevant context from the knowledge base and builds its answer from that. This means the responses are accurate, grounded, and actually reflect what I do rather than what a generic AI thinks I might do.
LangGraph is what handles the flow of the conversation. Think of it as the brain that decides what state the conversation is in and what should happen next. Is this person still in discovery mode? Are they asking something the knowledge base can answer? Have they expressed enough interest that it makes sense to ask for their details? LangGraph manages all of that through a graph of nodes and conditional edges, so the agent always knows where it is in the conversation and what the right next move is.
LangChain sits underneath all of this and handles the actual language model interactions, the prompt construction, and the memory that lets the agent remember what was said earlier in the conversation.
The flow roughly looks like this: visitor sends a message, the agent retrieves relevant context from the knowledge base using semantic search, constructs a response that feels natural and on-brand, and then based on the conversation state, decides whether to just answer, ask a follow up, or gently transition to collecting contact info if the visitor seems interested.
When it does collect contact info, it also generates a short project brief based on everything discussed in the conversation. So by the time I get the notification, I already have the person's name, contact details, and a summary of what they're looking for. I can reply with full context from the first message.
What It Changed
The most obvious thing is that I stopped losing warm leads. People who would have bounced after a minute of browsing now have a reason to stick around and engage. And because the conversation is low pressure and genuinely helpful, the quality of the people who do end up reaching out is better too. They've already talked through their project, they know what I do, and they've self-selected.
The other thing I didn't fully anticipate is how much it communicates about the kind of work I do. If someone comes to my site wondering if I'm serious about AI development, and then they immediately have a sophisticated AI conversation right there on the page, that answers the question pretty effectively.
It also handles the common questions I used to answer repeatedly over email. Stuff like tech stack questions, availability, what kinds of industries I've worked with. The agent takes care of all of that so by the time someone reaches me directly, we're past the intro stage.
What I'd Do Differently
If I were building this again I'd invest more time upfront in structuring the knowledge base really carefully. The quality of what the RAG system retrieves is directly tied to how well the source documents are written and organized. Early on I had some responses that were slightly off because the relevant information was buried in a long document and the retrieval wasn't surfacing it cleanly. Taking the time to write focused, well-structured knowledge documents made a significant difference.
I'd also build in more analytics from day one. Right now I can see conversations that converted into leads, but I'd like to have better visibility into the questions people are asking that the agent couldn't fully answer. That's actually really valuable product feedback if you look at it the right way.
Closing Thought
This project started from a pretty simple observation: people don't always want to fill out a form, but that doesn't mean they don't want to connect. Giving them a conversation instead of a form removed a friction point that I didn't even realize was costing me leads.
If you're a freelancer or running a small agency and you've ever wondered how many visitors left your site without reaching out, this is worth thinking about. The technology to build something like this is genuinely accessible now, and the ROI on not missing a single interested visitor adds up fast.
Happy to answer any questions about the build in the comments. And if you want to see it in action, just head over to iamtaqi.site and start a conversation.
Top comments (3)
Wow good use of langgraph . I did went to check your site and the ai agent as well, I have to say you did some awesome job there. Just a question ...
What did you use the memory type as ,was it long term as in postgresql or stm and exactly how do you decide what to store as the user preferences or you store all the user chat history ?
Or you used some other technique ?
Just curious
Thanks for sharing. Your agent said it’s powered by Qwen. Just curious how much this is costing you to run?
It's great! We also provide such AI agents to our customers in Mavibot. Thanks for sharing!😀