diff --git a/banquise-website/components/common/ServiceCard.tsx b/banquise-website/components/common/ServiceCard.tsx index 4a6fbeb..bb08063 100644 --- a/banquise-website/components/common/ServiceCard.tsx +++ b/banquise-website/components/common/ServiceCard.tsx @@ -55,16 +55,37 @@ export const ServiceCard: React.FC = ({ 'group-hover:shadow-2xl group-hover:scale-110', commonClasses.transition )}> - {service.icon} + {service.iconType === 'image' ? ( + {service.name} + ) : service.lucideIcon ? ( + + ) : ( + {service.icon} + )} {/* Nom du service */} diff --git a/banquise-website/components/ui/Popup.tsx b/banquise-website/components/ui/Popup.tsx index 0452839..838b795 100644 --- a/banquise-website/components/ui/Popup.tsx +++ b/banquise-website/components/ui/Popup.tsx @@ -1,4 +1,5 @@ import React, { useEffect } from 'react'; +import Image from 'next/image'; import { URLS } from '@/lib/config/constants'; import { FeatureBadge, FeatureItem, SectionTitle } from './PopupComponents'; import { cn, commonClasses } from '@/lib/utils'; @@ -50,8 +51,20 @@ export const Popup: React.FC = ({ service, onClose, translations }) {/* Header */}
-
- {service.icon} +
+ {service.iconType === 'image' ? ( + {service.name} + ) : service.lucideIcon ? ( + + ) : ( + {service.icon} + )}

