Navigation
Introduction Architecture Installation Configuration Services API Admin Design System Base de données Déploiement
// documentation

ElyctraHub

Portail personnel unifié regroupant l'ensemble de l'écosystème Elyctra — jeux, streaming, hébergement, portfolio et contact — sur une seule interface sombre et réactive.

v1.0.0 PHP 8.x MySQL Mis à jour le 07/05/2026
🚀
Démarrage rapide
Installation en 5 minutes avec setup.php
🔌
API REST
Endpoints JSON pour tous les services
🎨
Design System
Tokens, composants et CSS variables
🔒
Admin sécurisé
Authentification bcrypt + sessions PHP

# Introduction

ElyctraHub (anciennement NexusHub) est un portail web auto-hébergé écrit en PHP vanilla. Il sert de hub central pour accéder à tous les projets du développeur : jeux, portfolio, streaming privé, hébergement et contact.

L'interface adopte une esthétique dark cyber avec fond grille, effets aurora animés, et une palette centrée sur le cyan électrique #00D2FF. Aucun framework JS n'est requis côté client — tout repose sur du vanilla JavaScript.

Prérequis

PHP 8.1+ MySQL 8.0+ / MariaDB 10.6+ Apache / Nginx mod_rewrite (Apache) Composer (optionnel)
💡
ElyctraHub est conçu pour un usage personnel/personnel-portfolio. Il n'est pas prévu pour multi-tenant ou multi-utilisateur.

# Architecture

Le projet suit une architecture MVC légère sans framework. Les pages PHP incluent directement config.php et icons.php, la logique métier est dans api/, l'administration dans admin/.

Structure des fichiers

ELYCTRAHUB/
├── index.php # Page d'accueil, liste des services
├── contact.php # Formulaire de contact
├── config.php # Constantes BDD, mot de passe admin (hash)
├── icons.php # Fonction icon() — SVG inline Feather
├── setup.php # Script d'initialisation (à supprimer après usage)
├── .htaccess # Réécriture d'URL, sécurité PHP
├── admin/
│ ├── index.php # Dashboard admin (services, messages)
│ ├── login.php # Authentification admin
│ ├── logout.php # Déconnexion + destruction session
│ ├── auth.php # Middleware auth (require_once)
│ └── api.php # Actions admin JSON (update_status, mark_read…)
├── api/
│ └── contact.php # Endpoint POST formulaire de contact
└── assets/
├── css/
│ └── style.css # Feuille de style principale (~8 000 lignes)
├── js/
│ └── app.js # JS principal vanilla (~8 000 caractères)
└── favicon.svg # Icône SVG du site

Flux de données

Le client demande une page PHP → PHP lit la BDD via PDO → HTML généré → assets statiques chargés → JS vanilla gère les interactions sans rechargement.

# Flux requête contact
Browser ──POST──► /api/contact.php
         FormData: name, email, subject, message
         ↓
  PHP valide + insère dans contact_messages
         ↓
  JSON response: { "ok": true, "message": "..." }
         ↓
Browser affiche alerte success/errorFLUX

# Installation

Cloner le dépôt
git clone https://github.com/skykiller099/ELYCTRAHUB.git
cd ELYCTRAHUBSHELL
Configurer config.php
Copie config.php et renseigne tes identifiants MySQL et le hash bcrypt du mot de passe admin :
<?php
// Base de données
define('DB_HOST', 'localhost');
define('DB_NAME', 'elyctrahub');
define('DB_USER', 'ton_user');
define('DB_PASS', 'ton_mot_de_passe');

// Admin — généré par setup.php
define('ADMIN_PASSWORD_HASH', '$2y$12$...');PHP
Lancer setup.php
Ouvre https://ton-domaine.com/setup.php dans le navigateur. Ce script crée la base de données, les tables et insère les services par défaut.
⚠️
Important : supprime ou protège setup.php immédiatement après l'exécution. Ce fichier expose des informations sensibles.
Configurer le serveur web
Le .htaccess inclus gère la réécriture pour Apache. Pour Nginx, voir la section Déploiement.
Accéder au panel admin
Navigue vers /admin/ et connecte-toi avec le mot de passe défini dans setup.php.
Le mot de passe par défaut est nexus2024. Change-le immédiatement en production.

# Configuration

Variables disponibles dans config.php

ConstanteTypeDescription
DB_HOSTstringHôte MySQL (ex: localhost)
DB_NAMEstringNom de la base de données
DB_USERstringUtilisateur MySQL
DB_PASSstringMot de passe MySQL
ADMIN_PASSWORD_HASHstringHash bcrypt du mot de passe admin (cost 12)

Génération du hash bcrypt

<?php
// Génère un hash bcrypt cost=12
$hash = password_hash('mon_mot_de_passe', PASSWORD_BCRYPT, ['cost' => 12]);
echo $hash; // Copie dans ADMIN_PASSWORD_HASHPHP

# Services

ElyctraHub expose 6 services configurables via le panel admin ou directement en base de données.

