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 (
-
-
+
+
+ Error 404
+ Page not found
+
+ The page {location.pathname} doesn’t exist or
+ may have been moved.
+
+
+
+
+
+
);
};