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 */}
-
-
-
-
-
-
-
-
- {SITE_CONFIG.name}
-
-
Menu Navigation
-
-
-
-
-
-
-
-
-
-
- {/* Navigation */}
-
-
- {/* Navigation Links */}
-
-
- {/* CTA Button */}
-
-
-
- {/* 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 (
- <>
-
-
-
-
- {/* Logo section */}
-
-
-
-
-
-
-
- {SITE_CONFIG.name}
-
-
- {SITE_CONFIG.tagline}
-
-
-
-
- {/* Navigation links desktop */}
-
-
- {/* Action buttons desktop */}
-
-
- {/* Mobile menu button */}
-
setMobileMenuOpen(!mobileMenuOpen)}
- aria-label={mobileMenuOpen ? "Fermer le menu" : "Ouvrir le menu"}
- aria-expanded={mobileMenuOpen}
- >
-
-
-
-
-
-
-
-
-
- {/* Glassmorphism effect bar */}
-
-
-
- {/* 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 = () => (
-
-
-
-
-
-
- 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}
-
- ▼
-
-
-
-
-);
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) => (
-
- ))}
-
-
- {/* Call to action */}
-
-
-
-
- {/* 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 (
-
-
-
-
-
- {/* Effet de lueur au hover */}
-
-
- );
-};
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'],
- },
- },
- },
- },
-})