diff --git a/qdrant-landing/content/ai-agents/ai-agents-builder-patterns.md b/qdrant-landing/content/ai-agents/ai-agents-builder-patterns.md new file mode 100644 index 0000000000..7727b4bcdb --- /dev/null +++ b/qdrant-landing/content/ai-agents/ai-agents-builder-patterns.md @@ -0,0 +1,120 @@ +--- +subtitle: BUILDER PATTERNS +title: What Developers Build with Qdrant +description: Common agent architectures and the retrieval patterns behind them. +features: + - id: 0 + title: Retrieval-Augmented Generation + description: Your agent queries Qdrant for semantically relevant documents, passes them as context to the LLM, and generates grounded answers instead of hallucinating. Use hybrid search (dense + sparse vectors) to catch both semantic meaning and exact terms. Add payload filters to scope retrieval by source, date, or access level. + codeBar: rag_agent.py + code: | + # Hybrid search: dense + sparse + results = client.query_points( + collection_name="knowledge_base", + prefetch=[ + Prefetch(query=dense_vec, using="dense", limit=20), + Prefetch(query=sparse_vec, using="sparse", limit=20), + ], + query=FusionQuery( + fusion=Fusion.RRF + ), + limit=5 + ) + cardTitle: 75% + cardContent: Dust reduced RAM usage by 75% after migrating from in-memory retrieval to Qdrant for production RAG. + - id: 1 + title: Real-Time Voice Agents + description: Voice agents can't tolerate latency. Every millisecond in the retrieval loop compounds into awkward pauses. Qdrant's Rust-based engine delivers sub-25ms P99 retrieval so your conversational agent stays responsive.

Filter by session and speaker to retrieve only the current conversation's context without cross-talk between concurrent calls. + codeBar: voice_agent.py + code: | + # Low-latency session-scoped retrieval + context = client.query_points( + collection_name="call_memory", + query=embed(transcript_chunk), + query_filter=Filter( + must=[ + FieldCondition( + key="call_id", + match=MatchValue( + value=active_call + ) + ) + ] + ), + limit=3 + ) + cardTitle: 25ms + cardContent: Tavus achieved 25ms retrieval for conversational AI without awkward pauses. + - id: 2 + title: Customer Support Agents + description: Index your knowledge base, past tickets, and product docs. The support agent retrieves the most relevant resolution on the first pass, avoiding the loop-and-retry pattern that frustrates users. Use Qdrant's multi-tenancy (payload-based partitioning) to isolate each customer's data without deploying separate collections. + codeBar: support_agent.py + code: | + # Tenant-isolated knowledge retrieval  + answer = client.query_points( + collection_name="support_kb", + query=embed(ticket_text), + query_filter=Filter( + must=[ + FieldCondition( + key="tenant_id", + match=MatchValue( + value=org_id + ) + ) + ] + ), + limit=5 + ) + cardTitle: 90% + cardContent: Lyzr reduced latency by 90% serving support agents on Qdrant. + - id: 3 + title: Recommendation Agents + description: Embed user behavior, product attributes, and content metadata into Qdrant. Your recommendation agent queries with the user's current context and gets semantically relevant suggestions, not just collaborative filtering. Combine dense embeddings with sparse keyword vectors for hybrid recommendations that understand both "similar style" and "exact feature match." + codeBar: rec_agent.py + code: | + # Discovery: find items unlike dislikes + recs = client.discover( + collection_name="products", + target=user_preference_vec, + context=[ + ContextPair( + positive=liked_item_id, + negative=disliked_item_id, + ) + ], + limit=10 + ) + cardTitle: 1B+ + cardContent: Tripadvisor searches across billions of user-generated content pieces with Qdrant. + - id: 4 + title: Multi-Agent Shared Memory + description: Multiple agents (planner, researcher, executor) write to and read from a shared Qdrant collection. Each agent tags its outputs with role and step metadata, so downstream agents retrieve only the context they need.

