diff --git a/banquise-website/.gitignore b/banquise-website/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/banquise-website/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/banquise-website/README.md b/banquise-website/README.md deleted file mode 100644 index da98444..0000000 --- a/banquise-website/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# React + TypeScript + Vite - -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. - -Currently, two official plugins are available: - -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh - -## Expanding the ESLint configuration - -If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: - -```js -export default tseslint.config({ - extends: [ - // Remove ...tseslint.configs.recommended and replace with this - ...tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules - ...tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules - ...tseslint.configs.stylisticTypeChecked, - ], - languageOptions: { - // other options... - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - }, -}) -``` - -You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: - -```js -// eslint.config.js -import reactX from 'eslint-plugin-react-x' -import reactDom from 'eslint-plugin-react-dom' - -export default tseslint.config({ - plugins: { - // Add the react-x and react-dom plugins - 'react-x': reactX, - 'react-dom': reactDom, - }, - rules: { - // other rules... - // Enable its recommended typescript rules - ...reactX.configs['recommended-typescript'].rules, - ...reactDom.configs.recommended.rules, - }, -}) -``` diff --git a/banquise-website/build.sh b/banquise-website/build.sh deleted file mode 100755 index 734716c..0000000 --- a/banquise-website/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -npm install -npm run build diff --git a/banquise-website/eslint.config.js b/banquise-website/eslint.config.js deleted file mode 100644 index 092408a..0000000 --- a/banquise-website/eslint.config.js +++ /dev/null @@ -1,28 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import tseslint from 'typescript-eslint' - -export default tseslint.config( - { ignores: ['dist'] }, - { - extends: [js.configs.recommended, ...tseslint.configs.recommended], - files: ['**/*.{ts,tsx}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - }, - plugins: { - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, - }, - rules: { - ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - }, -) diff --git a/banquise-website/index.html b/banquise-website/index.html deleted file mode 100644 index 2ac6584..0000000 --- a/banquise-website/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - La Banquise - Services d'hébergement - - - - - - -
- - - diff --git a/banquise-website/package.json b/banquise-website/package.json deleted file mode 100644 index 5bbfe07..0000000 --- a/banquise-website/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "banquise-website", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc -b && vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "axios": "^1.6.5", - "clsx": "^2.1.0", - "framer-motion": "^10.18.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-icons": "^4.12.0", - "react-router-dom": "^6.22.0", - "@tanstack/react-query": "^5.17.9", - "tailwind-merge": "^2.2.0", - "zustand": "^4.4.7" - }, - "devDependencies": { - "@eslint/js": "^9.25.0", - "@tailwindcss/forms": "^0.5.7", - "@tailwindcss/typography": "^0.5.10", - "@types/react": "^18.2.58", - "@types/react-dom": "^18.2.19", - "@vitejs/plugin-react": "^4.4.1", - "autoprefixer": "^10.4.16", - "eslint": "^9.25.0", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.19", - "eslint-plugin-tailwindcss": "^3.14.0", - "globals": "^16.0.0", - "postcss": "^8.4.33", - "typescript": "~5.8.3", - "typescript-eslint": "^8.30.1", - "vite": "^6.3.5", - "vite-plugin-compression": "^0.5.1", - "tailwindcss": "^3.4.1" - } -} diff --git a/banquise-website/postcss.config.js b/banquise-website/postcss.config.js deleted file mode 100644 index 2e7af2b..0000000 --- a/banquise-website/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/banquise-website/src/App.css b/banquise-website/src/App.css deleted file mode 100644 index b797a0b..0000000 --- a/banquise-website/src/App.css +++ /dev/null @@ -1 +0,0 @@ -/* This file is no longer needed - all styles have been converted to Tailwind CSS */ diff --git a/banquise-website/src/App.tsx b/banquise-website/src/App.tsx deleted file mode 100644 index e6ea4ea..0000000 --- a/banquise-website/src/App.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React, { useState } from 'react'; -import { Navigation } from './components/layout/Navigation'; -import { Footer } from './components/layout/Footer'; -import { HeroSection } from './components/sections/HeroSection'; -import { TechFeaturesSection } from './components/sections/TechFeaturesSection'; -import { ServicesSection } from './components/sections/ServicesSection'; -import { AboutSection } from './components/sections/AboutSection'; -import { Popup } from './components/ui/Popup'; -import { ScrollToTopButton } from './components/ui/ScrollToTopButton'; -import { URLS } from './config/constants'; - -// Define Service interface directly in App -interface Service { - name: string; - url: string; - image: string; - description: string; - features: string[]; - icon: string; -} - -const App: React.FC = () => { - // Define services directly in the component with enhanced data - const services: Service[] = [ - { - name: "Wiki", - url: URLS.services.wiki, - image: "/src/assets/iceberg.png", - icon: "📚", - description: "Notre wiki collaboratif est votre centre de documentation technique. Accédez à des guides détaillés, des tutoriels et de la documentation API pour tous nos services.", - features: [ - "Documentation collaborative en temps réel", - "Guides d'installation détaillés", - "API et références techniques", - "Tutoriels pas à pas", - "Base de connaissances communautaire", - "Recherche avancée intégrée" - ] - }, - { - name: "Gitea", - url: URLS.services.gitea, - image: "/src/assets/iceberg.png", - icon: "🔧", - description: "Instance Gitea auto-hébergée pour la gestion de vos dépôts Git. Collaborez sur vos projets avec un contrôle total sur votre code source.", - features: [ - "Dépôts Git illimités", - "Issues et pull requests", - "Actions CI/CD intégrées", - "Gestion d'équipes et permissions", - "Interface web intuitive", - "Intégration avec outils externes" - ] - }, - { - name: "Panel", - url: URLS.services.panel, - image: "/src/assets/iceberg.png", - icon: "🎮", - description: "Interface de gestion centralisée pour vos serveurs de jeux. Déployez, configurez et surveillez vos serveurs gaming en quelques clics.", - features: [ - "Déploiement automatisé de serveurs", - "Monitoring en temps réel", - "Gestion des ressources système", - "Interface d'administration web", - "Support multi-jeux", - "Sauvegarde automatique des données" - ] - } - ]; - - const [selectedService, setSelectedService] = useState(null); - - // Inline accordion logic - const [openAccordion, setOpenAccordion] = useState(null); - const toggleAccordion = (title: string) => { - setOpenAccordion(openAccordion === title ? null : title); - }; - - return ( -
- - -
-
- - - - - -
-
- -
- - {/* Bouton de retour en haut */} - - - {selectedService && ( - setSelectedService(null)} /> - )} -
- ); -}; - -export default App; diff --git a/banquise-website/src/assets/banquise.png b/banquise-website/src/assets/banquise.png deleted file mode 100644 index 39c3011..0000000 Binary files a/banquise-website/src/assets/banquise.png and /dev/null differ diff --git a/banquise-website/src/assets/banquise_server.svg b/banquise-website/src/assets/banquise_server.svg deleted file mode 100644 index 66d3222..0000000 --- a/banquise-website/src/assets/banquise_server.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/banquise-website/src/assets/iceberg.png b/banquise-website/src/assets/iceberg.png deleted file mode 100644 index 3b97360..0000000 Binary files a/banquise-website/src/assets/iceberg.png and /dev/null differ diff --git a/banquise-website/src/components/layout/Footer.tsx b/banquise-website/src/components/layout/Footer.tsx deleted file mode 100644 index 0072ea6..0000000 --- a/banquise-website/src/components/layout/Footer.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react'; -import { URLS, SITE_CONFIG } from '../../config/constants'; - -export const Footer: React.FC = () => ( - -); diff --git a/banquise-website/src/components/layout/MobileMenu.tsx b/banquise-website/src/components/layout/MobileMenu.tsx deleted file mode 100644 index a233ef8..0000000 --- a/banquise-website/src/components/layout/MobileMenu.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import React, { useEffect } from 'react'; -import banquiseServer from '../../assets/banquise_server.svg' -import { URLS, SITE_CONFIG } from '../../config/constants'; -import { commonStyles } from '../../styles/components'; - -interface MobileMenuProps { - isOpen: boolean; - onClose: () => void; -} - -export const MobileMenu: React.FC = ({ isOpen, onClose }) => { - useEffect(() => { - if (isOpen) { - document.body.style.overflow = 'hidden'; - } else { - document.body.style.overflow = 'unset'; - } - - return () => { - document.body.style.overflow = 'unset'; - }; - }, [isOpen]); - - return ( -
- {/* Overlay */} -
- - {/* Menu mobile */} -
- - {/* Header */} -
-
-
-
- Logo -
-
- - {SITE_CONFIG.name} - -

