diff --git a/public/assets/camel-ai-logo.svg b/public/assets/camel-ai-logo.svg new file mode 100644 index 000000000..64f2c091b --- /dev/null +++ b/public/assets/camel-ai-logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/fastapi-logo.svg b/public/assets/fastapi-logo.svg new file mode 100644 index 000000000..582432b25 --- /dev/null +++ b/public/assets/fastapi-logo.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/public/assets/golang-logo.svg b/public/assets/golang-logo.svg new file mode 100644 index 000000000..82e89eb03 --- /dev/null +++ b/public/assets/golang-logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/public/assets/nextjs-logo.svg b/public/assets/nextjs-logo.svg new file mode 100644 index 000000000..50ccbbd18 --- /dev/null +++ b/public/assets/nextjs-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/public/assets/python-logo.svg b/public/assets/python-logo.svg new file mode 100644 index 000000000..25df8268f --- /dev/null +++ b/public/assets/python-logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/qdrant-logo.svg b/public/assets/qdrant-logo.svg new file mode 100644 index 000000000..058304c86 --- /dev/null +++ b/public/assets/qdrant-logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/components/Common/InfoCard/InfoCard.jsx b/src/components/Common/InfoCard/InfoCard.jsx index 73a63c60d..685533d3b 100644 --- a/src/components/Common/InfoCard/InfoCard.jsx +++ b/src/components/Common/InfoCard/InfoCard.jsx @@ -140,9 +140,7 @@ const InfoCard = ({ icon: Icon, iconVariant, title, description, iconColor, link > - - - + {React.isValidElement(Icon) ? Icon : } {title} {description} diff --git a/src/components/IntegratedTutorials/ExternalTutorialLinks.jsx b/src/components/IntegratedTutorials/ExternalTutorialLinks.jsx new file mode 100644 index 000000000..db294e629 --- /dev/null +++ b/src/components/IntegratedTutorials/ExternalTutorialLinks.jsx @@ -0,0 +1,68 @@ +import React from 'react'; +import { Box, Grid, Typography } from '@mui/material'; +import InfoCard from '../Common/InfoCard/InfoCard'; +import { getFullPath } from '../../lib/common-helpers'; + +const TUTORIALS = [ + { + icon: Python logo, + title: '5 minute RAG with DeepSeek', + description: 'Ground your chatbot in fact-based knowledge using Retrieval-Augmented Generation.', + href: 'https://qdrant.tech/documentation/rag-deepseek/', + }, + { + icon: Qdrant logo, + title: 'Hybrid Search with Qdrant', + description: 'Build your own keyword + semantic search service using Qdrant and FastEmbed.', + href: 'https://qdrant.tech/documentation/beginner-tutorials/hybrid-search-fastembed/', + }, + { + icon: FastAPI logo, + title: 'Basic Semantic Search Engine', + description: 'Build information retrieval based on semantic meaning in 5 minutes.', + href: 'https://qdrant.tech/documentation/beginner-tutorials/search-beginners/', + }, + { + icon: Camel-AI logo, + title: 'Agentic RAG discord bot', + description: 'Develop a fully functional chatbot using Qdrant, CAMEL-AI, and OpenAI.', + href: 'https://qdrant.tech/documentation/agentic-rag-camelai-discord/', + }, + { + icon: Golang logo, + title: 'E-commerce Search Engine', + description: `Build and deploy high-performance semantic retrieval for thousands of products.`, + href: 'https://qdrant.tech/documentation/tutorials-search-engineering/ecommerce-search-golang/', + }, + { + icon: Qdrant logo, + title: 'See more tutorials on Qdrant.tech', + description: 'See more tutorials', + href: 'https://qdrant.tech/documentation/beginner-tutorials/', + }, +]; + +const ExternalTutorialLinks = () => { + return ( + + + {'Integrated Tutorials'} + + .MuiGrid-root': { display: 'flex' } }}> + {TUTORIALS.map((tutorial) => ( + + + + ))} + + + ); +}; + +export default ExternalTutorialLinks; diff --git a/src/pages/TutorialIndex.jsx b/src/pages/TutorialIndex.jsx index 8214f4c1f..186a97df1 100644 --- a/src/pages/TutorialIndex.jsx +++ b/src/pages/TutorialIndex.jsx @@ -3,6 +3,7 @@ import { Alert, Box, Grid, Typography } from '@mui/material'; import { useClient } from '../context/client-context'; import InfoCard from '../components/Common/InfoCard/InfoCard'; import TutorialLinks from '../components/InteractiveTutorial/TutorialLinks'; +import ExternalTutorialLinks from '../components/IntegratedTutorials/ExternalTutorialLinks'; import { Zap, FileCode } from 'lucide-react'; export const TutorialIndex = () => { @@ -79,6 +80,7 @@ export const TutorialIndex = () => { + );