diff --git a/src/app/page.tsx b/src/app/page.tsx index adbbb0b..4594356 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -23,6 +23,8 @@ import { BlogCard } from "@/components/blog-card"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { toast } from "sonner"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { ClientWorksCard } from "@/components/client-works-card"; +import { CLIENTWORKS } from "@/data/config/clients.config"; const BLUR_FADE_DELAY = 0.04; interface BlogsI { @@ -268,70 +270,121 @@ export default function Page() {
-
-
+
+
Featured Projects
- - - - My Works - Client Works - - - -
-
-
-

- Some of my cool shits -

-

- I've worked on a variety of cool shits, from simple websites - to mobile apps to complex IoT projects. Here are a few of my favorites. - You can find more on my{" "} - - projects page - - . -

-
-
-
- {PROJECTS.filter((project) => project.featured).map( - (project, id) => ( - - - - ) - )} + + + + My Works + Client Works + + + +
+
+
+

+ Some of my cool shits +

+

+ I've worked on a variety of cool shits, from + simple websites to mobile apps to complex IoT + projects. Here are a few of my favorites. You can find + more on my{" "} + + projects page + + . +

+
+
+
+ {PROJECTS.filter((project) => project.featured).map( + (project, id) => ( + + + + ) + )} +
+
+
+
+ + +
+
+
+

+ I do get hired, believe me +

+

+ I've experience working on a range of client + projects, from freelance assignments to corporate + work. Feel free to explore more of my professional + portfolio on my{" "} + + projects page + + . +

+
+
+
+ {CLIENTWORKS.filter((project) => project.featured).map( + (project, id) => ( + + + + ) + )} +
+
+
+
+
- - - - - - -
@@ -349,24 +402,24 @@ export default function Page() { bellow and get the latest updates. I don't spam!

- {!isNsl ? ( - - ) : ( - - - Heads up! - - - You have already signed up for the newsletter. - - - )} + {!isNsl ? ( + + ) : ( + + + Heads up! + + + You have already signed up for the newsletter. + + + )}
diff --git a/src/app/projects/page.tsx b/src/app/projects/page.tsx index c5c7d03..d1abfec 100644 --- a/src/app/projects/page.tsx +++ b/src/app/projects/page.tsx @@ -8,6 +8,9 @@ import { TabsList, TabsTrigger, } from "@/components/ui/tabs" +import { ClientWorksCard } from "@/components/client-works-card"; +import { CLIENTWORKS } from "@/data/config/clients.config"; +import Link from "next/link"; const BLUR_FADE_DELAY = 0.04; export default function Projects() { @@ -60,7 +63,44 @@ export default function Projects() { - + +
+
+
+

+ Your ideas & my skills +

+

+ These projects showcase my client work across various industries. If my skills align with your needs, let's connect. +

+
+
+
+ {CLIENTWORKS.filter((project) => project.featured).map( + (project, id) => ( + + + + ) + )} +
+
+
+
diff --git a/src/components/client-works-card.tsx b/src/components/client-works-card.tsx new file mode 100644 index 0000000..b352a7e --- /dev/null +++ b/src/components/client-works-card.tsx @@ -0,0 +1,126 @@ +import { Badge } from "@/components/ui/badge"; +import { + Card, + CardContent, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import Image from "next/image"; +import Markdown from "react-markdown"; +import { Icons } from "./icons"; +import CustomVideoDialog from "./magicui/custom-video-dialog"; + +interface Props { + title: string; + testimonial: string; + worktype?: string; + description: string; + fatures: string; + dates?: string; + tags: readonly string[]; + link?: string; + image?: string | null; + video?: string; +} + +export function ClientWorksCard({ + title, + testimonial, + worktype, + description, + fatures, + dates, + tags, + link, + image, + video, +}: Props) { + return ( + + {video ? ( + + ); +} diff --git a/src/components/icons.tsx b/src/components/icons.tsx index 54352fc..c57c991 100644 --- a/src/components/icons.tsx +++ b/src/components/icons.tsx @@ -1,9 +1,11 @@ -import { Archive, GlobeIcon, MailIcon } from "lucide-react"; +import { Archive, Cog, GlobeIcon, MailIcon, Video } from "lucide-react"; export type IconProps = React.HTMLAttributes; export const Icons = { globe: (props: IconProps) => , + setting: (props: IconProps) => , + video: (props: IconProps) =>