diff --git a/app/assets/avatar.png b/app/assets/avatar.png new file mode 100644 index 0000000..6cfc417 Binary files /dev/null and b/app/assets/avatar.png differ diff --git a/app/components/business-section.tsx b/app/components/business-section.tsx new file mode 100644 index 0000000..07b9dc9 --- /dev/null +++ b/app/components/business-section.tsx @@ -0,0 +1,103 @@ +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Globe, Instagram, Facebook } from "lucide-react"; +import { Badge } from "@/components/ui/badge"; + +interface Business { + _id: string; + name: string; + role: string; + established: string; + description: string; + url?: string; + logo?: string; + instagramUrl?: string; + websiteUrl?: string; + facebookUrl?: string; + tiktokUrl?: string; +} + +interface BusinessSectionProps { + businesses: Business[]; +} + +export function BusinessSection({ businesses = [] }: BusinessSectionProps) { + return ( +
+
+

Businesses

+ +
+ {businesses.map((business) => ( + + + + {business.name} + Est. {business.established} + +
+ {business.role} +
+ + {business.description} + +
+ +
+ {business.instagramUrl && ( + + + + )} + {business.websiteUrl && ( + + + + )} + {business.facebookUrl && ( + + + + )} + {business.tiktokUrl && ( + + {/* */} + + )} +
+
+
+ ))} +
+
+
+ ); +} diff --git a/app/components/contact-section.tsx b/app/components/contact-section.tsx index 1142eed..e513460 100644 --- a/app/components/contact-section.tsx +++ b/app/components/contact-section.tsx @@ -14,7 +14,7 @@ interface ContactSectionProps { email: string; phone?: string; location: string; - githubUrl?: string; + githubUrl?: string[]; linkedinUrl?: string; }; } @@ -34,32 +34,36 @@ export function ContactSection({ profile }: ContactSectionProps) {
-
+

Email

-
+ {profile.email} - +
-
+ {profile.phone && ( -
+

Phone

-
+ {profile.phone} - +
-
+ )}
@@ -72,17 +76,31 @@ export function ContactSection({ profile }: ContactSectionProps) {
- {profile.githubUrl && ( - + {profile.githubUrl && profile.githubUrl.length > 0 && ( + <> + + {profile.githubUrl[1] && ( + + )} + )} {profile.linkedinUrl && ( )} -
diff --git a/app/components/experience-section.tsx b/app/components/experience-section.tsx index 430c5cd..9afbd98 100644 --- a/app/components/experience-section.tsx +++ b/app/components/experience-section.tsx @@ -13,7 +13,7 @@ interface Experience { company: string; position: string; duration: string; - description: string; + description: string[]; technologies: string[]; current: boolean; } @@ -51,7 +51,11 @@ export function ExperienceSection({ experiences }: ExperienceSectionProps) {

- {exp.description} +

    + {exp.description.map((item, idx) => ( +
  • {item}
  • + ))} +

{exp.technologies.map((tech) => ( diff --git a/app/components/hero-section.tsx b/app/components/hero-section.tsx index 32bd508..24ff54c 100644 --- a/app/components/hero-section.tsx +++ b/app/components/hero-section.tsx @@ -1,17 +1,21 @@ import { Button } from "@/components/ui/button"; -import { Avatar, AvatarFallback } from "@/components/ui/avatar"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Github, Linkedin, Mail, MapPin, Phone } from "lucide-react"; +import avatar from "@/assets/avatar.png"; interface HeroSectionProps { profile: { name: string; title: string; - bio: string; email: string; phone?: string; location: string; - githubUrl?: string; + githubUrl?: string[]; linkedinUrl?: string; + about?: { + description: string[]; + technologies?: string[]; + }; }; } @@ -32,6 +36,10 @@ export function HeroSection({ profile }: HeroSectionProps) {
+ {profile.name .split(" ") @@ -46,22 +54,40 @@ export function HeroSection({ profile }: HeroSectionProps) { {profile.title}

- {profile.bio} + {profile.about?.description?.map((desc, idx) => ( + 0 ? "block mt-2" : undefined}> + {desc} + + ))}

- {profile.githubUrl && ( - + {profile.githubUrl && profile.githubUrl.length > 0 && ( + <> + + {profile.githubUrl[1] && ( + + )} + )} {profile.linkedinUrl && ( )} @@ -143,7 +143,7 @@ export function ProjectsSection({ projects }: ProjectsSectionProps) { rel="noopener noreferrer" > - Demo + Go to site )} diff --git a/app/routes/_index.tsx b/app/routes/_index.tsx index 4ea19cb..dd02842 100644 --- a/app/routes/_index.tsx +++ b/app/routes/_index.tsx @@ -5,11 +5,17 @@ import { ExperienceSection } from "@/components/experience-section"; import { ProjectsSection } from "@/components/projects-section"; import { ContactSection } from "@/components/contact-section"; import { portfolioData } from "@/data/portfolio"; +import ProfileCard from "@/components/profile-card"; +import avatar from "@/assets/avatar.png"; +import { BusinessSection } from "~/components/business-section"; export const meta: MetaFunction = () => { return [ { title: `${portfolioData.profile.name} - Portfolio` }, - { name: "description", content: portfolioData.profile.bio }, + { + name: "description", + content: portfolioData.profile.about?.description.join(" "), + }, ]; }; @@ -20,6 +26,7 @@ export default function Index() { +
);