AI experiments: Help center support articles

AI experiments: Help center support articles

Product Updates April 9, 2026

I’ve been experimenting a lot with AI. Firstly, for the personal use-cases, like helping write emails, or long documents, or helping research some ideas. But more importantly I’ve been increasingly trying AI out for the more business-critical stuff at Vacation Labs. Stuff involving multi-step workflows that involve hand-written AI agents, long prompts, or integrations with custom data sources.

This post is an account of a (partial) success story of AI being used on a weekly basis in a business-oriented workflow (as opposed to a personal use-case) at Vacation Labs.

Problem: Support articles at Vacation Labs

Before I describe the AI-powered solution, let me describe the problem first.

Support articles for Vacation Labs were powered by Zoho Desk for about 7-8 years[1] (2017-2025, or thereabouts). Initially we were happy that the same system allowed us to co-locate support tickets with support articles. We started writing support articles with the expectation that we would be able to use them to answer basic/repetitive queries. And in the process build a repertoire of keyword-rich and highly relevant content pages, helping us in SEO.

Before: Zoho Desk help center homepage
Before: Zoho Desk help center
Before: Zoho Desk article page
Before: article on Zoho Desk

Good in theory, but here’s what happened in practice (and here’s where the problem lied):

  1. In the pre-AI days, Zoho Desk’s in-built support bot was pretty bad. It was unable to reply to tickets intelligently based on available support articles.
  2. Google just refused to index large parts of our support articles because Zoho Desk used a lot of unnecessary JavaScript to render simple article content. That, along with having content-rich pages on a subdomain instead of the main domain was giving little to no SEO benefit.
  3. Writing support articles was a low-priority task and always lagged behind actual platform features (not a Zoho Desk problem, but a reason for coming up with a workflow that was AI-first)

When I started experimenting with a custom support bot to solve #1 from above, I ran into another problem. Zoho Desk’s article editor did not enforce any structure and most articles were just badly structured HTML blobs. Over the years each team member had done something different: copy-pasted MS Word Docs into it (tonnes of random style tags), formatted bullet lists as headings, added multiple H1 tags, and so on. Cleaning this up into something that could be fed into a RAG[2] was what drove me to take a step back and solve the problem more holistically…

Solution v1: Using AI to write the “Zoho Desk → Self-hosted” converter

The very first step was to move the existing Zoho Desk articles from the subdomain (help.vacationlabs.com[3]) to our main domain, i.e. www.vacationlabs.com/help.

I must admit I vibe-coded large parts of this code/tool. I got Claude Code to write a nodejs tool that would…

  1. Fetch existing articles (the badly structured HTML blobs)
  2. Convert them to markdown using a lot of heuristics (because the HTML => Markdown conversion was not clean)
  3. Build a Static Site Generator (SSG) with Astro using these cleaned Markdown files as the source content
  4. Use PageFind to build a JS-only / client-side search engine for the support articles
  5. Auto-deploy the static site to our main domain
Cartoon: developer frozen mid-sip, staring at laptop in alarm

But, a big callout. This vibe-coding was NOT a one-shot pipedream, where I was just sipping coffee and watching Claude Code do all the work. No. I had to be involved and alert throughout the process.

More on this in the “Takeaways/learnings” section below.

Solution v2: Using AI to write the support articles… almost!

This v1 solution solved the SEO problem and gave us a good tech/tooling base to build on top of. However, it didn’t solve the problem of stale support articles themselves (we’ve had instances where a support article was written 17 months after a feature was launched!)

This is where things got interesting.

Based on my past experiments with using a CustomGPT to write short blog posts about new feature releases, I already knew that the AI had to be given actual business / real-life context to be able to come back with something meaningful. A short paragraph about the new feature, and a list of test cases, was enough to get a CustomGPT to churn-out a meaningful blog post, which was tweaked by a human, and finally posted on our blog.[4]

I ran with it and focused more on the workflow[5] and coming up with solutions like article “overlays” and “shadowed” articles:

We came up with the concept of overlays, where the overall “legacy” article is retained so that it can still be edited directly in Zoho Desk, but we have the ability to add a “Callout” / “Notice” to the top (or bottom) of the article talking about a new tweak / minor feature. On the other hand a “shadowed” article was one where the Zoho Desk article’s markdown file was “shadowed” by a new file with completely new content, but published at the same URL as the Zoho Desk article.

Basically, tweaking the workflow plumbing while quickly skimming through the AI-generated articles because they look plausibly correct.

Towards the end of my plumbing iteration cycles, I finally tried following the steps given in one of the support articles end-to-end.

And then it hit me — the AI was confidently hallucinating.

Cartoon: android robot confidently pointing toward a cliff edge

