diff --git a/src/app/(frontend)/api/editorial/import-oct11/route.ts b/src/app/(frontend)/api/editorial/import-oct11/route.ts new file mode 100644 index 0000000..80d7955 --- /dev/null +++ b/src/app/(frontend)/api/editorial/import-oct11/route.ts @@ -0,0 +1,38 @@ +import { importEditorialLaunchPack } from '@/endpoints/importEditorialLaunchPack' +import { october11EditorialArticles } from '@/editorial/october-11-2026' +import config from '@payload-config' +import { headers } from 'next/headers' +import { createLocalReq, getPayload } from 'payload' + +export const maxDuration = 60 + +export async function POST(): Promise { + const payload = await getPayload({ config }) + const { user } = await payload.auth({ headers: await headers() }) + if (!user) { + return Response.json({ success: false, message: "Connecte-toi à Payload pour importer ces brouillons." }, { status: 403 }) + } + try { + const req = await createLocalReq({ user }, payload) + const results = await importEditorialLaunchPack({ + payload, req, onlySlugs: october11EditorialArticles.map(article => article.slug), + }) + const created = results.filter(item => item.created).length + const translated = results.filter(item => item.englishCreated).length + return Response.json({ + success: true, + results: results.map(item => ({ ...item, editUrl: '/admin/collections/posts/' + item.id })), + message: created > 0 + ? `${created} article(s) créé(s) en brouillon ; vérifier liens, traductions, graphiques et images avant publication.` + : translated > 0 + ? `${translated} traduction(s) anglaise(s) manquante(s) ajoutée(s), sans écraser les articles français.` + : "Les quatre articles existent déjà. Aucun texte existant n'a été écrasé.", + }) + } catch (error) { + payload.logger.error({ err: error, message: 'Oct 11 editorial import failed' }) + return Response.json({ + success: false, + message: "Import interrompu. Certains brouillons peuvent avoir été créés : consulte Posts avant de relancer.", + }, { status: 500 }) + } +} diff --git a/src/app/(frontend)/editorial/import-cybastion/page.tsx b/src/app/(frontend)/editorial/import-cybastion/page.tsx index 1ca45d0..cc48df8 100644 --- a/src/app/(frontend)/editorial/import-cybastion/page.tsx +++ b/src/app/(frontend)/editorial/import-cybastion/page.tsx @@ -1,5 +1,7 @@ import { ImportCybastionButton } from '@/components/insights/ImportCybastionButton' import { ImportEditorialLaunchPackButton } from '@/components/insights/ImportEditorialLaunchPackButton' +import { ImportOctober11Button } from '@/components/insights/ImportOctober11Button' +import { october11EditorialArticles } from '@/editorial/october-11-2026' import { UpdateArticleReadabilityButton } from '@/components/insights/UpdateArticleReadabilityButton' import { RefreshSeptemberEditorialButton } from '@/components/insights/RefreshSeptemberEditorialButton' import { cybastionArticleMetadata, cybastionArticleSources } from '@/editorial/cybastion-data-center' @@ -56,6 +58,37 @@ export default async function ImportCybastionPage() {
+
+

+ Édition du 11 octobre 2026 · Import ciblé +

+

+ Quatre nouveaux articles pour Trigenys Insight. +

+

+ CITS 2026, transferts internationaux, Driivio et MORENA. Cet import ajoute uniquement + les quatre brouillons FR + EN avec les sources cliquables dans le texte, + les métadonnées SEO et les graphiques interactifs. Rien n'est publié automatiquement. +

+
+ {october11EditorialArticles.map(article => ( +
+

+ {article.primaryCategory} · {article.readingTime} min · FR + EN +

+

+ {article.fr.title} +

+
+ ))} +
+

+ L'import est idempotent : les articles existants ne seront pas écrasés. + Vérifie les données et ajoute les images de couverture dans Payload avant de publier. +

+ +
+

Consommer camerounais · Comparatif FR + EN

{whispArticle.fr.title}

diff --git a/src/components/insights/ImportOctober11Button.tsx b/src/components/insights/ImportOctober11Button.tsx new file mode 100644 index 0000000..c41e945 --- /dev/null +++ b/src/components/insights/ImportOctober11Button.tsx @@ -0,0 +1,52 @@ +'use client' + +import Link from 'next/link' +import { useState } from 'react' + +type Entry = { id: number; slug: string; title: string; editUrl: string; created: boolean; englishCreated: boolean } +type Result = { success: boolean; message?: string; results?: Entry[] } + +export function ImportOctober11Button() { + const [pending, setPending] = useState(false) + const [result, setResult] = useState(null) + + async function handleImport() { + setPending(true) + setResult(null) + try { + const res = await fetch('/api/editorial/import-oct11', { method: 'POST', credentials: 'include' }) + const json = await res.json().catch(() => ({})) as Result + setResult({ ...json, success: res.ok && json.success }) + } catch { + setResult({ success: false, message: "Erreur réseau. Vérifie Posts avant de relancer." }) + } finally { + setPending(false) + } + } + + return ( +
+ + {result && ( +
+

{result.message || (result.success ? 'Import terminé.' : 'Import impossible.')}

+ {result.results?.map(item => ( +

+ + Ouvrir « {item.title} » dans Payload → + +

+ ))} +
+ )} +
+ ) +} diff --git a/src/editorial/october-11-2026.ts b/src/editorial/october-11-2026.ts new file mode 100644 index 0000000..02f22be --- /dev/null +++ b/src/editorial/october-11-2026.ts @@ -0,0 +1,502 @@ +import type { EditorialLaunchArticle } from './editorial-launch-pack' + +// Four sourced FR/EN drafts for the 11 October 2026 edition; never auto-publish. +export const october11EditorialArticles: EditorialLaunchArticle[] = [ + { + "id": "2026-10-11-cits-2026-cameroun-tech-africaine", + "slug": "cits-2026-cameroun-tech-africaine", + "primaryCategory": "technology", + "categories": [ + "technology", + "business", + "africa" + ], + "kind": "analysis", + "readingTime": 7, + "featured": false, + "editorsPick": false, + "fr": { + "title": "CITS 2026 : quelle place pour le Cameroun dans la tech africaine ?", + "excerpt": "Du 15 au 17 octobre, Yaoundé accueille le Cameroon International Tech Summit. Pendant ce temps, Dakar attire des financements et Abidjan lance des programmes pour faire grandir ses entreprises numériques. Le Cameroun possède-t-il les moyens de jouer dans la même cour ? Les chiffres donnent une réponse moins évidente qu", + "metaTitle": "CITS 2026 : le Cameroun face au Sénégal et à la Côte d’Ivoire", + "metaDescription": "À l'approche du CITS 2026 à Yaoundé, que révèlent les chiffres sur l'avenir de la tech camerounaise face au Sénégal et à la Côte d'Ivoire ?", + "content": "*Du 15 au 17 octobre, Yaoundé accueille le Cameroon International Tech Summit. Pendant ce temps, Dakar attire des financements et Abidjan lance des programmes pour faire grandir ses entreprises numériques. Le Cameroun possède-t-il les moyens de jouer dans la même cour ? Les chiffres donnent une réponse moins évidente qu'il n'y paraît.*\n\nÀ quelques jours du **Cameroon International Tech Summit (CITS 2026)**, une question mérite de dépasser les murs du Palais des Congrès de Yaoundé : que vaut aujourd'hui la place du Cameroun dans la technologie africaine ?\n\nLe sommet, [annoncé du 15 au 17 octobre](https://citscm.com/fr/), prévoit conférences, démonstrations, rencontres professionnelles et concours de startups. L'événement arrive au bon moment : le débat sur l'avenir numérique du pays ne peut plus se limiter au nombre de développeurs formés ou aux applications présentées sur scène.\n\nCar pendant que nos talents créent des solutions à Douala, Buea ou Yaoundé, d'autres pays francophones construisent eux aussi des conditions pour que ces solutions trouvent des clients, des financements et des marchés au-delà de leurs frontières.\n\n## Surprise : le Cameroun ne part pas de zéro\n\nCommençons par un indicateur imparfait, mais révélateur : la part de la population qui utilise Internet. D'après les [données 2024 de la Banque mondiale, issues de l'Union internationale des télécommunications](https://data.worldbank.org/indicator/IT.NET.USER.ZS), elle atteint **46 % au Cameroun**, contre **60 % au Sénégal** et **41 % en Côte d'Ivoire**.\n\nAutrement dit, sur cette mesure, le Cameroun est derrière le Sénégal, mais devant la Côte d'Ivoire. Ce n'est donc pas une histoire dans laquelle tous nos voisins seraient nécessairement plus avancés sur tous les plans.\n\nEt pourtant, ce chiffre ne dit ni si la connexion est abordable, ni si elle est stable, ni si les entreprises trouvent les compétences dont elles ont besoin. Une personne qui se connecte ponctuellement sur son téléphone et une PME qui héberge un service en ligne ne vivent pas la même expérience numérique.\n\n[[TRIGENYS_CHART]]\n\nLe Cameroun dispose d'un marché, de talents techniques et d'entreprises qui ont besoin de logiciels. La [Banque mondiale mentionne d'ailleurs un projet d'accélération de la transformation numérique](https://www.worldbank.org/ext/en/country/cameroon) destiné notamment à réduire les écarts d'accès entre zones rurales et urbaines. Mais la présence d'un programme n'est pas encore la preuve de ses résultats : il faut suivre sa réalisation.\n\n## Dakar et Abidjan ne courent pas exactement la même course\n\nAu Sénégal, le gouvernement a lancé en février 2025 son [« New Deal Technologique »](https://www.primature.sn/actions-et-realisations/telecommunications-et-economie-numerique/le-new-deal-technologique). La stratégie annonce **50 projets prioritaires** pour un coût programmé de **1 105 milliards de FCFA** sur dix ans. C'est une enveloppe d'ambition, **pas une somme déjà entièrement dépensée**, encore moins une preuve que les objectifs sont atteints.\n\nCe qui frappe est la continuité recherchée entre services publics, compétences, souveraineté numérique et développement des entreprises. Un entrepreneur peut ainsi comprendre la direction affichée par l'État, même si l'exécution reste à mesurer.\n\nLe Sénégal a aussi bénéficié de financements importants. Le [rapport Partech sur l'investissement technologique africain en 2025](https://partechpartners.com/africa-reports/2025-africa-tech-venture-capital-report) indique **223 millions de dollars** levés au total, dette et capital confondus. Mais ce montant est fortement influencé par de grandes opérations, dont une liée à Wave. Il ne faut surtout pas traduire ce chiffre par « toutes les startups sénégalaises trouvent de l'argent ».\n\nDu côté de la Côte d'Ivoire, l'approche est différente. En juillet 2026, le gouvernement a annoncé les programmes [**Ivoire Tech Next 15** et **Ivoire Tech Scale Up**](https://www.gouv.ci/index.php/actualite/innovations-technologiques-les-programmes-ivoire-tech-next-15-pour-start-ups-numeriques-et-ivoire-tech-scale-up-pour-pme-numeriques-lances-les-candidatures-ouvertes-6369) : **30 entreprises** doivent être accompagnées pendant **24 mois**, moitié startups, moitié PME technologiques. Là aussi, le chiffre mesure un programme annoncé, pas encore trente réussites commerciales.\n\nCes deux voisins illustrent deux leviers : structurer une stratégie publique sur plusieurs années et aider des entreprises précises à changer d'échelle. Le Cameroun peut s'inspirer des méthodes sans copier aveuglément leurs modèles.\n\n## Notre vrai défi : passer du logiciel construit au logiciel vendu\n\nUne application peut fonctionner parfaitement sur l'ordinateur de son créateur et ne jamais devenir une entreprise. Entre les deux, il y a un chemin moins photogénique : parler aux utilisateurs, fixer un prix, assurer le support, encaisser légalement, maintenir le produit, documenter la sécurité et convaincre un premier client de renouveler son contrat.\n\nCe défi n'est pas réservé aux jeunes pousses en quête de capital-risque — l'argent investi contre une participation au capital. Une entreprise qui vend des logiciels aux garages, aux écoles ou aux distributeurs a souvent davantage besoin de clients récurrents que d'une levée de fonds spectaculaire.\n\nC'est ici que le CITS26 peut devenir utile. Les organisateurs annoncent un [village de startups, des échanges entre entreprises et investisseurs et des sessions de mentorat](https://citscm.com/fr/about/). Le [17 octobre, dix finalistes doivent participer à la finale régionale de la Startup World Cup](https://citscm.com/fr/startup-world-cup-2/) ; le vainqueur obtient une voie d'accès au programme mondial à San Francisco. Le prix de **1 million de dollars** évoqué par la compétition concerne la finale mondiale, et non une récompense automatiquement remise à Yaoundé.\n\nC'est une vitrine. Mais une vitrine ne suffit pas si les startups n'ont pas, derrière, des mécanismes pour tester leurs produits dans les entreprises et administrations camerounaises.\n\n## À quoi devrait ressembler une victoire camerounaise ?\n\nImaginons qu'une startup présente à Yaoundé un logiciel capable de réduire les erreurs de stock d'une PME. Le résultat intéressant ne serait pas seulement sa sélection à un concours. Ce serait que trois entreprises acceptent un essai, qu'au moins une paie le service après l'essai, et que l'équipe puisse déployer la même solution à Douala, à Abidjan puis à Dakar.\n\nCe scénario est un exemple, **pas un résultat attribué au sommet**. Il montre simplement le type de progression que l'on devrait apprendre à mesurer.\n\nLe CITS [propose des billets gratuits et payants](https://citscm.com/fr/tickets/), ce qui abaisse une partie du coût d'entrée, notamment pour les étudiants. Mais l'essentiel n'est pas le badge : c'est la qualité des suites données aux rencontres.\n\nSi le Cameroun veut peser davantage dans la tech africaine, il lui faudra relier ses atouts — marché local, bilinguisme, ingénieurs, position géographique — à des contrats, à des infrastructures fiables et à une politique d'achat qui donne leur chance aux produits locaux.\n\n**Le sommet ne dira pas, à lui seul, si le Cameroun est devenu un grand pays de la tech. Il peut en revanche montrer si nous avons commencé à construire les conditions pour le devenir.**" + }, + "en": { + "title": "CITS 2026: Where Does Cameroon Stand in Francophone African Tech?", + "excerpt": "As Yaoundé hosts CITS 2026, Senegal and Côte d'Ivoire are pursuing different technology strategies. How does Cameroon compare?", + "metaTitle": "CITS 2026: Cameroon vs Senegal and Côte d'Ivoire", + "metaDescription": "CITS 2026 opens in Yaoundé. Compare internet access, startup financing and digital development in Cameroon, Senegal and Côte d'Ivoire.", + "content": "*Yaoundé will host the Cameroon International Tech Summit from 15 to 17 October. Senegal is raising investment and Côte d'Ivoire is supporting promising technology companies. Is Cameroon ready to compete?*\n\nThe [CITS 2026 conference](https://citscm.com/fr/) promises pitches, demonstrations and meetings with investors. Yet the future of technology in Cameroon cannot be measured by how many people fill a conference room.\n\n## Cameroon has more strengths than the headlines suggest\n\nAccording to the [World Bank's internet-user data for 2024](https://data.worldbank.org/indicator/IT.NET.USER.ZS), internet use reached **46% of the population in Cameroon**, compared with **60% in Senegal** and **41% in Côte d'Ivoire**. On this one measure, Cameroon is ahead of Côte d'Ivoire, not behind it.\n\n[[TRIGENYS_CHART]]\n\nThat number cannot tell us whether an entrepreneur has affordable connectivity, reliable servers or customers willing to pay for software. Being online and building a thriving technology business are different things.\n\n## The competition is not standing still\n\nSenegal's [New Deal Technologique](https://www.primature.sn/actions-et-realisations/telecommunications-et-economie-numerique/le-new-deal-technologique) describes fifty priority projects with a planned ten-year budget. This is an announced programme, not money already spent.\n\nThe [Partech Africa report](https://partechpartners.com/africa-reports/2025-africa-tech-venture-capital-report) records **$223 million** of Senegalese startup financing in 2025, including equity and debt. Large individual transactions can dominate that total: they do not prove funding is easy for the average founder.\n\nCôte d'Ivoire launched [Ivoire Tech Next 15 and Ivoire Tech Scale Up](https://www.gouv.ci/index.php/actualite/innovations-technologiques-les-programmes-ivoire-tech-next-15-pour-start-ups-numeriques-et-ivoire-tech-scale-up-pour-pme-numeriques-lances-les-candidatures-ouvertes-6369), targeting 30 startups and digital SMEs over 24 months. Outcomes remain to be measured.\n\n## The decisive step is selling, not pitching\n\nA Cameroonian developer can build a strong app for a school or a garage and still struggle to land the first paying customer. Product support, security, deployment and customer retention matter as much as code.\n\nCITS could help founders find buyers. The announced [regional Startup World Cup event](https://citscm.com/fr/startup-world-cup-2/) offers an international path, but the often-mentioned million-dollar investment prize belongs to the global competition, not an automatic award in Yaoundé.\n\nSuccess should be checked months later: who landed a contract, ran a successful pilot and expanded beyond Cameroon?\n\n**The summit can open the conversation. Only lasting businesses can change Cameroon's position in African tech.**" + }, + "sources": [ + { + "title": "annoncé du 15 au 17 octobre", + "publisher": "citscm.com", + "url": "https://citscm.com/fr/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "Banque mondiale / UIT (2024)", + "publisher": "data.worldbank.org", + "url": "https://data.worldbank.org/indicator/IT.NET.USER.ZS", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "Banque mondiale mentionne d'ailleurs un projet d'accélération de la transformation numérique", + "publisher": "worldbank.org", + "url": "https://www.worldbank.org/ext/en/country/cameroon", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "« New Deal Technologique »", + "publisher": "primature.sn", + "url": "https://www.primature.sn/actions-et-realisations/telecommunications-et-economie-numerique/le-new-deal-technologique", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "rapport Partech sur l'investissement technologique africain en 2025", + "publisher": "partechpartners.com", + "url": "https://partechpartners.com/africa-reports/2025-africa-tech-venture-capital-report", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "**Ivoire Tech Next 15** et **Ivoire Tech Scale Up**", + "publisher": "gouv.ci", + "url": "https://www.gouv.ci/index.php/actualite/innovations-technologiques-les-programmes-ivoire-tech-next-15-pour-start-ups-numeriques-et-ivoire-tech-scale-up-pour-pme-numeriques-lances-les-candidatures-ouvertes-6369", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "village de startups, des échanges entre entreprises et investisseurs et des sessions de mentorat", + "publisher": "citscm.com", + "url": "https://citscm.com/fr/about/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "17 octobre, dix finalistes doivent participer à la finale régionale de la Startup World Cup", + "publisher": "citscm.com", + "url": "https://citscm.com/fr/startup-world-cup-2/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "propose des billets gratuits et payants", + "publisher": "citscm.com", + "url": "https://citscm.com/fr/tickets/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + } + ], + "chart": { + "marker": "[[TRIGENYS_CHART]]", + "fr": { + "title": "Population utilisant Internet, 2024", + "description": "Part estimée de la population ayant utilisé Internet en 2024 selon Banque mondiale/UIT. N'indique pas la qualité de connexion.", + "sourceLabel": "Banque mondiale / UIT (2024)", + "sourceUrl": "https://data.worldbank.org/indicator/IT.NET.USER.ZS", + "metrics": [ + { + "label": "Personnes utilisant Internet", + "unit": "% de la population", + "precision": 0, + "points": [ + { + "label": "Sénégal", + "value": 60 + }, + { + "label": "Cameroun", + "value": 46 + }, + { + "label": "Côte d'Ivoire", + "value": 41 + } + ] + } + ] + }, + "en": { + "title": "Internet use in 2024", + "description": "World Bank/ITU estimated share of internet users. Does not measure internet reliability or startup success.", + "sourceLabel": "Banque mondiale / UIT (2024)", + "sourceUrl": "https://data.worldbank.org/indicator/IT.NET.USER.ZS", + "metrics": [ + { + "label": "Internet users", + "unit": "% of population", + "precision": 0, + "points": [ + { + "label": "Senegal", + "value": 60 + }, + { + "label": "Cameroon", + "value": 46 + }, + { + "label": "Côte d'Ivoire", + "value": 41 + } + ] + } + ] + } + } + }, + { + "id": "2026-10-11-transfert-argent-cameroun-afrique-europe-monde", + "slug": "transfert-argent-cameroun-afrique-europe-monde", + "primaryCategory": "business", + "categories": [ + "business", + "africa" + ], + "kind": "analysis", + "readingTime": 7, + "featured": false, + "editorsPick": false, + "fr": { + "title": "Du Cameroun vers le monde : jusqu'où peut-on envoyer de l'argent ?", + "excerpt": "Envoyer de l'argent à un proche au Gabon, payer un fournisseur en Côte d'Ivoire ou soutenir un étudiant en France : ce sont trois transferts, mais pas forcément trois fois la même opération. Les services de paiement camerounais promettent d'aller plus loin que nos frontières. Jusqu'où, exactement ?", + "metaTitle": "Transfert d'argent depuis le Cameroun : Afrique, Europe, États-Unis", + "metaDescription": "Orange Money, MoMo, banques : où peut-on envoyer de l'argent depuis le Cameroun, à quel coût et avec quelles limites ?", + "content": "*Envoyer de l'argent à un proche au Gabon, payer un fournisseur en Côte d'Ivoire ou soutenir un étudiant en France : ce sont trois transferts, mais pas forcément trois fois la même opération. Les services de paiement camerounais promettent d'aller plus loin que nos frontières. Jusqu'où, exactement ?*\n\nVous êtes à Douala. Votre sœur vit à Abidjan et doit recevoir de l'argent aujourd'hui. La semaine suivante, c'est un proche installé à Paris qu'il faut aider. Avec votre téléphone, ces deux gestes devraient sembler presque identiques : saisir un montant, choisir un destinataire, valider.\n\nDans la pratique, **la destination change tout** : prestataire accessible, devise, identité demandée, frais, taux de change et façon dont le destinataire récupère l'argent.\n\nLe Cameroun a largement adopté les paiements mobiles. Selon le [rapport 2024 de la Banque des États de l'Afrique centrale (BEAC)](https://www.beac.int/systemes-paiement/rapports/), les six pays de la CEMAC ont enregistré environ **3,74 milliards de transactions mobile money** en un an. Mais ce chiffre est **régional** et inclut de nombreuses opérations locales. Il ne prouve absolument pas qu'un utilisateur camerounais puisse envoyer librement son argent dans tous les pays.\n\n## Première frontière : la CEMAC n'est pas toute l'Afrique\n\nCommençons par le voisinage immédiat. Le Cameroun partage la zone monétaire CEMAC avec le Gabon, le Congo, le Tchad, la Centrafrique et la Guinée équatoriale. La banque centrale présente [GIMACPAY](https://www.beac.int/systemes-paiement/systeme-de-monetique-interbancaire/) comme un réseau conçu pour relier cartes, banques et portefeuilles mobiles au sein de cette zone.\n\nC'est une avancée importante : en principe, l'argent ne devrait pas rester enfermé dans le réseau de l'opérateur qui l'a reçu.\n\nMais le mot **interopérabilité** ne doit pas effacer les détails. C'est simplement la possibilité, par exemple, d'envoyer depuis un compte mobile vers un autre réseau ou un compte bancaire. Les services activés, les plafonds et les frais peuvent varier selon les établissements participants. Le bon réflexe consiste donc à vérifier le parcours exact, et pas seulement la présence du logo GIMACPAY.\n\nDès que l'on vise Dakar, Abidjan ou Accra, la comparaison devient plus délicate. Ces destinations ne relèvent pas toutes de la même zone monétaire ou des mêmes partenariats.\n\n## Orange Money annonce des envois bien au-delà de l'Afrique centrale\n\nIl y a une information que beaucoup de lecteurs ignorent peut-être : [Orange Money Cameroun présente désormais une offre de transferts internationaux](https://orangemoney.orange.cm/fr/envoyer-argent-vers-international.html) accessible notamment par le code **#150#**, sans exiger un smartphone.\n\nSa page commerciale mentionne plusieurs destinations africaines, dont le **Nigeria, le Ghana, la Guinée, le Kenya, le Rwanda ou la RDC**. Elle évoque également des possibilités vers **certains pays d'Europe et les États-Unis**, par l'intermédiaire de partenaires.\n\nOrange indique des frais **« dès 1,5 % » dans l'UEMOA** et **« 3 % » pour des transferts hors Afrique**, ainsi qu'un plafond annoncé de **1 million de FCFA par mois** à l'international. Ce sont des conditions **présentées par l'opérateur** : elles ne constituent pas un prix final universel ni la confirmation que chaque ville, banque ou mode de réception soit disponible.\n\nPour envoyer de l'argent à Paris, par exemple, il faut vérifier au moment de l'opération que la France est bien proposée, par quel partenaire, dans quelle devise, avec quel moyen de retrait et quels frais complets.\n\n[[TRIGENYS_CHART]]\n\nC'est exactement la distinction qui manque souvent dans les comparatifs de fintech : **un service annoncé n'est pas un trajet testé**.\n\n## Et MoMo, les banques et les autres fintechs ?\n\nMTN Mobile Money est incontournable au Cameroun, mais il serait trompeur de lui attribuer un corridor international précis sans vérifier l'offre disponible pour l'utilisateur, le pays et le type de transfert. La même prudence vaut pour les fintechs locales et les agrégateurs de paiement : certains facilitent des encaissements professionnels, d'autres des cartes ou des transferts. Ils ne sont pas interchangeables.\n\nPour un montant important, un paiement d'études ou une transaction entre entreprises, le **virement bancaire international** peut rester pertinent. Il faut alors demander à la banque le coût de départ, le coût éventuel des établissements intermédiaires, le taux de conversion et le délai annoncé. L'établissement peut aussi demander des documents expliquant la nature du transfert.\n\nPrenons le paiement des frais universitaires d'un enfant en Europe. Le bon service n'est pas forcément celui qui affiche le pourcentage le plus bas : c'est celui qui peut envoyer au **compte exact de l'établissement**, produire une preuve de paiement acceptée et respecter l'échéance.\n\nEt pour un parent qui utilise un téléphone simple, la présence d'un menu USSD peut faire toute la différence. Un produit financier n'est pas véritablement accessible si sa procédure suppose un smartphone récent et une connexion stable.\n\n## Recevoir de l'étranger : une autre carte des possibilités\n\nLes transferts dans l'autre sens ne fonctionnent pas nécessairement avec les mêmes acteurs. [Remitly détaille par exemple plusieurs canaux de réception au Cameroun](https://www.remitly.com/cm/fr/receive-money), notamment MTN Mobile Money, Orange Money, certains comptes bancaires et le retrait d'espèces. Son site indique qu'il n'y a pas de frais facturés au destinataire, mais cela ne signifie pas que l'envoi est entièrement gratuit : le coût pour l'expéditeur et le taux de conversion doivent aussi être considérés.\n\nAutre exemple utile : la [page de Wise consacrée aux transferts depuis la France vers le Cameroun en XAF](https://wise.com/fr/send-money/send-money-to-cameroon) affiche une **liste d'attente** pour ce service. Inclure Wise dans un classement comme si ce même transfert était opérationnel aujourd'hui fausserait la lecture.\n\nLe simple fait qu'une application soit célèbre à l'international ne lui donne pas automatiquement toutes les connexions nécessaires avec notre marché.\n\n## La vraie comparaison commence par le montant reçu\n\nImaginons un envoi de **100 000 FCFA** depuis Douala vers un proche à l'étranger. Pour comparer honnêtement deux prestataires, il faudrait effectuer une simulation le même jour, vers le même pays, avec le même montant et le même mode de réception.\n\nPuis noter : somme débitée, frais, taux de change, somme réellement reçue, délai annoncé, documents demandés et possibilité de réclamation. Si le destinataire doit retirer du liquide, ses frais de retrait comptent aussi.\n\nSans ces vérifications, annoncer « le moins cher » n'a aucun sens. Nous ne présentons donc **aucun classement tarifaire** tant que les devis comparables ne sont pas collectés.\n\nCe qui mérite d'être salué, c'est que les offres sortantes évoluent et que des opérateurs parlent désormais explicitement d'envois vers d'autres pays africains et au-delà. Ce qui reste à démontrer, corridor par corridor, c'est le niveau réel de simplicité et de transparence.\n\n**Notre argent peut franchir davantage de frontières qu'hier. La prochaine étape sera de rendre visibles, avant le clic de confirmation, toutes celles qui subsistent.**" + }, + "en": { + "title": "From Cameroon to the World: How Far Can You Send Money?", + "excerpt": "Mobile payments are familiar in Cameroon. International transfers require checking actual destinations, exchange rates, fees and payout options.", + "metaTitle": "Money Transfers from Cameroon to Africa, Europe and Beyond", + "metaDescription": "Orange Money, MTN MoMo and international banking: compare available transfer routes from Cameroon to other African countries and overseas.", + "content": "*Sending money from Douala to Gabon, Côte d'Ivoire or France sounds equally easy. Different borders and payment systems can make each transfer a different process.*\n\nThe [BEAC's 2024 payments report](https://www.beac.int/systemes-paiement/rapports/) records roughly **3.74 billion mobile-money transactions across CEMAC**. But that regional figure includes domestic operations. It does not prove that every international transfer is available.\n\n## Central Africa is not the whole continent\n\nWithin CEMAC, the [GIMACPAY system](https://www.beac.int/systemes-paiement/systeme-de-monetique-interbancaire/) aims to connect participating banks, cards and mobile wallets. This is called **interoperability**: one payment network can work with another. The technical connection does not mean that every destination, provider and fee structure is identical.\n\nOutside CEMAC, including Abidjan, Dakar or Accra, users must check the exact service available.\n\n## Orange Money advertises transfers farther afield\n\n[Orange Money Cameroon's international-transfer page](https://orangemoney.orange.cm/fr/envoyer-argent-vers-international.html) mentions destinations in Africa and options beyond the continent through partners. Its USSD menu allows some transactions without an internet-connected smartphone.\n\nThe operator advertises fees **starting from 1.5%** for UEMOA and **3% outside Africa**. These are commercial starting rates, **not complete quotes for every country and beneficiary**.\n\n[[TRIGENYS_CHART]]\n\nBefore sending to Europe, verify that the country is currently offered and check the destination currency, payout method, identity requirements and total transaction cost.\n\n## Incoming transfers use different services\n\n[Remitly lists mobile-wallet, bank and cash collection options in Cameroon](https://www.remitly.com/cm/fr/receive-money), while the [Wise France-to-Cameroon XAF page](https://wise.com/fr/send-money/send-money-to-cameroon) has displayed a waiting-list status for the route. We cannot rank the two as identical available services.\n\nMTN MoMo, bank transfers and local payment providers each have their own functions. An online-payment aggregator is not automatically a service for sending family remittances abroad.\n\nThe fairest comparison fixes the country, amount, payout channel and time of quotation, then compares **what the sender pays and what the recipient actually receives**.\n\nNo provider has been independently tested for this article, and no cheapest-service ranking is claimed.\n\n**The future of cross-border payments depends on making those hidden conditions visible before money moves.**" + }, + "sources": [ + { + "title": "rapport 2024 de la Banque des États de l'Afrique centrale (BEAC)", + "publisher": "beac.int", + "url": "https://www.beac.int/systemes-paiement/rapports/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "GIMACPAY", + "publisher": "beac.int", + "url": "https://www.beac.int/systemes-paiement/systeme-de-monetique-interbancaire/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "Orange Money Cameroun — transferts internationaux", + "publisher": "orangemoney.orange.cm", + "url": "https://orangemoney.orange.cm/fr/envoyer-argent-vers-international.html", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "Remitly détaille par exemple plusieurs canaux de réception au Cameroun", + "publisher": "remitly.com", + "url": "https://www.remitly.com/cm/fr/receive-money", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "page de Wise consacrée aux transferts depuis la France vers le Cameroun en XAF", + "publisher": "wise.com", + "url": "https://wise.com/fr/send-money/send-money-to-cameroon", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + } + ], + "chart": { + "marker": "[[TRIGENYS_CHART]]", + "fr": { + "title": "Orange Money : taux de frais internationaux annoncés", + "description": "Pourcentages commerciaux « à partir de » — pas de devis fermes, ni de comparaison du coût final.", + "sourceLabel": "Orange Money Cameroun — transferts internationaux", + "sourceUrl": "https://orangemoney.orange.cm/fr/envoyer-argent-vers-international.html", + "metrics": [ + { + "label": "Frais minimums annoncés", + "unit": "% — à partir de", + "precision": 1, + "points": [ + { + "label": "Zone UEMOA", + "value": 1.5 + }, + { + "label": "Hors Afrique", + "value": 3 + } + ] + } + ] + }, + "en": { + "title": "Orange Money's advertised international starting fees", + "description": "Published starting percentages, not total-cost quotes.", + "sourceLabel": "Orange Money Cameroun — transferts internationaux", + "sourceUrl": "https://orangemoney.orange.cm/fr/envoyer-argent-vers-international.html", + "metrics": [ + { + "label": "Advertised starting fee", + "unit": "% — from", + "precision": 1, + "points": [ + { + "label": "UEMOA region", + "value": 1.5 + }, + { + "label": "Outside Africa", + "value": 3 + } + ] + } + ] + } + } + }, + { + "id": "2026-10-11-driivio-cameroun-code-permis-conduire-prix", + "slug": "driivio-cameroun-code-permis-conduire-prix", + "primaryCategory": "consommer-camerounais", + "categories": [ + "consommer-camerounais", + "technology" + ], + "kind": "analysis", + "readingTime": 6, + "featured": false, + "editorsPick": false, + "fr": { + "title": "Driivio : 6 000 FCFA pour préparer le code du permis de conduire ?", + "excerpt": "Une application destinée aux candidats au Cameroun annonce plus de 230 questions, des examens blancs et des révisions sans Internet pour 6 000 FCFA par an. Driivio veut aussi équiper les auto-écoles. L'idée est séduisante, mais il y a une différence essentielle entre réviser le code du permis de conduire et être réelle", + "metaTitle": "Driivio Cameroun : prix, code du permis de conduire et mode hors ligne", + "metaDescription": "Driivio promet la révision du code du permis de conduire au Cameroun pour 6 000 FCFA par an. Que propose l'application et que reste-t-il à vérifier ?", + "content": "*Une application destinée aux candidats au Cameroun annonce plus de 230 questions, des examens blancs et des révisions sans Internet pour 6 000 FCFA par an. Driivio veut aussi équiper les auto-écoles. L'idée est séduisante, mais il y a une différence essentielle entre réviser le code du permis de conduire et être réellement prêt pour l'examen.*\n\nLe prix attire immédiatement l'attention : **6 000 FCFA pour un an d'accès complet** à une application de révision du code de la route. Pas pour obtenir le permis de conduire, pas pour payer ses heures de conduite, mais pour s'entraîner à la partie théorique de l'apprentissage.\n\nC'est l'offre affichée sur la [fiche Google Play de Driivio](https://play.google.com/store/apps/details?id=cm.driivio), une application destinée aux candidats camerounais, également [référencée sur l’App Store](https://apps.apple.com/fr/app/driivio/id6801478604). Le concept paraît simple : apprendre à reconnaître les panneaux, comprendre les priorités, s'exercer avec des questions corrigées, puis suivre ses progrès.\n\nL'intéressant, pourtant, ne se limite pas au prix. Derrière ce petit outil de révision, Driivio décrit aussi un logiciel pour les auto-écoles. De quoi poser une question plus large : le numérique peut-il améliorer toute la formation à la conduite, de la première leçon au suivi administratif ?\n\n## Ce que les 6 000 FCFA permettent réellement\n\nSelon l'éditeur, l'application propose **plus de 50 leçons illustrées**, **plus de 230 questions à choix multiples** et des simulations d'examen. Elle annonce un accès partiel gratuit, pour essayer avant de payer, puis un déblocage complet **pendant un an** sans renouvellement automatique.\n\nLe paiement peut se faire, toujours selon la présentation officielle, par **MTN Mobile Money** ou **Orange Money**. L'éditeur indique qu'un parent ou un proche peut régler l'accès depuis son numéro pour le compte du candidat.\n\nC'est une adaptation pertinente à nos usages : tout le monde n'a pas nécessairement une carte bancaire, et un élève peut dépendre de sa famille pour ce type de dépense.\n\nAttention cependant à la promesse : nous avons **consulté les informations publiées par l'éditeur**, mais nous n'avons pas encore réalisé de test indépendant de l'application, du paiement ou de la qualité des exercices. Le prix annoncé n'est donc ni un résultat d'essai ni un tarif garanti sur toutes les plateformes.\n\n## Le mode sans Internet est-il le vrai atout ?\n\nIl y a une fonction qui mérite d'être examinée de près : la révision **hors connexion**. Driivio affirme qu'après un téléchargement initial, les leçons et les exercices restent utilisables sans réseau, avant synchronisation de la progression lorsqu'Internet revient.\n\nUne personne peut ainsi réviser dans les transports, pendant une pause ou dans une zone où la connexion est irrégulière. Et elle n'a pas besoin de dépenser des données mobiles pour recharger sans cesse les mêmes leçons.\n\nL'éditeur annonce aussi deux langues, le **français et l'anglais**. C'est logique pour une formation destinée au Cameroun ; encore faut-il vérifier que les explications, les formulations des panneaux et les corrections soient également précises dans les deux langues.\n\nLa simplicité ne se mesure pas seulement au nombre de boutons. Si un élève se trompe sur une priorité à droite, la correction doit lui expliquer *pourquoi* sa réponse est fausse. Un score sans explication peut donner une impression de progrès sans améliorer la compréhension.\n\n## Quarante questions : ce que l'application simule\n\nDriivio décrit des examens blancs de **40 questions en 60 minutes**, réparties entre **20 questions sans illustration** et **20 questions d'interprétation d'images**, avec un seuil annoncé de **24 réponses correctes**.\n\n[[TRIGENYS_CHART]]\n\nIl s'agit du **format revendiqué par l'application**, non d'une validation indépendante des règles officielles d'examen. Pour vérifier les exigences applicables, la référence demeure le [ministère camerounais des Transports](https://mintransports.cm/).\n\nL'entraînement sur téléphone peut aider à mémoriser les panneaux et à repérer ses points faibles. Il ne remplace ni les explications d'un moniteur ni l'expérience réelle au volant. Un candidat peut réussir une simulation et rester hésitant face à une intersection complexe dans la circulation.\n\nUne évaluation sérieuse de Driivio devrait donc comparer les exercices avec les textes de référence, les faire relire par un professionnel de la conduite et observer des candidats qui ne connaissent pas encore les réponses. C'est seulement à ce moment-là qu'on pourra parler de qualité pédagogique.\n\n## Derrière l'élève, une deuxième clientèle : les auto-écoles\n\nDans la même [présentation officielle](https://play.google.com/store/apps/details?id=cm.driivio), Driivio indique proposer aux auto-écoles des fonctions de gestion : dossiers d'élèves, planning des leçons de conduite, paiements Mobile Money et suivi des progrès.\n\nCette partie du projet est potentiellement plus transformatrice qu'une application de quiz. Pensons à une école qui doit organiser plusieurs moniteurs, véhicules et créneaux. Si le planning est mal tenu, un élève se présente pour une leçon déjà attribuée à quelqu'un d'autre. Si les paiements restent dispersés, retrouver un justificatif devient une corvée.\n\nUn outil conçu pour ces usages pourrait réduire la paperasse et améliorer le suivi. Mais il doit aussi répondre aux questions qui fâchent : que se passe-t-il lors d'une panne de réseau ? Qui corrige une erreur dans le dossier d'un élève ? Comment protéger ses données personnelles ? L'établissement peut-il récupérer ses informations s'il décide de changer de logiciel ?\n\nL'existence des fonctionnalités annoncées ne prouve pas qu'elles sont déjà utilisées à grande échelle par des auto-écoles. Il faudrait connaître le nombre d'établissements clients, observer un usage réel et recueillir la parole des moniteurs avant de conclure.\n\n## Une bonne idée locale mérite mieux qu'un avis enthousiaste\n\nL'application affiche une [mention explicite de son indépendance](https://play.google.com/store/apps/details?id=cm.driivio) : elle **ne délivre pas de permis**, **n'inscrit personne à l'examen officiel** et **ne remplace pas une auto-école agréée**. C'est une précision à conserver partout où l'on présente le produit.\n\nUne précision sur l’origine du produit s’impose également : [l’App Store indique FINANCIERE DEADEV comme éditeur](https://apps.apple.com/fr/app/driivio/id6801478604), et la fiche Google Play fournit une adresse de développeur à Paris. **Pensé pour le marché camerounais** ne signifie donc pas nécessairement **édité par une société camerounaise**. Sans entretien avec l’équipe, nous ne pouvons pas trancher l’origine de la conception ni la structure de ses opérations locales.\n\nDriivio illustre malgré tout une démarche intéressante : concevoir un logiciel en partant des usages du marché visé — téléphone, forfait Internet limité, Mobile Money, organisation des établissements.\n\nLe potentiel est là. Ce que nous ignorons encore, c'est si les candidats progressent réellement davantage avec l'application et si les auto-écoles gagnent du temps grâce au module de gestion.\n\n**Pour Driivio, le prochain examen ne se passera pas devant un jury : il se passera entre les mains des élèves et des moniteurs.**" + }, + "en": { + "title": "Driivio: CFA 6,000 to Study for a Driving Licence in Cameroon?", + "excerpt": "Driivio offers offline driving-theory revision and announces software for driving schools. What does the advertised price actually cover?", + "metaTitle": "Driivio Cameroon: Driving Theory Price and Offline Revision", + "metaDescription": "Driivio advertises CFA 6,000 for a year of driving-theory revision. Discover its offline mode, mock tests and driving-school management plans.", + "content": "*Driving-theory revision on a phone, even without an internet connection, for CFA 6,000 a year: that is Driivio's advertised offer. But can an application replace proper driving instruction?*\n\nAccording to [Driivio's Google Play listing](https://play.google.com/store/apps/details?id=cm.driivio), the package includes over **50 illustrated lessons**, more than **230 multiple-choice questions**, mock tests and progress tracking.\n\n## What the price really includes\n\nThe publisher advertises a complete digital-revision package for **CFA 6,000 per year**, with mobile-payment options. That **does not include driving lessons, official exam registration or the driving licence itself**.\n\nThe application's offline mode may be its most useful feature in a country where data access and connectivity cannot be taken for granted. Lessons can reportedly be downloaded, with progress synchronised when connectivity returns.\n\nThese are publisher claims, not results from our own hands-on product test.\n\n## Forty practice questions are not official certification\n\nDriivio advertises mock tests of **40 questions in 60 minutes**: twenty questions without illustrations and twenty involving images. It gives a stated target of 24 correct answers.\n\n[[TRIGENYS_CHART]]\n\nThat is the format of its own simulation. Readers should confirm current official exam requirements with Cameroon's transport authorities before using it as their only source of preparation.\n\n## Driving schools are the other half of the plan\n\nBeyond students, Driivio describes software for candidate records, lesson scheduling, payments and progress monitoring.\n\nThose functions could help a school avoid paper-based mistakes, but their practical value depends on whether instructors can recover records, prevent booking conflicts and correct errors without creating new administrative work.\n\nThe storefront identifies **FINANCIERE DEADEV** as publisher, with French contact information. A Cameroon-focused product should not automatically be labelled a Cameroon-incorporated startup.\n\nWithout verified instructor feedback or independent tests, we cannot claim improved exam success rates.\n\n**The meaningful result would be candidates who learn more reliably and schools that can organise lessons more effectively.**" + }, + "sources": [ + { + "title": "Driivio — Google Play", + "publisher": "play.google.com", + "url": "https://play.google.com/store/apps/details?id=cm.driivio", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "l’App Store indique FINANCIERE DEADEV comme éditeur", + "publisher": "apps.apple.com", + "url": "https://apps.apple.com/fr/app/driivio/id6801478604", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "ministère camerounais des Transports", + "publisher": "mintransports.cm", + "url": "https://mintransports.cm/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + } + ], + "chart": { + "marker": "[[TRIGENYS_CHART]]", + "fr": { + "title": "Driivio : composition du test blanc", + "description": "Format déclaré par l'éditeur, non validé comme format officiel du permis de conduire.", + "sourceLabel": "Driivio — Google Play", + "sourceUrl": "https://play.google.com/store/apps/details?id=cm.driivio", + "metrics": [ + { + "label": "Questions", + "unit": "questions", + "precision": 0, + "points": [ + { + "label": "Sans illustration", + "value": 20 + }, + { + "label": "Avec images", + "value": 20 + } + ] + } + ] + }, + "en": { + "title": "Driivio practice test format", + "description": "Publisher-reported practice test; not independently validated as the official exam.", + "sourceLabel": "Driivio — Google Play", + "sourceUrl": "https://play.google.com/store/apps/details?id=cm.driivio", + "metrics": [ + { + "label": "Questions", + "unit": "questions", + "precision": 0, + "points": [ + { + "label": "Without image", + "value": 20 + }, + { + "label": "Image interpretation", + "value": 20 + } + ] + } + ] + } + } + }, + { + "id": "2026-10-11-morena-ia-langues-africaines-cameroun", + "slug": "morena-ia-langues-africaines-cameroun", + "primaryCategory": "technology", + "categories": [ + "technology", + "africa" + ], + "kind": "analysis", + "readingTime": 6, + "featured": false, + "editorsPick": false, + "fr": { + "title": "Une IA apprend 12 langues africaines. Et si le Cameroun créait la prochaine ?", + "excerpt": "En septembre 2026, l'équipe de Vambo AI a publié MORENA, une intelligence artificielle conçue pour travailler avec douze langues africaines. Elle sait notamment traiter le haoussa, le swahili et le yoruba. Alors qu'au Cameroun coexistent plus de deux cents langues, une autre question apparaît : et si nous pouvions entr", + "metaTitle": "MORENA : une IA pour 12 langues africaines et l'avenir du Cameroun", + "metaDescription": "MORENA comprend 12 langues africaines. Pourquoi le Cameroun pourrait-il développer sa propre IA pour ses langues et quels obstacles faudrait-il résoudre ?", + "content": "*En septembre 2026, l'équipe de Vambo AI a publié MORENA, une intelligence artificielle conçue pour travailler avec douze langues africaines. Elle sait notamment traiter le haoussa, le swahili et le yoruba. Alors qu'au Cameroun coexistent plus de deux cents langues, une autre question apparaît : et si nous pouvions entraîner une IA à comprendre aussi le duala, le bulu ou l'ewondo ?*\n\nEssayez de demander à un assistant numérique de vous répondre dans une langue locale peu présente sur Internet. Selon la langue choisie, il peut hésiter, changer de langue, inventer des mots ou produire une phrase qui paraît convaincante mais ne veut pas dire grand-chose.\n\nPour des millions d'Africains, ce n'est pas un détail technique. C'est la différence entre un service qui leur parle et un service auquel ils doivent apprendre à parler.\n\nLe **18 septembre 2026**, [Vambo AI a publié MORENA](https://huggingface.co/vamboai/morena-1.5b-instruct), un modèle de langage spécialisé dans **douze langues africaines**. Un *modèle de langage*, c'est le moteur qui permet à un assistant de comprendre une demande et de produire une réponse écrite. MORENA n'est pas un assistant prêt à remplacer tous les autres : c'est d'abord une base technologique que l'on peut étudier, adapter et utiliser pour créer des applications.\n\n## Douze langues, et une question pour le Cameroun\n\nLa [fiche technique de MORENA](https://huggingface.co/vamboai/morena-1.5b-base) mentionne notamment le swahili, le haoussa, le yoruba, l'igbo, le kinyarwanda, le shona, le zoulou, le xhosa, le setswana, l'afrikaans, le ndébélé d'Afrique australe et le pidgin nigérian. Le modèle a aussi travaillé avec du français, de l'anglais et du code informatique.\n\nPrécision importante : **le haoussa est également parlé au Cameroun**. Il serait donc faux de dire que le pays est totalement absent de ces langues. En revanche, le **duala, le bulu, le basaa et l'ewondo** ne figurent pas dans les douze langues ciblées. Le pidgin nigérian ne garantit pas non plus des résultats identiques avec toutes les variétés du pidgin camerounais.\n\nSelon [l'UNESCO](https://www.unesco.org/fr/articles/promotion-des-langues-nationales), le Cameroun compte environ **239 langues parlées**, un ordre de grandeur qui varie selon les classifications. Ce patrimoine n'est pas une simple curiosité culturelle : il influence l'école, la santé, le commerce, l'administration et les conversations familiales.\n\nAlors pourquoi un assistant pourrait-il traiter plus facilement des textes en yoruba qu'en bulu ? Parce que les modèles apprennent à partir d'exemples. Et certaines langues disposent de bien davantage de textes numérisés, de traductions, de ressources linguistiques et d'évaluations que d'autres.\n\n## Apprendre une langue à une IA, ce n'est pas lui donner un dictionnaire\n\nImaginons que des chercheurs camerounais veuillent créer un assistant qui explique les démarches administratives en duala. Il ne suffirait pas de télécharger une liste de mots traduits du français.\n\nIl faudrait réunir des phrases naturelles, des expressions utilisées aujourd'hui, des textes dont l'origine et les droits sont connus, puis demander à des locuteurs compétents de vérifier les réponses. Il faudrait également faire la différence entre les variantes locales et déterminer comment écrire des mots lorsque plusieurs usages coexistent.\n\nUne IA s'entraîne en recherchant des régularités dans des textes. Si elle rencontre rarement une langue, elle risque de mal en comprendre la grammaire et les nuances. Et si les données utilisées contiennent des erreurs, celles-ci peuvent se retrouver dans les réponses.\n\nL'autre difficulté est l'évaluation. Pour savoir si le modèle fonctionne, il ne suffit pas de montrer cinq exemples réussis : il faut le tester sur des phrases qu'il n'a pas vues, avec des locuteurs capables de repérer les erreurs, et sur des usages concrets comme traduire une consigne scolaire ou comprendre une question.\n\nLe travail de communautés de recherche africaines comme [Masakhane](https://www.masakhane.io/) rappelle justement qu'une telle démarche demande linguistes, développeurs, traducteurs et locuteurs — pas seulement des cartes graphiques puissantes.\n\n## Ce que MORENA prouve… et ce qu'il ne prouve pas\n\nMORENA a été entraîné à partir de zéro, avec un vocabulaire adapté aux langues ciblées. Ses auteurs publient plusieurs tailles de modèles, dont une version principale d'environ **1,5 milliard de paramètres**. Les *paramètres* sont les valeurs numériques ajustées pendant l'entraînement : plus de paramètres ne signifie pas automatiquement de meilleures réponses.\n\nSur un test qui mesure la capacité à prédire du texte africain, le modèle **MORENA 1.5B base** obtient **1,408 bit par octet**, contre **1,423** pour Lugha-Llama-8B et **2,159** pour Gemma 3 12B Instruct, dans la [comparaison publiée par Vambo AI](https://huggingface.co/vamboai/morena-1.5b-base). Ici, **plus le score est bas, meilleure est la prédiction** sur ce test précis.\n\n[[TRIGENYS_CHART]]\n\nC'est un résultat intéressant pour un modèle relativement petit. Mais attention à ne pas lui faire dire davantage : la prédiction de texte ne mesure pas à elle seule la qualité d'une conversation, d'une traduction médicale ou d'une réponse fiable à une question.\n\nLa [fiche du modèle conversationnel](https://huggingface.co/vamboai/morena-1.5b-instruct) reconnaît d'ailleurs de vraies limites. Dans son propre test de génération à partir de faits fournis, seulement **23 %** des réponses évaluées étaient entièrement fidèles aux informations de départ. Les auteurs signalent aussi un problème de refus excessifs sur des demandes ordinaires. Ce niveau de transparence est utile : il rappelle que **« parler une langue » ne signifie pas « comprendre et conseiller sans risque »**.\n\nLes poids du modèle sont disponibles sous **licence Apache 2.0**, ce qui autorise notamment certaines réutilisations commerciales. Mais le corpus d'entraînement complet n'est pas publié avec eux. Un développeur peut donc expérimenter avec le modèle ; il ne peut pas pour autant vérifier chaque document ayant servi à l'entraîner.\n\n## Et si le Cameroun commençait par un problème modeste ?\n\nOn pourrait rêver d'un assistant universel capable de converser dans toutes les langues camerounaises. Mais un premier projet plus limité serait probablement plus utile.\n\nPar exemple : un outil qui aide à comprendre les panneaux de sécurité d'un centre de formation dans une langue locale ; un petit corpus bilingue pour des exercices scolaires ; ou une application permettant aux associations de conserver, avec l'accord des locuteurs, des expressions et des récits oraux.\n\nDans chacun de ces cas, il faudrait des personnes compétentes pour valider les textes, des règles de consentement claires et un moyen de signaler une erreur. Pour les applications médicales ou juridiques, un contrôle humain renforcé resterait indispensable.\n\nLe Cameroun n'a pas besoin de partir seul. Les universités, chercheurs, communautés linguistiques et développeurs peuvent collaborer, adapter des modèles ouverts et publier leurs méthodes afin que d'autres équipes puissent les améliorer.\n\nMORENA montre qu'une équipe africaine peut produire une contribution technique documentée et l'ouvrir à d'autres. Le prochain défi n'est pas simplement d'ajouter des langues à une liste pour battre un record.\n\n**Il est de faire en sorte que le numérique apprenne aussi à écouter ceux qui n'ont jamais eu besoin de parler français ou anglais pour penser, transmettre et comprendre le monde.**" + }, + "en": { + "title": "An AI Learns 12 African Languages. Could Cameroon Build the Next One?", + "excerpt": "MORENA is trained around African languages. Could researchers in Cameroon develop similar tools for the country's many local languages?", + "metaTitle": "MORENA AI: 12 African Languages and a Cameroon Opportunity", + "metaDescription": "Vambo AI's MORENA model focuses on 12 African languages. Learn what its tests demonstrate and how Cameroon could develop local-language AI.", + "content": "*A South African team built an AI model around twelve African languages. In Cameroon, where hundreds of languages coexist, that raises a bigger question: can our own communities help create the next model?*\n\n[Vambo AI's MORENA](https://huggingface.co/vamboai/morena-1.5b-base) was trained from scratch, with a model vocabulary designed for the languages it targets. Its base version has approximately **1.5 billion parameters** — numerical settings learned during training.\n\n## Why the language list matters\n\nMORENA focuses on Swahili, Hausa, Yoruba, Igbo, Shona, Kinyarwanda, Zulu, Xhosa, Setswana, Afrikaans, Southern Ndebele and Nigerian Pidgin.\n\nHausa is also spoken in Cameroon. But Ewondo, Bulu and Duala are not among the twelve listed languages. Nor should Nigerian Pidgin automatically be treated as equivalent to all forms of Cameroonian Pidgin.\n\nA language model needs much more than a dictionary: reliable texts, speakers who check examples, thoughtful treatment of dialects and consent to use recordings.\n\n## What the benchmark can and cannot prove\n\nThe model's [published technical card](https://huggingface.co/vamboai/morena-1.5b-base) compares performance using *bits per byte*: a measurement of how efficiently a model predicts test text. On that specific benchmark, **lower is better**.\n\nThe published results include **1.408 for MORENA 1.5B base**, **1.423 for Lugha-Llama 8B** and **2.159 for Gemma 3 12B Instruct**.\n\n[[TRIGENYS_CHART]]\n\nThat is a text-prediction comparison, not a universal ranking of intelligence or a guarantee of translation accuracy. The model weights use the Apache 2.0 licence, but the full training corpus is not released alongside them.\n\n## What could Cameroon do?\n\nA first project need not support every language or build a massive chatbot. A university and a community of consenting speakers could document one well-defined task, create a small evaluation set and measure whether a model handles it faithfully.\n\nApplications in schooling or routine administration would need human review; errors in medicine or legal advice can be dangerous.\n\nThe real opportunity is to develop African-language technology **with the people whose languages it aims to represent**, including how their data is collected and used.\n\n**Africa is showing that local languages can influence the design of AI. Cameroon can help determine what comes next.**" + }, + "sources": [ + { + "title": "fiche du modèle conversationnel", + "publisher": "huggingface.co", + "url": "https://huggingface.co/vamboai/morena-1.5b-instruct", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "Vambo AI — fiche MORENA", + "publisher": "huggingface.co", + "url": "https://huggingface.co/vamboai/morena-1.5b-base", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "l'UNESCO", + "publisher": "unesco.org", + "url": "https://www.unesco.org/fr/articles/promotion-des-langues-nationales", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + }, + { + "title": "Masakhane", + "publisher": "masakhane.io", + "url": "https://www.masakhane.io/", + "accessedAt": "2026-10-11T17:00:00.000Z", + "language": "fr", + "notes": "Source dans le corps de l'article ; contrôle éditorial avant publication." + } + ], + "chart": { + "marker": "[[TRIGENYS_CHART]]", + "fr": { + "title": "MORENA : prédiction de textes africains", + "description": "Bits par octet — plus bas est mieux sur ce jeu de test spécifique seulement.", + "sourceLabel": "Vambo AI — fiche MORENA", + "sourceUrl": "https://huggingface.co/vamboai/morena-1.5b-base", + "metrics": [ + { + "label": "Prédiction de texte", + "unit": "bits par octet", + "precision": 2, + "points": [ + { + "label": "MORENA 1,5B", + "value": 1.408 + }, + { + "label": "Lugha-Llama 8B", + "value": 1.423 + }, + { + "label": "Gemma 3 12B", + "value": 2.159 + } + ] + } + ] + }, + "en": { + "title": "MORENA: African language text prediction", + "description": "Lower bits per byte indicates better performance on the authors' specific text dataset.", + "sourceLabel": "Vambo AI — fiche MORENA", + "sourceUrl": "https://huggingface.co/vamboai/morena-1.5b-base", + "metrics": [ + { + "label": "Prediction", + "unit": "bits per byte", + "precision": 2, + "points": [ + { + "label": "MORENA 1.5B", + "value": 1.408 + }, + { + "label": "Lugha-Llama 8B", + "value": 1.423 + }, + { + "label": "Gemma 3 12B", + "value": 2.159 + } + ] + } + ] + } + } + } +] diff --git a/src/editorial/sourced-markdown-lexical.ts b/src/editorial/sourced-markdown-lexical.ts new file mode 100644 index 0000000..bffef9f --- /dev/null +++ b/src/editorial/sourced-markdown-lexical.ts @@ -0,0 +1,58 @@ +import type { Post } from '@/payload-types' +import type { EditorialChartInput } from './editorial-launch-pack' + +// Dedicated parser for sourced articles: Markdown links must remain clickable +// inside Payload Lexical rather than being displayed as literal [label](url). +const textNode = (text: string, format = 0) => ({ + detail: 0, format, mode: 'normal', style: '', text, type: 'text', version: 1, +}) + +function inlineNodes(markdown: string): unknown[] { + const nodes: unknown[] = [] + const tokens = /\[([^\]]+)\]\((https:\/\/[^\s)]+)\)|\*\*([^*]+)\*\*|\*([^*]+)\*/g + let index = 0 + for (const match of markdown.matchAll(tokens)) { + const start = match.index ?? 0 + if (start > index) nodes.push(textNode(markdown.slice(index, start))) + if (match[1] && match[2]) { + nodes.push({ + type: 'link', version: 2, format: '', indent: 0, direction: 'ltr', + fields: { linkType: 'custom', newTab: true, url: match[2] }, + children: [textNode(match[1])], + }) + } else if (match[3]) { + nodes.push(textNode(match[3], 1)) + } else if (match[4]) { + nodes.push(textNode(match[4], 2)) + } + index = start + match[0].length + } + if (index < markdown.length) nodes.push(textNode(markdown.slice(index))) + return nodes.length ? nodes : [textNode('')] +} + +export function createSourcedEditorialDocument( + source: string, + chart?: { marker: string; data: EditorialChartInput }, +): Post['content'] { + const paragraphs = source.trim().split(/\n\s*\n/).map(p => p.replace(/\s*\n\s*/g, ' ').trim()).filter(Boolean) + const children = paragraphs.map(block => { + if (chart && block === chart.marker) { + return { type: 'block', version: 2, format: '', + fields: { blockType: 'chart', ...chart.data } } + } + const heading = block.match(/^(#{2,4})\s+(.+)$/) + if (heading) { + return { + type: 'heading', version: 1, tag: 'h' + heading[1].length, + direction: 'ltr', format: '', indent: 0, + children: inlineNodes(heading[2]), + } + } + return { + type: 'paragraph', version: 1, direction: 'ltr', format: '', indent: 0, + textFormat: 0, children: inlineNodes(block), + } + }) + return { root: { type: 'root', version: 1, direction: 'ltr', format: '', indent: 0, children } } as unknown as Post['content'] +} diff --git a/src/endpoints/importEditorialLaunchPack.ts b/src/endpoints/importEditorialLaunchPack.ts index 20f2907..e7d6932 100644 --- a/src/endpoints/importEditorialLaunchPack.ts +++ b/src/endpoints/importEditorialLaunchPack.ts @@ -1,5 +1,7 @@ import type { Payload, PayloadRequest } from 'payload' import type { Post } from '@/payload-types' +import { october11EditorialArticles } from '@/editorial/october-11-2026' +import { createSourcedEditorialDocument } from '@/editorial/sourced-markdown-lexical' import { createEditorialLexicalDocument, @@ -149,10 +151,12 @@ export async function importEditorialLaunchPack({ payload, req, onlySlug, + onlySlugs, }: { payload: Payload req: PayloadRequest onlySlug?: string + onlySlugs?: string[] }) { if (!req.user) { throw new Error('An authenticated editor is required to import the editorial launch pack.') @@ -173,8 +177,10 @@ export async function importEditorialLaunchPack({ title: string }> = [] - for (const article of [...editorialLaunchArticles, learningAiBackwardsArticle, fc27Article, whispArticle, cfaoArticle, freellmapiArticle, cloudflareContainersArticle, dangoteLamuRefineryArticle, kempinskiDoualaArticle, internetCameroonPeeringArticle, africaAiGovernanceArticle, nvidiaCudaHuaweiArticle, stablecoinsCfaArticle].filter( - (item) => !onlySlug || item.slug === onlySlug, + const standardArticles = [...editorialLaunchArticles, learningAiBackwardsArticle, fc27Article, whispArticle, cfaoArticle, freellmapiArticle, cloudflareContainersArticle, dangoteLamuRefineryArticle, kempinskiDoualaArticle, internetCameroonPeeringArticle, africaAiGovernanceArticle, nvidiaCudaHuaweiArticle, stablecoinsCfaArticle] + const candidates = onlySlugs ? [...standardArticles, ...october11EditorialArticles] : standardArticles + for (const article of candidates.filter( + (item) => (!onlySlug || item.slug === onlySlug) && (!onlySlugs || onlySlugs.includes(item.slug)), )) { const existing = await payload.find({ collection: 'posts', @@ -229,7 +235,9 @@ export async function importEditorialLaunchPack({ _status: 'draft', authors: [req.user.id], categories: articleCategoryIds, - content: createEditorialLexicalDocument(article.fr.content, article.chart && { marker: article.chart.marker, data: article.chart.fr }), + content: article.id.startsWith('2026-10-11-') + ? createSourcedEditorialDocument(article.fr.content, article.chart && { marker: article.chart.marker, data: article.chart.fr }) + : createEditorialLexicalDocument(article.fr.content, article.chart && { marker: article.chart.marker, data: article.chart.fr }), editorsPick: article.editorsPick, excerpt: article.fr.excerpt, featured: article.featured, @@ -272,7 +280,9 @@ export async function importEditorialLaunchPack({ collection: 'posts', id: post.id, data: { - content: createEditorialLexicalDocument(article.en.content, article.chart && { marker: article.chart.marker, data: article.chart.en }), + content: article.id.startsWith('2026-10-11-') + ? createSourcedEditorialDocument(article.en.content, article.chart && { marker: article.chart.marker, data: article.chart.en }) + : createEditorialLexicalDocument(article.en.content, article.chart && { marker: article.chart.marker, data: article.chart.en }), excerpt: article.en.excerpt, meta: { description: article.en.metaDescription, diff --git a/tests/unit/editorial-october11.spec.ts b/tests/unit/editorial-october11.spec.ts new file mode 100644 index 0000000..4edfdfc --- /dev/null +++ b/tests/unit/editorial-october11.spec.ts @@ -0,0 +1,39 @@ +import { describe, expect, it } from 'vitest' +import { october11EditorialArticles } from '@/editorial/october-11-2026' +import { createSourcedEditorialDocument } from '@/editorial/sourced-markdown-lexical' + +type Node = { type?: string; fields?: { blockType?: string }; children?: Node[] } + +describe('11 October editorial pack', () => { + it('contains four distinct localized drafts, chart datasets and inline sources', () => { + expect(october11EditorialArticles).toHaveLength(4) + expect(new Set(october11EditorialArticles.map(a => a.slug)).size).toBe(4) + + for (const article of october11EditorialArticles) { + expect(article.fr.title.length).toBeGreaterThan(15) + expect(article.en.title.length).toBeGreaterThan(15) + expect(article.fr.content).toContain('[[TRIGENYS_CHART]]') + expect(article.en.content).toContain('[[TRIGENYS_CHART]]') + expect(article.sources.length).toBeGreaterThan(1) + expect(article.fr.content).toMatch(/\]\(https:\/\//) + expect(article.en.content).toMatch(/\]\(https:\/\//) + expect(article.chart?.fr.metrics[0].points.length).toBeGreaterThanOrEqual(2) + } + }) + + it('converts sourced markdown to clickable links and inline chart blocks', () => { + const article = october11EditorialArticles[0] + const doc = createSourcedEditorialDocument(article.fr.content, { + marker: article.chart!.marker, + data: article.chart!.fr, + }) as { root: { children: Node[] } } + + expect(doc.root.children.some(n => n.type === 'block' && n.fields?.blockType === 'chart')).toBe(true) + expect(doc.root.children.some(n => n.type === 'heading')).toBe(true) + const hasLink = doc.root.children.some(n => n.children?.some(child => + child.type === 'link' && child.fields && 'url' in child.fields)) + expect(hasLink).toBe(true) + expect(JSON.stringify(doc)).not.toContain('[[TRIGENYS_CHART]]') + expect(JSON.stringify(doc)).not.toContain('[annoncé du') + }) +})