Marcus called us on a Tuesday afternoon. He had just lost two support agents in the same week, his inbox was a disaster, and he needed help. He said something we hear pretty often: can you build us something like ChatGPT, but for our support team? We said yes. We said we could have something working by Friday.
We probably should have said Thursday, because we ended up working through Thursday night anyway. But more on that later.
4pm
The call
Two hours of questions. Not about technology. About what Marcus's support agents actually did all day, what questions kept coming in, and what a good answer looked like versus a bad one.
All day
Stack decision and setup
Chose the tools, wired up the backend, loaded the knowledge base. Made the call to keep it lean rather than technically impressive.
Through the night
The hard part
Writing the system prompt. Fixing the context window overflow at 3am. Shipping the fix at 4:47am. Going to sleep.
3pm
Staging link sent
Typing indicator, escalation flow, brand colors, onboarding message. Marcus responded twelve minutes later. "How did you do this so fast?"
First, we had to figure out what "something" actually meant
Before we touched a single line of code, we spent two hours on a call just asking questions. Not about technology. About the real problem.
What were his support agents actually doing all day? What kinds of questions kept coming in? What was the answer they gave most often? What would a good chatbot response look like versus a bad one?
By the end of that call we had a clear picture. The chatbot needed to do three things: answer common order questions using his existing FAQ, escalate anything it could not handle to a human, and do both in a tone that sounded like his brand, not like a robot reading from a script.
That was the brief. One page. Three requirements. We were off.
Wednesday: The stack decision
We could have gone complicated. Vector databases, fine-tuned models, custom embeddings. We have the skills for all of it.
But Marcus needed this working by Friday, not by March.
What we actually used
- OpenAI API as the brain. GPT-4o with a well-crafted system prompt.
- Node.js backend handling context management and escalation logic.
- React frontend with a clean, on-brand chat interface.
- Flat FAQ document broken into chunks, fed directly into the context window.
- Netlify for deployment. Staging link live in under ten minutes.
We went with OpenAI's API as the brain, a simple Node.js backend, and a clean React frontend. For the knowledge base, we took his existing FAQ document, broke it into chunks, and fed it into the context window directly. No database. No embedding pipeline. Just a well-crafted system prompt and clean input handling.
Some engineers would call this approach overly simple. We call it appropriate for the timeline.
The goal was not to build the best AI system ever made. The goal was to build the best AI system we could ship in 72 hours. Those are two very different briefs, and treating them the same way is how projects balloon into six-month ordeals.
Thursday: The hard part
The technical build was actually the easy part of Thursday.
The hard part was the prompt. Writing a system prompt that makes an AI sound like a real support agent, stay on topic, refuse gracefully when it does not know something, and never make up an order status that does not exist turned out to take about six hours by itself.
We went through maybe fifteen versions. Early ones were too formal. A few were too casual. One version apologized so much it felt like the bot had already done something wrong before the user even asked a question.
The prompt is the product. Not the framework, not the model, not the UI. The system prompt determines the quality of the experience more than any other single piece of the build.
We landed on a voice that was direct, warm, and honest. If the bot did not know something, it said so clearly and offered to connect the user with a real person. No pretending. No hallucinating order numbers.
That honesty constraint turned out to be the most important design decision of the entire project.
The 3am commit
Around 3am Thursday night, we hit a problem that almost sank the whole thing.
The context window was overflowing. When users asked follow-up questions in the same conversation, the full chat history plus the FAQ context plus the system prompt was pushing us over the token limit. Responses started getting cut off. The bot started forgetting things from earlier in the conversation.
The fix was not glamorous. We wrote a simple function that compressed older messages in the conversation history, keeping only the most recent exchange and a short summary of what had been discussed before. It took about an hour to build and test. It worked.
We shipped the fix at 4:47am and went to sleep. No ceremony. Just a commit message that said "fix context overflow, please hold."
Friday: The polish
With the core working, Friday was about making it feel real rather than just functional.
We added a typing indicator so the bot felt responsive even when the API was taking a second. We added a simple escalation flow that let users request a human at any point without losing their conversation context. We cleaned up the interface, adjusted the colors to match Marcus's brand, and wrote a short onboarding message that set honest expectations from the start.
At 3pm on Friday, we sent Marcus the staging link.
He responded twelve minutes later: "This is exactly what I needed. How did you do this so fast?"
We did not tell him about the 3am.
What happened six weeks later
Six weeks after launch, the bot was handling about 64 percent of incoming support tickets without any human involvement.
Marcus hired one of the two support agents back. But that agent now spends most of their time on the cases that actually need a human: the complicated ones, the emotional ones, the ones where empathy matters more than speed. The bot handles the routine stuff.
That feels like the right outcome to us. Not replacing people. Giving them better work to do.
Three things we will take into every AI project from here
The prompt is the product
More than the model, more than the tech stack, more than the UI. We spent more time writing and testing the system prompt than on any other single part of the build. Treat it like copy, not configuration.
Constraints are a gift
Because we had 72 hours, we could not waste time on nice-to-haves. Every decision passed through one filter: does this need to exist by Friday? Most things did not. That focus made the product cleaner than more time ever would have.
Honesty is a design choice
We made a deliberate decision to build a bot that admitted its limits rather than guessing. Marcus's users trusted the bot more because it was willing to say it did not know. Designing for honesty built more confidence than designing for completeness ever could.
Ship small, learn fast
The version we shipped on Friday was not the final version of anything. It was the first version of something real. Every week after that, we made it better based on actual user behavior. That is worth more than another month of planning.
If you are sitting on an AI idea that feels too big or too complicated to start, reach out. Sometimes the right version of a thing is smaller than you think, and it ships on Friday.