CléLabelStatut par défautDescription
games GameVault ● online Jeux browser créés de zéro par le dev
portfolio Portfolio ● online Parcours et projets du développeur
stream ElyctraStream ○ private Streaming privé sur invitation
hosting NexusCloud ● online Hébergement Pterodactyl FR
docs Docs ● online Documentation de l'écosystème
contact Contact ● online Formulaire de contact

Statuts possibles

● online ◐ maintenance ✕ down ○ private

Les statuts sont modifiables en temps réel depuis le panel admin sans rechargement de page (AJAX).

# GameVault

🎮 GameVault
● online
Plateforme de jeux browser développés entièrement par skykiller099. Accessible publiquement.

GameVault héberge des jeux créés de zéro. Les jeux sont servis via une URL dédiée (games.example.com par défaut, configurable en admin).

Configuration

ChampValeur par défaut
URLhttps://games.example.com
Icônegamepad (Feather Icons)
Ordre d'affichage1

# Portfolio

👤 Portfolio
● online
Page portfolio présentant le parcours, les projets et les compétences du développeur.

Stack exposée

PHP JavaScript TypeScript React Node.js MySQL Python Rust

# ElyctraStream

▶ ElyctraStream
○ private
Service de streaming privé, accessible uniquement sur invitation. Statut par défaut : private.
⚠️
Ce service est marqué private par défaut. La carte s'affiche avec une indication visuelle différente sur le hub.

# NexusCloud

🖥 NexusCloud
● online
Hébergement de serveurs via panel Pterodactyl en français.

# Docs

Ce service pointe vers la documentation de l'écosystème. URL configurable depuis le panel admin.

# Contact

✉ Contact
● online
Formulaire de contact interne. Les messages sont stockés en BDD et visibles dans le panel admin.

Le formulaire de contact utilise un endpoint PHP AJAX. Aucun service tiers d'emailing n'est nécessaire — les messages sont stockés en base de données.

Champs du formulaire

ChampType HTMLObligatoire
nametext
emailemail
subjecttext
messagetextarea

# API REST

ElyctraHub expose deux familles d'endpoints : les endpoints publics pour l'interaction utilisateur, et les endpoints admin (authentifiés par session).

Endpoints publics

POST /api/contact.php Envoie un message de contact

Corps de la requête (FormData)

ChampTypeRequisDescription
namestringPrénom ou pseudo
emailstring (email)Adresse email
subjectstringSujet du message
messagestringCorps du message

Réponse JSON

// Succès
{
  "ok": true,
  "message": "Message envoyé avec succès !"
}

// Erreur
{
  "ok": false,
  "message": "Tous les champs sont requis."
}JSON

Endpoints admin (session requise)

POST /admin/api.php?action=update_status Met à jour le statut d'un service
ParamètreValeurs possibles
idinteger (ID du service)
statusonline | maintenance | down | private
POST /admin/api.php?action=update_note Met à jour la note admin d'un service
ParamètreDescription
idID du service
noteTexte de la note (visible uniquement en admin)
POST /admin/api.php?action=update_url Met à jour l'URL d'un service
ParamètreDescription
idID du service
urlNouvelle URL du service
POST /admin/api.php?action=mark_read Marque un message comme lu
ParamètreDescription
idID du message dans contact_messages

Format de réponse admin générique

{
  "ok": true | false,
  "message": "Description de l'opération"
}JSON

# Panel Admin

Le panel admin est accessible via /admin/. Il est protégé par une authentification PHP basée sur bcrypt + sessions serveur.

Authentification

Le middleware auth.php doit être inclus en tête de chaque page admin :

<?php
require_once __DIR__ . '/auth.php';
// auth.php redirige vers login.php si pas de session validePHP

Fonctionnalités du dashboard

  • Modifier le statut de chaque service (online / maintenance / down / private) — mise à jour AJAX sans rechargement
  • Modifier l'URL d'un service directement depuis le tableau — sauvegarde automatique
  • Ajouter une note admin sur un service (visible uniquement en dashboard)
  • Consulter les messages de contact avec indicateur "non lu"
  • Marquer les messages comme lus au clic

Toast de notification

Toute action admin déclenche un toast bas-droite via la fonction showToast(msg, type) définie dans app.js :

showToast('✓ Statut mis à jour', 'success');
showToast('✗ Erreur réseau', 'error');JS

Sessions admin

Les sessions sont stockées dans la table admin_sessions. La déconnexion via /admin/logout.php supprime la ligne en BDD et détruit la session PHP.


# Design System

L'interface repose sur un système de tokens CSS entièrement personnalisable via les CSS variables définies dans :root.

Palette de couleurs

Background
#080b10
--bg
Cyan (accent)
#00d2ff
--cyan
Violet
#7b2fff
gradient pair
Green (success)
#00ff88
--green
Red (error)
#ff3d5a
--red
Yellow (warning)
#ffd060
--yellow

Typographie

VariableFamilleUsage
--font-sansSyne (Google Fonts)Texte courant, titres, navigation
--font-monoJetBrains MonoCode, labels, badges, terminal

Effets de fond

