Logging every cleaning action is the part I like most: when a number in the report looks strange, you can follow it back to the fix that changed it. With 585 issues, how did you decide which ones the script fixes alone and which ones it only reports?
An AI customer support chatbot for a fictional Nigerian food delivery business, Lagos Fresh Kitchen. It runs on n8n Cloud and uses Claude Haiku 5.5 as the AI model. The workflow is three nodes: a chat trigger receives the customer’s message, an AI Agent processes it, and the Anthropic Chat Model writes the answer.
How it behaves
The AI Agent has a system message that sets the rules. It must answer only from the business information, never invent prices, areas, hours or policies, and use a fixed fallback line when the answer isn’t there: “I don’t have enough information to answer that accurately. Please contact our support team.”
The business information it knows
Open Monday to Saturday, 9 AM to 8 PM, closed Sundays
Delivers to Lagos Mainland (Ikeja, Yaba, Surulere, Maryland, Ojota, Gbagada) and Island areas (Victoria Island, Ikoyi, Lekki), not outside Lagos
Delivery takes 30 to 60 minutes, with fees from ₦1,000
Menu of jollof rice, fried rice, rice and stew, pounded yam with egusi, grilled chicken, suya and soft drinks
Payments by card, transfer and cash on delivery
Cancellation allowed before cooking starts
No Sunday orders or Sunday delivery, and no event catering
Refunds, complaints and order status go to support
Project update: a safer way to move cards to "Paid" in a CRM
For a financial advisory firm, I built a feature in GoHighLevel that makes paying referral partners faster and harder to get wrong.
What it does: when a card is dragged to Paid, the system finds every other card due for the same partner and shows a checklist. The assistant ticks the cards to pay together and confirms once. With a single card, it asks a simple confirmation instead.
How I made it reliable: a small backend on Vercel re-checks every card before moving it (same partner, still due, only into Paid). A failed card is named in a message while the others still move. If the list can't be loaded, the plain question is asked, so nothing moves silently.
What I did: designed the flow, wrote the browser script and the backend, and tested the cases that go wrong, not only the happy path.