@@ -111,9 +124,9 @@ export const Popup: React.FC = ({ service, onClose, translations }) 'border-0 py-4 px-6 sm:px-8 rounded-2xl cursor-pointer no-underline', 'font-bold tracking-wide shadow-lg', commonClasses.transition, - commonClasses.hoverLift, + commonClasses.hoverScale, 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500', - 'text-base lg:text-lg hover:scale-[1.02] active:scale-95' + 'text-base lg:text-lg' )} > diff --git a/banquise-website/lib/data/translations/en.ts b/banquise-website/lib/data/translations/en.ts index 0ae3c3e..10eaaed 100644 --- a/banquise-website/lib/data/translations/en.ts +++ b/banquise-website/lib/data/translations/en.ts @@ -1,5 +1,6 @@ import type { Translation } from '@/types/i18n'; import { URLS } from '@/lib/config/constants'; +import { BookOpen, GitBranch, Gamepad2, KeyRound, Building, Mail } from 'lucide-react'; export const en: Translation = { services: [ @@ -8,6 +9,7 @@ export const en: Translation = { url: URLS.services.wiki, image: "/assets/wikijs.png", icon: "📚", + iconType: "image", description: "Collaborative technical documentation and knowledge sharing platform. Create, edit and organize your guides, tutorials and documentation as a team with integrated versioning system.", features: [ "Advanced markdown editor with real-time preview", @@ -25,6 +27,7 @@ export const en: Translation = { url: URLS.services.gitea, image: "/assets/Gitea_Logo.png", icon: "🔧", + iconType: "image", description: "Lightweight and performant self-hosted Git service for your development projects. Open-source alternative to GitHub with all essential features for managing your repositories.", features: [ "Unlimited public and private Git repositories", @@ -42,6 +45,7 @@ export const en: Translation = { url: URLS.services.pelican, image: "/assets/pelican.png", icon: "🐧", + iconType: "image", description: "Game server management with dedicated servers (Minecraft, CS2, Palworld, and many others)", features: [ "One-click deployment with pre-configured templates", @@ -57,6 +61,8 @@ export const en: Translation = { url: URLS.services.ssp, image: "/assets/banquise.png", icon: "🔐", + iconType: "lucide", + lucideIcon: KeyRound, description: "Secure interface for autonomous password management. Easily change your credentials safely.", features: [ "Secure interface to change your password", @@ -70,6 +76,7 @@ export const en: Translation = { url: URLS.services.opencloud, image: "/assets/opencloud_logo_white.png", icon: "☁️", + iconType: "image", description: "Open-source collaborative cloud platform for file storage, sharing and synchronization. Free alternative to Google Drive with full control over your data.", features: [ "Secure and encrypted cloud storage", @@ -87,6 +94,8 @@ export const en: Translation = { url: URLS.services.intra, image: "/assets/banquise.png", icon: "🏢", + iconType: "lucide", + lucideIcon: Building, description: "Secure private space for the association to centralize internal resources, communications and collaboration tools between members.", features: [ "Personalized dashboard for each member", @@ -104,6 +113,8 @@ export const en: Translation = { url: URLS.services.panel, image: "/assets/banquise.png", icon: "🎮", + iconType: "lucide", + lucideIcon: Gamepad2, description: "Centralized management interface for all your game servers. Easily deploy, configure and monitor your Minecraft, CS2, Garry's Mod and many other servers.", features: [ "Support for 20+ popular games (Minecraft, CS2, GMod...)", @@ -120,6 +131,8 @@ export const en: Translation = { url: URLS.services.mails, image: "/assets/banquise.png", icon: "📧", + iconType: "lucide", + lucideIcon: Mail, description: "Professional email service with modern web interface. Benefit from a personalized @la-banquise.fr email address with all advanced features.", features: [ "Personalized @la-banquise.fr email addresses", diff --git a/banquise-website/lib/data/translations/fr.ts b/banquise-website/lib/data/translations/fr.ts index 47cc1c8..e874a59 100644 --- a/banquise-website/lib/data/translations/fr.ts +++ b/banquise-website/lib/data/translations/fr.ts @@ -1,5 +1,6 @@ import type { Translation } from '@/types/i18n'; import { URLS } from '@/lib/config/constants'; +import { BookOpen, GitBranch, Gamepad2, KeyRound, Building, Mail } from 'lucide-react'; export const fr: Translation = { services: [ @@ -8,6 +9,7 @@ export const fr: Translation = { url: URLS.services.wiki, image: "/assets/wikijs.png", icon: "📚", + iconType: "image", description: "Plateforme collaborative de documentation technique et de partage de connaissances. Créez, modifiez et organisez vos guides, tutoriels et documentations en équipe avec un système de versioning intégré.", features: [ "Éditeur markdown avancé avec prévisualisation en temps réel", @@ -25,6 +27,7 @@ export const fr: Translation = { url: URLS.services.gitea, image: "/assets/Gitea_Logo.png", icon: "🔧", + iconType: "image", description: "Service Git auto-hébergé lightweight et performant pour vos projets de développement. Alternative open-source à GitHub avec toutes les fonctionnalités essentielles pour gérer vos repositories.", features: [ "Repositories Git illimités publics et privés", @@ -42,6 +45,7 @@ export const fr: Translation = { url: URLS.services.pelican, image: "/assets/pelican.png", icon: "🐧", + iconType: "image", description: "Gestion de serveurs de jeux avec serveurs dédiés (Minecraft, CS2, Palworld, et bien d'autres)", features: [ "Déploiement en un clic avec templates préconfigurés", @@ -57,6 +61,8 @@ export const fr: Translation = { url: URLS.services.ssp, image: "/assets/banquise.png", icon: "🔐", + iconType: "lucide", + lucideIcon: KeyRound, description: "Interface sécurisée pour la gestion autonome de vos mots de passe. Changez facilement vos identifiants en toute sécurité.", features: [ "Interface sécurisée pour changer votre mot de passe", @@ -70,6 +76,7 @@ export const fr: Translation = { url: URLS.services.opencloud, image: "/assets/opencloud_logo_white.png", icon: "☁️", + iconType: "image", description: "Plateforme cloud collaborative open-source pour le stockage, le partage et la synchronisation de fichiers. Alternative libre à Google Drive avec contrôle total sur vos données.", features: [ "Stockage cloud sécurisé et chiffré", @@ -87,6 +94,8 @@ export const fr: Translation = { url: URLS.services.intra, image: "/assets/banquise.png", icon: "🏢", + iconType: "lucide", + lucideIcon: Building, description: "Espace privé sécurisé de l'association pour centraliser les ressources internes, communications et outils de collaboration entre membres.", features: [ "Tableau de bord personnalisé pour chaque membre", @@ -104,6 +113,8 @@ export const fr: Translation = { url: URLS.services.panel, image: "/assets/banquise.png", icon: "🎮", + iconType: "lucide", + lucideIcon: Gamepad2, description: "Interface de gestion centralisée pour tous vos serveurs de jeux. Déployez, configurez et surveillez facilement vos serveurs Minecraft, CS2, Garry's Mod et bien d'autres.", features: [ "Support de 20+ jeux populaires (Minecraft, CS2, GMod...)", @@ -120,6 +131,8 @@ export const fr: Translation = { url: URLS.services.mails, image: "/assets/banquise.png", icon: "📧", + iconType: "lucide", + lucideIcon: Mail, description: "Service de messagerie électronique professionnel avec interface web moderne. Bénéficiez d'une adresse email personnalisée @la-banquise.fr avec toutes les fonctionnalités avancées.", features: [ "Adresses email personnalisées @la-banquise.fr", diff --git a/banquise-website/lib/utils/index.ts b/banquise-website/lib/utils/index.ts index 8aad5e4..a2d49b0 100644 --- a/banquise-website/lib/utils/index.ts +++ b/banquise-website/lib/utils/index.ts @@ -69,6 +69,7 @@ export const commonClasses = { // Hover effects communs hoverScale: 'hover:scale-105 active:scale-95', + cardHover: 'hover:shadow-xl hover:-translate-y-1', // Boutons communs buttonBase: 'inline-flex items-center justify-center font-semibold rounded-xl transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-blue-400/50', diff --git a/banquise-website/types/service.ts b/banquise-website/types/service.ts index 7bfe4bf..7b9b512 100644 --- a/banquise-website/types/service.ts +++ b/banquise-website/types/service.ts @@ -1,10 +1,13 @@ import type { StaticImageData } from 'next/image' +import type { LucideIcon } from 'lucide-react' export interface Service { name: string; url: string; image: string | StaticImageData; icon: string; + iconType: 'image' | 'lucide'; + lucideIcon?: LucideIcon; description: string; features: string[]; }