* fix(docs): prevent iOS Safari from navigating on sidebar section tap
On iOS/iPadOS, tapping a collapsed section in the documentation sidebar
followed the <a> href inside the <summary> instead of toggling the
<details> element. This navigated away from the page and closed the
hamburger menu.
Added a click handler in documentation.js that intercepts the link tap
when the parent <details> is closed, preventing navigation and manually
expanding the section instead. Tapping an already-open section still
navigates to the section root page.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix issue where all clicks on a collapsed section header were intercepted, preventing navigation even when tapping the link text. Now only taps in the chevron zone (right-padding area of the link) trigger the toggle.
Wraps the title text in a <span> to mark the text boundary, then uses getBoundingClientRect() to compare the tap's X position against the span's right edge. This is more reliable than checking e.target, which iOS Safari inconsistently reports as the parent <a> for non-interactive child elements.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add scroll-padding-top: 100px to html in core.scss so the browser
applies a top offset for all native hash-anchor scrolls (initial page
load, back/forward navigation). Matches the existing DOCS_HEADER_OFFSET
constant used by the JS scroll handler.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
The outer query limit defaults to 10 and is easy to confuse with the
per-prefetch limit, so make it explicit across every language snippet
(matching http.md, which already showed it). Also retargets the fix
from the now-renamed hybrid-basic directory to hybrid-rrf.
* Add a customer quote component and apply it to three case studies
Customer quotes in case studies are written four different ways -
`> "quote" - Name, Title`, italic text with an italic attribution line,
quoted sentences buried mid-paragraph, or nothing at all. None of them
produce a visually distinct, attributed quote.
The root cause is that the six existing testimonial partials all read
`.Page.Params`, so they only work on landing pages driven by data files.
A case study written in markdown has no way to reach any of them, and
there was no quote shortcode, so authors fell back to raw markdown.
Add a `quote` shortcode with a matching stylesheet. Only `text` and
`name` carry the quote; `role`, `company`, `avatar`, `logo` and
`featured` are all optional and degrade gracefully.
Apply it to one case study per broken convention:
- bayer: attribution glued onto the end of the quoted sentence,
where the hyphen before the name collides with the one
inside the job title. Converts 3 of 12; the rest are a
mechanical repeat.
- tripadvisor: quote sat at line 57 of 64. Promoted to the lead quote
and trimmed to a contiguous excerpt, with an ellipsis
marking the omitted middle. Moved, not duplicated.
- sprinklr: quote buried mid-paragraph. No avatar exists for this
speaker, which exercises the graceful degradation.
The stylesheet nests its descendants so every rule carries two classes
of specificity. The article stylesheet targets bare `blockquote`, `p`
and `figcaption` under `.qdrant-post__content`, which otherwise wins
over a single-class selector and re-applies its own card and margins.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Convert Bayer's remaining nine quotes to the quote component
Finishes the conversion started in the previous commit: all twelve quotes
in the article now use the shortcode, and no bare blockquotes remain.
All twelve come from the same speaker with an identical attribution
suffix, so this was a mechanical pass. The repeated attribution is worth
a look in review - twelve cards each carrying the same face, name, role
and Bayer logo may be heavier than it needs to be when the speaker never
changes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Slim the repeated attributions in the Bayer case study
Every quote in the article is from the same speaker, so twelve cards each
carrying the same face and Bayer logo was heavier than it needed to be.
The lead quote keeps the full treatment. The other eleven keep name and
role, which still identifies the speaker for a reader who lands partway
down the page, but drops the repeated avatar and logo.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Add the Sprinklr logo to the Sprinklr quote
Fills the empty right-hand side of the card. No headshot exists for this
speaker yet, so the avatar slot stays empty until one is supplied.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Restore both customer quotes to their published wording
The Tripadvisor quote had a sentence cut out of it and replaced with an
ellipsis, and the Sprinklr quote had its trailing comma changed to a
period once it stood on its own. Neither was ours to decide. Both now
match the published text exactly.
Audited all 14 quotes on this branch against master, comparing words and
punctuation. The twelve Bayer quotes were already verbatim.
Two changes to attribution remain, since they are formatting rather than
the speaker's words, but are worth a look in review:
- Bayer's title renders as "Senior Director AI/ML, Precision Medicine &
Insights" instead of the original hyphen, which was what collided with
the dash before his name.
- Tripadvisor's attribution used to link to Rahul Todkar's LinkedIn. The
component has no link support, so that link is now only in the body.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Drop the trailing comma from the Sprinklr quote
The comma joined the quotation to "explains Sonavane" in the original
sentence. Standing on its own in a block, it reads as an unfinished
sentence, so the quote ends in a period.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Restore the two attribution details lost in the conversion
Add a `name_url` param so a speaker's name can link to their profile, and
use it to restore the link to Rahul Todkar's LinkedIn that the original
Tripadvisor attribution carried.
Put back the hyphen inside Hooman Sedghamiz's job title. It was changed
to a comma because the original line ran two hyphens together - one
separating the quote from the speaker, one inside the title itself - and
they were indistinguishable. The component gives the speaker its own row,
so the first hyphen is gone and the one in the title reads clearly again.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Lift the remaining standalone Sprinklr quotes into the component
Four more were buried in prose: one closing a paragraph, one opening
another, one mid-paragraph, and one sitting as its own line. All are now
quote cards, and the logo moved to whichever card comes first on the page.
Words are verbatim. The only change is the trailing comma that joined each
quote to "says Sonavane", which belongs to our sentence rather than to the
speaker and goes with it.
Three quotes inside the "Why Qdrant?" bullet list are deliberately left
alone - lifting those would restructure the list, which is a layout call.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Put the "key challenge" quote back into the prose
It states the problem Sprinklr had, not anything about Qdrant, so on its
own in a card it reads as context-free. It did its job as the setup
sentence it was written to be. Restored exactly as published, original
comma included.
Sprinklr keeps the four quotes that stand on their own.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Reformat the benchmark code block in the Sprinklr case study
Every record was split across two lines with a blank line between them and
nothing was indented, so the block rendered as a wall of fragments. Each
record is now one indented line.
The fence was tagged json while the contents are Python - a `data = [...]`
assignment with single-quoted keys - so nothing was highlighted. Corrected
to python.
The records were parsed and re-emitted rather than retyped, and the values
were compared before and after, so the data is unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Stop repeating the company name next to its logo
A card showing the Bayer logo read "Senior Director AI/ML - Precision
Medicine & Insights, Bayer" right beside it. The logo already says which
company it is.
The name is hidden with CSS rather than dropped from the template, because
the logo is hidden below the md breakpoint and the company name has to
carry that job again on narrow screens.
Cards with no logo are unchanged and still name the company.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Give the two strongest Bayer quotes the visual weight
All twelve quotes stay as cards. The article was written with twelve pull
quotes and that structure is the author's, not ours to rewrite. What
changes is which ones carry the face and logo, and where two of them sit.
The omnimodal quote becomes the lead. It is the strongest thing in the
piece - a senior director at a 116,000 person company saying vector
databases outgrew RAG, and that "no one had" an omnimodal search engine
until this one. We could not make that claim ourselves.
The 20% efficiency quote gains the face and logo where it already sits. It
is the only quantified outcome spoken rather than reported, and a number
is worth more in the customer's voice than in ours.
The grounding quote that used to lead moves into the agents section, after
the paragraph introducing deep agents - "if you remove the search from the
agent" is what that section is about. It becomes a light card.
Also restores the blank line after seven cards that were glued to the
paragraph following them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Highlight the grounding quote instead of the 20% one
"20% efficiency" has no denominator - efficiency of what, measured how -
and it ends on "it wouldn't be possible without the components", which
does not say which components. It stays as a card, just not a highlighted
one.
The grounding quote takes the second face and logo. "If you remove the
search from the agent, the results go back to two years ago" is the most
concrete line in the piece, and it complements the lead rather than
repeating it: one says what Qdrant became, the other what breaks without
it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Set the lead quote at the same size as the others
The lead quote was 24px against 20px elsewhere, which made Tripadvisor's
long quote a wall of text. Position, the face and the logo already mark it
out. Drops the mobile override that only existed to scale the 24px back
down.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Apply the designer's type settings to the quote text
font-size 1.125rem, line-height 1.65rem, margin-bottom 1.5rem.
The margin needed the rule nested a level deeper to take effect. The
article stylesheet sets `blockquote p:last-child { margin-bottom: 0 }`,
which outranked the flat selector, so the spacing was being dropped.
Removes the narrow-screen override, which set the same 18px the designer
asked for and differed only in line-height.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Make docs CTAs configurable
* Add custom CTAs to manage data and search docs pages
* Replace "card" with "payment" in collections page CTA
Qdrant Cloud also supports marketplace payments, not just card payments.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Under custom sharding, shard_number is the number of physical shards
per shard key, not the number of shard keys. The example used
shard_number=2 alongside two create_shard_key calls, which reads as if
the value had to match the number of keys.
Set it to 1, matching the canonical create-collection/with-custom-sharding
snippet, and note what the parameter actually controls.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sergii Kozyrev supplied the encoding stack: CPU-only FastEmbed on ONNX
Runtime with all-MiniLM-L6-v2, qdrant/bm25, and answerai-colbert-small-v1,
so no GPU did encoding work and the RTX PRO 6000 was dedicated to Qwen.
Also corrects the accounting sentence per Sergii: latency and throughput
were measured end to end including encoding and retrieval; only the
GPU-hour and GPU-cost figures are limited to the inference GPU.
Title moves to 2.92x with his agreement. 2.78x stays in the body as the
raw-capacity result.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>