update CI
Some checks failed
Build / build-check (pull_request) Failing after 47s

This commit is contained in:
Sacha VAUDEY 2025-09-14 12:27:19 +02:00
parent 54c51341a2
commit 8b374cf8c4
9 changed files with 116 additions and 32 deletions

View File

@ -42,7 +42,7 @@ export default function HomePage() {
backgroundSize: '30px 30px'
}}
>
<HeroSection translations={t.hero} />
<HeroSection translations={t.hero} commonTranslations={t.common} />
</section>
{/* Services Section avec transition subtile */}

View File

@ -1,8 +1,12 @@
import React from 'react';
import { URLS, SITE_CONFIG } from '@/lib/config/constants';
import { BookOpen, GitBranch, Gamepad2, Cloud, Rocket, Heart } from 'lucide-react';
import { useTranslation } from '@/lib/hooks/useTranslation';
export const Footer: React.FC = () => (
export const Footer: React.FC = () => {
const { t } = useTranslation();
return (
<footer className="bg-gray-900 text-white py-16 px-4 sm:px-6 lg:px-8 border-t border-gray-800">
<div className="max-w-7xl mx-auto">
{/* Contenu principal du footer */}
@ -19,7 +23,7 @@ export const Footer: React.FC = () => (
</span>
</div>
<p className="text-gray-300 leading-relaxed">
Une communauté passionnée qui propose des services d&apos;hébergement et des outils collaboratifs pour les développeurs et les gamers.
{t.footer.description}
</p>
{/* Réseaux sociaux */}
<div className="flex items-center gap-4">
@ -46,7 +50,7 @@ export const Footer: React.FC = () => (
{/* Liens rapides services */}
<div className="space-y-6">
<h3 className="text-white font-bold text-lg mb-6">Nos Services</h3>
<h3 className="text-white font-bold text-lg mb-6">{t.footer.ourServices}</h3>
<div className="space-y-4">
<a
href={URLS.services.wiki}
@ -67,7 +71,7 @@ export const Footer: React.FC = () => (
className="flex items-center text-gray-300 hover:text-blue-400 transition-colors duration-200 hover:translate-x-2 transform"
>
<Gamepad2 className="w-5 h-5 mr-3" strokeWidth={2} />
Panel de Jeux
{t.footer.gamingPanel}
</a>
<a
href={URLS.services.opencloud}
@ -81,19 +85,19 @@ export const Footer: React.FC = () => (
{/* Informations communauté */}
<div className="space-y-6">
<h3 className="text-white font-bold text-lg mb-6">Communauté</h3>
<h3 className="text-white font-bold text-lg mb-6">{t.footer.community}</h3>
<div className="space-y-4">
<div className="bg-gradient-to-r from-blue-900/30 to-blue-800/30 rounded-xl p-6 border border-blue-800/30">
<h4 className="text-blue-400 font-semibold mb-2">Rejoindre l&apos;asso</h4>
<h4 className="text-blue-400 font-semibold mb-2">{t.footer.joinAssociation}</h4>
<p className="text-gray-300 text-sm mb-4">
Connectez-vous sur Discord et créez un ticket pour rejoindre la communauté Banquise.
{t.footer.joinDescription}
</p>
<a
href={URLS.social.discord}
className="inline-flex items-center text-blue-400 hover:text-blue-300 text-sm font-semibold transition-colors duration-200"
>
<Rocket className="w-4 h-4 mr-2" strokeWidth={2} />
Rejoindre maintenant
{t.footer.joinNow}
</a>
</div>
</div>
@ -103,13 +107,13 @@ export const Footer: React.FC = () => (
{/* Barre du bas */}
<div className="flex flex-col md:flex-row justify-between items-center gap-6 pt-8 border-t border-gray-800">
<p className="text-gray-400 text-sm text-center md:text-left">
© 2025 {SITE_CONFIG.name}. Hébergement communautaire pour développeurs et gamers.
© 2025 {SITE_CONFIG.name}. {t.footer.copyright}
</p>
<div className="flex items-center gap-6 text-sm text-gray-400">
<span className="flex items-center">
Fait avec
{t.footer.madeWith}
<Heart className="text-red-500 mx-1 w-4 h-4" strokeWidth={2} fill="currentColor" />
par Banquise
{t.footer.by}
</span>
<div className="w-1 h-1 bg-gray-600 rounded-full"></div>
<span className="text-blue-400 font-semibold">EPITA 2025</span>
@ -117,4 +121,5 @@ export const Footer: React.FC = () => (
</div>
</div>
</footer>
);
);
};

View File

@ -2,6 +2,7 @@ import React, { useEffect } from 'react';
import { Button } from '@/components/common/Button';
import { Logo } from './navbar/Logo';
import { URLS } from '@/lib/config/constants';
import { useTranslation } from '@/lib/hooks/useTranslation';
import type { Translation } from '@/types/i18n';
// Fonction utilitaire simple pour combiner les classes
@ -87,6 +88,7 @@ const MobileNavItem: React.FC<MobileNavItemProps> = ({
};
export const MobileMenu: React.FC<MobileMenuProps> = ({ isOpen, onClose, translations }) => {
const { t } = useTranslation();
// Gérer le scroll du body
useEffect(() => {
if (isOpen) {
@ -181,7 +183,7 @@ export const MobileMenu: React.FC<MobileMenuProps> = ({ isOpen, onClose, transla
</svg>
}
title={translations.home}
description="Retour à l'accueil"
description={t.common.backToHome}
href="#home"
onClick={() => handleNavClick('home')}
/>
@ -193,7 +195,7 @@ export const MobileMenu: React.FC<MobileMenuProps> = ({ isOpen, onClose, transla
</svg>
}
title={translations.services}
description="Découvrir notre offre"
description={t.common.discoverOffer}
href="#services"
onClick={() => handleNavClick('services')}
/>
@ -205,7 +207,7 @@ export const MobileMenu: React.FC<MobileMenuProps> = ({ isOpen, onClose, transla
</svg>
}
title={translations.about}
description="En savoir plus sur nous"
description={t.common.learnMoreAboutUs}
href="#about"
onClick={() => handleNavClick('about')}
/>
@ -217,7 +219,7 @@ export const MobileMenu: React.FC<MobileMenuProps> = ({ isOpen, onClose, transla
</svg>
}
title={translations.contact}
description="Nous envoyer un email"
description={t.common.sendEmail}
href="mailto:contact@la-banquise.fr"
onClick={() => handleNavClick('contact')}
/>
@ -235,7 +237,7 @@ export const MobileMenu: React.FC<MobileMenuProps> = ({ isOpen, onClose, transla
</svg>
}
title="Discord"
description="Rejoindre la communauté"
description={t.common.joinCommunity}
href={URLS.social.discord}
isExternal={true}
/>
@ -257,7 +259,7 @@ export const MobileMenu: React.FC<MobileMenuProps> = ({ isOpen, onClose, transla
}}
className="w-full shadow-xl"
>
Se connecter
{t.common.login}
</Button>
</div>
</div>

View File

@ -5,9 +5,10 @@ import type { Translation } from '@/types/i18n';
interface HeroSectionProps {
translations: Translation['hero'];
commonTranslations: Translation['common'];
}
export const HeroSection: React.FC<HeroSectionProps> = ({ translations }) => (
export const HeroSection: React.FC<HeroSectionProps> = ({ translations, commonTranslations }) => (
<section
id="home"
className="min-h-screen flex flex-col justify-center items-center text-center relative px-4 sm:px-6 lg:px-8 bg-gradient-to-br from-gray-50 via-blue-50/30 to-gray-100"
@ -101,7 +102,7 @@ export const HeroSection: React.FC<HeroSectionProps> = ({ translations }) => (
}}
className="inline-flex items-center justify-center px-8 py-4 text-lg font-semibold text-blue-700 bg-white border-2 border-blue-600 rounded-xl shadow-lg hover:shadow-xl hover:bg-blue-50 hover:scale-105 transition-all duration-300 active:scale-95"
>
En savoir plus
{commonTranslations.learnMore}
</a>
</div>
</div>

View File

@ -1,5 +1,6 @@
import React from 'react';
import { ServiceCard } from '@/components/common/ServiceCard';
import { useTranslation } from '@/lib/hooks/useTranslation';
import type { Service } from '@/types/service';
interface ServicesSectionProps {
@ -14,11 +15,14 @@ export const ServicesSection: React.FC<ServicesSectionProps> = ({
services,
onServiceClick,
translations
}) => (
<section
id="services"
className="py-24 md:py-32 px-4 sm:px-6 lg:px-8 bg-gradient-to-br from-white via-blue-50/30 to-gray-50"
>
}) => {
const { t } = useTranslation();
return (
<section
id="services"
className="py-24 md:py-32 px-4 sm:px-6 lg:px-8 bg-gradient-to-br from-white via-blue-50/30 to-gray-50"
>
<div className="max-w-7xl mx-auto">
{/* Header de section moderne avec forte hiérarchie */}
<div className="text-center mb-20">
@ -27,7 +31,7 @@ export const ServicesSection: React.FC<ServicesSectionProps> = ({
{/* Titre principal avec contraste fort */}
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold text-gray-900 mb-6 leading-tight">
Nos Services
{t.sections.ourServices}
</h2>
{/* Sous-titre avec bon contraste */}
@ -47,5 +51,6 @@ export const ServicesSection: React.FC<ServicesSectionProps> = ({
))}
</div>
</div>
</section>
);
</section>
);
};

View File

@ -1,9 +1,11 @@
import React from 'react';
import { useScrollEffects } from '@/lib/hooks/useScrollEffects';
import { useTranslation } from '@/lib/hooks/useTranslation';
import { ArrowUp } from 'lucide-react';
export const ScrollToTopButton: React.FC = () => {
const { isVisible, scrollToTop } = useScrollEffects();
const { t } = useTranslation();
return (
<button
@ -13,7 +15,7 @@ export const ScrollToTopButton: React.FC = () => {
? 'opacity-100 translate-y-0 scale-100'
: 'opacity-0 translate-y-4 scale-95 pointer-events-none'
}`}
aria-label="Retour en haut de page"
aria-label={t.common.backToTop}
>
<ArrowUp
className="w-5 h-5 sm:w-6 sm:h-6 transition-transform duration-300 group-hover:-translate-y-0.5"

View File

@ -147,7 +147,15 @@ export const en: Translation = {
common: {
discoverFeatures: "Discover all features",
close: "Close",
loading: "Loading..."
loading: "Loading...",
learnMore: "Learn more",
backToHome: "Back to home",
discoverOffer: "Discover our offer",
learnMoreAboutUs: "Learn more about us",
sendEmail: "Send us an email",
login: "Sign in",
joinCommunity: "Join community",
backToTop: "Back to top"
},
user: {
profile: "Profile",
@ -157,6 +165,9 @@ export const en: Translation = {
connecting: "Connecting...",
authError: "Authentication error"
},
sections: {
ourServices: "Our Services"
},
about: {
title: "About La Banquise",
subtitle: "A passionate community that provides hosting services and collaborative tools for developers and gamers.",
@ -215,6 +226,18 @@ export const en: Translation = {
joinDiscord: "Join Discord"
}
},
footer: {
description: "A passionate community that provides hosting services and collaborative tools for developers and gamers.",
ourServices: "Our Services",
community: "Community",
joinAssociation: "Join the association",
joinDescription: "Connect on Discord and create a ticket to join the Banquise community.",
joinNow: "Join now",
gamingPanel: "Gaming Panel",
madeWith: "Made with",
by: "by Banquise",
copyright: "Community hosting for developers and gamers."
},
infrastructure: {
title: "Our Infrastructure",
subtitle: "25+ servers to meet your needs",

View File

@ -147,7 +147,15 @@ export const fr: Translation = {
common: {
discoverFeatures: "Découvrir toutes les fonctionnalités",
close: "Fermer",
loading: "Chargement..."
loading: "Chargement...",
learnMore: "En savoir plus",
backToHome: "Retour à l'accueil",
discoverOffer: "Découvrir notre offre",
learnMoreAboutUs: "En savoir plus sur nous",
sendEmail: "Nous envoyer un email",
login: "Se connecter",
joinCommunity: "Rejoindre la communauté",
backToTop: "Retour en haut de page"
},
user: {
profile: "Profil",
@ -157,6 +165,9 @@ export const fr: Translation = {
connecting: "Connexion en cours...",
authError: "Erreur d'authentification"
},
sections: {
ourServices: "Nos Services"
},
about: {
title: "À Propos de La Banquise",
subtitle: "Une communauté passionnée qui propose des services d'hébergement et des outils collaboratifs pour les développeurs et les gamers.",
@ -215,6 +226,18 @@ export const fr: Translation = {
joinDiscord: "Rejoindre Discord"
}
},
footer: {
description: "Une communauté passionnée qui propose des services d'hébergement et des outils collaboratifs pour les développeurs et les gamers.",
ourServices: "Nos Services",
community: "Communauté",
joinAssociation: "Rejoindre l'asso",
joinDescription: "Connectez-vous sur Discord et créez un ticket pour rejoindre la communauté Banquise.",
joinNow: "Rejoindre maintenant",
gamingPanel: "Panel de Jeux",
madeWith: "Fait avec",
by: "par Banquise",
copyright: "Hébergement communautaire pour développeurs et gamers."
},
infrastructure: {
title: "Notre Infrastructure",
subtitle: "25+ serveurs pour répondre à vos besoins",

View File

@ -17,6 +17,14 @@ export interface Translation {
discoverFeatures: string;
close: string;
loading: string;
learnMore: string;
backToHome: string;
discoverOffer: string;
learnMoreAboutUs: string;
sendEmail: string;
login: string;
joinCommunity: string;
backToTop: string;
};
user: {
profile: string;
@ -84,6 +92,21 @@ export interface Translation {
joinDiscord: string;
};
};
sections: {
ourServices: string;
};
footer: {
description: string;
ourServices: string;
community: string;
joinAssociation: string;
joinDescription: string;
joinNow: string;
gamingPanel: string;
madeWith: string;
by: string;
copyright: string;
};
infrastructure: {
title: string;
subtitle: string;