diff --git a/public/locales/en/common.json b/public/locales/en/common.json index ba4693c..be22da8 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -92,12 +92,12 @@ "projects": [ { "id": "corporate", - "title": "Santa Rosa 10K Landing", + "title": "Horsy.AI", "description": "Modern corporate site featuring a headless CMS, blazing performance, and SEO best practices—easy for the client to manage and perfectly tailored for brand storytelling.", "category": "Website", "technologies": ["Next.js", "TypeScript", "Tailwind", "S3 Storage"], - "image": "portfolio-corporate.jpg", - "website": "https://www.santarosa10k.com" + "image": "horsy.png", + "website": "https://horsy.ai" }, { "id": "b2c", @@ -105,8 +105,8 @@ "description": "Comprehensive cashback platform integrating affiliate retail APIs to reward users with rebates, offsetting insurance premiums.", "category": "B2C", "technologies": ["Vite", "MUI", "AWS Cognito", "Express.js"], - "image": "portfolio-restaurant.jpg", - "website": "https://fruga.co.uk" + "image": "fruga.png", + "website": "https://dev.fruga.co.uk" } ] }, diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 60b2da3..585d0e9 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -92,12 +92,12 @@ "projects": [ { "id": "corporate", - "title": "Santa Rosa 10K Landing", + "title": "Horsy.AI", "description": "Sitio corporativo moderno con un CMS 'headless', rendimiento asombroso y mejores prácticas de SEO; fácil de administrar para el cliente y perfectamente adaptado para la narrativa de marca.", "category": "Sitio Web", "technologies": ["Next.js", "TypeScript", "Tailwind", "S3 Storage"], - "image": "portfolio-corporate.jpg", - "website": "https://www.santarosa10k.com" + "image": "horsy.png", + "website": "https://horsy.ai" }, { "id": "cms", @@ -105,8 +105,8 @@ "description": "Plataforma integral de reembolso que integra APIs de comercio afiliado para recompensar a los usuarios con reembolsos, compensando las primas de seguro.", "category": "B2C", "technologies": ["Vite", "MUI", "AWS Cognito", "Express.js"], - "image": "portfolio-restaurant.jpg", - "website": "https://fruga.co.uk" + "image": "fruga.png", + "website": "https://dev.fruga.co.uk" } ] }, diff --git a/src/assets/fruga.png b/src/assets/fruga.png new file mode 100644 index 0000000..f92db3f Binary files /dev/null and b/src/assets/fruga.png differ diff --git a/src/assets/hero.jpeg b/src/assets/hero.jpeg new file mode 100644 index 0000000..295fd61 Binary files /dev/null and b/src/assets/hero.jpeg differ diff --git a/src/assets/horsy.png b/src/assets/horsy.png new file mode 100644 index 0000000..9b8a805 Binary files /dev/null and b/src/assets/horsy.png differ diff --git a/src/components/Contact.tsx b/src/components/Contact.tsx index 6b2b2e2..f5e13cf 100644 --- a/src/components/Contact.tsx +++ b/src/components/Contact.tsx @@ -67,7 +67,7 @@ const Contact = () => {

{t('contact.email')}

-

jodaz.business@gmail.com

+

jesus@jodaz.xyz

diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index c86f631..7fbccc6 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,7 +1,7 @@ import { FOOTER_LINKS, FOOTER_CREDITS_LINK } from '@/lib/links'; import jodazLogo from '@/assets/jodaz_isotipo.png'; import { useTranslation } from 'react-i18next'; -import { Mail } from 'lucide-react'; +// removed unused Mail icon import const Footer = () => { const { t } = useTranslation(); diff --git a/src/components/Header.tsx b/src/components/Header.tsx index f274a67..fb8625e 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -55,27 +55,25 @@ const Header = () => { } }; - useEffect(() => { - const handleScroll = () => { - const servicesSection = - document.getElementById('services') || document.getElementById('about'); - if (servicesSection) { - const servicesTop = servicesSection.offsetTop; - setIsOpaque(window.scrollY >= servicesTop - 100); // Adjust offset as needed - } - }; + // useEffect(() => { + // const handleScroll = () => { + // const servicesSection = + // document.getElementById('services') || document.getElementById('about'); + // if (servicesSection) { + // const servicesTop = servicesSection.offsetTop; + // setIsOpaque(window.scrollY >= servicesTop - 100); // Adjust offset as needed + // } + // }; - window.addEventListener('scroll', handleScroll); - handleScroll(); // Check on mount + // window.addEventListener('scroll', handleScroll); + // handleScroll(); // Check on mount - return () => window.removeEventListener('scroll', handleScroll); - }, []); + // return () => window.removeEventListener('scroll', handleScroll); + // }, []); return (
diff --git a/src/components/Portfolio.tsx b/src/components/Portfolio.tsx index 158763d..4941da3 100644 --- a/src/components/Portfolio.tsx +++ b/src/components/Portfolio.tsx @@ -2,16 +2,15 @@ import { ExternalLink, Github } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { useTranslation } from 'react-i18next'; -import portfolioEcommerce from '@/assets/portfolio-ecommerce.jpg'; -import portfolioCorporate from '@/assets/portfolio-corporate.jpg'; -import portfolioRestaurant from '@/assets/portfolio-restaurant.jpg'; +import portfolioRestaurant from '@/assets/fruga.png'; const Portfolio = () => { const { t } = useTranslation(); const imageMap: Record = { - 'portfolio-corporate.jpg': portfolioCorporate, - 'portfolio-restaurant.jpg': portfolioRestaurant, + 'horsy.png': + 'https://res.cloudinary.com/jodaz/image/upload/v1727464583/images/projects/horsy.png', + 'fruga.png': portfolioRestaurant, }; const projects = t('portfolio.projects', { returnObjects: true }) as Array<{ diff --git a/src/components/views/About.tsx b/src/components/views/About.tsx index 29c0ebd..671ab01 100644 --- a/src/components/views/About.tsx +++ b/src/components/views/About.tsx @@ -2,6 +2,7 @@ import { ChevronDown } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useTranslation } from 'react-i18next'; import founder from '@/assets/images/pic.jpg'; +import Hero from '@/assets/hero.jpeg'; const AboutView = () => { const { t } = useTranslation(); @@ -14,14 +15,17 @@ const AboutView = () => { }; return ( -
-
+
+
-

+

{t('about.line1')} {t('about.line2')}

diff --git a/src/lib/links.ts b/src/lib/links.ts index d869fa2..932a3f7 100644 --- a/src/lib/links.ts +++ b/src/lib/links.ts @@ -1,4 +1,4 @@ -import { Globe, Mail, Github, Instagram, Linkedin } from 'lucide-react'; +import { Globe, Mail, Github, Instagram, Linkedin, Briefcase } from 'lucide-react'; export const FOOTER_LINKS = [ { @@ -16,6 +16,11 @@ export const FOOTER_LINKS = [ href: 'https://github.com/jodaz-dev', icon: Github, // Use custom SVG or lucide-react GitHub icon if available }, + { + label: 'Upwork', + href: 'https://upwork.com/freelancers/jesusordosgoitty4', + icon: Briefcase, + }, ]; export const FOOTER_CREDITS_LINK = { diff --git a/src/pages/NotFound.tsx b/src/pages/NotFound.tsx index f9cf7c5..f99a716 100644 --- a/src/pages/NotFound.tsx +++ b/src/pages/NotFound.tsx @@ -1,22 +1,32 @@ -import { useLocation } from "react-router-dom"; -import { useEffect } from "react"; +import { useEffect } from 'react'; +import { Link, useLocation } from 'react-router-dom'; +import { Button } from '@/components/ui/button'; const NotFound = () => { const location = useLocation(); useEffect(() => { - console.error("404 Error: User attempted to access non-existent route:", location.pathname); + console.error('404 Error: User attempted to access non-existent route:', location.pathname); }, [location.pathname]); return ( -
-
-

404

-

Oops! Page not found

- - Return to Home - -
+
+
+

Error 404

+

Page not found

+

+ The page {location.pathname} doesn’t exist or + may have been moved. +

+
+ + +
+
); };