Menu Navigation

-
-
- - -
- - {/* Navigation */} - - - {/* Footer */} -
-
-

- © 2024 {SITE_CONFIG.name} -

-
-
- - {/* Effet glassmorphism */} -
-
-
- ); -}; diff --git a/banquise-website/src/components/layout/Navigation.tsx b/banquise-website/src/components/layout/Navigation.tsx deleted file mode 100644 index 70935b2..0000000 --- a/banquise-website/src/components/layout/Navigation.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { MobileMenu } from './MobileMenu'; -import banquiseServer from '/src/assets/banquise_server.svg' -import { URLS, SITE_CONFIG } from '../../config/constants'; -import { commonStyles } from '../../styles/components'; - -export const Navigation: React.FC = () => { - const [mobileMenuOpen, setMobileMenuOpen] = useState(false); - const [scrolled, setScrolled] = useState(false); - - useEffect(() => { - const handleScroll = () => { - const isScrolled = window.scrollY > 20; - setScrolled(isScrolled); - }; - - window.addEventListener('scroll', handleScroll); - return () => window.removeEventListener('scroll', handleScroll); - }, []); - - useEffect(() => { - const handleResize = () => { - if (window.innerWidth >= 768) { - setMobileMenuOpen(false); - } - }; - - window.addEventListener('resize', handleResize); - return () => window.removeEventListener('resize', handleResize); - }, []); - - return ( - <> - - - {/* Spacer pour compenser la navbar fixed */} -
- - {/* Menu mobile */} - setMobileMenuOpen(false)} - /> - - ); -}; diff --git a/banquise-website/src/components/sections/AboutSection.tsx b/banquise-website/src/components/sections/AboutSection.tsx deleted file mode 100644 index e71693f..0000000 --- a/banquise-website/src/components/sections/AboutSection.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import React from 'react'; -import { AccordionItem } from '../ui/AccordionItem'; -import { URLS } from '../../config/constants'; -import { commonStyles } from '../../styles/components'; - -interface AboutSectionProps { - openAccordion: string | null; - toggleAccordion: (title: string) => void; -} - -export const AboutSection: React.FC = ({ openAccordion, toggleAccordion }) => ( -
-
- {/* Header */} -
-
-

- À Propos de La Banquise -

-

- Une communauté passionnée qui propose des services d'hébergement et des outils collaboratifs pour les développeurs et les gamers. -

-
- - {/* FAQ Section */} -
-

- - Questions Fréquentes -

- - toggleAccordion("mission")} - > -
-

