Xcloud — Manuel utilisateur & technique

Document de compréhension du projet • Rédigé pour JM par Lion • Basé sur l’analyse du dépôt (v10.4 / Studio Electric)

1. Synthèse exécutive

Xcloud est une plateforme de diffusion et de partage de contenus multimédias, livrée comme une application PHP autonome, sans base de données relationnelle. L’ensemble du dossier projet pèse environ 1,3 Mo dans la version analysée : le cœur de l’interface est concentré dans index.php, tandis que la logique serveur JSON (Studio Electric) réside dans server.php.

Le premier lancement impose le choix d’une langue d’interface via setup.php. Un compte admin par défaut est créé automatiquement si aucun fichier utilisateurs n’existe (mot de passe initial documenté dans config.php). L’éditeur côté client repose massivement sur le glisser-déposer, la grille de médias (« cartes »), des pages web légères de type « portail » (XWEB), un module blog, des bannières, des métadonnées audio, des vignettes intelligentes et des options SEO / PWA / monétisation (Stripe).

En une phrase : Xcloud transforme un hébergement PHP classique en médiateque interactive partageable, où la configuration vit dans des fichiers JSON et où l’outil de publication est intégré à l’application elle-même.

2. Analyse technique du produit

2.1 Frontière applicative

Les pages PHP suivantes structurent les rôles :

FichierRôle
config.phpSession sécurisée, chemins uploads/, data/, première création des dossiers et de users.json. Gère aussi un fallback du répertoire de sessions (cPanel) et la page de maintenance globale.
setup.phpPremier lancement : sélection parmi 12 langues (clé écrite dans data/config.json).
login.phpAuthentification, traductions depuis data/lang/*.json, verrouillage après échecs, récupération de mot de passe par e-mail si configuré.
index.phpInterface principale SPA-like : grille, navigation arborescente, SEO par page ou fichier, prévisualisation média, URLs partageables (path, file).
server.phpAPI HTTP application/json (nombreuses actions : fichier, dossier, XWEB, blog, commentaires, utilisateurs, SEO, licences, traductions, etc.). Certaines réservées au rôle admin.
sitemap.phpSitemap XML dynamique (racine + dossiers publics dans uploads/), respectant la profondeur et la politique d’accessibilité.
manifest.php + service-worker.jsPWA lorsque activée dans la configuration.
checkout.php, stripe_webhook.php, subscribe.phpFlux de paiement Stripe, webhook de validation, affichage de la clé de licence associée au session_id.

2.2 Modèle de données (fichiers, pas SQL)

La persistance repose principalement sur le répertoire data/ :

2.3 Typologie des contenus (côté arbre fichiers)

La fonction récursive de scan classe chaque fichier (images, vidéo, audio, PDF, ZIP, fichiers Adobe, GLB…) et attribue des types spéciaux aux fiches blog (*.blog) et aux portails XWEB (*.html avec préfixe xweb_). Les fichiers correspondant aux motifs YouTube, Vimeo ou embed personnalisé sont reconnus et enrichis métadonnées (identifiant, titre affiché).

2.4 Sécurité (aperçu)

3. Pourquoi Xcloud est unique, autonome et performant

Unicité

Autonomie

Performant (au sens projet)

4. Glossaire des termes et mécaniques

TermeSignification dans Xcloud
Open DayMode où le site est consultable sans connexion (config open_day). Les droits invité (téléchargement, commentaires) restent paramétrables.
Invités (Open Day)Visiteurs non connectés lorsque l’Open Day est actif.
XWEBFichier HTML ou point d’entrée « portail » nommé avec le préfixe xweb_, affiché comme une carte dédiée dans la grille. Peut pointer vers une URL externe (contenu du fichier analysé côté serveur pour la vignette).
xweb_yt_… / xweb_vm_… / xweb_embed_…Conventions de nommage pour intégrations YouTube, Vimeo ou embed personnalisé (titre affiché nettoyé des préfixes techniques).
Carte / cardReprésentation visuelle d’un fichier ou dossier dans la grille principale (aperçu, actions, type de média).
Types de cartesOption de configuration pour masquer ou afficher certaines familles de cartes dans l’UI (hide_card_types).
Bannière (sub-banner)Zone promotionnelle / visuelle en tête, images ou vidéos dans data/banner/, liens associés dans banner_links.json.
Blog (.blog)Fichier JSON-like de contenu éditorial géré par l’API blog (liste, sauvegarde, image de couverture, vignette carrée générée).
CommentairesModule avec modération, paramètres (invités autorisés ou non), édition et approbation rapide côté admin.
SEO par pageseo.json mappe des clés de chemin (accueil, dossier, fichier) vers titre, description, mots-clés et indexation.
Open Graph (OG)Méta partage réseaux : image intelligente (vignette locale, image directe, miniature YouTube maxres…), type video.other pour certaines vidéos.
PWAApplication web installable via manifest dynamique et service worker si pwa_enabled.
Licence / mode payantStripe crée des sessions de paiement ; le webhook alimente licenses.json avec date d’expiration selon le plan (hebdo, mensuel, annuel, à vie).
DV / positionsDans l’interface, réglages de positionnement de certains widgets (documentés dans l’UI comme position du widget XWEB dans le menu contextuel).
Xmodules / layer orderPersonnalisation avancée de modules et ordre des couches d’affichage (actions API dédiées).
Navigation personnaliséeItems de barre latérale réordonnables (poignées de drag), zone de dépôt racine.
Star ratingVote par étoiles activable sur certains contenus (toggle + API de vote et agrégation).
MaintenanceDrapeau global : page 503 pour les non-admins.
Session timeoutDurée configurable (de 1 minute à jamais) mappée en secondes dans config.php.

5. Manuel utilisateur

5.1 Première installation (hébergeur)

  1. Déposer les fichiers PHP à la racine (ou sous-dossier) d’un hébergement PHP avec extensions habituelles (GD recommandé, Imagick optionnel pour la fidélité couleur / PDF).
  2. Renommer htaccess.txt en .htaccess si vous utilisez Apache, pour protéger data/*.json et les sessions.
  3. Accéder au site : redirection vers setup.php si aucune langue n’est enregistrée.
  4. Choisir la langue, puis se connecter via login.php avec le compte admin par défaut (voir config.php — mot de passe initial documenté dans le code source : xcloud à la première création). Changez ce mot de passe immédiatement.

5.2 Parcours administrateur

5.3 Parcours visiteur / membre

5.4 Monétisation (optionnel)

Un administrateur renseigne les clés Stripe. L’utilisateur passe par checkout.php. Après paiement, Stripe notifie stripe_webhook.php qui dépose une licence dans licenses.json. La page subscribe.php affiche la clé une fois la session retrouvée.

6. Manuel technique

6.1 Points d’extension serveur (server.php)

L’argument GET action=... dispatche plusieurs familles :

Les mutations sensibles vérifient $_SESSION['role'] === 'admin' dans les branches correspondantes.

6.2 Répertoires importants

6.3 Compatibilité et limites inhérentes au modèle

7. Pistes d’évolution spectaculaires

7.1 Niveau de traduction et cohérence linguistique

7.2 Version « plus simple » (mode Lite)

7.3 Référencement (SEO technique)

7.4 Intelligence artificielle (exceptionnelle mais utile)

7.5 Qualité produit transverses

8. Étape suivante : stabilité et bugs

JM, pour la phase « couverts tous les bugs », la méthode proposée est :

Je suis prêt à enchaîner sur l’inventaire de bugs fichier par fichier dès que tu me donnes la priorité (comportement attendu vs observé) ou que nous parcourons ensemble l’interface en conditions réelles.