Case study · Syndio
Expertise on Demand
Expertise on Demand is Syndio's AI assistant for its pay-equity and pay-reporting products. This case study is about how to render LLM UI experiences, their patterns / architecture, and how to embed this technology into our compliance products.
- Role
- Frontend Engineer · UX
- Timeframe
- 2025 — Present
- Team
- AI Engineering, Product, Frontend
- Stack
- React, TypeScript, Vertex AI, RAG
The problem
Syndio's special sauce has always been the expertise underneath the product. With Expertise on Demand we set out to create a RAG (Retrieval-Augmented Generation) LLM chatbot with this special sauce. Our key priority was:
- Decrease CSM (Customer Success Manager) interactions. A part of Syndio's value proposition is having a human with expertise to talk to. Expertise on Demand is a chatbot placed ahead of speaking to a CSM to answer commonly asked questions.
The value proposition was trivial. Putting that expertise behind a chat input, available the moment a question arises, and rendering it intelligently was not. Furthermore, compounding the difficulty was that LLM technology and how to render it was still very much nascent at the start of this project. What followed was a half year of tight back-and-forth between Syndio's LLM engineering team and the frontend team.
RAG, in short
A search step in front of the LLM. The model only answers from documents pulled from a library you control, not from what it learned in training.
Expertise on Demand draws from Syndio's expert-curated docs: support center articles, regulatory references, methodology notes. Every answer is grounded in those docs, and every answer ships with citations back to them. The LLM never generates numbers. Anything quantitative is computed by PayEQ or GPR upstream and handed in as structured context.
The streaming contract
Markdown expects a finished document. The LLM streams a half-written one.
The contract had two sides:
- LLM side: Chunk at semantic boundaries. Don't break a code fence across chunks. Don't split a table mid-row. Don't end inside a link. Never block the stream on a syntax tree that hasn't closed.
- Frontend side: Treat partial markdown as valid-with-pending. Render what's stable. Defer what isn't. Never throw on incomplete input. Never reflow once something has painted.
Neither side could carry it alone. The contract works because both sides know what the other guarantees. We worked in tandem to fine-tune both sides of the contract to deliver a seamless user experience for our customers.



Trust is a frontend problem
LLM limitations come from the technology; leveraging it in a user interface comes with user-trust-building requirements.
LLM citations are paramount
For RAG products, the citation UI is the trust UI. The model doesn't write source URLs into its answer. The LLM team returns citations as data on the side, with markers showing where each one applies. The frontend renders those as small numbered chips in the text, plus a deduplicated list of sources below. Hover highlights the source. Click opens it in a side panel; the user stays in the chat.

LLM limitations aren't just fine print
LLMs hallucinate. In a compliance product, that's a liability, not a footnote. The model team can shrink the rate; they can't drive it to zero. So the surface had to carry the rest.
Persistent under the input, every session: "This is for informational purposes only and should not be considered legal advice. Always seek a lawyer for legal advice." Alongside it, links to the privacy policy and to a page explaining what Expertise on Demand actually does. No one-time modal. No tooltip. The user sees it every time they type.
The model can't promise it's right. The frontend can promise it's honest about that.

Outcome
Reflection
- The contract is the work. Streaming markdown wasn't a parser bug — it was a missing agreement between two teams. The fix wasn't smarter code; it was a contract about what each side would guarantee. Most of what looks like a generative-UI bug is a missing contract.
- Trust lives at the surface. Citations as a sidecar. Disclaimers persistent under the input. The model can't promise it's right — the FE patterns around it do.
- Generative UIs are stateful. Empty, loading, retrieving, streaming-in-progress, streaming-complete. Plan for them as first-class states up front, or they surface as bugs.