a) It was literally inventing features that didn’t exist, just because they sounded plausible, e.g. it saw “published date” as a field in our blog description and dreamed up a whole flow where this field was used to schedule posts for future (not the case; it’s simply used to control the order of the post on listing pages)

b) It was coming up with plausible sounding navigation paths which didn’t actually exist in our UI, e.g. Accounts > Settings > Billing details > Saved cards (none of this exists in our UI!)

c) For a “payment resync” feature (which is about re-syncing a payment against a payment gateway when a PG callback fails), it confidently wrote a step-by-step guide on how to sync offline payments — payments entered directly by the operator with no payment gateway involved. Offline payments have no PG to sync against. The workflow it described is literally not possible.

Solution v3: Using AI to write the correct support articles

And then a whole new cycle of “grounding” the AI output in verifiable truth started. Multiple additional “enrichment” passes were added to the AI input before it generated any support article:

a) Summary of the actual code that was implemented – taken from the source-code branch in which the feature was actually developed
b) Complete list of manual test cases that were executed – taken directly from Zoho Projects
c) Screenshots of the feature[7]

Cartoon: person holding recipe card 'The Secret Sauce' while android robot cooks up a Support Article

With a combination of all three, we ensured (to a large extent) that: the AI was not hallucinating navigation paths, button labels, field labels, section headings, etc because it could actually “see” the feature in action — just like a human would; the AI was accurately aware of all the edge-cases being handled by the system because it had read the manual test cases that were executed during QA; and overall grounding context was provided by the actual source-code branch.

End results

194 support articles migrated to the main domain. The Lighthouse (PageSpeed) scores for these pages have gone up from 60 → 95+. We have much better article search functionality. We currently have ~20 articles with AI-generated overlays and ~10 that have been fully written by this AI workflow (including taking automated screenshots).

After: New Astro SSG help center homepage
After: Self-hosted help center
After: article on new help center
After: same article on the new help center

Just an aside — the above before/after screenshots were taken by the same AI workflow described in this post.

Takeaways/learnings from this mid-scale AI experiment

Getting AI to write code in a language (NodeJS) and framework (Astro) that I was not intimately aware of, was a real productivity boost. I vibe-coded two large parts of this workflow: (a) the “Zoho Desk => Self-hosted” converter, and (b) the microsite generator for the support articles. Having said that, Claude Code made a whole bunch of very questionable choices[8] during the whole vibe-coding process. I was able to catch and correct them, mostly due to years of experience resulting in deeply ingrained software engineering principles (which are language/framework agnostic). Every time I use AI, I find myself wondering how someone who is not a domain expert would react to these errors.

Getting AI to not hallucinate is harder than it seems. AI output looks plausibly correct and if you’re not paying attention it is very easy to get fooled. For this reason, we still don’t have a fully autonomous workflow. Our workflow/prompt explicitly forces the AI to stop and check critical things with the user. Having said that, the new AI-assisted workflow allows us to quickly complete a recurring task that was earlier always relegated to “low priority” and didn’t get done for weeks, or months. What used to take 2-3 days (or simply never got done) now takes 1-2 hours, even if a human still needs to be involved.

Take a look at a few articles written end-to-end using the latest AI workflow:

Or just browse the Vacation Labs Help Center →


Footnotes

  1. Vacation Labs originally had support articles on WordPress on the main domain (2012-13), moved to Zoho Desk around 2016 when we adopted Zoho for support ticketing, and are now back on the main domain via Astro SSG.
  2. Retrieval-Augmented Generation. The idea is to search an existing knowledge base (support articles, past tickets, invoices — whatever is relevant) to find documents that match the task at hand, then ask the AI a question while passing those documents along as context. The theory is that the AI gives much better, grounded answers when it has the relevant material in front of it, rather than relying solely on its training data.
  3. If you visit it now, it will redirect you to www.vacationlabs.com/help
  4. This particular CustomGPT experiment brought down a 1-2 day cycle to 1 hour, tops.
  5. when support articles get published during the software development & deploy cycle; how do they get deployed to our main website domain; what happens if an existing article (already written in Zoho Desk) needs to be tweaked slightly; how do you write a completely new article outside of Zoho Desk
  6. This was wired-up using playwright-cli and was a very interesting “side-quest” of writing tooling on top of playwright-cli to make it token-efficient for AI usage for our particular use-case.
  7. A few examples: used CSS Grid (1fr) for the article layout which doesn’t constrain content width — long code blocks overflowed the viewport until I switched to Flexbox. Got Pagefind’s config API wrong (basePath vs baseUrl), causing search 404s across the entire help center. Used the Turndown HTML→Markdown library without accounting for MDX-specific escaping, silently breaking 13 articles. All plausible choices that work in the general case but broke on this specific setup.

Set-up dynamic pricing for your tours right away

Sign up today and get a free 14-day trial!