- Former les étudiants au déploiment et a la gestion d'une infra, et de maitriser des technologies entreprise grade. - Cela permet de fournir une plateforme stable et accessible pour héberger vos projets, partager vos connaissances et jouer ensemble ! -

-

- Nous croyons en la puissance de la collaboration et mettons à disposition des outils modernes pour faciliter le travail en équipe. -

-
- Collaboration - Innovation - Accessibilité -
-
-
- - toggleAccordion("services")} - > -
-
-
-
📚
-
-

Wiki

-

Documentation collaborative et guides détaillés

-
-
- -
-
🔧
-
-

Gitea

-

Gestion de versions Git auto-hébergée

-
-
- -
-
🎮
-
-

Panel de Jeux

-

Interface de gestion pour serveurs de jeux

-
-
-
-

- Tous nos services sont maintenus avec soin et régulièrement mis à jour pour garantir une expérience optimale. -

-
-
- - toggleAccordion("community")} - > -
-

- Rejoignez notre serveur Discord pour rejoindre l'asso, échanger avec nous, obtenir de l'aide et rester informé des dernières nouveautés ! -

- -
-

- 💬 - Comment rejoindre l'asso ? -

-
    -
  • Creez un ticket banquise
  • -
  • Donnez votre login EPITA ou expliquez votre situation
  • -
  • Un moderateur validera votre demande et vous donnera acces aux salons discord de l'asso !
  • -
- - - 🚀 - Rejoindre Discord - -
-
-
-
-
-
-); diff --git a/banquise-website/src/components/sections/HeroSection.tsx b/banquise-website/src/components/sections/HeroSection.tsx deleted file mode 100644 index b6b8eac..0000000 --- a/banquise-website/src/components/sections/HeroSection.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; -import banquiseServer from '/src/assets/banquise_server.svg' - -export const HeroSection: React.FC = () => ( -
-
- Logo La Banquise -
- -

- Bienvenue sur La Banquise -

- -

- Association d'hébergement et lab réseau pour tous les étudiants et associations de l'EPITA ! -

- - - Découvrir nos services - - -
-); diff --git a/banquise-website/src/components/sections/ServicesSection.tsx b/banquise-website/src/components/sections/ServicesSection.tsx deleted file mode 100644 index ad58cef..0000000 --- a/banquise-website/src/components/sections/ServicesSection.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; - -// Declare the Service interface here -interface Service { - name: string; - url: string; - image: string; - icon: string; - description: string; - features: string[]; -} - -// Define interface directly in the component file -interface ServicesSectionProps { - services: Service[]; - onServiceClick: (service: Service) => void; -} - -export const ServicesSection: React.FC = ({ services, onServiceClick }) => ( -
-
-

- Nos Services -

-

- Cliquez sur un service pour découvrir toutes ses fonctionnalités -

- -
- {services.map((service) => ( -
onServiceClick(service)} - > - {/* Icon */} -
- {service.icon} -
- - {/* Service name */} -

- {service.name} -

- - {/* Short teaser description */} -

- {service.description.split('.')[0]}. -

- - {/* CTA */} -
- Découvrir toutes les fonctionnalités - -
- - {/* Subtle hover effect */} -
-
- ))} -
-
-); diff --git a/banquise-website/src/components/sections/TechFeaturesSection.tsx b/banquise-website/src/components/sections/TechFeaturesSection.tsx deleted file mode 100644 index 417c98f..0000000 --- a/banquise-website/src/components/sections/TechFeaturesSection.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react'; - -export const TechFeaturesSection: React.FC = () => ( -
-
-

- Notre Infrastructure -

-

- 25+ serveurs pour répondre à vos besoins -

- -
-
-
- 🚀 -
-

