User
- subscription_plan
- rôles (par équipe)
- 1—n SocialAccount
- 1—n SocialPost
- 1—n Post (blog)
- 1—n UserMetric
Synchro Twitch, YouTube et Kick, publication multi-réseaux et blog pour abonnés.
Un créateur de contenu suit ses chiffres sur Twitch, YouTube et Kick, puis publie la même annonce sur Facebook, Instagram, X, LinkedIn et Discord, chaque réseau avec son API, ses jetons OAuth qui expirent et ses règles. Un audit a aussi montré qu’en production les rôles ne fonctionnaient pas et que l’administration renvoyait des erreurs 500.
Donner aux créateurs un seul endroit pour leurs chaînes, leurs publications et leurs abonnés.
Un tableau de bord unique : les chaînes Twitch, YouTube et Kick sont synchronisées toutes les heures, et un hub de publication envoie un message vers plusieurs réseaux, tout de suite ou à une date choisie. Chaque réseau est une classe derrière une interface commune, et un orchestrateur suit la livraison réseau par réseau. Les forfaits sont décrits dans un fichier de configuration et vérifiés à chaque action.
En ligne sur streamcrea.com, en quatre langues, avec quatre forfaits Stripe, un blog par créateur et des abonnements de fans. La CI teste chaque route avec chacun des sept rôles, construit les caches de production et lance un test HTTP après chaque déploiement.
Fondateur et développeur full-stack
Utilisateurs
Application
Services externes
Le créateur connecte un compte par OAuth ; les autorisations demandées dépendent du réseau, et le compte est enregistré.
Le message est créé dans une transaction qui vérifie le forfait et que chaque compte ciblé appartient bien au créateur.
Chaque minute, une commande met en file un job de publication pour chaque message dont l’heure est passée.
Pour chaque compte, le registre appelle la classe du réseau ; les appels HTTP ont un délai de 30 s et deux nouvelles tentatives.
Le statut, l’identifiant externe ou l’erreur sont écrits réseau par réseau ; le message passe à « publié » ou « échec ».
Chaque jour, un job renouvelle les jetons Google, Twitch et X qui expirent dans moins de 24 heures.
Les entités principales, leurs champs clés et leurs relations.
Facebook, Instagram (création puis publication), X, LinkedIn et Discord, immédiat ou planifié.
Statistiques YouTube, Twitch et Kick relevées toutes les heures.
Inscription et connexion par Google, Twitch, Kick ou YouTube.
Quatre niveaux, avec limites vérifiées à chaque action.
Articles publics ou réservés aux forfaits payants.
Un abonné soutient un créateur par Stripe.
ProblèmeLes permissions tournent en mode équipe, mais rien ne fixait l’équipe active : chaque test de rôle renvoyait faux.
SolutionUn middleware fixe l’équipe à chaque requête.
ProblèmeLes 25 routes de l’administration renvoyaient une erreur 500, pour cinq causes empilées.
SolutionCauses corrigées une à une ; la matrice de CI couvre désormais l’administration.
ProblèmeLe retour de Stripe suffisait à changer de forfait.
SolutionLa session Stripe est relue, son propriétaire et son statut payé contrôlés, couverts par 15 tests.
ProblèmeL’opérateur ?? 0 confondait « illimité » (null) et « absent ».
Solutionarray_key_exists, avec un commentaire qui explique pourquoi.
ProblèmeUne simple image pouvait déclencher une suppression (CSRF).
SolutionPassage en POST et DELETE, et retrait d’un paquet qui ouvrait des routes non authentifiées.
Relevé dans le code source et l’historique Git du projet le 8 octobre 2026. Aucun chiffre d’usage ou de revenu n’est publié.
Disponible pour missions PHP / Laravel / WordPress / Silverstripe en Belgique et remote EU.