update projects: add screenshots for Konkani/PowerPoint AI, replace ISO Language with Reo, update live links
Browse files- .gitattributes +2 -0
- components/portfolio/LiveProjectButton.tsx +3 -2
- components/portfolio/sections/ProjectsSection.tsx +33 -15
- public/konkani.png +0 -0
- public/powerpoint.png +0 -0
.gitattributes
CHANGED
|
@@ -1,2 +1,4 @@
|
|
| 1 |
*.png filter=lfs diff=lfs merge=lfs -text
|
| 2 |
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 1 |
*.png filter=lfs diff=lfs merge=lfs -text
|
| 2 |
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
public/konkani.png -filter -diff -merge -text
|
| 4 |
+
public/powerpoint.png -filter -diff -merge -text
|
components/portfolio/LiveProjectButton.tsx
CHANGED
|
@@ -2,9 +2,10 @@ import React from 'react';
|
|
| 2 |
|
| 3 |
interface LiveProjectButtonProps {
|
| 4 |
href: string;
|
|
|
|
| 5 |
}
|
| 6 |
|
| 7 |
-
export function LiveProjectButton({ href }: LiveProjectButtonProps) {
|
| 8 |
return (
|
| 9 |
<a
|
| 10 |
href={href}
|
|
@@ -12,7 +13,7 @@ export function LiveProjectButton({ href }: LiveProjectButtonProps) {
|
|
| 12 |
rel="noopener noreferrer"
|
| 13 |
className="inline-block w-full sm:w-auto text-center rounded-full border-2 border-[#D7E2EA] text-[#D7E2EA] font-medium uppercase tracking-widest px-8 py-3 sm:px-10 sm:py-3.5 text-sm sm:text-base hover:bg-[#D7E2EA]/10 transition-colors duration-200"
|
| 14 |
>
|
| 15 |
-
|
| 16 |
</a>
|
| 17 |
);
|
| 18 |
}
|
|
|
|
| 2 |
|
| 3 |
interface LiveProjectButtonProps {
|
| 4 |
href: string;
|
| 5 |
+
label?: string;
|
| 6 |
}
|
| 7 |
|
| 8 |
+
export function LiveProjectButton({ href, label = 'Watch Project' }: LiveProjectButtonProps) {
|
| 9 |
return (
|
| 10 |
<a
|
| 11 |
href={href}
|
|
|
|
| 13 |
rel="noopener noreferrer"
|
| 14 |
className="inline-block w-full sm:w-auto text-center rounded-full border-2 border-[#D7E2EA] text-[#D7E2EA] font-medium uppercase tracking-widest px-8 py-3 sm:px-10 sm:py-3.5 text-sm sm:text-base hover:bg-[#D7E2EA]/10 transition-colors duration-200"
|
| 15 |
>
|
| 16 |
+
{label}
|
| 17 |
</a>
|
| 18 |
);
|
| 19 |
}
|
components/portfolio/sections/ProjectsSection.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
'use client';
|
| 2 |
|
| 3 |
import React, { useRef } from 'react';
|
|
|
|
| 4 |
import { motion, useScroll, useTransform } from 'motion/react';
|
| 5 |
import { LiveProjectButton } from '../LiveProjectButton';
|
| 6 |
import { FadeIn } from '../FadeIn';
|
|
@@ -8,34 +9,41 @@ import { FadeIn } from '../FadeIn';
|
|
| 8 |
type Project = {
|
| 9 |
id: string;
|
| 10 |
title: string;
|
| 11 |
-
|
|
|
|
|
|
|
| 12 |
};
|
| 13 |
|
| 14 |
const projects: Project[] = [
|
| 15 |
{
|
| 16 |
id: '01',
|
| 17 |
title: 'Konkani AI',
|
| 18 |
-
|
|
|
|
| 19 |
},
|
| 20 |
{
|
| 21 |
id: '02',
|
| 22 |
title: 'Tiny AYA Mobile',
|
| 23 |
videoId: 'M7lc1UVf-VE',
|
|
|
|
| 24 |
},
|
| 25 |
{
|
| 26 |
id: '03',
|
| 27 |
title: 'PowerPoint AI',
|
| 28 |
-
|
|
|
|
| 29 |
},
|
| 30 |
{
|
| 31 |
id: '04',
|
| 32 |
title: 'Multi Model Dataset',
|
| 33 |
videoId: 'dQw4w9WgXcQ',
|
|
|
|
| 34 |
},
|
| 35 |
{
|
| 36 |
id: '05',
|
| 37 |
-
title: '
|
| 38 |
-
videoId: '
|
|
|
|
| 39 |
},
|
| 40 |
];
|
| 41 |
|
|
@@ -96,15 +104,25 @@ function ProjectCard({
|
|
| 96 |
>
|
| 97 |
<div className="absolute inset-0 bg-[#1A0F08] -z-10"></div>
|
| 98 |
<div className="w-full flex-1 relative bg-black">
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
</div>
|
| 109 |
|
| 110 |
<div className="p-6 sm:p-8 md:p-10 bg-[#1A0F08] border-t border-[rgba(215,226,234,0.1)] flex flex-col sm:flex-row justify-between items-start sm:items-center gap-6">
|
|
@@ -113,7 +131,7 @@ function ProjectCard({
|
|
| 113 |
<h3 className="text-[#D7E2EA] font-medium text-lg sm:text-xl md:text-2xl uppercase">{project.title}</h3>
|
| 114 |
</div>
|
| 115 |
<div className="shrink-0">
|
| 116 |
-
<LiveProjectButton href={
|
| 117 |
</div>
|
| 118 |
</div>
|
| 119 |
</motion.div>
|
|
|
|
| 1 |
'use client';
|
| 2 |
|
| 3 |
import React, { useRef } from 'react';
|
| 4 |
+
import Image from 'next/image';
|
| 5 |
import { motion, useScroll, useTransform } from 'motion/react';
|
| 6 |
import { LiveProjectButton } from '../LiveProjectButton';
|
| 7 |
import { FadeIn } from '../FadeIn';
|
|
|
|
| 9 |
type Project = {
|
| 10 |
id: string;
|
| 11 |
title: string;
|
| 12 |
+
image?: string;
|
| 13 |
+
videoId?: string;
|
| 14 |
+
liveUrl: string;
|
| 15 |
};
|
| 16 |
|
| 17 |
const projects: Project[] = [
|
| 18 |
{
|
| 19 |
id: '01',
|
| 20 |
title: 'Konkani AI',
|
| 21 |
+
image: '/konkani.png',
|
| 22 |
+
liveUrl: 'https://reuben-fernandes.xyz',
|
| 23 |
},
|
| 24 |
{
|
| 25 |
id: '02',
|
| 26 |
title: 'Tiny AYA Mobile',
|
| 27 |
videoId: 'M7lc1UVf-VE',
|
| 28 |
+
liveUrl: 'https://www.youtube.com/watch?v=M7lc1UVf-VE',
|
| 29 |
},
|
| 30 |
{
|
| 31 |
id: '03',
|
| 32 |
title: 'PowerPoint AI',
|
| 33 |
+
image: '/powerpoint.png',
|
| 34 |
+
liveUrl: 'https://huggingface.co/spaces/Reubencf/Powerpoint_AI',
|
| 35 |
},
|
| 36 |
{
|
| 37 |
id: '04',
|
| 38 |
title: 'Multi Model Dataset',
|
| 39 |
videoId: 'dQw4w9WgXcQ',
|
| 40 |
+
liveUrl: 'https://huggingface.co/spaces/Reubencf/dataset-explorer',
|
| 41 |
},
|
| 42 |
{
|
| 43 |
id: '05',
|
| 44 |
+
title: 'Reo',
|
| 45 |
+
videoId: 'zo_UkXzAfLk',
|
| 46 |
+
liveUrl: 'https://reo-fernandes.xyz/',
|
| 47 |
},
|
| 48 |
];
|
| 49 |
|
|
|
|
| 104 |
>
|
| 105 |
<div className="absolute inset-0 bg-[#1A0F08] -z-10"></div>
|
| 106 |
<div className="w-full flex-1 relative bg-black">
|
| 107 |
+
{project.image ? (
|
| 108 |
+
<Image
|
| 109 |
+
src={project.image}
|
| 110 |
+
alt={project.title}
|
| 111 |
+
fill
|
| 112 |
+
className="object-cover object-top"
|
| 113 |
+
sizes="(max-width: 768px) 100vw, 1200px"
|
| 114 |
+
/>
|
| 115 |
+
) : (
|
| 116 |
+
<iframe
|
| 117 |
+
src={`https://www.youtube.com/embed/${project.videoId}?rel=0&modestbranding=1`}
|
| 118 |
+
className="w-full h-full absolute inset-0"
|
| 119 |
+
style={{ border: 0 }}
|
| 120 |
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
| 121 |
+
allowFullScreen
|
| 122 |
+
loading="lazy"
|
| 123 |
+
title={project.title}
|
| 124 |
+
/>
|
| 125 |
+
)}
|
| 126 |
</div>
|
| 127 |
|
| 128 |
<div className="p-6 sm:p-8 md:p-10 bg-[#1A0F08] border-t border-[rgba(215,226,234,0.1)] flex flex-col sm:flex-row justify-between items-start sm:items-center gap-6">
|
|
|
|
| 131 |
<h3 className="text-[#D7E2EA] font-medium text-lg sm:text-xl md:text-2xl uppercase">{project.title}</h3>
|
| 132 |
</div>
|
| 133 |
<div className="shrink-0">
|
| 134 |
+
<LiveProjectButton href={project.liveUrl} label={project.image ? 'View Project' : 'Watch Project'} />
|
| 135 |
</div>
|
| 136 |
</div>
|
| 137 |
</motion.div>
|
public/konkani.png
ADDED
|
public/powerpoint.png
ADDED
|