Teaching Concierge Where to Look
An AI assistant only knows the context you give it. When I added Concierge to the GraceSoft website, the hardest question wasn’t how it should talk. It was where its information should come from.
Each product describes itself
GraceSoft’s product landing pages live in their own repositories and domains, separate from the main website. Copying product details into the main site by hand would mean they’d drift out of date the moment a product changed.
So each product publishes its own content feed: a structured summary of what it does, its features, and its legal notes. Concierge reads these feeds directly, so when a product’s page changes, Concierge’s answers change with it.
The feed comes from GraceSoft Footing, the internal Laravel boilerplate I start new products from. Footing 1.1.0 is out today, and it brings the content feed in line with a versioned contract (v1). Every product built on Footing speaks the same format, and the contract tells me exactly when a change would break things.
A fallback for everything else
Not every product is built on Footing yet, and some don’t have a live site at all. For those, Concierge needed a second source it could rely on.
That’s GraceSoft Storehouse, a small static content API. Alongside other content, it now holds a JSON “blueprint” for each product: its functions, features, and assets. The first blueprints added are for GraceSoft Concierge itself, and the API has moved to its own home at staticapi.gracesoft.dev.
How the two fit together
When a visitor asks about a product, Concierge’s backend:
- Checks whether that product has a content feed, and uses it if so.
- Falls back to the product’s blueprint in Storehouse if not.
- Shows the visitor where the answer came from and when that information was last updated.
Before writing any code, I wrote the fallback rules into spec documents in every repository involved: the website, the Concierge backend, Footing and Storehouse. That way all four agree on when a fallback should happen, and I could test each one against the same rules.
The takeaway
It’s tempting to give an AI a big block of text and hope for the best. But if you want answers people can trust, the AI needs clear, current sources, and a defined plan for when one of them isn’t available. That part is still on us, not the AI.