Use payload filters to scope reads by agent role, workflow step, or timestamp to prevent context pollution across agents. + codeBar: multi_agent.py + code: | + # Executor reads planner's output + plan = client.query_points( + collection_name="workflow_memory", + query=embed(current_task), + query_filter=Filter( + must=[ + FieldCondition( + key="agent_role", + match=MatchValue( + value="planner" + ) + ), + FieldCondition( + key="workflow_id", + match=MatchValue( + value=wf_id + ) + ) + ] + ), + limit=10 + ) + cardTitle: 4x + cardContent: Voiceflow runs managed RAG on Qdrant, powering multi-step conversational workflows at scale. +sitemapExclude: true +--- diff --git a/qdrant-landing/content/ai-agents/ai-agents-cta-banner.md b/qdrant-landing/content/ai-agents/ai-agents-cta-banner.md new file mode 100644 index 0000000000..8a5ab09289 --- /dev/null +++ b/qdrant-landing/content/ai-agents/ai-agents-cta-banner.md @@ -0,0 +1,12 @@ +--- +type: cta-banner +title: Your Agents Deserve Better Retrieval +description: Start with the free tier. Scale to billions of vectors when you're ready. +button: + text: Start Building Free + url: https://cloud.qdrant.io/signup # add params? +secondaryButton: + text: Talk to an Engineer + url: /contact-us/ +sitemapExclude: true +--- \ No newline at end of file diff --git a/qdrant-landing/content/ai-agents/ai-agents-features.md b/qdrant-landing/content/ai-agents/ai-agents-features.md index f7c0d983a1..e67e45ddee 100644 --- a/qdrant-landing/content/ai-agents/ai-agents-features.md +++ b/qdrant-landing/content/ai-agents/ai-agents-features.md @@ -1,62 +1,60 @@ --- -image: - src: /img/ai-agents-dashboard-cloud.png - alt: Dashboard cloud -title: AI Agents with Qdrant -description: AI agents powered by Qdrant leverage advanced vector search to access and retrieve high-dimensional data in real-time, enabling intelligent, Agentic-RAG driven, multi-step decision-making across dynamic environments. -cases: -- id: 0 - title: Multimodal Data Handling - description: Qdrant enables AI agents to process and retrieve high-dimensional vectors from diverse data types (text, images, audio), supporting more comprehensive decision-making in multimodal environments. -- id: 1 - title: Adaptive Learning - description: Qdrant supports continuous learning by enabling efficient vector retrieval and updates, allowing agents to learn and evolve based on real-time interactions and new data points. -featuresTitle: Qdrant equips AI agents to adapt, learn, and collaborate efficiently. +subtitle: DEVELOPER TOOLS +title: Purpose-Built for Agent Builders +description: Tools and patterns that make agent memory a solved problem, not a research project. +button: + text: Start Building with Skills + url: https://github.com/qdrant/skills +codeBar: SKILL.md +code: | + # Agent Memory Skill + # + # Give your agent persistent, filtered + # memory using Qdrant as the retrieval + # backend. + + # Setup + # pip install qdrant-client + + # Collection Schema + # vectors: + # dense: { size: 1536, distance: Cosine } + # sparse: { index: { on_disk: true } } + # payload_index: + # - session_id: keyword + # - agent_role: keyword + # - timestamp: integer + # - tool_name: keyword + + # Query Pattern + # Always filter by session_id + agent_role + # Use hybrid (dense+sparse) for knowledge + # Use dense-only for conversation history features: -- id: 0 - icon: - src: /icons/outline/precision-blue.svg - alt: Precision - title: Contextual Precision - description: Qdrant’s hybrid search combines semantic vector search, lexical search, and metadata filtering, enabling AI Agents to retrieve highly relevant and contextually precise information. This enhances decision-making by allowing agents to leverage both meaning-based and keyword-based strategies, ensuring accuracy and relevance for complex queries in dynamic environments. - link: - text: Hybrid Search - url: /articles/hybrid-search/ -- id: 1 - icon: - src: /icons/outline/multitenancy-blue.svg - alt: Multitenancy - title: Multi-Agent Systems - description: Qdrant’s scalability and multitenancy ensures that multiple agents can collaborate in distributed systems, enabling seamless coordination and communication - key for Agentic RAG workflows. - link: - text: Multitenancy - url: /articles/multitenancy/ -- id: 2 - icon: - src: /icons/outline/time-blue.svg - alt: Time - title: Real Time Decision Making - description: Qdrant’s real-time, advanced vector search enables AI agents to act instantly on live data, which is crucial for time-sensitive, autonomous decision-making. - link: - text: HNSW - url: /articles/filterable-hnsw/ -- id: 3 - icon: - src: /icons/outline/server-rack-blue.svg - alt: Server rack - title: Optimized CPU Performance for Embedding Processing - description: Qdrant’s architecture is optimized for high-throughput embedding processing, minimizing CPU load and preventing performance bottlenecks. This enables AI agents in Agentic RAG workflows to execute complex, multi-step tasks efficiently, ensuring smooth operation even at scale. - link: - text: Distributed Deployment - url: /documentation/distributed_deployment/ -- id: 4 - icon: - src: /icons/outline/speedometer-blue.svg - alt: Speedometer - title: Semantic Cache for Rapid Query Handling - description: Qdrant enhances AI agent efficiency with semantic caching, which preserves results of queries based on semantic equivalence rather than exact matches. This method reduces query processing times and system load by reusing previously computed answers, essential for high-throughput AI applications. - link: - text: Semantic Cache - url: /articles/semantic-cache-ai-data-retrieval/ + - id: 0 + icon: + src: /icons/outline/text-search-pink.svg + alt: Text search + content: Hybrid search combines dense embeddings with BM25 sparse vectors via reciprocal rank fusion + - id: 1 + icon: + src: /icons/outline/filter-blue-large.svg + alt: Filter + content: Payload filtering scopes retrieval by any metadata field without post-processing + - id: 2 + icon: + src: /icons/outline/boxes-purple.svg + alt: Boxes + content: Multi-vector support stores ColBERT token-level representations natively + - id: 3 + icon: + src: /icons/outline/target-green.svg + alt: Target + content: Quantization (scalar, binary, product) cuts memory 4x while preserving accuracy + - id: 4 + icon: + src: /icons/outline/git-branch-orange.svg + alt: Git branch + content: Real-time upserts let agents write new memories without index rebuild delays sitemapExclude: true --- diff --git a/qdrant-landing/content/ai-agents/ai-agents-get-started.md b/qdrant-landing/content/ai-agents/ai-agents-get-started.md deleted file mode 100644 index 7c0a6bfdae..0000000000 --- a/qdrant-landing/content/ai-agents/ai-agents-get-started.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Building AI agents? -description: Apply for the Qdrant for Startups program to access a 20% discount to Qdrant Cloud, our managed cloud service, perks from Hugging Face, LlamaIndex, and Airbyte, and much more. -button: - url: /qdrant-for-startups/ - text: Apply Now -image: - src: /img/ai-agent.svg - alt: AI agent -sitemapExclude: true ---- diff --git a/qdrant-landing/content/ai-agents/ai-agents-hero.md b/qdrant-landing/content/ai-agents/ai-agents-hero.md index d48a9c6dbe..9d85744ecd 100644 --- a/qdrant-landing/content/ai-agents/ai-agents-hero.md +++ b/qdrant-landing/content/ai-agents/ai-agents-hero.md @@ -1,14 +1,51 @@ --- -title: AI Agents -description: Unlock the full potential of your AI agents with Qdrant’s powerful vector search and scalable infrastructure, allowing them to handle complex tasks, adapt in real time, and drive smarter, data-driven outcomes across any environment. -startFree: - text: Get Started - url: https://cloud.qdrant.io/signup -learnMore: - text: Learn More - url: "#ai-agents" -image: - src: /img/vectors/vector-4.svg - alt: AI agents chat +subtitle: SOLUTIONS · AGENTIC AI +title: Give Your Agents Memory That Works +description: Store, retrieve, and reason over context with vector search. Drop Qdrant into your agent's retrieval loop in under 10 minutes. +containedButton: + text: Quickstart Guide + url: /documentation/quickstart/ +outlinedButton: + text: View Examples + url: /blog/qdrant-skills-release/ +codeBar: agent_memory.py +code: | + from qdrant_client import QdrantClient + from qdrant_client.models import Filter, FieldCondition, MatchValue + + # Connect to Qdrant + client = QdrantClient("localhost", port=6333) + + # Agent retrieves relevant context + results = client.query_points( + collection_name="agent_memory", + query=embed(user_message), + query_filter=Filter( + must=[ + FieldCondition( + key="session_id", + match=MatchValue(value=session) + ) + ] + ), + limit=5 + ) + + # Feed context to LLM + context = [r.payload["text"] for r in results.points] +logosTitle: Trusted by +logos: + - id: 0 + src: /img/ai-agents-logos/lyzr.svg + alt: Lyzr logo + - id: 1 + src: /img/ai-agents-logos/dust.svg + alt: Dust logo + - id: 2 + src: /img/ai-agents-logos/voiceflow.svg + alt: Voiceflow logo + - id: 3 + src: /img/ai-agents-logos/trustgraph.svg + alt: TrustGraph logo sitemapExclude: true --- \ No newline at end of file diff --git a/qdrant-landing/content/ai-agents/ai-agents-how-it-works.md b/qdrant-landing/content/ai-agents/ai-agents-how-it-works.md new file mode 100644 index 0000000000..6936350a1e --- /dev/null +++ b/qdrant-landing/content/ai-agents/ai-agents-how-it-works.md @@ -0,0 +1,25 @@ +--- +subtitle: HOW IT WORKS +title: Three Steps to Agent Memory +description: No infra team required. Go from zero to production retrieval in a single session. +steps: + - id: 0 + title: Store Context + description: Embed and upsert conversation history, documents, tool outputs, or any unstructured data your agent needs to remember. + code: | + client.upsert(collection, points) + - id: 1 + title: Retrieve with Filters + description: Combine semantic similarity with metadata filters (session, user, timestamp, tool) to get precisely scoped context every query. + code: | + client.query_points(query, filter) + - id: 2 + title: Feed to Your LLM + description: Inject retrieved context into your agent's prompt. Qdrant handles relevance ranking so your LLM generates grounded responses. + code: | + messages += [{"role": "system",...}] +image: + src: /img/ai-agents-memory.svg + alt: Vector Search for Agent Memory +sitemapExclude: true +--- \ No newline at end of file diff --git a/qdrant-landing/content/ai-agents/ai-agents-integrations.md b/qdrant-landing/content/ai-agents/ai-agents-integrations.md index 93e47217b4..224d078744 100644 --- a/qdrant-landing/content/ai-agents/ai-agents-integrations.md +++ b/qdrant-landing/content/ai-agents/ai-agents-integrations.md @@ -1,34 +1,83 @@ --- -title: Qdrant integrates with the leading AI Agent frameworks +subtitle: INTEGRATIONS +title: Drop into Your Existing Stack +description: First-class SDKs and framework integrations. No wrappers, no adapters. integrations: -- id: 0 - icon: - src: /img/integrations/integration-lang-graph.svg - alt: LangGraph logo - title: LangGraph - description: Framework for managing multi-LLM workflows with structured graphs for AI agents. - url: /documentation/frameworks/langgraph/ -- id: 1 - icon: - src: /img/integrations/integration-open-ai.svg - alt: Open AI logo - title: Swarm - description: Decentralized platform enabling collaboration among AI agents for task completion. - url: /documentation/frameworks/ -- id: 2 - icon: - src: /img/integrations/integration-crew-ai.svg - alt: Crew AI logo - title: CrewAI - description: Team-based AI agent collaboration system orchestrating multi-agent workflows efficiently. - url: /documentation/frameworks/crewai/ -- id: 3 - icon: - src: /img/integrations/integration-auto-gen.svg - alt: AutoGen logo - title: AutoGen - description: Automation tool for generating AI agent workflows and automating complex tasks. - url: /documentation/frameworks/autogen/ + - id: 0 + title: Orchestration Frameworks + logos: + - id: 0 + src: /img/ai-agents-logos/lang-chain.svg + alt: LangChain logo + - id: 1 + src: /img/ai-agents-logos/llama-index.svg + alt: LlamaIndex logo + - id: 2 + src: /img/ai-agents-logos/crew-ai.svg + alt: CrewAI logo + - id: 3 + src: /img/ai-agents-logos/mastra.svg + alt: Mastra logo + - id: 4 + src: /img/ai-agents-logos/haystack.svg + alt: Haystack logo + - id: 1 + title: No-Code / Low-Code + logos: + - id: 0 + src: /img/ai-agents-logos/n8n.svg + alt: N8n logo + - id: 1 + src: /img/ai-agents-logos/flowise.svg + alt: Flowise logo + - id: 2 + title: Agent Memory + logos: + - id: 0 + src: /img/ai-agents-logos/mem0.svg + alt: Mem0 logo + - id: 1 + src: /img/ai-agents-logos/cognee.svg + alt: Cognee logo + - id: 3 + title: SDKs + logos: + - id: 0 + src: /img/ai-agents-logos/python.svg + alt: Python logo + - id: 1 + src: /img/ai-agents-logos/typescript.svg + alt: Typescript logo + - id: 2 + src: /img/ai-agents-logos/rust.svg + alt: Rust logo + - id: 3 + src: /img/ai-agents-logos/go.svg + alt: Go logo + - id: 4 + src: /img/ai-agents-logos/net.svg + alt: .Net logo + - id: 5 + src: /img/ai-agents-logos/java.svg + alt: Java logo + - id: 4 + title: Coding Agents + logos: + - id: 0 + src: /img/ai-agents-logos/claude-code.svg + alt: ClaudeCode logo + - id: 1 + src: /img/ai-agents-logos/cursor.svg + alt: Cursor logo + - id: 2 + src: /img/ai-agents-logos/codex.svg + alt: Codex logo + - id: 3 + src: /img/ai-agents-logos/open-code.svg + alt: OpenCode logo + - id: 4 + src: /img/ai-agents-logos/pi.svg + alt: Pi logo sitemapExclude: true --- diff --git a/qdrant-landing/content/ai-agents/ai-agents-proof.md b/qdrant-landing/content/ai-agents/ai-agents-proof.md new file mode 100644 index 0000000000..4ef3896889 --- /dev/null +++ b/qdrant-landing/content/ai-agents/ai-agents-proof.md @@ -0,0 +1,17 @@ +--- +proofs: +- id: 0 + title: 29K+ + description: GitHub stars on the open-source engine +- id: 1 + title: 250M+ + description: Total downloads across all packages +- id: 2 + title: 60K + description: Developers in our community +- id: 3 + title: <5ms + description: P95 retrieval latency at production scale +sitemapExclude: true +--- + diff --git a/qdrant-landing/content/ai-agents/ai-agents-resources.md b/qdrant-landing/content/ai-agents/ai-agents-resources.md new file mode 100644 index 0000000000..385fa45b18 --- /dev/null +++ b/qdrant-landing/content/ai-agents/ai-agents-resources.md @@ -0,0 +1,62 @@ +--- +subtitle: RESOURCES +title: Start Building +description: Everything you need to go from prototype to production. +resources: +- id: 0 + icon: + src: /icons/outline/rocket-blue-big.svg + alt: Rocket + title: Quickstart Guide + description: Run your first query in under five minutes. + link: + url: /documentation/quickstart/ + text: Build Your First Collection +- id: 1 + icon: + src: /icons/outline/brain-blue.svg + alt: Brain + title: Agentic Vector Search + description: Build Performant, Scaled Agentic Vector Search + link: + url: /articles/agentic-builders-guide/ + text: Follow the Tutorial +- id: 2 + icon: + src: /icons/outline/git-merge-blue.svg + alt: Git-merge + title: Hybrid Search Guide + description: Combine dense and sparse vectors with reciprocal rank fusion for best-of-both retrieval. + link: + url: /articles/hybrid-search/ + text: Learn Hybrid Retrieval +- id: 3 + icon: + src: /icons/outline/chef-hat-blue.svg + alt: Chef hat + title: Agentic Skills + description: Use solutions architect knowledge encoded in a format that AI agents can navigate + link: + url: /blog/qdrant-skills-release/ + text: Explore Agent Patterns +- id: 4 + icon: + src: /icons/outline/gauge-blue.svg + alt: Gauge + title: Performance Tuning + description: Optimize latency, throughput, and memory for production agent workloads. + link: + url: /documentation/ops-optimization/optimize/ + text: Read the Performance Guide +- id: 5 + icon: + src: /icons/outline/building-blue.svg + alt: Building + title: Multi-Tenancy Patterns + description: Isolate agent memory per user or organization with payload-based partitioning. + link: + url: /documentation/manage-data/multitenancy/ + text: Read the Partitioning Guide +sitemapExclude: true +--- + diff --git a/qdrant-landing/content/ai-agents/ai-agents-use-cases.md b/qdrant-landing/content/ai-agents/ai-agents-use-cases.md deleted file mode 100644 index cfd40aee97..0000000000 --- a/qdrant-landing/content/ai-agents/ai-agents-use-cases.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Learn how to get started with Qdrant for your AI Agent use case -features: -- id: 0 - image: - src: /img/ai-agents-use-cases/comparing-ai-agent-frameworks.svg - srcMobile: /img/ai-agents-use-cases/comparing-ai-agent-frameworks.svg - alt: Comparing AI agent frameworks - title: "Comparing AI Agent Frameworks: LangGraph, CrewAI, Swarm, and AutoGen" - description: This guide offers a comparison of key AI agent frameworks, highlighting their strengths and ideal use cases for developers. - link: - text: View Guide - url: /articles/agentic-rag/ -- id: 1 - image: - src: /img/ai-agents-use-cases/open-ai-agents.svg - srcMobile: /img/ai-agents-use-cases/open-ai-agents.svg - alt: Open AI agents - title: Building OpenAI Swarm Agents with Qdrant - description: Learn how to build OpenAI Swarm agents using Qdrant for fast, scalable vector search and real-time actions. - link: - text: Read the Docs - url: /documentation/frameworks/ -- id: 2 - image: - src: /img/ai-agents-use-cases/ai-scheduler.svg - srcMobile: /img/ai-agents-use-cases/ai-scheduler.svg - alt: AI scheduler - title: Building an AI Scheduler with Zoom, CrewAI, and Qdrant - description: Learn how to build an AI meeting scheduler with Zoom, LlamaIndex, and Qdrant, featuring a hands-on RAG recommendation engine code sample. - link: - text: View Tutorial - url: /documentation/agentic-rag-crewai-zoom/ -caseStudy: - logo: - src: /img/ai-agents-use-cases/customer-logo.svg - alt: Logo - title: "QA.tech Case Study: AI Agents for Web Testing" - description: QA.tech enhanced web app testing by deploying AI agents that mimic user interactions. To handle high-speed actions and make real-time decisions, they integrated Qdrant for scalable vector search, allowing for faster and more efficient data proc... - link: - text: Read Case Study - url: /blog/case-study-qatech/ - image: - src: /img/ai-agents-use-cases/case-study.png - alt: Preview -sitemapExclude: true ---- - diff --git a/qdrant-landing/content/ai-agents/ai-agents-video.md b/qdrant-landing/content/ai-agents/ai-agents-video.md deleted file mode 100644 index 4cd6291ba9..0000000000 --- a/qdrant-landing/content/ai-agents/ai-agents-video.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -tag: - title: On-demand Webinar - icon: - src: /icons/outline/training-purple.svg - alt: Training -title: Building AI Agents for personalized recommendations with Qdrant and n8n -description: Learn in this video how to build an AI-powered recommendation system using Qdrant and n8n. It demonstrates how an AI agent retrieves data from Qdrant's vector search engine and leverages a large language model (LLM) to generate personalized recommendations based on user inputs. -link: - text: Watch Now - url: https://www.youtube.com/watch?v=O5mT8M7rqQQ -youtube: | - -sitemapExclude: true ---- - diff --git a/qdrant-landing/content/ai-agents/ai-agents-webinar.md b/qdrant-landing/content/ai-agents/ai-agents-webinar.md deleted file mode 100644 index 86c525274e..0000000000 --- a/qdrant-landing/content/ai-agents/ai-agents-webinar.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -tag: - title: On-demand Webinar - icon: - src: /icons/outline/training-purple.svg - alt: Training -title: Building Agents with LlamaIndex & Qdrant -description: Ready to build more advanced AI agents? Watch this webinar to learn how to use LlamaIndex and Qdrant to create intelligent agents capable of handling complex, multi-modal queries in RAG-enabled systems. -link: - text: Watch Now - url: https://www.youtube.com/watch?v=3mWIFsooibQ -image: - src: /img/ai-agents-webinar.svg - alt: AI agents webinar -sitemapExclude: true ---- - diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/default.scss b/qdrant-landing/themes/qdrant-2024/assets/css/default.scss index eb48b1bcbe..c77f8c7f1d 100644 --- a/qdrant-landing/themes/qdrant-2024/assets/css/default.scss +++ b/qdrant-landing/themes/qdrant-2024/assets/css/default.scss @@ -66,9 +66,7 @@ @import 'partials/rag-evaluation-guide-features'; @import 'partials/progress-bar'; @import 'partials/table-of-contents'; -@import 'partials/ai-agents-webinar'; -@import 'partials/ai-agents-get-started'; -@import 'partials/ai-agents-video'; +@import 'partials/ai-agents/index'; @import 'partials/tag'; @import 'partials/about-us-values'; @import 'partials/about-us-engineering-culture'; diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-get-started.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-get-started.scss deleted file mode 100644 index f39356cdd3..0000000000 --- a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-get-started.scss +++ /dev/null @@ -1,24 +0,0 @@ -@use '../mixins/get-started-small' as get-started-small; - -.ai-agents-get-started { - @include get-started-small.base( - $spacer * 5, - $spacer * 4, - $spacer * 3.5, - $spacer * 2.5, - $neutral-94, - url('/img/stars-pattern.png') $neutral-10, - url('/img/stars-pattern.png') $neutral-10 - ); - - @include media-breakpoint-up(lg) { - &__text { - padding-top: $spacer * 2.5; - padding-bottom: $spacer * 2.5; - } - - &__image { - align-self: center; - } - } -} diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-video.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-video.scss deleted file mode 100644 index dfcfff965a..0000000000 --- a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-video.scss +++ /dev/null @@ -1,48 +0,0 @@ -@use '../helpers/functions' as *; - -.ai-agents-video { - padding-top: $spacer * 4; - padding-bottom: $spacer * 4; - background-color: $neutral-94; - - &__content { - display: flex; - flex-direction: column; - align-items: center; - max-width: pxToRem(920); - margin: 0 auto; - gap: $spacer * 1.5; - text-align: center; - } - - &__title { - margin-bottom: 0; - font-size: $spacer * 2; - line-height: pxToRem(40); - color: $neutral-20; - } - - &__description { - margin-bottom: 0; - color: $neutral-20; - } - - .video { - max-width: none; - margin-top: $spacer * 3; - - iframe { - max-width: none; - } - } - - @include media-breakpoint-up(lg) { - padding-top: $spacer * 7.5; - padding-bottom: $spacer * 7.5; - - &__title { - font-size: $spacer * 2.5; - line-height: pxToRem(50); - } - } -} diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-webinar.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-webinar.scss deleted file mode 100644 index a50a3fae97..0000000000 --- a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_ai-agents-webinar.scss +++ /dev/null @@ -1,41 +0,0 @@ -@use '../helpers/functions' as *; - -.ai-agents-webinar { - padding-top: $spacer * 4; - padding-bottom: $spacer * 4; - background-color: $neutral-94; - - .tag { - margin-bottom: $spacer * 1.5; - } - - &__title { - margin-bottom: $spacer * 1.5; - font-size: $spacer * 2; - line-height: pxToRem(40); - color: $neutral-20; - } - - &__description { - margin-bottom: $spacer * 1.5; - font-size: pxToRem(18); - line-height: pxToRem(27); - color: $neutral-20; - } - - &__image { - display: block; - width: 100%; - max-width: pxToRem(580); - margin: $spacer * 2.5 -1% -7% -4%; - } - - @include media-breakpoint-up(lg) { - padding-top: $spacer * 7.5; - padding-bottom: $spacer * 7.5; - - &__image { - margin-top: 0; - } - } -} diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_cta-banner.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/_cta-banner.scss index 6a6f89906b..338c64e721 100644 --- a/qdrant-landing/themes/qdrant-2024/assets/css/partials/_cta-banner.scss +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/_cta-banner.scss @@ -100,6 +100,13 @@ letter-spacing: -0.2px; } } + + &__buttons { + display: flex; + flex-direction: column; + align-items: center; + gap: $spacer; + } &__button { white-space: nowrap; @@ -144,6 +151,10 @@ line-height: 1.5; } + &__buttons { + flex-direction: row; + } + &__illustration { &::before { display: none; diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-builder-patterns.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-builder-patterns.scss new file mode 100644 index 0000000000..fc94d2ffce --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-builder-patterns.scss @@ -0,0 +1,346 @@ +@use '../../helpers/functions' as *; +@use 'sass:math'; + +.ai-agents-builder-patterns { + // Prevent scroll anchoring from shifting the viewport when min-heights settle. + overflow-anchor: none; + padding-bottom: $spacer * 5; + background-color: $neutral-94; + + &__header { + margin-bottom: $spacer * 4; + padding-top: $spacer * 5; + border-top: pxToRem(1) solid $neutral-80; + text-align: center; + } + + &__subtitle { + margin-bottom: $spacer; + font-family: 'Geist Mono', $font-family-monospace; + font-weight: $font-weight-medium; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-30; + text-transform: uppercase; + } + + &__title { + margin-bottom: $spacer; + font-size: $h4-font-size; + line-height: $spacer * 3; + color: $neutral-20; + } + + &__description { + margin-bottom: 0; + color: $neutral-30; + } + + &__content { + display: flex; + flex-direction: column; + gap: 0; + } + + &__features { + display: flex; + flex-direction: column; + width: 100%; + } + + &__feature { + display: flex; + flex-direction: column; + padding: $spacer * 1.5 0; + border-bottom: pxToRem(1) solid $neutral-90; + cursor: pointer; + transition: border-color 0.2s ease; + overflow: hidden; + + &:first-child { + padding-top: 0; + } + + &-title { + font-size: $font-size-xl; + line-height: pxToRem(30); + font-weight: 600; + color: $neutral-20; + margin: 0; + } + + &-body { + max-height: 0; + opacity: 0; + overflow: hidden; + transition: + max-height 0.4s ease, + opacity 0.3s ease, + margin 0.3s ease; + margin-top: 0; + + .ai-agents-builder-patterns__feature--active & { + max-height: none; + opacity: 1; + margin-top: $spacer; + } + } + + &-description { + color: $neutral-30; + margin: 0; + } + } + + &__visual { + display: none + } + + &__visual-block { + display: none; + + &--mobile { + display: block; + } + + &:nth-of-type(1), &:nth-of-type(4) { + .ai-agents-builder-patterns__card { + border: pxToRem(1) solid $secondary-violet-70; + background-color: $secondary-violet-90; + + &-title { + color: $secondary-violet-50; + } + } + } + + &:nth-of-type(2), &:nth-of-type(5) { + .ai-agents-builder-patterns__card { + border: pxToRem(1) solid $secondary-blue-70; + background-color: $secondary-blue-90; + + &-title { + color: $secondary-blue-50; + } + } + } + + &:nth-of-type(3), &:nth-of-type(6) { + .ai-agents-builder-patterns__card { + border: pxToRem(1) solid $secondary-teal-70; + background-color: $secondary-teal-90; + + &-title { + color: $secondary-teal-50; + } + } + } + } + + &__code { + overflow: hidden; + width: 100%; + height: pxToRem(400); + margin-top: $spacer * 2.5; + border-radius: $spacer; + background-color: $neutral-90; + border-top: pxToRem(1) solid $neutral-90; + border-right: pxToRem(1) solid $neutral-90; + border-left: pxToRem(1) solid $neutral-90; + + &-header { + display: flex; + justify-content: space-between; + align-items: center; + height: $spacer * 2.5; + padding: 0 $spacer * 1.5; + background-color: $neutral-90; + border-bottom: pxToRem(1) solid $neutral-90; + } + + &-window-buttons { + display: flex; + gap: pxToRem(7); + + div { + height: pxToRem(8); + width: pxToRem(8); + border-radius: 50%; + } + + &__close { + background-color: $error-50; + } + + &__minimize { + background-color: $neutral-60; + } + + &__expand { + background-color: $success-50; + } + } + + &-bar { + margin-bottom: 0; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-30; + } + + &-content { + display: flex; + align-items: flex-start; + height: pxToRem(360); + margin: 0 math.div($spacer, 4); + padding: pxToRem(28) pxToRem(20) pxToRem(28) pxToRem(28); + background: $neutral-98; + border-right: pxToRem(1) solid $neutral-98; + border-left: pxToRem(1) solid $neutral-98; + overflow-y: auto; + overflow-x: hidden; + word-break: break-word; + overflow-wrap: anywhere; + scrollbar-width: none; + -ms-overflow-style: none; + + &::-webkit-scrollbar { + width: 0; + height: 0; + } + + .highlight { + width: calc(100% - pxToRem(24)); + margin-bottom: 0; + background: transparent; + + pre { + display: block; + width: 100%; + padding: 0; + background: transparent; + white-space: pre-wrap; + overflow-x: hidden; + } + + code { + display: block; + width: 100%; + overflow-wrap: anywhere; + word-break: break-word; + + .line { + margin-bottom: 0; + } + + * { + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-30; + } + + .c1 { + color: $neutral-60; + } + + .s2, .nb { + color: $ai-agents-code-string; + } + + .k, .kn { + color: $ai-agents-code-keyword; + } + + .mi { + color: $ai-agents-code-number; + } + } + } + + &-button { + display: flex; + justify-content: center; + align-items: center; + padding: pxToRem(7); + border: pxToRem(1) solid $neutral-90; + border-radius: math.div($spacer, 4); + background: $neutral-98; + color: $neutral-70; + + svg { + height: pxToRem(14); + width: pxToRem(14); + } + } + } + } + + &__card { + display: flex; + align-items: center; + gap: $spacer; + margin-top: $spacer; + padding: $spacer $spacer * 1.5; + border-radius: math.div($spacer, 2); + + &-title { + margin-bottom: 0; + font-size: $h5-font-size; + line-height: pxToRem(42); + font-weight: $font-weight-medium; + } + + &-content { + margin-bottom: 0; + font-family: 'Geist Mono', $font-family-monospace; + font-size: $font-size-xs; + line-height: pxToRem(18); + color: $neutral-30; + } + } + + @include media-breakpoint-up(lg) { + &__title { + font-size: $h3-font-size; + line-height: pxToRem(52); + } + + &__description { + margin-top: $spacer; + font-size: $font-size-l; + line-height: $line-height-lg; + } + + &__content { + flex-direction: row; + gap: $spacer * 5; + } + + &__visual { + display: block; + padding: $spacer; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='540' height='526' viewBox='0 0 540 526' fill='none'%3E%3Crect width='540' height='526' fill='url(%23pattern0)'/%3E%3Cdefs%3E%3Cpattern id='pattern0' patternUnits='userSpaceOnUse' patternTransform='matrix(77 0 0 77 -0.5 -0.5)' viewBox='-0.5 -0.5 77 77' width='1' height='1' preserveAspectRatio='none'%3E%3Crect width='77' height='77' stroke='%23D4D9E6'/%3E%3C/pattern%3E%3C/defs%3E%3C/svg%3E"); + } + + &__visual-block { + display: none; + + &--active { + display: block; + } + + &--mobile { + display: none; + } + } + + &__features { + width: pxToRem(482); + flex-shrink: 0; + } + + &__code { + margin-top: 0; + } + } +} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-features.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-features.scss new file mode 100644 index 0000000000..ad11755f78 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-features.scss @@ -0,0 +1,235 @@ +@use '../../helpers/functions' as *; +@use 'sass:math'; + +.ai-agents-features { + padding-bottom: $spacer * 5; + background: radial-gradient( + 115.51% 123.53% at 50% -4.94%, + rgba($ai-agents-violet-gradient-base, 0) 0%, + rgba($ai-agents-violet-gradient-base, 0) 75%, + rgba($ai-agents-violet-gradient-base, 0.8) 90%, + $ai-agents-violet-gradient-end 100%), + $neutral-10; + + &__header { + margin-bottom: $spacer * 4; + padding-top: $spacer * 5; + border-top: pxToRem(1) solid $neutral-30; + text-align: center; + } + + &__subtitle { + margin-bottom: $spacer; + font-family: 'Geist Mono', $font-family-monospace; + font-weight: $font-weight-medium; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-70; + text-align: center; + text-transform: uppercase; + } + + &__title { + margin-bottom: $spacer; + text-align: center; + font-size: $h4-font-size; + line-height: $spacer * 3; + color: $neutral-98; + } + + &__description { + margin-bottom: $spacer; + text-align: center; + color: $neutral-70; + } + + &__code-container { + position: relative; + + &:after { + display: block; + content: ""; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: pxToRem(240); + background: linear-gradient(180deg, rgba($neutral-10, 0) 4.25%, $neutral-10 88.85%); + } + } + + &__code { + overflow: hidden; + width: 100%; + height: pxToRem(520); + margin-bottom: $spacer * 4; + border-radius: $spacer; + background-color: $neutral-10; + border: pxToRem(1) solid $neutral-20; + + &-header { + display: flex; + justify-content: space-between; + align-items: center; + height: $spacer * 3; + padding: 0 $spacer * 1.5; + background-color: $neutral-10; + border-bottom: pxToRem(1) solid $neutral-20; + } + + &-window-buttons { + display: flex; + gap: pxToRem(6); + + div { + height: pxToRem(11); + width: pxToRem(11); + border-radius: 50%; + } + + &__close { + background-color: $error-50; + } + + &__minimize { + background-color: $neutral-60; + } + + &__expand { + background-color: $success-50; + } + } + + &-bar { + margin-bottom: 0; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-100; + } + + &-content { + display: flex; + align-items: flex-start; + height: pxToRem(472); + margin: 0 math.div($spacer, 4); + padding: pxToRem(28) pxToRem(20) pxToRem(28) pxToRem(28); + background: linear-gradient($neutral-20, $ai-agents-code-bg-end); + border-right: pxToRem(1) solid $neutral-20; + border-left: pxToRem(1) solid $neutral-20; + overflow-y: auto; + overflow-x: hidden; + word-break: break-word; + overflow-wrap: anywhere; + scrollbar-width: none; + -ms-overflow-style: none; + + &::-webkit-scrollbar { + width: 0; + height: 0; + } + + .highlight { + width: calc(100% - pxToRem(24)); + margin-bottom: $spacer * 10; + background: transparent; + + pre { + display: block; + width: 100%; + padding: 0; + background: transparent; + white-space: pre-wrap; + overflow-x: hidden; + } + + code { + display: block; + width: 100%; + overflow-wrap: anywhere; + word-break: break-word; + + .line { + margin-bottom: 0; + } + + * { + font-size: $font-size-md; + line-height: $spacer * 1.5; + color: $neutral-94; + } + } + } + + &-button { + display: flex; + justify-content: center; + align-items: center; + padding: pxToRem(7); + border: pxToRem(1) solid $neutral-30; + border-radius: math.div($spacer, 4); + background: linear-gradient($neutral-20, $ai-agents-code-bg-end); + color: $neutral-80; + + &.js-copy-code__done { + color: $neutral-98; + } + + svg { + height: pxToRem(14); + width: pxToRem(14); + } + } + } + } + + &__list { + display: flex; + flex-direction: column; + gap: $spacer * 2; + } + + &__item { + flex: 1; + + &-icon { + margin-bottom: math.div($spacer, 2); + height: $spacer * 1.5; + width: $spacer * 1.5; + } + + &-content { + margin-bottom: 0; + color: $neutral-80; + + b { + color: $neutral-98; + } + } + } + + @include media-breakpoint-up(lg) { + padding-bottom: $spacer * 10; + background: radial-gradient( + 115.51% 123.53% at 50% -9.94%, + rgba($ai-agents-violet-gradient-base, 0) 0%, + rgba($ai-agents-violet-gradient-base, 0) 75%, + rgba($ai-agents-violet-gradient-base, 0.8) 90%, + $ai-agents-violet-gradient-end 100%), + $neutral-10; + + &__title { + font-size: $h3-font-size; + line-height: pxToRem(52); + } + + &__description { + font-size: $font-size-l; + line-height: $line-height-lg; + } + + &__list { + flex-direction: row; + gap: $spacer * 3; + } + } +} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-hero.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-hero.scss new file mode 100644 index 0000000000..49506baab0 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-hero.scss @@ -0,0 +1,261 @@ +@use '../../helpers/functions' as *; +@use 'sass:math'; + +.ai-agents-hero { + padding-top: $spacer * 5; + padding-bottom: $spacer * 1.5; + background: url('/img/stars-pattern.png') $neutral-10; + overflow: hidden; + + &__subtitle { + margin-top: $spacer; + margin-bottom: $spacer; + font-family: 'Geist Mono', $font-family-monospace; + letter-spacing: pxToRem(2); + font-weight: $font-weight-medium; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-80; + text-align: center; + text-transform: uppercase; + } + + &__title { + margin-bottom: $spacer; + color: $neutral-98; + font-size: $h5-font-size; + line-height: pxToRem(42); + text-align: center; + } + + &__description { + margin-bottom: 0; + color: $neutral-80; + text-align: center; + } + + &__buttons { + display: flex; + flex-direction: column; + gap: $spacer * 1.5; + margin-top: $spacer * 2; + align-items: center; + } + + &__code { + overflow: hidden; + width: 100%; + height: pxToRem(440); + margin-top: $spacer * 4; + border-radius: $spacer; + background-color: $neutral-10; + border: pxToRem(1) solid $neutral-20; + box-shadow: + pxToRem(179) pxToRem(179) pxToRem(71) 0 rgba($ai-agents-violet-glow, 0), + pxToRem(114) pxToRem(114) pxToRem(65) 0 rgba($ai-agents-violet-glow, 0.01), + pxToRem(64) pxToRem(64) pxToRem(55) 0 rgba($ai-agents-violet-glow, 0.05), + pxToRem(29) pxToRem(29) pxToRem(40) 0 rgba($ai-agents-violet-glow, 0.09), + pxToRem(7) pxToRem(7) pxToRem(22) 0 rgba($ai-agents-violet-glow, 0.1); + + &-header { + display: flex; + justify-content: space-between; + align-items: center; + height: $spacer * 2.5; + padding: 0 $spacer * 1.5; + background-color: $neutral-10; + border-bottom: pxToRem(1) solid $neutral-20; + } + + &-window-buttons { + display: flex; + gap: pxToRem(6); + + div { + height: pxToRem(11); + width: pxToRem(11); + border-radius: 50%; + } + + &__close { + background-color: $error-50; + } + + &__minimize { + background-color: $neutral-60; + } + + &__expand { + background-color: $success-50; + } + } + + &-bar { + margin-bottom: 0; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-100; + } + + &-content { + display: flex; + align-items: flex-start; + height: pxToRem(400); + margin: 0 math.div($spacer, 4); + padding: pxToRem(28) pxToRem(20) pxToRem(28) pxToRem(28); + background: linear-gradient($neutral-20, $ai-agents-code-bg-end); + border-right: pxToRem(1) solid $neutral-20; + border-left: pxToRem(1) solid $neutral-20; + overflow-y: auto; + overflow-x: hidden; + word-break: break-word; + overflow-wrap: anywhere; + scrollbar-width: none; + -ms-overflow-style: none; + + &::-webkit-scrollbar { + width: 0; + height: 0; + } + + .highlight { + width: calc(100% - pxToRem(24)); + margin-bottom: 0; + background: transparent; + + pre { + display: block; + width: 100%; + padding: 0; + background: transparent; + white-space: pre-wrap; + overflow-x: hidden; + } + + code { + display: block; + width: 100%; + overflow-wrap: anywhere; + word-break: break-word; + + .line { + margin-bottom: 0; + } + + * { + font-size: $font-size-s; + line-height: $line-height-sm; + color: $ai-agents-code-default-dark; + } + + .c1 { + color: $neutral-60; + } + + .s2, .nb { + color: $ai-agents-code-string; + } + + .k, .kn { + color: $ai-agents-code-keyword; + } + + .mi { + color: $ai-agents-code-number; + } + } + } + + &-button { + display: flex; + justify-content: center; + align-items: center; + padding: pxToRem(7); + border: pxToRem(1) solid $neutral-30; + border-radius: math.div($spacer, 4); + background: linear-gradient($neutral-20, $ai-agents-code-bg-end); + color: $neutral-80; + + &.js-copy-code__done { + color: $neutral-98; + } + + svg { + height: pxToRem(14); + width: pxToRem(14); + } + } + } + } + + &__logos { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + gap: $spacer * 1.5; + margin-top: $spacer * 5; + + &-title { + margin: 0; + font-family: 'Geist Mono', $font-family-monospace; + letter-spacing: pxToRem(2); + font-weight: $font-weight-medium; + font-size: $font-size-xs; + line-height: $line-height-sm; + text-transform: uppercase; + color: $neutral-98; + } + + &-list { + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + } + + &-item { + display: flex; + justify-content: center; + align-items: center; + width: pxToRem(200); + height: $spacer * 3.5; + } + } + + @include media-breakpoint-up(lg) { + &__subtitle { + text-align: left; + } + + &__title { + font-size: $h2-font-size; + line-height: pxToRem(62); + text-align: left; + } + + &__description { + max-width: pxToRem(490); + font-size: $font-size-xl; + line-height: pxToRem(30); + text-align: left; + } + + &__buttons { + flex-direction: row; + } + + &__code { + margin-top: 0; + } + + &__logos { + flex-direction: row; + margin-top: $spacer * 9; + + &-list { + justify-content: flex-end; + } + } + } +} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-how-it-works.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-how-it-works.scss new file mode 100644 index 0000000000..6a4d31637d --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-how-it-works.scss @@ -0,0 +1,251 @@ +@use '../../helpers/functions' as *; +@use 'sass:math'; + +.ai-agents-how-it-works { + padding-top: $spacer * 5; + padding-bottom: $spacer * 5; + background-color: $neutral-94; + overflow: hidden; + + &__subtitle { + margin-bottom: $spacer; + font-family: 'Geist Mono', $font-family-monospace; + font-weight: $font-weight-medium; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-30; + text-align: center; + text-transform: uppercase; + } + + &__title { + margin-bottom: $spacer; + text-align: center; + font-size: $h4-font-size; + line-height: $spacer * 3; + color: $neutral-20; + } + + &__description { + margin-bottom: $spacer * 4; + text-align: center; + color: $neutral-30; + } + + &__cards { + margin-bottom: $spacer * 4; + display: flex; + flex-direction: column; + } + + &__card { + height: 100%; + position: relative; + + & > div { + height: 100%; + } + + &-index { + display: flex; + align-items: center; + justify-content: center; + height: $spacer * 2; + width: $spacer * 2.5; + margin-bottom: math.div($spacer, 2); + border-radius: pxToRem(2); + font-size: $font-size-l; + line-height: $line-height-lg; + font-weight: $font-weight-medium; + } + + &-line { + position: absolute; + top: 100%; + left: 50%; + transform: translate(-50%, 0); + height: $spacer * 4; + width: pxToRem(2); + z-index: 1; + + &:after, &:before { + display: block; + content: ""; + position: absolute; + left: calc((pxToRem(9) - pxToRem(2)) / 2 * -1); + width: pxToRem(9); + height: pxToRem(9); + border-radius: 50%; + border: 1px solid $neutral-90; + background: $neutral-98; + box-shadow: + pxToRem(3) pxToRem(4) pxToRem(1) 0 rgba($ai-agents-connector-shadow, 0), + pxToRem(2) pxToRem(2) pxToRem(1) 0 rgba($ai-agents-connector-shadow, 0.01), + pxToRem(1) pxToRem(1) pxToRem(1) 0 rgba($ai-agents-connector-shadow, 0.05), + 0 pxToRem(1) pxToRem(1) 0 rgba($ai-agents-connector-shadow, 0.09); + } + + &:before { + top: pxToRem(-5); + } + + &:after { + bottom: pxToRem(-5); + } + } + + &:nth-of-type(1) { + .ai-agents-how-it-works__card-index { + color: $secondary-violet-50; + border-radius: 2px; + border-top: math.div($spacer, 32) solid $secondary-violet-70; + border-right: math.div($spacer, 32) solid $secondary-violet-70; + background: $secondary-violet-90; + } + + .ai-agents-how-it-works__card-line { + background: linear-gradient(180deg, rgba($secondary-blue-50, 0.1) 0%, $secondary-blue-50 100%); + } + } + + &:nth-of-type(2) { + .ai-agents-how-it-works__card-index { + color: $secondary-blue-50; + border-radius: 2px; + border-top: math.div($spacer, 32) solid $secondary-blue-70; + border-right: math.div($spacer, 32) solid $secondary-blue-70; + background: $secondary-blue-90; + } + + .ai-agents-how-it-works__card-line { + background: linear-gradient(180deg, rgba($secondary-teal-50, 0.1) 0%, $secondary-teal-50 100%); + } + } + + &:nth-of-type(3) { + .ai-agents-how-it-works__card-index { + color: $secondary-teal-50; + border-radius: 2px; + border-top: math.div($spacer, 32) solid $secondary-teal-70; + border-right: math.div($spacer, 32) solid $secondary-teal-70; + background: $secondary-teal-90; + } + } + + &-title { + padding-bottom: $spacer; + margin-bottom: $spacer;font-size: $font-size-xl; + line-height: pxToRem(30); + color: $neutral-20; + border-bottom: pxToRem(1) solid $neutral-90; + } + + &-description { + margin-bottom: $spacer * 1.5; + color: $neutral-40; + } + + .highlight { + background: $neutral-94; + margin-bottom: 0; + + pre { + display: block; + width: 100%; + padding: pxToRem(12) pxToRem(6) pxToRem(12) math.div($spacer, 2); + background: transparent; + white-space: pre-wrap; + overflow-x: hidden; + border-radius: math.div($spacer, 2); + } + + code { + display: block; + width: 100%; + overflow-wrap: anywhere; + word-break: break-word; + + .line { + margin-bottom: 0; + } + + * { + font-size: $font-size-xs; + line-height: pxToRem(18); + color: $neutral-30; + } + + .nb { + color: $ai-agents-code-builtin; + } + + .s2 { + color: $ai-agents-code-string-alt; + } + } + } + } + + &__preview { + width: 100%; + + img { + width: 100%; + } + } + + @include media-breakpoint-up(lg) { + &__title { + font-size: $h3-font-size; + line-height: pxToRem(52); + } + + &__description { + margin-top: $spacer; + font-size: $font-size-l; + line-height: $line-height-lg; + } + + &__cards { + flex-direction: row; + justify-content: center; + } + + &__card { + &-line { + top: 50%; + left: 100%; + transform: translate(-50%, 0); + height: pxToRem(2); + width: $spacer * 4; + + &:after, &:before { + top: calc((pxToRem(9) - pxToRem(2)) / 2 * -1); + bottom: auto; + } + + &:before { + left: pxToRem(-5); + right: auto; + } + + &:after { + right: pxToRem(-5); + left: auto; + } + } + + &:nth-of-type(1) { + .ai-agents-how-it-works__card-line { + background: linear-gradient(90deg, rgba($secondary-blue-50, 0.1) 0%, $secondary-blue-50 100%); + } + } + + &:nth-of-type(2) { + .ai-agents-how-it-works__card-line { + background: linear-gradient(90deg, rgba($secondary-teal-50, 0.1) 0%, $secondary-teal-50 100%); + } + } + } + } +} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-integrations.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-integrations.scss new file mode 100644 index 0000000000..8fd3dabf41 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-integrations.scss @@ -0,0 +1,115 @@ +@use '../../helpers/functions' as *; + +.ai-agents-integrations { + padding-top: $spacer * 5; + padding-bottom: $spacer * 5; + position: relative; + background: radial-gradient( + 107.37% 114.83% at 50% 94.96%, + rgba($ai-agents-violet-gradient-base, 0) 0%, + rgba($ai-agents-violet-gradient-base, 0) 75%, + rgba($ai-agents-violet-gradient-base, 0.8) 90%, + $ai-agents-violet-gradient-end 100%), + $neutral-10; + + &__subtitle { + margin-bottom: $spacer; + font-family: 'Geist Mono', $font-family-monospace; + font-weight: $font-weight-medium; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-70; + text-align: center; + text-transform: uppercase; + } + + &__title { + margin-bottom: $spacer; + text-align: center; + font-size: $h4-font-size; + line-height: $spacer * 3; + color: $neutral-98; + } + + &__description { + margin-bottom: 0; + text-align: center; + color: $neutral-70; + } + + &__list { + display: flex; + flex-direction: column; + gap: $spacer * 4; + margin-top: $spacer * 4; + } + + &__block { + &-title { + margin-bottom: $spacer * 1.5; + font-size: $font-size-xl; + line-height: pxToRem(30); + font-weight: $font-weight-normal; + color: $neutral-98; + text-align: center; + } + + &-items { + display: flex; + flex-wrap: wrap; + } + + &-item { + display: flex; + justify-content: center; + align-items: center; + width: 50%; + height: $spacer * 5; + border: pxToRem(1) solid $neutral-20; + margin-top: pxToRem(-1); + margin-left: pxToRem(-1); + + img { + max-width: 100%; + } + } + } + + @include media-breakpoint-up(lg) { + &__header { + position: sticky; + top: pxToRem(140); + margin-bottom: $spacer * 5; + } + + &__subtitle { + text-align: left; + } + + &__title { + max-width: pxToRem(445); + font-size: $h3-font-size; + line-height: pxToRem(52); + text-align: left; + } + + &__description { + max-width: pxToRem(445); + font-size: $font-size-l; + line-height: $line-height-lg; + text-align: left; + } + + &__list { + margin-top: $spacer * 2.5; + } + + &__block { + &-title { + font-size: $h6-font-size; + line-height: pxToRem(34); + text-align: left; + } + } + } +} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-proof.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-proof.scss new file mode 100644 index 0000000000..f1eeb6536a --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-proof.scss @@ -0,0 +1,61 @@ +@use '../../helpers/functions' as *; +@use 'sass:math'; + +.ai-agents-proof { + padding-top: $spacer * 5; + padding-bottom: $spacer * 5; + background-color: $neutral-94; + + &__items { + display: flex; + flex-direction: column; + } + + &__item { + flex: 1; + flex-shrink: 0; + + &-title { + margin-bottom: math.div($spacer, 2); + color: $secondary-blue-50; + font-size: $h3-font-size; + line-height: pxToRem(58); + font-weight: $font-weight-medium; + } + + &-description { + margin-bottom: 0; + font-size: $font-size-xl; + line-height: pxToRem(30); + font-weight: $font-weight-light; + color: $neutral-30; + } + } + + &__divider { + flex-shrink: 0; + width: 100%; + height: pxToRem(1); + margin: $spacer * 2 0; + background-color: $neutral-80; + } + + @include media-breakpoint-up(lg) { + padding-top: $spacer * 7; + padding-bottom: $spacer * 7; + + &__items { + flex-direction: row; + } + + &__item { + padding: $spacer 0; + } + + &__divider { + width: pxToRem(1); + height: auto; + margin: 0 $spacer * 3; + } + } +} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-resources.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-resources.scss new file mode 100644 index 0000000000..c38a46ae5e --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-resources.scss @@ -0,0 +1,71 @@ +@use '../../helpers/functions' as *; + +.ai-agents-resources { + padding-bottom: $spacer * 4; + background-color: $neutral-94; + + &__header { + margin-bottom: $spacer * 5; + padding-top: $spacer * 4; + border-top: pxToRem(1) solid $neutral-80; + text-align: center; + } + + &__subtitle { + margin-bottom: $spacer; + font-family: 'Geist Mono', $font-family-monospace; + font-weight: $font-weight-medium; + font-size: $font-size-s; + line-height: $line-height-sm; + color: $neutral-30; + text-transform: uppercase; + } + + &__title { + margin-bottom: $spacer; + font-size: $h4-font-size; + line-height: $spacer * 3; + color: $neutral-20; + } + + &__description { + margin-bottom: $spacer * 4; + color: $neutral-30; + } + + &__card { + &-icon { + height: $spacer * 1.5; + width: $spacer * 1.5; + margin-bottom: $spacer * 1.5; + } + + &-title { + margin-bottom: $spacer; + font-size: $h6-font-size; + line-height: $spacer * 2; + color: $neutral-20; + } + + &-description { + margin-bottom: $spacer * 2.5; + color: $neutral-40; + } + + &-link { + margin-top: auto; + } + } + + @include media-breakpoint-up(lg) { + &__title { + font-size: $h3-font-size; + line-height: pxToRem(52); + } + + &__description { + font-size: $font-size-l; + line-height: $line-height-lg; + } + } +} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-variables.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-variables.scss new file mode 100644 index 0000000000..f9cc8416d9 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_ai-agents-variables.scss @@ -0,0 +1,17 @@ +// Ai-agents colors not defined in _theme-variables.scss + +$ai-agents-code-bg-end: #0e1424; + +$ai-agents-violet-gradient-base: #4325ae; +$ai-agents-violet-gradient-end: #6143e0; +$ai-agents-violet-glow: #6047ff; + +$ai-agents-connector-shadow: #202227; + +// syntax highlighting +$ai-agents-code-default-dark: #c5c8c6; +$ai-agents-code-string: #26a69a; +$ai-agents-code-keyword: #7e75ff; +$ai-agents-code-number: #29b6f6; +$ai-agents-code-builtin: #ef6c00; +$ai-agents-code-string-alt: #009688; diff --git a/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_index.scss b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_index.scss new file mode 100644 index 0000000000..c6a4546559 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/css/partials/ai-agents/_index.scss @@ -0,0 +1,8 @@ +@import 'ai-agents-variables'; +@import 'ai-agents-builder-patterns'; +@import 'ai-agents-features'; +@import 'ai-agents-hero'; +@import 'ai-agents-integrations'; +@import 'ai-agents-how-it-works'; +@import 'ai-agents-proof'; +@import 'ai-agents-resources'; diff --git a/qdrant-landing/themes/qdrant-2024/assets/js/ai-agents/builder-patterns.js b/qdrant-landing/themes/qdrant-2024/assets/js/ai-agents/builder-patterns.js new file mode 100644 index 0000000000..135b7e4548 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/js/ai-agents/builder-patterns.js @@ -0,0 +1,221 @@ +export function initBuilderPatterns() { + const section = document.querySelector('.ai-agents-builder-patterns'); + if (!section) return; + + const features = section.querySelectorAll('.ai-agents-builder-patterns__feature'); + const blocks = section.querySelectorAll( + '.ai-agents-builder-patterns__visual .ai-agents-builder-patterns__visual-block', + ); + const featuresContainer = section.querySelector('.ai-agents-builder-patterns__features'); + const visualContainer = section.querySelector('.ai-agents-builder-patterns__visual'); + const content = section.querySelector('.ai-agents-builder-patterns__content'); + const slider = section.querySelector('.ai-agents-builder-patterns__slider'); + if (!features.length) return; + + const breakpoints = { lg: 992 }; + + let currentIndex = 0; + let autoplayInterval = null; + let isInView = true; + let heightsInitialized = false; + let lastMeasuredWidth = 0; + let wasLgUp = window.innerWidth >= breakpoints.lg; + const AUTOPLAY_DELAY = 5000; + // Ignore sub-pixel scrollbar gutter oscillation (overlay scrollbars on macOS). + const WIDTH_CHANGE_THRESHOLD = 24; + + const isLgUp = () => window.innerWidth >= breakpoints.lg; + + const goToFeature = (index) => { + if (index < 0 || index >= features.length) return; + + features.forEach((feature) => { + feature.classList.remove('ai-agents-builder-patterns__feature--active'); + }); + + blocks.forEach((block) => { + block.classList.remove('ai-agents-builder-patterns__visual-block--active'); + }); + + features[index].classList.add('ai-agents-builder-patterns__feature--active'); + blocks[index]?.classList.add('ai-agents-builder-patterns__visual-block--active'); + + currentIndex = index; + }; + + const nextFeature = () => { + goToFeature((currentIndex + 1) % features.length); + }; + + const stopAutoplay = () => { + if (!autoplayInterval) return; + clearInterval(autoplayInterval); + autoplayInterval = null; + }; + + const startAutoplay = () => { + stopAutoplay(); + if (!isLgUp() || !isInView || slider?.matches(':hover')) return; + autoplayInterval = setInterval(nextFeature, AUTOPLAY_DELAY); + }; + + const syncAutoplay = () => { + if (!isLgUp() || !isInView) { + stopAutoplay(); + return; + } + startAutoplay(); + }; + + const setMinHeight = (element, height) => { + if (!element || !height) return; + const next = `${height}px`; + if (element.style.minHeight === next) return; + element.style.minHeight = next; + }; + + const measureOffscreenClone = (element, measure) => { + const width = element.offsetWidth; + if (!width) return 0; + + const clone = element.cloneNode(true); + clone.setAttribute('aria-hidden', 'true'); + Object.assign(clone.style, { + position: 'absolute', + left: '-9999px', + top: '0', + visibility: 'hidden', + pointerEvents: 'none', + width: `${width}px`, + minHeight: '0', + }); + + section.appendChild(clone); + const maxHeight = measure(clone); + clone.remove(); + + return maxHeight; + }; + + const applyFeaturesMinHeight = () => { + if (!featuresContainer) return; + + const maxHeight = measureOffscreenClone(featuresContainer, (clone) => { + const cloneFeatures = clone.querySelectorAll('.ai-agents-builder-patterns__feature'); + let height = 0; + + cloneFeatures.forEach((_, index) => { + cloneFeatures.forEach((feature) => { + feature.classList.remove('ai-agents-builder-patterns__feature--active'); + }); + cloneFeatures[index].classList.add('ai-agents-builder-patterns__feature--active'); + height = Math.max(height, clone.offsetHeight); + }); + + return height; + }); + + setMinHeight(featuresContainer, maxHeight); + }; + + const applyVisualMinHeight = () => { + if (!visualContainer) return; + + if (!isLgUp()) { + visualContainer.style.removeProperty('min-height'); + return; + } + + const maxHeight = measureOffscreenClone(visualContainer, (clone) => { + const cloneBlocks = clone.querySelectorAll('.ai-agents-builder-patterns__visual-block'); + let height = 0; + + cloneBlocks.forEach((block) => { + block.style.display = 'block'; + height = Math.max(height, block.offsetHeight); + }); + + return height; + }); + + setMinHeight(visualContainer, maxHeight); + }; + + const applyLayoutHeights = () => { + applyFeaturesMinHeight(); + applyVisualMinHeight(); + }; + + const initLayoutHeights = () => { + applyLayoutHeights(); + heightsInitialized = true; + if (content) { + lastMeasuredWidth = Math.round(content.getBoundingClientRect().width); + } + }; + + if (slider) { + slider.addEventListener('mouseenter', stopAutoplay); + slider.addEventListener('mouseleave', syncAutoplay); + } + + features.forEach((feature, index) => { + feature.addEventListener('click', () => { + goToFeature(index); + syncAutoplay(); + }); + }); + + if (content && typeof ResizeObserver !== 'undefined') { + const resizeObserver = new ResizeObserver((entries) => { + if (!heightsInitialized) return; + + const width = Math.round(entries[0]?.contentRect.width ?? 0); + if (!width || Math.abs(width - lastMeasuredWidth) < WIDTH_CHANGE_THRESHOLD) return; + + lastMeasuredWidth = width; + applyLayoutHeights(); + }); + + resizeObserver.observe(content); + } + + window.addEventListener('resize', () => { + const lgUp = isLgUp(); + if (lgUp !== wasLgUp) { + wasLgUp = lgUp; + applyLayoutHeights(); + if (content) { + lastMeasuredWidth = Math.round(content.getBoundingClientRect().width); + } + syncAutoplay(); + } + }); + + if (typeof IntersectionObserver !== 'undefined') { + const visibilityObserver = new IntersectionObserver( + (entries) => { + isInView = entries[0]?.isIntersecting ?? false; + syncAutoplay(); + }, + { threshold: 0 }, + ); + + visibilityObserver.observe(section); + } + + goToFeature(0); + + // Measure once after webfonts load. An earlier measure + later remeasure shifts + // min-heights while the section is on screen; scroll anchoring and + // `scroll-behavior: smooth` on then correct scroll position once. + if (document.fonts?.status === 'loaded') { + initLayoutHeights(); + } else if (document.fonts?.ready) { + document.fonts.ready.then(initLayoutHeights); + } else { + initLayoutHeights(); + } + + syncAutoplay(); +} diff --git a/qdrant-landing/themes/qdrant-2024/assets/js/ai-agents/index.js b/qdrant-landing/themes/qdrant-2024/assets/js/ai-agents/index.js new file mode 100644 index 0000000000..a028b5b5e7 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/assets/js/ai-agents/index.js @@ -0,0 +1,4 @@ +import '../copy-code.js'; +import { initBuilderPatterns } from './builder-patterns.js'; + +initBuilderPatterns(); diff --git a/qdrant-landing/themes/qdrant-2024/assets/js/copy-code.js b/qdrant-landing/themes/qdrant-2024/assets/js/copy-code.js index da7bb64944..5981ae484b 100644 --- a/qdrant-landing/themes/qdrant-2024/assets/js/copy-code.js +++ b/qdrant-landing/themes/qdrant-2024/assets/js/copy-code.js @@ -2,53 +2,118 @@ import ClipboardJS from 'clipboard'; import Popover from 'bootstrap/js/src/popover.js'; (function () { - let codeBlocks = document.querySelectorAll('.highlight > pre'); - - const codeClipboard = new ClipboardJS('.copy-code'); + let codeClipboard = null; const popoversMap = {}; - // adds copy buttons with specific id for each code block - for (let block of codeBlocks) { - const id = btoa(Math.random().toString()).substr(10, 5); - block.id = id; - - const icon = document.createElement('i'); - icon.role = 'tooltip'; - icon.title = 'Copy to clipboard'; - - const copyBtn = document.createElement('button'); - copyBtn.type = 'button'; - copyBtn.role = 'button'; - copyBtn.classList.add('d-inline-block', 'copy-code', 'lead'); - copyBtn.id = 'copy-popover-' + id; - copyBtn.dataset.clipboardTarget = '#' + id; - copyBtn.appendChild(icon); - block.after(copyBtn); - - popoversMap[id] = new Popover(copyBtn, { - content: 'Text copied!', - placement: 'left', - trigger: 'manual', - template: - '', + const initMarkupMode = (root = document) => { + root.querySelectorAll('.js-copy-code').forEach((wrap) => { + if (wrap.dataset.copyCodeInitialized) return; + + const btnCopy = wrap.querySelector('.js-copy-code__copy'); + const btnDone = wrap.querySelector('.js-copy-code__done'); + const codeEl = wrap.querySelector('.highlight code'); + + if (!btnCopy || !btnDone || !codeEl) return; + + wrap.dataset.copyCodeInitialized = 'true'; + + btnCopy.type = 'button'; + btnDone.type = 'button'; + + const copyDisplay = + getComputedStyle(btnCopy).display === 'none' + ? 'inline-flex' + : getComputedStyle(btnCopy).display; + const doneDisplay = + getComputedStyle(btnDone).display === 'none' + ? copyDisplay + : getComputedStyle(btnDone).display; + + btnDone.style.display = 'none'; + + btnCopy.addEventListener('click', async () => { + const text = codeEl.textContent || ''; + + try { + await navigator.clipboard.writeText(text); + + btnCopy.style.display = 'none'; + btnDone.style.display = doneDisplay; + + setTimeout(() => { + btnDone.style.display = 'none'; + btnCopy.style.display = copyDisplay; + }, 1200); + } catch (e) { + console.error(e); + } + }); }); - } + }; + + const initAutoInjectMode = (root = document) => { + root.querySelectorAll('.highlight > pre').forEach((block) => { + if (block.closest('.js-copy-code')) return; + if (block.closest('.without-copy-code')) return; + if (block.dataset.copyCodeInitialized) return; + if (block.nextElementSibling?.classList.contains('copy-code')) return; + + block.dataset.copyCodeInitialized = 'true'; + + const id = btoa(Math.random().toString()).substr(10, 5); + block.id = id; + + const icon = document.createElement('i'); + icon.role = 'tooltip'; + icon.title = 'Copy to clipboard'; + + const copyBtn = document.createElement('button'); + copyBtn.type = 'button'; + copyBtn.role = 'button'; + copyBtn.classList.add('d-inline-block', 'copy-code', 'lead'); + copyBtn.id = 'copy-popover-' + id; + copyBtn.dataset.clipboardTarget = '#' + id; + copyBtn.appendChild(icon); + block.after(copyBtn); + + popoversMap[id] = new Popover(copyBtn, { + content: 'Text copied!', + placement: 'left', + trigger: 'manual', + template: + '', + }); + }); + + if (!codeClipboard) { + codeClipboard = new ClipboardJS('.copy-code'); + + codeClipboard.on('success', (e) => { + const targetId = e.trigger.dataset.clipboardTarget.slice(1); + const popover = popoversMap[targetId]; + + if (!popover) return; + + popover.show(); + + setTimeout(() => { + popover.hide(); + }, 2000); - codeClipboard.on('success', function (e) { - const targetId = e.trigger.dataset.clipboardTarget.slice(1); + e.clearSelection(); + }); - const popover = popoversMap[targetId]; - popover.show(); + codeClipboard.on('error', (e) => { + console.error('Action:', e.action); + console.error('Trigger:', e.trigger); + }); + } + }; - const t = setTimeout(() => { - popover.hide(); - clearTimeout(t); - }, 2000); - e.clearSelection(); - }); + const initCopyCode = (root = document) => { + initMarkupMode(root); + initAutoInjectMode(root); + }; - codeClipboard.on('error', function (e) { - console.error('Action:', e.action); - console.error('Trigger:', e.trigger); - }); + initCopyCode(document); }).call(this); diff --git a/qdrant-landing/themes/qdrant-2024/layouts/ai-agents/list.html b/qdrant-landing/themes/qdrant-2024/layouts/ai-agents/list.html index af008ebf96..3f3ec8dd76 100644 --- a/qdrant-landing/themes/qdrant-2024/layouts/ai-agents/list.html +++ b/qdrant-landing/themes/qdrant-2024/layouts/ai-agents/list.html @@ -1,26 +1,21 @@ {{ define "main" }} {{ partial "site-header" . }} - {{ with (.Site.GetPage "/ai-agents/ai-agents-hero") }} - {{ partial "use-cases-vector-hero" . }} - {{ end }} + {{ partial "ai-agents/ai-agents-hero" . }} -
- {{ partial "ai-agents-features" . }} + {{ partial "ai-agents/ai-agents-how-it-works" . }} - {{ with (.Site.GetPage "/ai-agents/ai-agents-integrations") }} - {{ partial "use-cases-vector-integrations" (dict "context" . "class" "ai-agents-integrations") }} - {{ end }} + {{ partial "ai-agents/ai-agents-builder-patterns" . }} - {{ partial "ai-agents-webinar" . }} + {{ partial "ai-agents/ai-agents-integrations" . }} - {{ with (.Site.GetPage "/ai-agents/ai-agents-use-cases") }} - {{ partial "use-cases-vector-cases" (dict "context" . "class" "ai-agents-use-cases") }} - {{ end }} + {{ partial "ai-agents/ai-agents-features" . }} + + {{ partial "ai-agents/ai-agents-proof" . }} - {{ partial "ai-agents-video" . }} + {{ partial "ai-agents/ai-agents-resources" . }} - {{ with (.Site.GetPage "/ai-agents/ai-agents-get-started") }} - {{ partial "get-started-small" (dict "context" . "class" "ai-agents-get-started") }} + {{ with (.Site.GetPage "/ai-agents/ai-agents-cta-banner") }} + {{ partial "cta-banner" . }} {{ end }} {{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-features.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-features.html deleted file mode 100644 index 67f25576ec..0000000000 --- a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-features.html +++ /dev/null @@ -1,42 +0,0 @@ -{{ with (.Site.GetPage "/ai-agents/ai-agents-features") }} -
-
-
-
- {{ .Params.image.alt }} -
-
-

{{ .Params.title }}

-

{{ .Params.description }}

- {{ range .Params.cases }} -
-
{{ .title }}
-

{{ .description }}

-
- {{ end }} -
-
- -

{{ .Params.featuresTitle }}

- -
- {{ range $index, $element := .Params.features }} - - {{ end }} -
-
-
-{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-video.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-video.html deleted file mode 100644 index ca3325f623..0000000000 --- a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-video.html +++ /dev/null @@ -1,14 +0,0 @@ -{{ with (.Site.GetPage "/ai-agents/ai-agents-video") }} -
-
-
- {{ partial "tag" . }} -

{{ .Params.title }}

-

{{ .Params.description }}

- {{ .Params.link.text }} -
- - {{ partial "youtube-video" .Params.youtube }} -
-
-{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-webinar.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-webinar.html deleted file mode 100644 index 26b10daebb..0000000000 --- a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents-webinar.html +++ /dev/null @@ -1,19 +0,0 @@ -{{ with (.Site.GetPage "/ai-agents/ai-agents-webinar") }} -
-
-
-
- {{ partial "tag" . }} - - -

{{ .Params.title }}

-

{{ .Params.description }}

- {{ .Params.link.text }} -
-
- {{ .Params.image.alt }} -
-
-
-
-{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-builder-patterns.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-builder-patterns.html new file mode 100644 index 0000000000..c0f141e143 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-builder-patterns.html @@ -0,0 +1,63 @@ +{{ with (.Site.GetPage "/ai-agents/ai-agents-builder-patterns") }} +
+
+
+

{{ .Params.subtitle }}

+

{{ .Params.title }}

+

{{ .Params.description }}

+
+ +
+
+
+ {{ range $index, $feature := .Params.features }} +
+

{{ $feature.title }}

+
+

{{ $feature.description | safeHTML }}

+ + {{/* Visible only below lg */}} +
+ {{ partial "ai-agents/ai-agents-code-window" (dict + "block" "ai-agents-builder-patterns" + "codeBar" .codeBar + "code" .code + "language" ($.Params.language | default "python") + "id" (printf "bp-mobile-%d" $index) + ) }} + +
+
{{ .cardTitle }}
+

{{ .cardContent | safeHTML }}

+
+
+
+
+ {{ end }} +
+ +
+ + {{/* Visible from lg up */}} + {{ range $index, $feature := .Params.features }} +
+ {{ partial "ai-agents/ai-agents-code-window" (dict + "block" "ai-agents-builder-patterns" + "codeBar" .codeBar + "code" .code + "language" ($.Params.language | default "python") + "id" (printf "bp-desktop-%d" $index) + ) }} + +
+
{{ .cardTitle }}
+

{{ .cardContent | safeHTML }}

+
+
+ {{ end }} +
+
+
+
+
+{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-code-window.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-code-window.html new file mode 100644 index 0000000000..baf61f83e0 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-code-window.html @@ -0,0 +1,45 @@ +{{/* + Reusable code window with copy button for AI Agents sections. + + Params: + - block: BEM block prefix (e.g. "ai-agents-hero") + - codeBar: filename shown in the header + - code: source code string + - id: unique suffix for SVG clip-path IDs (required when multiple instances per page) + - language: optional, default "python" +*/}} +{{ $block := .block }} +{{ $clipId := printf "code-window-clip-%s" .id }} +{{ $lang := .language | default "python" }} +
+
+
+
+
+
+
+

{{ .codeBar }}

+
+
+ {{ with .code }} + {{ highlight . $lang "" }} + {{ end }} + + +
+
diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-features.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-features.html new file mode 100644 index 0000000000..cbcf1186bb --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-features.html @@ -0,0 +1,37 @@ +{{ with (.Site.GetPage "/ai-agents/ai-agents-features") }} +
+
+
+
+
+

{{ .Params.subtitle }}

+

{{ .Params.title }}

+

{{ .Params.description }}

+ + {{ .Params.button.text }} + +
+ +
+ {{ partial "ai-agents/ai-agents-code-window" (dict + "block" "ai-agents-features" + "codeBar" .Params.codeBar + "code" .Params.code + "language" (.Params.language | default "python") + "id" "features" + ) }} +
+ +
+ {{ range .Params.features }} +
+ {{ .icon.alt }} +

{{ .content | safeHTML }}

+
+ {{ end }} +
+
+
+
+
+{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-hero.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-hero.html new file mode 100644 index 0000000000..cbf7b2c56c --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-hero.html @@ -0,0 +1,42 @@ +{{ with (.Site.GetPage "/ai-agents/ai-agents-hero") }} +
+
+
+
+

{{ .Params.subtitle }}

+

{{ .Params.title }}

+

{{ .Params.description }}

+ +
+
+ {{ partial "ai-agents/ai-agents-code-window" (dict + "block" "ai-agents-hero" + "codeBar" .Params.codeBar + "code" .Params.code + "language" (.Params.language | default "python") + "id" "hero" + ) }} +
+
+
+

{{ .Params.logosTitle }}

+
+ {{ range .Params.logos }} +
+ {{ .alt }} +
+ {{ end }} +
+
+
+
+
+
+{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-how-it-works.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-how-it-works.html new file mode 100644 index 0000000000..2f0636a21f --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-how-it-works.html @@ -0,0 +1,33 @@ +{{ with (.Site.GetPage "/ai-agents/ai-agents-how-it-works") }} +
+
+

{{ .Params.subtitle }}

+

{{ .Params.title }}

+

{{ .Params.description }}

+
+ {{ range $index, $step := .Params.steps }} +
+
+ 0{{ add $index 1 }} +
{{ .title }}
+

{{ .description }}

+
+ {{ with .code }} + {{ $lang := $.Params.language | default "python" }} + {{ highlight . $lang "" }} + {{ end }} +
+ {{ $num := add $index 1 }} + {{ if or (eq $num 1) (eq $num 2) }} +
+ {{ end }} +
+
+ {{ end }} +
+
+ {{ .Params.image.alt }} +
+
+
+{{ end }} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-integrations.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-integrations.html new file mode 100644 index 0000000000..efe70af6d0 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-integrations.html @@ -0,0 +1,31 @@ +{{ with (.Site.GetPage "/ai-agents/ai-agents-integrations") }} +
+
+
+
+
+

{{ .Params.subtitle }}

+

{{ .Params.title }}

+

{{ .Params.description }}

+
+
+
+
+ {{ range .Params.integrations }} +
+
{{ .title }}
+
+ {{ range .logos }} +
+ {{ .alt }} +
+ {{ end }} +
+
+ {{ end }} +
+
+
+
+
+{{ end }} \ No newline at end of file diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-proof.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-proof.html new file mode 100644 index 0000000000..8b8d128336 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-proof.html @@ -0,0 +1,19 @@ +{{ with (.Site.GetPage "/ai-agents/ai-agents-proof") }} +
+
+
+ {{ $proofs := .Params.proofs }} + {{ $last := sub (len $proofs) 1 }} + {{ range $i, $proof := $proofs }} +
+

{{ $proof.title }}

+

{{ $proof.description }}

+
+ {{ if ne $i $last }} +
+ {{ end }} + {{ end }} +
+
+
+{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-resources.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-resources.html new file mode 100644 index 0000000000..76f36f6e00 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/ai-agents/ai-agents-resources.html @@ -0,0 +1,25 @@ +{{ with (.Site.GetPage "/ai-agents/ai-agents-resources") }} +
+
+
+

{{ .Params.subtitle }}

+

{{ .Params.title }}

+

{{ .Params.description }}

+
+
+ {{ range .Params.resources }} +
+
+ {{ .icon.alt }} +
{{ .title }}
+

{{ .description }}

+ +
+
+ {{ end }} +
+
+
+{{ end }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/cta-banner.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/cta-banner.html index 3ae5d96a11..63431a3727 100644 --- a/qdrant-landing/themes/qdrant-2024/layouts/partials/cta-banner.html +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/cta-banner.html @@ -10,9 +10,16 @@

{{ .Params.title | safeHTML }}

{{ if .Params.description }}

{{ .Params.description }}

{{ end }} - - {{ .Params.button.text }} - +
+ + {{ .Params.button.text }} + + {{ if .Params.secondaryButton }} + + {{ .Params.secondaryButton.text }} + + {{ end }} +
{{ partial "picture" (dict "src" $illustration.src "alt" $illustration.alt "loading" "lazy" "decoding" "async") }} diff --git a/qdrant-landing/themes/qdrant-2024/layouts/partials/js.html b/qdrant-landing/themes/qdrant-2024/layouts/partials/js.html index d2d2282bc7..ba17f5904f 100644 --- a/qdrant-landing/themes/qdrant-2024/layouts/partials/js.html +++ b/qdrant-landing/themes/qdrant-2024/layouts/partials/js.html @@ -122,6 +122,11 @@ {{ end }} +{{ if eq .Section "ai-agents" }} + {{ $aiAgentsJs := resources.Get "js/ai-agents/index.js" | js.Build | minify | resources.Fingerprint "sha512" }} + +{{ end }} + {{ if in (slice "blog" "articles" "course" "learn" "benchmarks" "docs" "documentation") .Section }} diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/boxes-purple.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/boxes-purple.svg new file mode 100644 index 0000000000..46ca46a9fa --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/boxes-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/brain-blue.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/brain-blue.svg new file mode 100644 index 0000000000..549803836e --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/brain-blue.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/building-blue.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/building-blue.svg new file mode 100644 index 0000000000..a4b911f597 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/building-blue.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/chef-hat-blue.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/chef-hat-blue.svg new file mode 100644 index 0000000000..d6b39a4e8a --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/chef-hat-blue.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/filter-blue-large.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/filter-blue-large.svg new file mode 100644 index 0000000000..4f32474f71 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/filter-blue-large.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/gauge-blue.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/gauge-blue.svg new file mode 100644 index 0000000000..64dc195534 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/gauge-blue.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/git-branch-orange.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/git-branch-orange.svg new file mode 100644 index 0000000000..6e539aa2c8 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/git-branch-orange.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/git-merge-blue.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/git-merge-blue.svg new file mode 100644 index 0000000000..ef2f1e68b9 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/git-merge-blue.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/rocket-blue-big.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/rocket-blue-big.svg new file mode 100644 index 0000000000..5ce5f9ba12 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/rocket-blue-big.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/target-green.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/target-green.svg new file mode 100644 index 0000000000..144e9dcbae --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/target-green.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/icons/outline/text-search-pink.svg b/qdrant-landing/themes/qdrant-2024/static/icons/outline/text-search-pink.svg new file mode 100644 index 0000000000..6a8c950260 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/icons/outline/text-search-pink.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/claude-code.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/claude-code.svg new file mode 100755 index 0000000000..911075dd2f --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/claude-code.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/codex.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/codex.svg new file mode 100755 index 0000000000..2ddf0bc511 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/codex.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/cognee.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/cognee.svg new file mode 100755 index 0000000000..d9b57e6c40 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/cognee.svg @@ -0,0 +1,4 @@ + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/crew-ai.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/crew-ai.svg new file mode 100755 index 0000000000..4770414575 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/crew-ai.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/cursor.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/cursor.svg new file mode 100755 index 0000000000..a3e6cdfe3f --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/cursor.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/dust.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/dust.svg new file mode 100755 index 0000000000..bf4423aa13 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/dust.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/flowise.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/flowise.svg new file mode 100755 index 0000000000..0283d66b6c --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/flowise.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/go.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/go.svg new file mode 100755 index 0000000000..38d6c36ce4 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/go.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/haystack.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/haystack.svg new file mode 100755 index 0000000000..0229ddb691 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/haystack.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/java.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/java.svg new file mode 100755 index 0000000000..5fa45c888b --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/java.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/lang-chain.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/lang-chain.svg new file mode 100755 index 0000000000..e69d814b70 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/lang-chain.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/llama-index.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/llama-index.svg new file mode 100755 index 0000000000..8be4581f24 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/llama-index.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/lyzr.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/lyzr.svg new file mode 100755 index 0000000000..198a05513d --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/lyzr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/mastra.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/mastra.svg new file mode 100755 index 0000000000..c4d5e4e678 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/mastra.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/mem0.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/mem0.svg new file mode 100755 index 0000000000..551c0cb918 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/mem0.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/n8n.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/n8n.svg new file mode 100755 index 0000000000..4022d63a31 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/n8n.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/net.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/net.svg new file mode 100755 index 0000000000..7fd2ee5f60 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/net.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/open-code.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/open-code.svg new file mode 100755 index 0000000000..ac89bb2dcc --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/open-code.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/pi.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/pi.svg new file mode 100755 index 0000000000..84f979b204 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/pi.svg @@ -0,0 +1,4 @@ + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/python.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/python.svg new file mode 100755 index 0000000000..92853b133a --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/python.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/rust.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/rust.svg new file mode 100755 index 0000000000..d3cd0260e6 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/rust.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/trustgraph.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/trustgraph.svg new file mode 100755 index 0000000000..3ae07bfbb9 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/trustgraph.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/typescript.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/typescript.svg new file mode 100755 index 0000000000..611b802e33 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/typescript.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/voiceflow.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/voiceflow.svg new file mode 100755 index 0000000000..6438607b5c --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-logos/voiceflow.svg @@ -0,0 +1,3 @@ + + + diff --git a/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-memory.svg b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-memory.svg new file mode 100644 index 0000000000..96e60e5519 --- /dev/null +++ b/qdrant-landing/themes/qdrant-2024/static/img/ai-agents-memory.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +