Dépôt public des carrousels et réels Instagram de Daily Business Review (compte @aryanadbr). Les contenus sont préparés par Nora (agent studio), validés par le fondateur, puis publiés par des actions GitHub. Le dépôt contient aussi les statistiques, le suivi « Commente le mot », deux outils vidéo Python et DBR Connect (fonctions Netlify).
instagram/<dossier>/: un contenu par dossier (post.json, médias, puispublished.jsonouskipped.json).scripts/:story-instagram.mjs,publish-instagram.mjs,publish-tiktok.mjs,reply-keyword.mjs,refresh-token.mjs,check-connection.mjs,instagram-stats.mjs..github/workflows/: une action par script, plussync-supabase.yml. Les fichiers.github/*-triggerservent à relancer une action par un push sur main.engagement/(état et compteurs du mot-clé),stats/(relevés quotidiens),guides/<slug>/cover.png.stories/(une story par jour, images 9:16 des carrousels dansframes/),tools/story/frame.py(carrousel vers 9:16).tools/couverture/couverture.py(image de couverture d'un réel),tools/habillage/habiller.py(sous-titres, zooms, accroche).connect/: application Netlify (public/,netlify/functions/), voirconnect/README.md.
- Carrousel :
publish_at(ISO UTC),approved(booléen),caption,images(2 à 10 JPEG 1080 x 1350),approval_id. - Réel :
"type": "reel",video(reel.mp4, vertical 9:16),cover(cover.jpg, optionnel),caption,publish_at,approved,approval_id,texte_lu,controle_qualite("ok"). - « Commente le mot » (réels) :
keyword,guide_title,guide_url. - Légende : 2 200 caractères et 30 hashtags au plus (le script refuse sinon).
- Publication : toutes les 15 minutes et à chaque push sur un
post.json. Une seule publication par passage. Publie siapprovedvauttrueet sipublish_atest passé. Au-delà de 7 jours de retard :skipped.json, à replanifier. - Garde-fous de publication (28 oct. 2026) : au plus une publication par jour (heure de Paris, exception
"hors_quota": true), rien entre 21 h et 7 h, pas deux fois la même première ligne de légende en moins de 60 jours (horsrepublication_of), légende refusée si elle contient un émoji, une flèche ou un tiret long. Un contenu retenu attend sansskipped.json. - Contrôle qualité des réels (30 oct. 2026) : un réel neuf n'est publié que si son
post.jsonporte"controle_qualite": "ok"(posé par Nora quand voix, prononciation et synchro sont toutes OK, sans point « à regarder ») ettexte_lu(texte exact envoyé à la voix), sans sigle hors de CRM, DAF, DSI et sans « poc » (revérifié par le script). Un réel sanscontrole_qualite: "ok"n'est jamais repris en story ni republié. - Synchronisation Supabase : toutes les 10 minutes, recopie les réels de Nora dans
instagram/(et lepost.jsondes carrousels dont les images sont déjà dans le dépôt) puis lance la publication. Elle réécritpost.jsontant que le dossier n'a nipublished.jsonniskipped.json. - Mot-clé : toutes les 10 minutes (
reply-keyword.yml), option « Essai à blanc » en lancement manuel. Voir le README pour le déroulé. - Statistiques : chaque jour à 05:17 UTC, dans
stats/. Prolongation du jeton : le 1er et le 15 de chaque mois. Vérification de la connexion : manuelle ou par push sur.github/check-trigger. - Story du jour :
story-instagram.yml, chaque jour à 16 h 40 UTC (rattrapages à 17 h 40, 18 h 40, 19 h 40 et 20 h 40 UTC si GitHub saute le passage, sans doublon), republie en story un contenu déjà publié (réel tel quel, carrousel converti en image 9:16 partools/story/frame.py), rotation du moins récemment utilisé, une par jour. Choix tracé dansstories/<date>/story.json, publication danspublished.json. Annuler un jour :stories/<date>/skipped.json; tout arrêter : fichierstories/PAUSE; exclure un contenu :"no_story": truedans sonpost.json. Lancement manuel en essai à blanc (par défaut). - TikTok (
publish-tiktok.yml, environnement GitHub « TikTok », 30 oct. 2026) : à 7 et 37 de chaque heure, reprend sur TikTok un réel ou un carrousel déjà publié sur Instagram (depuis le 31 oct. ; carrousel envoyé en mode photo depuis le 1er nov. : TikTok télécharge les images01.jpgà35.jpgviahttps://daily-business-review.com/tiktok-media/<dossier>/<NN>.jpg, préfixe à vérifier dans le portail développeur TikTok ; outiktok_videodu dossier pour envoyer une vidéo) en brouillon dans l'app TikTok (le fondateur le relit et le publie lui-même ; en modedirect,"controle_qualite": "valide_fondateur"est exigé), au moins 2 h après Instagram et au plus 7 jours, un par jour, entre 7 h et 21 h. Légendetiktok_caption, sinon celle d'Instagram sans le paragraphe « Commente ». Écrittiktok.json. Le jeton TikTok reste sur le site (/api/tiktok-publishdu dépôt websitedbr). Exclure un réel :"no_tiktok": true; tout arrêter : fichiertiktok/PAUSE. Lancement manuel en essai à blanc (par défaut). SecretTIKTOK_PUBLISH_SECRET, variables optionnellesTIKTOK_MODE(inboxpar défaut : brouillon dans l'app TikTok, légende à coller depuistiktok.json;directquandvideo.publishsera accordé),TIKTOK_API_URL. - Secrets :
IG_ACCESS_TOKEN,IG_USER_ID. Netlify :IG_APP_SECRET. Variable optionnelle :SUPABASE_PUBLISHABLE_KEY.
- Avant publication : mettre
approvedàfalse. Pour un réel de Nora, le faire aussi côté Supabase, sinon la synchronisation remet la valeur. - Écarter définitivement un dossier : y ajouter un
skipped.json(la synchronisation n'y touche plus). - Tout suspendre : désactiver l'action « Publier les carrousels et réels Instagram validés » et la synchronisation dans l'onglet Actions de GitHub.
- Après publication,
published.jsonempêche toute republication ; la suppression du post se fait à la main dans Instagram.
- Un contenu DBR est publié sur quatre réseaux : Instagram @aryanadbr, X @Aryanadbr, LinkedIn ET TikTok. Jamais sur Instagram seul. TikTok n'est jamais oublié : même quand il n'arrive qu'en brouillon dans l'app TikTok, il est envoyé et figure dans toute liste de diffusion (consigne du fondateur, 31 oct. 2026).
- Pas de tiret long ni de demi-cadratin, pas de flèche, pas d'emoji. Écrire « pipeline », jamais « pipe ».
- Rien n'est publié sans
approved: trueposé par le fondateur. - Dépôt public : aucun secret, aucune valeur de jeton, aucun nom ni texte de commentaire. Seuls des noms de variables et des compteurs ou empreintes. Les scripts n'écrivent jamais le jeton dans les journaux.
- Ne jamais lancer une action de publication ni appeler l'API Instagram pour un essai.
node --check scripts/*.mjs connect/netlify/functions/*.mjspython3 -m py_compile tools/couverture/couverture.py tools/habillage/habiller.py- Validité JSON des
post.jsonet des fichiers YAML des workflows.