Deux effets se superposent sur fond #080b10 :

  • Aurora orbs — deux sphères floues animées (cyan + violet) avec filter: blur(120px)
  • Grid background — grille de lignes rgba(0,210,255,0.03) en 40×40px
/* Aurora — structure HTML requise */
<div class="aurora">
  <div class="aurora-orb"></div>
  <div class="aurora-orb"></div>
</div>
<div class="grid-bg"></div>HTML

Composant icon()

La fonction PHP icon($name, $attrs = '') définie dans icons.php retourne des SVG inline depuis la bibliothèque Feather Icons :

<?php
// Usage simple
echo icon('mail');

// Avec attributs personnalisés
echo icon('mail', 'width="18" height="18" stroke-width="2"');
?>PHP

Animations JavaScript

FonctionDescriptionDéclencheur
Fade-up scrollApparition progressive des éléments .fade-upIntersectionObserver (threshold 12%)
Stagger cardsDécalage d'animation des .service-card60ms par carte
Counter animéCompteur numérique [data-count]IntersectionObserver (threshold 50%)
Terminal typingEffet machine à écrire dans .hero-terminalDOMContentLoaded + 1200ms
Navbar scrollClasse .scrolled sur .nav après 40pxscroll event

Utilisation du terminal hero

// Les lignes tapées dans l'animation hero :
const lines = [
  '$ elyctra --status',
  '> All systems operational',
  '> 6 services running',
  '> uptime: 99.98%',
  '_'
];JS

# Base de données

3 tables MySQL créées par setup.php :

Table services

CREATE TABLE services (
  id         INT AUTO_INCREMENT PRIMARY KEY,
  `key`      VARCHAR(50)  UNIQUE NOT NULL,  -- clé identifiant unique
  label      VARCHAR(100) NOT NULL,          -- nom affiché
  `desc`     TEXT,                              -- description courte
  url        VARCHAR(500),                      -- lien du service
  icon       VARCHAR(50),                       -- nom icône Feather
  status     ENUM('online','maintenance','down','private')
                    DEFAULT 'online',
  `order`    INT DEFAULT 0,                    -- ordre d'affichage
  note       TEXT,                              -- note admin (privée)
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
               ON UPDATE CURRENT_TIMESTAMP
);SQL

Table admin_sessions

CREATE TABLE admin_sessions (
  id         VARCHAR(128) PRIMARY KEY,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);SQL

Table contact_messages

CREATE TABLE contact_messages (
  id         INT AUTO_INCREMENT PRIMARY KEY,
  name       VARCHAR(200),
  email      VARCHAR(200),
  subject    VARCHAR(300),
  message    TEXT,
  read_at    DATETIME DEFAULT NULL,  -- NULL = non lu
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);SQL
💡
Un message est considéré non lu tant que read_at IS NULL. Le clic sur une ligne admin met à jour ce champ via l'endpoint mark_read.

# Déploiement

Apache (recommandé)

Le fichier .htaccess inclus gère les redirections. Active mod_rewrite :

a2enmod rewrite
systemctl restart apache2SHELL

Nginx

server {
  listen 443 ssl;
  server_name elyctrahub.example.com;
  root /var/www/ELYCTRAHUB;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    include fastcgi_params;
  }

  # Bloquer l'accès à config.php
  location ~ ^/config\.php$ { deny all; }
  location ~ ^/setup\.php$  { deny all; }
}NGINX

Variables d'environnement (optionnel)

Pour éviter de mettre les credentials en clair dans config.php, utilise $_ENV via .env + une bibliothèque comme vlucas/phpdotenv :

define('DB_PASS', $_ENV['DB_PASS'] ?? 'fallback');PHP

# Sécurité

🚨
En production, effectue impérativement ces actions avant mise en ligne.

Checklist sécurité

Supprimer setup.php
Ce fichier peut être ré-exécuté par n'importe qui. Supprime-le ou protège-le avec .htaccess.
Changer le mot de passe admin
Le mot de passe par défaut nexus2024 est dans le code source public. Génère un nouveau hash bcrypt et mets-le dans config.php.
Activer HTTPS
Utilise Let's Encrypt / Certbot pour un certificat SSL gratuit. Les sessions admin en HTTP sont vulnérables.
Protéger config.php
Le .htaccess inclus bloque l'accès direct aux fichiers .php sensibles. Vérifie que la règle est active.
Requêtes SQL — PDO préparées
Toutes les requêtes utilisent des statements préparés PDO. Ne jamais concaténer du contenu utilisateur dans une requête SQL.

# Changelog

v1.0.0 2026-05-07 First commit
  • Hub principal avec 6 services configurables
  • Panel admin complet (statuts, URLs, notes, messages)
  • API AJAX pour formulaire contact
  • Design system dark — aurora, grid, cyan accent
  • Terminal hero animé avec typing effect
  • Compteurs animés et fade-up scroll
  • Authentification bcrypt + sessions BDD
  • Setup script one-shot
📌
Ce projet est en développement actif. Pour suivre les mises à jour, consulte le dépôt GitHub.