Live Search FAQ

Search the answers

Type what you are worried about

Every answer is open by default and the list narrows as you type. Nothing is hidden behind a click.

Migration

How long does moving off our current system take?

Two weeks end to end, and the busy part is three days in the middle. You send an export on day one, we map fields together on day two, and your data lands in a private workspace by day five.

Migration

What happens to records the old system exports badly?

They arrive as free text attached to the right member rather than being dropped, and you get a written list of every field we could not map along with what we did instead.

Security

Where is our data stored?

In the region you choose at setup, and it does not leave it. Backups stay in the same region and the audit log records every time anyone reads a member record.

Uptime

What happens when the booking service goes down?

Member booking links keep working from cache while the admin app recovers, and we credit the month automatically whenever we miss the 99.95% commitment.

Billing

Can we add and remove seats mid-month?

Yes, and we prorate in both directions. Adding a locum on Tuesday costs the days they were on the account, and removing them credits the rest.

Leaving

What does leaving actually involve?

Thirty days' notice, no penalty, and a full export another system can import. The export stays available for ninety days after you close the account.

Still not answered?

Ask an engineer
About this block

Live Search FAQPRO

An FAQ with a search field that narrows the list as it is typed, matching against topic, question, and answer, with every answer open on its own hairline row and an empty state when nothing matches.

Faq85: Live Search FAQ

An FAQ with a search field that narrows the list as it is typed, matching against topic, question and answer, with every answer open on its own hairline row and an empty state when nothing matches.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/faq85?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/faq85?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/faq85.tsx, the shadcn/ui input component it depends on, and the badge23 and button21 components it uses for the eyebrow and the support action.

Quick start

The installed file exports faq85Demo alongside the block: the exact props behind the preview above. Spread it to get a working FAQ in one line.

tsx
import { Faq85, faq85Demo } from "@/components/beste/block/faq85";

export default function FaqPage() {
  return <Faq85 {...faq85Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Faq85 } from "@/components/beste/block/faq85";

export default function FaqPage() {
  return (
    <Faq85
      badge={{ label: "Search the answers" }}
      heading="Type what you are worried about"
      description="Every answer is open by default and the list narrows as you type."
      searchLabel="Search questions"
      searchPlaceholder="Try migration, uptime, or leaving"
      items={[
        {
          topic: "Migration",
          question: "How long does moving off our current system take?",
          answer: "Two weeks end to end, and the busy part is three days in the middle.",
        },
        {
          topic: "Uptime",
          question: "What happens when the booking service goes down?",
          answer: "Member booking links keep working from cache while the admin app recovers.",
        },
      ]}
      emptyLabel="Nothing matches that yet. Ask us directly."
      support={{ label: "Still not answered?", button: { label: "Ask an engineer", href: "/contact" } }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Centered eyebrow above the heading, rendered through Badge23
headingstringSection heading, centered and capped at max-w-2xl
descriptionstringCentered supporting paragraph, capped at max-w-xl
searchLabelstringVisually hidden label for the search field
searchPlaceholderstringPlaceholder inside the search field
itemsFaqItem[][]Questions, each carrying the topic it belongs to
emptyLabelstringLine shown when the query matches nothing
support{ label: string; button: ActionLink }Fallback prompt at the foot of the list
classNamestringExtra classes for the outer section
ts
type ActionLink = {
  label: string;
  href: string;
};

type FaqItem = {
  topic: string;
  question: string;
  answer: string;
};

Behavior notes

  • The match is a plain substring test over topic, question and answer joined into one string, both sides lowercased and the query trimmed. There is no fuzzy matching and no word-boundary logic, so a typo returns nothing.
  • Filtering happens on every keystroke over the whole array. That is fine for a few dozen entries; a much longer list would want debouncing added.
  • An empty or whitespace-only query short-circuits to the full list rather than filtering, so clearing the field restores everything immediately.
  • searchLabel is rendered sr-only. The field is visually labelled by its placeholder, but assistive technology still gets a real label.
  • The search icon is pointer-events-none and absolutely positioned, with pl-11 on the input clearing it, so clicks pass through to the field.
  • The input is a shadcn/ui Input with type="search", which is why input appears in the block's registry dependencies.
  • Every answer is always visible. This block has no accordion, so the search field is the only way the list narrows.
  • The support row and the empty state both sit inside the same max-w-3xl column as the list and carry their own border-t, so the rules stay continuous whether or not results are showing.

More FAQ blocks

View all FAQ
PRO

faq96

Open Answers Grid

An FAQ with nothing to open: a serif heading that settles in word by word beside the intro and a pill action, then six questions and answers laid out in a three-column ruled grid that arrive in turn.

FREE

faq77

Numbered FAQ Index

A type-forward FAQ with a sticky heading rail and a numbered accordion list of expandable questions.

PRO

faq82

Topic Rail FAQ

A categorised FAQ whose topic rail is derived from the questions themselves and carries live counts, switching the accordion beside it and resetting it to the first answer on every change.

PRO

faq11

Searchable Accordion

Search input with accordion items that filter in real-time. Essential for FAQs with many questions that users need to quickly locate.

FREE

faq80

Two Column Answer Grid

An always-open FAQ laid out as a two-column grid of numbered, hairline-separated question and answer entries, closing with a soft support panel that pairs a short prompt with two actions.

PRO

faq74

FAQ Cards

Always-open FAQ presented as a scannable grid of Q&A cards.