Compare commits
5 Commits
ad7c6f2b65
...
44aa84a127
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44aa84a127 | ||
|
|
c3375f6cfd | ||
|
|
70228b655f | ||
|
|
3899e37f1e | ||
|
|
7ef669f852 |
@@ -1,3 +0,0 @@
|
|||||||
.section {
|
|
||||||
margin-top: 80px;
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Carousel } from '@mantine/carousel';
|
|
||||||
import { Container, Grid, Image, Stack, Text, Title } from '@mantine/core';
|
|
||||||
import classes from './ExpertiseSection.module.css';
|
|
||||||
|
|
||||||
interface ExpertiseSectionProps {
|
|
||||||
title: string;
|
|
||||||
content: string;
|
|
||||||
images: { url: string; alt: string }[];
|
|
||||||
viewMoreLink: string;
|
|
||||||
imageOnLeft?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ExpertiseSection: React.FC<ExpertiseSectionProps> = ({
|
|
||||||
title,
|
|
||||||
content,
|
|
||||||
images,
|
|
||||||
viewMoreLink: _viewMoreLink,
|
|
||||||
imageOnLeft = false,
|
|
||||||
}) => {
|
|
||||||
const slides = images.map((image) => (
|
|
||||||
<Carousel.Slide key={image.url}>
|
|
||||||
<Image
|
|
||||||
src={image.url}
|
|
||||||
alt={image.alt}
|
|
||||||
style={{ width: '100%', height: 'auto', objectFit: 'cover' }}
|
|
||||||
/>
|
|
||||||
</Carousel.Slide>
|
|
||||||
));
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Container>
|
|
||||||
<Grid className={classes.section}>
|
|
||||||
<Grid.Col order={imageOnLeft ? 2 : 1} span={{ xs: 6, md: 8 }}>
|
|
||||||
<Stack>
|
|
||||||
<Title>{title}</Title>
|
|
||||||
<Text size="lg">{content}</Text>
|
|
||||||
{/* <Button component="a" href={viewMoreLink}>
|
|
||||||
View More
|
|
||||||
</Button> */}
|
|
||||||
</Stack>
|
|
||||||
</Grid.Col>
|
|
||||||
<Grid.Col order={imageOnLeft ? 1 : 2} span={{ xs: 6, md: 4 }}>
|
|
||||||
<Carousel
|
|
||||||
slideSize={300}
|
|
||||||
align="start"
|
|
||||||
slideGap="md"
|
|
||||||
controlsOffset="xl"
|
|
||||||
controlSize={28}
|
|
||||||
loop
|
|
||||||
withIndicators
|
|
||||||
>
|
|
||||||
{slides}
|
|
||||||
</Carousel>
|
|
||||||
</Grid.Col>
|
|
||||||
</Grid>
|
|
||||||
</Container>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default ExpertiseSection;
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
.title {
|
||||||
|
font-size: 34px;
|
||||||
|
font-weight: 900;
|
||||||
|
|
||||||
|
@media (max-width: $mantine-breakpoint-sm) {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
max-width: 600px;
|
||||||
|
margin: auto;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
background-color: var(--mantine-color-blue-filled);
|
||||||
|
width: 45px;
|
||||||
|
height: 2px;
|
||||||
|
margin-top: var(--mantine-spacing-sm);
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
border: 1px solid light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5));
|
||||||
|
}
|
||||||
|
|
||||||
|
.cardTitle {
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
background-color: var(--mantine-color-blue-filled);
|
||||||
|
width: 45px;
|
||||||
|
height: 2px;
|
||||||
|
margin-top: var(--mantine-spacing-sm);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
import { FaChartLine, FaEye, FaMessage, FaShield, FaCode } from 'react-icons/fa6';
|
||||||
|
import {
|
||||||
|
Badge,
|
||||||
|
Card,
|
||||||
|
Container,
|
||||||
|
Group,
|
||||||
|
SimpleGrid,
|
||||||
|
Text,
|
||||||
|
Title,
|
||||||
|
useMantineTheme,
|
||||||
|
} from '@mantine/core';
|
||||||
|
import classes from "./FeatureCards.module.css";
|
||||||
|
|
||||||
|
const mockdata = [
|
||||||
|
{
|
||||||
|
title: 'Computer Vision',
|
||||||
|
description:
|
||||||
|
'I have experience in building computer vision models for a range of applications, from object detection to image segmentation. If your business works with images, these models can improve your efficiency and accuracy.',
|
||||||
|
icon: FaEye,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Natural Language Processing',
|
||||||
|
description:
|
||||||
|
'Expertise working with LLMs, from training to deployment. These state-of-the-art models are a powerful tool for a range of applications, and can drive your business forward.',
|
||||||
|
icon: FaMessage,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Data Science',
|
||||||
|
description:
|
||||||
|
"Sometimes you just need a simple model and some nice graphs. I can help you understand your data and build a model that works for you.",
|
||||||
|
icon: FaChartLine,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Privacy Focused',
|
||||||
|
description:
|
||||||
|
"Your data is valuable and sensitive. All my solutions are built with privacy and security in mind from the ground up, ensuring regulatory compliance and protecting your competitive advantage.",
|
||||||
|
icon: FaShield,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Open Source',
|
||||||
|
description:
|
||||||
|
"Leverage the power and innovation of open source technologies while avoiding vendor lock-in. This approach provides transparency, cost-effectiveness, and ensures your solutions remain maintainable long-term.",
|
||||||
|
icon: FaCode,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export function FeaturesCards() {
|
||||||
|
const theme = useMantineTheme();
|
||||||
|
const features = mockdata.map((feature) => (
|
||||||
|
<Card key={feature.title} shadow="md" radius="md" className={classes.card} padding="xl">
|
||||||
|
<feature.icon size={50} color={theme.colors.blue[6]} />
|
||||||
|
<Text fz="lg" fw={500} className={classes.cardTitle} mt="md">
|
||||||
|
{feature.title}
|
||||||
|
</Text>
|
||||||
|
<Text fz="sm" c="dimmed" mt="sm">
|
||||||
|
{feature.description}
|
||||||
|
</Text>
|
||||||
|
</Card>
|
||||||
|
));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Container size="lg" py="xl">
|
||||||
|
<Group justify="center">
|
||||||
|
<Badge variant="filled" size="lg">
|
||||||
|
My Expertise
|
||||||
|
</Badge>
|
||||||
|
</Group>
|
||||||
|
|
||||||
|
<Title order={2} className={classes.title} ta="center" mt="sm">
|
||||||
|
What can I bring to your business?
|
||||||
|
</Title>
|
||||||
|
|
||||||
|
<Text c="dimmed" className={classes.description} ta="center" mt="md">
|
||||||
|
I've worked with a range of businesses, from startups to established companies, and I've
|
||||||
|
learned a lot about what works and what doesn't. I work across the full Machine Learning stack, from
|
||||||
|
data collection to model deployment.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<SimpleGrid cols={{ base: 1, md: 3 }} spacing="xl" mt="50px">
|
||||||
|
{features}
|
||||||
|
</SimpleGrid>
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ export function HeroTitle() {
|
|||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<Text className={classes.description} c="dimmed">
|
<Text className={classes.description} c="dimmed">
|
||||||
Data Scientist with experience in consulting and research. Expertise in Computer Vision
|
Machine Learning Engineer with experience in consulting and research. Expertise in Computer Vision
|
||||||
and Large Language Models. Take a look at what I can do for your business and get in touch
|
and Large Language Models. Take a look at what I can do for your business and get in touch
|
||||||
if you have any questions or you'd like to work together!
|
if you have any questions or you'd like to work together!
|
||||||
</Text>
|
</Text>
|
||||||
|
|||||||
@@ -1,31 +1,16 @@
|
|||||||
import { Container } from '@mantine/core';
|
import { Container } from '@mantine/core';
|
||||||
import openWebUIGif from '@/assets/open-webui.gif';
|
|
||||||
import outputGif from '@/assets/output.gif';
|
|
||||||
import { Contact } from '@/components/ContactUs/Contact';
|
import { Contact } from '@/components/ContactUs/Contact';
|
||||||
import ExpertiseSection from '@/components/ExpertiseSection/ExpertiseSection';
|
|
||||||
import { HeaderSimple } from '@/components/HeaderSimple/HeaderSimple';
|
import { HeaderSimple } from '@/components/HeaderSimple/HeaderSimple';
|
||||||
import { HeroTitle } from '@/components/HeroTitle/HeroTitle';
|
import { HeroTitle } from '@/components/HeroTitle/HeroTitle';
|
||||||
import Testimonial from '@/components/Testimonial/Testimonial';
|
import Testimonial from '@/components/Testimonial/Testimonial';
|
||||||
|
import { FeaturesCards } from '@/components/FeatureCards/FeatureCards';
|
||||||
|
|
||||||
export function HomePage() {
|
export function HomePage() {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<HeaderSimple />
|
<HeaderSimple />
|
||||||
<HeroTitle />
|
<HeroTitle />
|
||||||
<ExpertiseSection
|
<FeaturesCards />
|
||||||
title="Computer Vision"
|
|
||||||
content="Expertise in developing and deploying computer vision models for various applications, including object detection, image classification, and more. Ask me about state-of-the-art real-time models for your business."
|
|
||||||
images={[{ url: outputGif, alt: 'Video Segmentation with SAM2.' }]}
|
|
||||||
viewMoreLink="/computer-vision"
|
|
||||||
imageOnLeft
|
|
||||||
/>
|
|
||||||
<ExpertiseSection
|
|
||||||
title="Natural Language Processing"
|
|
||||||
content="Building NLP models for tasks such as sentiment analysis, text classification, and language generation. If you need a chatbot for your business and care about privacy, or a simple text classification algorithm to understand your data, I can help."
|
|
||||||
images={[{ url: openWebUIGif, alt: 'Locally hosted LLM using oLLama and OpenWebUI.' }]}
|
|
||||||
viewMoreLink="/nlp"
|
|
||||||
imageOnLeft={false}
|
|
||||||
/>
|
|
||||||
<Container mt={20}>
|
<Container mt={20}>
|
||||||
<Testimonial />
|
<Testimonial />
|
||||||
</Container>
|
</Container>
|
||||||
|
|||||||
Reference in New Issue
Block a user