* add an island shortcode
* improving island shortcode, add two new island visualisations for the multitenancy doc
* moved islands dir
* fix
* loader fix
* add interactive islands to the quantization docs
Replace the two static figures in manage-data/quantization with islands,
built the same way as the multitenancy ones:
- bit-depth: a float vector encoded at 1 / 1.5 / 2 bits per dimension next
to the distribution of its components, with the thresholds, buckets and
bit codes, storage bars, and hover/pin tracing from either side.
- asymmetric: binary stored vector x binary or 8-bit scalar query, with a
scatter of estimated vs exact per-dimension contribution per panel.
The island shortcode now includes a content hash in the resource name, so
Hugo's dev server serves an edited island instead of the cached first build.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* Islands: shared design system and brand palette (#2742)
* islands: shared design system, brand palette, shorter captions
Address the design review on #2739:
- Tenants use the brand secondaries (blue, violet, teal, Qdrant red) instead
of success/warning/error, which read as status.
- One shared design system in islands.scss: `--qi-*` tokens (colors, border,
radius, mono font) and `.qi-*` classes for the controls row, chip/toggle,
status line, SVG frame and labels. Per-island CSS only styles what is
specific to that diagram, on top of the tokens.
- Geist Mono across controls and all diagram labels.
- Cards: 1px neutral border, 6px radius, no shadows. The bit-depth segmented
control and the promotion buttons become the same chip as the tenant chips.
- Asymmetric: negative sign is Qdrant red; bit-depth: bits are teal.
- Captions trimmed to one sentence; detail moved into the article text.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* islands: keep the original tenant colors
Tenants go back to their previous hues in both multitenancy islands. The
shared categorical palette stays available in islands.scss for islands
that want it, but nothing forces it.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* Islands: adopt the design-system palette, tighten multitenancy reservations
Swap every island color to the Qdrant design-system palette (Color.pdf):
- Tokens: neutrals from the Neutral ramp (800/600/50/200/400, dark
100/500/900/800/700); accent stays Amaranth 500.
- Categoricals: Neon Blue 500, Purple 500, Cyan 800 (+ Cyan 100 tint),
Amaranth 500 — replacing the old secondary blue/violet/teal.
- Tenant hues in both multitenancy islands: Neon Blue 500, Green 700,
Warning 800, Amaranth 500.
- bit-depth bucket ramp and its shade() endpoints follow the Neon Blue
ramp (200 -> 400 -> 800, C_HIGH 900).
Dark mode kept --bd-pos at the light-theme step, leaving it at 1.79:1
against the dark surface; it now lightens to Neon Blue 600 (2.82:1), the
mirror of the existing light-theme override.
Both multitenancy islands also relied on the default ratio="16 / 9",
which is the fallback PNG's aspect, not the island's — reserving 70-134px
of dead height between the diagram and its caption. Set the ratios to the
islands' measured aspects (12/5 and 15/7), as the quantization islands
already do.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Islands: make every quantization fill a real palette colour
Both quantization diagrams encoded magnitude continuously, which put most
cells on colours that are not in the design system:
- bit-depth's shade() lerped between two palette endpoints, so a float
cell landed on e.g. rgb(145,141,213) — a point 35% along Neon Blue
200 -> 900, and not a palette entry.
- asymmetric's cells carried a fractional fill-opacity, which composites
against the page background and lands off-palette the same way.
Both now step through discrete palette entries instead. bit-depth gets a
five-step Neon Blue value ramp (--bd-shade-1..5, 200/300/500/700/900,
preserving the old endpoints); asymmetric gets four-step per-sign ramps
(--aq-pos-1..4 Neon Blue, --aq-neg-1..4 Amaranth) that top out at the
brand 500 a fully saturated cell already used. Dark theme runs both the
other way so a near-zero cell stays quiet against the dark surface.
var() is not valid in an SVG presentation attribute, so the fills move to
inline style. The histogram bands lose their 0.9 opacity for the same
reason.
Verified by walking every rendered SVG node's computed fill and stroke in
both themes: no opaque paint outside the palette remains. Alpha-based
effects that are not colour choices stay: the cell hairline
(--qi-cell-stroke, neutral at 30%/18%), the scatter error whiskers (0.5)
and the promotion placeholder label (0.7).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Islands: add annotated palette preview screenshots
Light and dark renders of all four islands at 1200px, each diagram
followed by a strip naming every colour it paints — role, design-system
ramp and step, and hex.
The labels are generated, not written by hand: the preview page paints
each CSS custom property onto a probe element, reads the computed colour
back, and looks the hex up in a map parsed from the design system's
own colour sheet. A chip only renders a name if the pixel matches a real
palette entry, so these double as a record that nothing off-palette
survives in either theme.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Remove accidental island palette preview PNGs from repo root.
---------
Co-authored-by: generall <andrey@vasnetsov.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: qdrant-cloud-bot <111755117+qdrant-cloud-bot@users.noreply.github.com>
qdrant-landing/static/ is copied verbatim by Hugo, so a full-resolution
camera JPEG is downloaded by every reader of the post. 178MB of such files
were added in the last 12 months and are still shipping; .git is now 2.4GB.
Checks only the files the PR touches, so it costs nothing on other PRs.
Escape hatch: the 'allow-large-images' label skips the job.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Five of these were 7008x4672 straight off the camera, 20-25MB each. They are
embedded inline in the blog post and qdrant-landing/static/ is served verbatim,
so every reader of that post downloaded 110MB of photos.
Capped at 2000px / q82, which is well above any display size on the site:
121MB -> 11MB for the directory, no visible difference.
mogrify -auto-orient -resize '2000x2000>' -quality 82 -strip *.jpg
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
- The hero's outlined button keeps a transparent fill instead of a solid
off-white one, so only its text and border colours flip for the light hero.
- "Flip One Switch. Index Faster as You Write." gets a 64px bottom padding at
lg. It was the only section on the page at 40px, which is what made the space
around the migration banner read as tight.
- Every target="_blank" in the hero and the CTA banner now carries
rel="noopener noreferrer", the convention used elsewhere in the theme.
Copilot flagged the two new links; the two pre-existing CTA banner links had
the same gap, so all five are fixed together.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sou7Nth6sUQ6CFbsxanQF
The Pricing and Multivector cross-link cards had each other's icon: the
two exported SVGs were saved under swapped filenames. The AWS mark sat in
a 32x30 box with artwork spanning only y 4..24, so it rendered small and
low beside the square line icons; the viewBox now tracks the content.
What You Get used gx-5, whose -24px row margin is wider than the
container's 12px padding, giving the page 8px of horizontal scroll at
375px. Scoped the gutter to lg and up, where the columns actually sit
side by side.
MKT-364
The frame recolours the AWS logo to the grid's blue, which AWS's brand
guidelines do not allow. The compliant orange variant is already in the
frame as an unused layer.
MKT-364
The Diagram layer is switched off in the frame, so How It Works ships as
the header, two step cards and the callout, matching what the frame
renders.
running-with-GPU.md listed only the capital-GPU form of the
/documentation/guides/ alias, so the lowercase path the copy file links
404'd. Added it, matching the case pair the file already has for
/documentation/operations/.
MKT-364
Hero eyebrow reverts to the copy file's "GPU Indexing", and the hero's
second CTA becomes View the Docs. The Quantization cross-link card gets
its own description back; the frame had carried over the GPU docs wording
from an earlier mock. Talk to Engineering moves to the footer CTA as a
third button, which cta-banner now supports via an optional textButton.
MKT-364
New /gpu-indexing/ feature subpage built to the signed-off Figma frame
(GPU-Indexing-v2), following the Security page structure: hero, What You
Get, How It Works with the write-path diagram, What's Included, Resources,
FAQs, and the shared CTA banner.
Copy comes from the approved copy file attached to MKT-364. The migration
callout and the footer CTA reuse the existing pricing-banner and cta-banner
partials rather than adding new ones.
MKT-364
- Hero screenshot no longer bleeds below lg, so the whole console is visible
on mobile instead of being cropped mid-panel (matches the qdrant-for-startups
hero, where the bleed is a desktop-only treatment).
- "Follow the embedding model migration guide" drops link_dark, so it renders in
the red accent rather than near-black.
- Managed Cloud column header gets a violet icon, matching the blue and teal
variants used by the other two columns.
- FAQ background moves to $neutral-94, the same as the Approaches section above it.
- Approaches table drops the mobile-arrows modifier and falls back to the default
tabs presentation on mobile.
- "Pick the Right Embedding Model, Or Bring Your Own" wraps to three lines and
"From Raw Content to Search Results in Three Steps" to two.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sou7Nth6sUQ6CFbsxanQF
Both mixins are included from inside `.cloud-inference-*`, so every selector
they generated compiled to `.block .block__x` and outranked the overrides
written below the include. The hero description's 24px bottom margin and the
h2 title size were both being silently dropped, which is why the hero buttons
sat flush against the description.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sou7Nth6sUQ6CFbsxanQF
gx-5 puts a -24px horizontal margin on the row, wider than the
container's 12px padding, so Why It Matters and What You Get pushed the
page sideways at 375px. The gutter only matters where the columns sit
side by side.
MKT-425
The comparison table renders every value cell hidden until
features-table.js adds the mobile-active class, and that script was
loaded only on the security section. On mobile the table showed its
column tabs with three empty rows. Added cloud-inference to the include.
The hero screenshot now bleeds off the right edge at all widths, per the
frame, instead of only above lg.
MKT-425
Rebuilds the existing /cloud-inference/ page against the signed-off Figma
frame (Inference LP): hero, Why It Matters, What You Get, How It Works,
Cloud Inference Approaches with the comparison table, FAQs, and the shared
CTA banner.
The slug and its nav entry are unchanged, so nothing is orphaned. The
previous hero, features, cluster, read-doc, get-started and FAQ sections
are replaced. Copy comes from the doc linked on MKT-425; the model-request
callout reuses the existing pricing-banner partial.
MKT-425
Each multivector field has a hard limit of rows * vector_size < 1,048,576
flattened float elements. This is not the same as the named-vector count,
which has no hard limit. The FAQ wording conflated the two, misleading
users of late-interaction models like ColBERT or ColPali variants.
Adds the size constraint and workarounds (pooling, chunking) in both the
FAQ and the Multivectors reference section.
Closesqdrant/qdrant#9408
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Helm values do set fleet-wide database defaults (image, logLevel,
storage performance); only per-cluster settings live on QdrantCluster
- trust_forwarded_headers lets clients spoof audit log IPs on a
publicly reachable instance
- Operator drops the audit block silently below Qdrant v1.17.0
- Managing a Cluster is the single home for the config; Logging &
Monitoring covers collection only
AuditConfig was only visible in the generated API reference. Call it out
in setup, Helm configuration, cluster management, logging, and the changelog
so operators can find and enable spec.config.audit.
The course had no weight, so Hugo sorted it after Essentials (10) and
Multi-Vector Search (20). Weight 5 puts it first without touching the
other two.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Each module's drafted _index.md content, video included, moves whole onto a
Module Overview subpage at weight 1. That page is a plain link in the nav
submenu, so it opens on the first click with no JS involved.
_index.md becomes a signpost carrying the module title and the linked path,
and is marked hasOverviewPage so the lesson flow skips it: Complete Module N
now lands on the next module's Module Overview rather than its section page.
Signpost pages render no advance button, since they are not steps.
The flow change is gated on hasOverviewPage, which only the Beginner Course
sets, so Essentials and Multi-Vector Search are unchanged. No JS and no
sidebar template changes.
Also normalizes module 4's iframe from a youtu.be share URL to an embed URL;
YouTube refuses to frame the share form.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>