Serveurs performants

-

Infrastructure optimisée pour assurer des performances élevées et une disponibilité maximale de vos applications

-
- -
-
- 💾 -
-

Stockage sécurisé

-

Solutions de stockage distribuées avec redondance pour garantir l'intégrité et la durabilité de vos données

-
- -
-
- 🌐 -
-

Réseau optimisé

-

Architecture réseau à haute disponibilité avec une faible latence pour vos applications critiques

-
- -
-
- 🛡️ -
-

Sécurité renforcée

-

Protection contre les menaces avec systèmes de sécurité modernes et mises à jour régulières

-
-
-
-); diff --git a/banquise-website/src/components/ui/AccordionItem.tsx b/banquise-website/src/components/ui/AccordionItem.tsx deleted file mode 100644 index 2f7fd4d..0000000 --- a/banquise-website/src/components/ui/AccordionItem.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; - -// Définir l'interface localement : -interface AccordionItemProps { - title: string; - children: React.ReactNode; - isOpen: boolean; - onToggle: () => void; -} - -export const AccordionItem: React.FC = ({ title, children, isOpen, onToggle }) => ( -
-
- {title} - - ▼ - -
-
-
- {children} -
-
-
-); diff --git a/banquise-website/src/components/ui/ParallaxBackground.tsx b/banquise-website/src/components/ui/ParallaxBackground.tsx deleted file mode 100644 index b8e33b5..0000000 --- a/banquise-website/src/components/ui/ParallaxBackground.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -export const ParallaxBackground: React.FC = () => { - const [scrollY, setScrollY] = useState(0); - - useEffect(() => { - const handleScroll = () => { - setScrollY(window.scrollY); - }; - - window.addEventListener('scroll', handleScroll); - return () => window.removeEventListener('scroll', handleScroll); - }, []); - - // Éléments flottants avec différentes vitesses de parallaxe - const floatingElements = [ - // Serveurs et équipements - { icon: '🖥️', x: 10, y: 20, speed: 0.3, size: 'text-2xl', opacity: 0.1 }, - { icon: '🖲️', x: 85, y: 15, speed: 0.2, size: 'text-xl', opacity: 0.08 }, - { icon: '⚙️', x: 75, y: 45, speed: 0.4, size: 'text-3xl', opacity: 0.12 }, - { icon: '🔧', x: 15, y: 60, speed: 0.25, size: 'text-lg', opacity: 0.06 }, - { icon: '💾', x: 90, y: 70, speed: 0.35, size: 'text-2xl', opacity: 0.1 }, - - // Code et développement - { icon: '<>', x: 30, y: 35, speed: 0.15, size: 'text-xl', opacity: 0.08, isText: true }, - { icon: '{ }', x: 60, y: 25, speed: 0.28, size: 'text-2xl', opacity: 0.1, isText: true }, - { icon: '#!/bin', x: 5, y: 80, speed: 0.2, size: 'text-sm', opacity: 0.06, isText: true }, - { icon: 'git', x: 80, y: 85, speed: 0.32, size: 'text-lg', opacity: 0.08, isText: true }, - - // Réseau et connectivité - { icon: '🌐', x: 45, y: 10, speed: 0.22, size: 'text-2xl', opacity: 0.09 }, - { icon: '🔗', x: 25, y: 75, speed: 0.18, size: 'text-xl', opacity: 0.07 }, - { icon: '📡', x: 70, y: 55, speed: 0.26, size: 'text-lg', opacity: 0.08 }, - - // Sécurité - { icon: '🔒', x: 55, y: 40, speed: 0.3, size: 'text-xl', opacity: 0.09 }, - { icon: '🛡️', x: 35, y: 65, speed: 0.24, size: 'text-2xl', opacity: 0.1 }, - { icon: '🔑', x: 85, y: 30, speed: 0.16, size: 'text-lg', opacity: 0.07 }, - - // Données et stockage - { icon: '💿', x: 20, y: 45, speed: 0.28, size: 'text-xl', opacity: 0.08 }, - { icon: '📊', x: 65, y: 75, speed: 0.22, size: 'text-2xl', opacity: 0.09 }, - { icon: '📈', x: 40, y: 20, speed: 0.34, size: 'text-lg', opacity: 0.07 }, - - // Éléments techniques supplémentaires - { icon: 'sudo', x: 12, y: 90, speed: 0.19, size: 'text-sm', opacity: 0.06, isText: true }, - { icon: 'SSH', x: 78, y: 12, speed: 0.31, size: 'text-base', opacity: 0.08, isText: true }, - { icon: 'API', x: 92, y: 50, speed: 0.27, size: 'text-lg', opacity: 0.09, isText: true }, - { icon: 'TCP', x: 8, y: 30, speed: 0.23, size: 'text-base', opacity: 0.07, isText: true }, - { icon: 'HTTP', x: 50, y: 80, speed: 0.29, size: 'text-sm', opacity: 0.06, isText: true }, - ]; - - return ( -
- {/* Grille de fond subtile */} -
-
-
- - {/* Particules de code flottantes */} -
- {floatingElements.map((element, index) => ( -
- {element.icon} -
- ))} -
- - {/* Lignes de connexion animées */} - - - - - - - - - - {/* Lignes de connexion entre les éléments */} - {[...Array(8)].map((_, i) => ( - - ))} - - - {/* Cercles de données en mouvement */} -
- {[...Array(6)].map((_, i) => ( -
- ))} -
-
- ); -}; diff --git a/banquise-website/src/components/ui/Popup.tsx b/banquise-website/src/components/ui/Popup.tsx deleted file mode 100644 index 8ed8158..0000000 --- a/banquise-website/src/components/ui/Popup.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import React, { useEffect } from 'react'; -import { URLS } from '../../config/constants'; - -interface Service { - name: string; - url: string; - image: string; - icon: string; - description: string; - features: string[]; -} - -interface PopupProps { - service: Service; - onClose: () => void; -} - -export const Popup: React.FC = ({ service, onClose }) => { - // Empêcher le scroll du body quand la popup est ouverte - useEffect(() => { - document.body.style.overflow = 'hidden'; - - return () => { - document.body.style.overflow = 'unset'; - }; - }, []); - - return ( -
-
- - {/* Bouton de fermeture fixe au-dessus du contenu */} -
- -
- - {/* Contenu avec scroll vertical uniquement */} -
- {/* Header */} -
-
-
- {service.icon} -
-
-

- {service.name} -

-
- Service d'hébergement professionnel -
-
- Haute disponibilité - Open Source - Communautaire -
-
-
-
- - {/* Content - Forcer le fond blanc */} -
- {/* Description */} -

- 📋 - Description détaillée -

-
-

- {service.description} -

-
-
-
- ✓ -
-
-
99.9% Uptime
-
Disponibilité garantie
-
-
-
-
- 🔒 -
-
-
Sécurisé
-
SSL & Backups
-
-
-
-
- - {/* Fonctionnalités */} -

- - Fonctionnalités principales -

-
- {service.features.map((feature, index) => ( -
-
-
-
- {feature} -
- ))} -
- - {/* Call to action */} -
- - 🚀 - Accéder à {service.name} - - -

- Besoin d'aide ? Rejoignez notre Discord pour obtenir du support -

-
-
-
- - {/* Decorative elements */} -
-
-
-
- ); -}; diff --git a/banquise-website/src/components/ui/ScrollToTopButton.tsx b/banquise-website/src/components/ui/ScrollToTopButton.tsx deleted file mode 100644 index a05463b..0000000 --- a/banquise-website/src/components/ui/ScrollToTopButton.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { useState, useEffect } from 'react'; - -export const ScrollToTopButton: React.FC = () => { - const [isVisible, setIsVisible] = useState(false); - - useEffect(() => { - const toggleVisibility = () => { - // Afficher le bouton après avoir scrollé 300px - setIsVisible(window.scrollY > 300); - }; - - window.addEventListener('scroll', toggleVisibility); - return () => window.removeEventListener('scroll', toggleVisibility); - }, []); - - const scrollToTop = () => { - window.scrollTo({ - top: 0, - behavior: 'smooth' - }); - }; - - return ( - - ); -}; diff --git a/banquise-website/src/config/constants.ts b/banquise-website/src/config/constants.ts deleted file mode 100644 index 5a493bf..0000000 --- a/banquise-website/src/config/constants.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const URLS = { - services: { - wiki: "https://wiki.la-banquise.fr", - gitea: "https://git.la-banquise.fr", - panel: "https://panel.la-banquise.fr", - auth: "https://auth.la-banquise.fr" - }, - social: { - discord: "https://discord.gg/labanquise" - }, - contact: { - email: "mailto:contact@la-banquise.fr" - } -} as const; - -export const SITE_CONFIG = { - name: "La Banquise", - description: "Association d'hébergement et lab réseau pour tous les étudiants et associations de l'EPITA", - tagline: "Communauté • Hébergement" -} as const; diff --git a/banquise-website/src/index.css b/banquise-website/src/index.css deleted file mode 100644 index ca06f66..0000000 --- a/banquise-website/src/index.css +++ /dev/null @@ -1,185 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* Variables CSS pour les polices */ -:root { - --font-heading: 'Dela Gothic One', sans-serif; - --font-body: 'Roboto', sans-serif; -} - -/* Parallax animations */ -@keyframes parallax-slow { - 0% { transform: translateY(0px); } - 100% { transform: translateY(-50px); } -} - -@keyframes parallax-medium { - 0% { transform: translateY(0px); } - 100% { transform: translateY(-80px); } -} - -@keyframes parallax-fast { - 0% { transform: translateY(0px); } - 100% { transform: translateY(-120px); } -} - -@keyframes parallax-very-slow { - 0% { transform: translateY(0px); } - 100% { transform: translateY(-20px); } -} - -/* Floating animations with different speeds */ -@keyframes float-slow { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 50% { transform: translateY(-20px) rotate(5deg); } -} - -@keyframes float-medium { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 50% { transform: translateY(-15px) rotate(-3deg); } -} - -@keyframes float-fast { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 50% { transform: translateY(-10px) rotate(3deg); } -} - -@keyframes float-very-slow { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 50% { transform: translateY(-30px) rotate(-2deg); } -} - -/* Animations pour les éléments flottants */ -@keyframes float-0 { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 50% { transform: translateY(-10px) rotate(2deg); } -} - -@keyframes float-1 { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 33% { transform: translateY(-8px) rotate(-1deg); } - 66% { transform: translateY(-15px) rotate(1deg); } -} - -@keyframes float-2 { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 25% { transform: translateY(-12px) rotate(1deg); } - 75% { transform: translateY(-6px) rotate(-2deg); } -} - -/* Animation pour l'élément principal du hero */ -@keyframes gentle-float { - 0%, 100% { transform: translateY(0px) rotate(0deg); } - 50% { transform: translateY(-15px) rotate(1deg); } -} - -.animate-gentle-float { - animation: gentle-float 6s ease-in-out infinite; -} - -/* Effet de lueur pour les éléments techniques */ -@keyframes glow-pulse { - 0%, 100% { - text-shadow: 0 0 5px rgba(168, 218, 255, 0.3), - 0 0 10px rgba(168, 218, 255, 0.2), - 0 0 15px rgba(168, 218, 255, 0.1); - } - 50% { - text-shadow: 0 0 10px rgba(168, 218, 255, 0.4), - 0 0 20px rgba(168, 218, 255, 0.3), - 0 0 30px rgba(168, 218, 255, 0.2); - } -} - -/* Animation des lignes de connexion */ -@keyframes data-flow { - 0% { stroke-dasharray: 0, 100; } - 50% { stroke-dasharray: 50, 100; } - 100% { stroke-dasharray: 100, 100; } -} - -/* Responsive pour les animations */ -@media (prefers-reduced-motion: reduce) { - .animate-gentle-float, - .animate-ping, - .animate-pulse { - animation: none; - } -} - -/* Apply animations */ -.animate-parallax-slow { - animation: parallax-slow 20s ease-in-out infinite; -} - -.animate-parallax-medium { - animation: parallax-medium 15s ease-in-out infinite; -} - -.animate-parallax-fast { - animation: parallax-fast 10s ease-in-out infinite; -} - -.animate-parallax-very-slow { - animation: parallax-very-slow 30s ease-in-out infinite; -} - -.animate-float-slow { - animation: float-slow 8s ease-in-out infinite; -} - -.animate-float-medium { - animation: float-medium 6s ease-in-out infinite; -} - -.animate-float-fast { - animation: float-fast 4s ease-in-out infinite; -} - -.animate-float-very-slow { - animation: float-very-slow 12s ease-in-out infinite; -} - -/* Amélioration du scroll */ -html { - scroll-behavior: smooth; -} - -/* Empêcher le scroll horizontal global */ -body { - overflow-x: hidden; -} - -/* Styles pour les popups */ -.popup-content { - scrollbar-width: thin; - scrollbar-color: rgba(31, 93, 137, 0.3) transparent; -} - -.popup-content::-webkit-scrollbar { - width: 6px; -} - -.popup-content::-webkit-scrollbar-track { - background: transparent; -} - -.popup-content::-webkit-scrollbar-thumb { - background: rgba(31, 93, 137, 0.3); - border-radius: 3px; -} - -.popup-content::-webkit-scrollbar-thumb:hover { - background: rgba(31, 93, 137, 0.5); -} - -/* Animation pour le bouton scroll to top */ -@keyframes bounce-up { - 0%, 100% { transform: translateY(0px); } - 50% { transform: translateY(-4px); } -} - -.scroll-to-top:hover { - animation: bounce-up 0.6s ease-in-out; -} diff --git a/banquise-website/src/main.tsx b/banquise-website/src/main.tsx deleted file mode 100644 index e3f1654..0000000 --- a/banquise-website/src/main.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import './index.css' -import App from './App.tsx' - -// Ajouter les métadonnées SEO -document.title = 'La Banquise - Hébergement et Communauté Tech'; -const metaDescription = document.createElement('meta'); -metaDescription.name = 'description'; -metaDescription.content = 'Association d\'hébergement et lab réseau pour tous les étudiants et associations de l\'EPITA. Services Wiki, Gitea, Panel de jeux.'; -document.head.appendChild(metaDescription); - -const metaViewport = document.createElement('meta'); -metaViewport.name = 'viewport'; -metaViewport.content = 'width=device-width, initial-scale=1.0'; -document.head.appendChild(metaViewport); - -createRoot(document.getElementById('root')!).render( - - - , -) diff --git a/banquise-website/src/styles/components.ts b/banquise-website/src/styles/components.ts deleted file mode 100644 index 48fcabf..0000000 --- a/banquise-website/src/styles/components.ts +++ /dev/null @@ -1,63 +0,0 @@ -export const commonStyles = { - // Gradients - gradients: { - primary: "bg-gradient-to-r from-banquise-blue to-banquise-blue-light", - primaryBr: "bg-gradient-to-br from-banquise-blue to-banquise-blue-light", - card: "bg-gradient-to-br from-banquise-blue-dark/10 to-banquise-blue-dark/5", - cardHover: "hover:from-banquise-blue-dark/15 hover:to-banquise-blue-dark/8", - discord: "bg-gradient-to-r from-indigo-600 to-purple-600", - discordHover: "hover:from-indigo-500 hover:to-purple-500" - }, - - // Buttons - buttons: { - primary: "inline-flex items-center justify-center font-bold text-white border-0 rounded-2xl transition-all duration-300 hover:shadow-xl hover:-translate-y-1 hover:scale-105 active:scale-95", - discord: "group relative overflow-hidden px-4 lg:px-6 py-2.5 lg:py-3 text-white font-semibold text-sm lg:text-base rounded-xl transition-all duration-300 hover:shadow-xl hover:shadow-indigo-500/25 hover:-translate-y-1 hover:scale-105", - auth: "group relative overflow-hidden px-4 lg:px-6 py-2.5 lg:py-3 text-white font-semibold text-sm lg:text-base rounded-xl transition-all duration-300 hover:shadow-xl hover:-translate-y-1 hover:scale-105" - }, - - // Cards - cards: { - base: "backdrop-blur-lg rounded-2xl border border-banquise-blue-lightest/30 transition-all duration-300", - hover: "hover:shadow-xl hover:border-banquise-blue-lightest/50", - interactive: "cursor-pointer hover:-translate-y-4 hover:shadow-2xl active:scale-95" - }, - - // Text - Hiérarchie améliorée - text: { - heading: "font-heading font-bold tracking-tight", - // Titres principaux de section - headingXl: "text-3xl sm:text-4xl md:text-5xl text-banquise-gray font-heading font-bold tracking-tight", - headingLg: "text-2xl sm:text-3xl md:text-4xl text-banquise-gray font-heading font-bold tracking-tight", - headingMd: "text-xl sm:text-2xl md:text-3xl text-banquise-blue-dark font-heading font-bold tracking-tight", - headingSm: "text-lg sm:text-xl md:text-2xl text-banquise-blue-dark font-heading font-semibold tracking-tight", - // Sous-titres - subheading: "text-base sm:text-lg md:text-xl text-banquise-gray/90 font-medium leading-relaxed", - // Corps de texte - body: "text-sm sm:text-base md:text-lg text-banquise-blue-dark/90 leading-relaxed", - description: "text-banquise-gray/80 leading-relaxed", - muted: "text-banquise-gray/90 leading-relaxed", - // Texte sur fond sombre - lightHeading: "text-banquise-blue-lightest font-heading font-bold tracking-tight", - lightBody: "text-white/90 leading-relaxed" - }, - - // Layout - layout: { - section: "py-12 sm:py-16 md:py-20 w-full max-w-6xl mx-auto px-4 sm:px-6 md:px-8", - container: "max-w-6xl mx-auto", - divider: "w-20 h-1 bg-gradient-to-r from-banquise-blue-lightest to-banquise-blue mx-auto mb-6 sm:mb-8 rounded-full" - }, - - // Icons and decorative elements - icons: { - base: "w-16 h-16 sm:w-20 sm:h-20 lg:w-24 lg:h-24 rounded-2xl flex items-center justify-center text-3xl sm:text-4xl lg:text-5xl shadow-lg", - small: "w-10 h-10 rounded-lg flex items-center justify-center text-white" - }, - - // Navigation - nav: { - link: "px-4 lg:px-6 py-2.5 lg:py-3 text-white/90 hover:text-white font-medium text-sm lg:text-base rounded-xl transition-all duration-300 hover:bg-white/10 hover:backdrop-blur-sm relative group", - mobileItem: "group flex items-center p-4 text-white/90 hover:text-white no-underline rounded-2xl hover:bg-gradient-to-r hover:from-banquise-blue/20 hover:to-banquise-blue-light/20 transition-all duration-300 border border-transparent hover:border-banquise-blue-lightest/20" - } -} as const; diff --git a/banquise-website/src/types/index.ts b/banquise-website/src/types/index.ts deleted file mode 100644 index 3c8eb7a..0000000 --- a/banquise-website/src/types/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface Service { - name: string; - url: string; - image: string; - description: string; - features: string[]; - icon: string; -} - -export interface AccordionItemProps { - title: string; - children: React.ReactNode; - isOpen: boolean; - onToggle: () => void; -} diff --git a/banquise-website/src/vite-env.d.ts b/banquise-website/src/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/banquise-website/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/banquise-website/tailwind.config.js b/banquise-website/tailwind.config.js deleted file mode 100644 index 724fe8a..0000000 --- a/banquise-website/tailwind.config.js +++ /dev/null @@ -1,119 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -export default { - content: [ - "./index.html", - "./src/**/*.{js,ts,jsx,tsx}", - ], - theme: { - extend: { - colors: { - banquise: { - blue: '#40B4FF', - 'blue-dark': '#1F5D89', - 'blue-light': '#69B7E2', - 'blue-lightest': '#A5F0FF', - gray: '#F6F6F6', - } - }, - fontFamily: { - heading: ['Dela Gothic One', 'sans-serif'], - body: ['Roboto', 'sans-serif'], - }, - animation: { - 'float': 'float 6s ease-in-out infinite', - 'float-1': 'float1 5s ease-in-out infinite', - 'float-2': 'float2 6s ease-in-out infinite', - 'float-3': 'float3 7s ease-in-out infinite', - 'wave': 'wave 10s linear infinite', - 'wave-reverse': 'waveReverse 15s linear infinite', - 'wave-1': 'wave 20s linear infinite', - 'wave-2': 'waveReverse 15s linear infinite', - 'wave-3': 'wave 12s linear infinite', - 'rise': 'rise 10s infinite ease-in', - 'tech-float': 'tech-float 10s ease-in-out infinite', - 'gentle-float': 'gentle-float 6s ease-in-out infinite', - 'fadeIn': 'fadeIn 0.2s ease-out', - 'slideUp': 'slideUp 0.3s ease-out', - }, - keyframes: { - float: { - '0%, 100%': { transform: 'translateY(0)' }, - '50%': { transform: 'translateY(-10px)' }, - }, - float1: { - '0%, 100%': { transform: 'translateY(0)' }, - '50%': { transform: 'translateY(-15px)' }, - }, - float2: { - '0%, 100%': { transform: 'translateY(0)' }, - '50%': { transform: 'translateY(-20px)' }, - }, - float3: { - '0%, 100%': { transform: 'translateY(0)' }, - '50%': { transform: 'translateY(-10px)' }, - }, - 'tech-float': { - '0%, 100%': { transform: 'translateY(0) rotate(0deg)', opacity: '0.15' }, - '50%': { transform: 'translateY(-20px) rotate(10deg)', opacity: '0.25' }, - }, - 'gentle-float': { - '0%, 100%': { transform: 'translateY(0)' }, - '50%': { transform: 'translateY(-10px)' }, - }, - wave: { - '0%': { backgroundPosition: '0' }, - '100%': { backgroundPosition: '1200px' }, - }, - waveReverse: { - '0%': { backgroundPosition: '1200px' }, - '100%': { backgroundPosition: '0' }, - }, - rise: { - '0%': { - bottom: '-100px', - transform: 'translateX(0)', - opacity: '0.8', - }, - '50%': { - transform: 'translateX(40px)', - opacity: '0.4', - }, - '100%': { - bottom: '1080px', - transform: 'translateX(-40px)', - opacity: '0', - }, - }, - fadeIn: { - from: { opacity: '0' }, - to: { opacity: '1' }, - }, - slideUp: { - from: { transform: 'translateY(30px)', opacity: '0' }, - to: { transform: 'translateY(0)', opacity: '1' }, - }, - }, - backdropBlur: { - 'xs': '2px', - }, - backgroundImage: { - 'wave-pattern': "url('data:image/svg+xml,')", - 'ocean-gradient': 'linear-gradient(180deg, #40B4FF 0%, #69B7E2 50%, #1F5D89 100%)', - }, - maxHeight: { - '0': '0', - '1000': '1000px', - }, - spacing: { - '72': '18rem', - '80': '20rem', - '88': '22rem', - '96': '24rem', - }, - }, - }, - plugins: [ - require('@tailwindcss/forms'), - require('@tailwindcss/typography'), - ], -} diff --git a/banquise-website/tsconfig.app.json b/banquise-website/tsconfig.app.json deleted file mode 100644 index c9ccbd4..0000000 --- a/banquise-website/tsconfig.app.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["src"] -} diff --git a/banquise-website/tsconfig.json b/banquise-website/tsconfig.json deleted file mode 100644 index 1ffef60..0000000 --- a/banquise-website/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ] -} diff --git a/banquise-website/tsconfig.node.json b/banquise-website/tsconfig.node.json deleted file mode 100644 index 9728af2..0000000 --- a/banquise-website/tsconfig.node.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "target": "ES2022", - "lib": ["ES2023"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/banquise-website/vite.config.ts b/banquise-website/vite.config.ts deleted file mode 100644 index 350511a..0000000 --- a/banquise-website/vite.config.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' -import viteCompression from 'vite-plugin-compression' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - react(), - viteCompression({ - verbose: false, - algorithm: 'gzip', - ext: '.gz', - }), - ], - build: { - minify: 'esbuild', - cssMinify: true, - rollupOptions: { - output: { - manualChunks: { - react: ['react', 'react-dom'], - router: ['react-router-dom'], - }, - }, - }, - }, -})