@mostajs/ads
v0.1.0
Published
Headless, sovereign ad & campaign management — advertisers, campaigns, creatives, placements, ad breaks, scene branding, exposure metrics & billing. Provider for @mostajs/* apps (race-event, media, web).
Maintainers
Readme
@mostajs/ads
Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later Statut : PROPOSITION (DEVRULES §4, cas C) — squelette, non encore implémenté. Alias de nom envisagé :
@mostajs/campaign-ads.
Moteur headless, multi-tenant et souverain de gestion publicitaire pour l'écosystème @mostajs/* : annonceurs, campagnes, créas, emplacements, pauses publicitaires, habillage sponsor de scène, mesure d'exposition et facturation.
@mostajs/ads fournit la logique pub ; il ne diffuse pas la vidéo (→ @mostajs/media-*) et n'embarque pas le métier de l'application (→ ex. @mostajs/race-event).
Pourquoi
Toute application à audience (événementiel sportif, e-learning, média, site) a besoin de valoriser cette audience : servir des publicités, gérer des coupures, mesurer l'exposition pour facturer les sponsors. Plutôt que de réécrire cette logique dans chaque app, @mostajs/ads la mutualise — auto-hébergeable, données sous contrôle.
Concepts
Hiérarchie inspirée de Meta Ads & Google Ads : Campaign → AdSet → Ad → Creative, avec Audience (ciblage : tranche horaire, tranche d'âge, région), budget et enchère au niveau AdSet. Côté monétisation (inspiré AdMob) : AdUnit (banner/interstitial/rewarded/native/app_open) + médiation/eCPM. Live : AdBreak/AdSpot. Mesure : Metrics (impressions, reach, CTR, conversions, spend, eCPM, ROAS).
API (prévue)
import { AdsService } from '@mostajs/ads/server'
const ads = new AdsService(dialect)
// servir l'habillage d'un slot de scène (ex. bandeau sponsor)
const creative = await ads.serve('scene:bandeau', { account, courseId, ville: 'Blida' })
// pause publicitaire
await ads.startBreak(breakId) // bascule playlist (rendu via @mostajs/media-mcu)
const spot = await ads.nextSpot(breakId)
await ads.endBreak(breakId)
// mesure & facturation
await ads.recordExposure({ account, creativeId, startedAt, endedAt, avgViewers })
const rapport = await ads.report({ sponsorId, range }) // temps d'antenne, audience, facturableComposition
@mostajs/orm·data-plug (persistance) · @mostajs/storage (créas) · @mostajs/api-keys (scoping) · @mostajs/net (exposition temps réel, option). Rendu côté consommateur : @mostajs/media-mcu (playlist de pause + superpositions de scène).
Premier consommateur
RaceVision (@mostajs/race-event) : pauses pub + publicité sur la scène des talks + ciblage par étape/territoire. Voir mosta-geo/examples/realtime-cyclists/docs/DESIGN-PUBLICITE-RACEVISION.md.
État
Proposition (docs/00-PROPOSITION-MODULE-ADS.md) + llms.txt. À implémenter : schémas, AdsService, routes, puis les 14 livrables DEVRULES §9.
