feat(sprint19-20): production-ready video integration & STT hardening
Browse files## Sprint 19 — STT Pipeline Fix
- fix(worker): remove variable shadowing in transcribedText (index.ts)
Transcribed text now correctly reaches the pedagogical handler
## Sprint 20 — Production-Ready Video Integration
- feat(schema): add videoCaption field to TrackDay model (Prisma)
- feat(seed): propagate videoCaption in all upsert paths
- feat(pedagogy): video-first delivery with [VIDEO]/[VIDEO_OK]/[VIDEO_FALLBACK] logs
- feat(pedagogy): automatic fallback — image + link when WhatsApp rejects video
- feat(whatsapp): add TEST_VIDEO <TrackId> <Day> admin command
## Content — Canonical Video Mapping (T1–T5 FR+WO)
- content(T1): inject videos v1_1→v1_2 on days 1,2,3,4,5,6,7,8,9,10,11
- content(T2): inject videos v4_4, v7_1, v5_1 on days 1,2,4
- content(T3): inject videos v7_4, v4_6, v9_1 on days 1,4,5
- content(T4): inject videos v5_3, v9_3 (Wave Business), v10_1 on days 5,6,7
- content(T5): inject videos v8_1, v8_2 on days 1,3
- content(T1-FR/WO): fix 26 broken dummy-storage imageUrls → real R2 URLs
Images confirmed HTTP 200 accessible on R2
## Tooling
- script: add apps/api/src/scripts/upload-t1-images.ts for R2 bulk upload
- apps/api/src/scripts/upload-t1-images.ts +111 -0
- apps/api/src/services/whatsapp.ts +18 -0
- apps/whatsapp-worker/src/index.ts +1 -1
- apps/whatsapp-worker/src/pedagogy.ts +32 -3
- apps/whatsapp-worker/src/whatsapp-cloud.ts +28 -0
- packages/database/content/tracks/T1-FR.json +554 -532
- packages/database/content/tracks/T1-WO.json +409 -387
- packages/database/content/tracks/T2-FR.json +189 -183
- packages/database/content/tracks/T2-WO.json +189 -183
- packages/database/content/tracks/T3-FR.json +251 -245
- packages/database/content/tracks/T3-WO.json +251 -245
- packages/database/content/tracks/T4-FR.json +181 -175
- packages/database/content/tracks/T4-WO.json +181 -175
- packages/database/content/tracks/T5-FR.json +167 -163
- packages/database/content/tracks/T5-WO.json +167 -163
- packages/database/prisma/schema.prisma +2 -0
- packages/database/src/seed.ts +14 -2
- scripts/upload-t1-images.ts +111 -0
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import dotenv from 'dotenv';
|
| 2 |
+
// Load root .env first
|
| 3 |
+
dotenv.config({ path: '/Volumes/sms/edtech/.env' });
|
| 4 |
+
|
| 5 |
+
const { R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_PUBLIC_URL } = process.env;
|
| 6 |
+
|
| 7 |
+
// ── Fast fail: show config status first ──────────────────────────────────────
|
| 8 |
+
console.log('\n📋 R2 Config Check:');
|
| 9 |
+
console.log(` R2_ACCOUNT_ID: ${R2_ACCOUNT_ID ? '✅ ' + R2_ACCOUNT_ID : '❌ MISSING'}`);
|
| 10 |
+
console.log(` R2_BUCKET: ${R2_BUCKET ? '✅ ' + R2_BUCKET : '❌ MISSING'}`);
|
| 11 |
+
console.log(` R2_ACCESS_KEY_ID: ${R2_ACCESS_KEY_ID ? '✅ SET' : '❌ MISSING'}`);
|
| 12 |
+
console.log(` R2_SECRET_ACCESS_KEY:${R2_SECRET_ACCESS_KEY ? '✅ SET' : '❌ MISSING'}`);
|
| 13 |
+
console.log(` R2_PUBLIC_URL: ${R2_PUBLIC_URL ? '✅ ' + R2_PUBLIC_URL : '❌ MISSING'}`);
|
| 14 |
+
|
| 15 |
+
if (!R2_ACCOUNT_ID || !R2_BUCKET || !R2_ACCESS_KEY_ID || !R2_SECRET_ACCESS_KEY || !R2_PUBLIC_URL) {
|
| 16 |
+
console.error('\n❌ Missing R2 credentials. Add these to /Volumes/sms/edtech/.env:');
|
| 17 |
+
console.error('\n R2_ACCOUNT_ID=<your_cloudflare_account_id>');
|
| 18 |
+
console.error(' R2_BUCKET=<your_bucket_name>');
|
| 19 |
+
console.error(' R2_ACCESS_KEY_ID=<your_r2_api_token_key_id>');
|
| 20 |
+
console.error(' R2_SECRET_ACCESS_KEY=<your_r2_api_token_secret>');
|
| 21 |
+
console.error(' R2_PUBLIC_URL=https://r2.xamle.sn');
|
| 22 |
+
console.error('\n Find them on: dash.cloudflare.com → R2 → Manage R2 API Tokens');
|
| 23 |
+
process.exit(1);
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
|
| 27 |
+
import fs from 'fs';
|
| 28 |
+
import path from 'path';
|
| 29 |
+
|
| 30 |
+
const ARTIFACTS_DIR = '/Users/macbookair/.gemini/antigravity/brain/ea618d02-1ee0-47c1-a2b7-aed00a3604bc';
|
| 31 |
+
|
| 32 |
+
const IMAGE_MAP = [
|
| 33 |
+
{ src: 'xaml_t1_j1_activity_1772065123770.png', dest: 'images/t1/bes1_activity.png' },
|
| 34 |
+
{ src: 'xaml_t1_j1_5_remediation_1772065225648.png', dest: 'images/t1/bes1_5_remediation.png' },
|
| 35 |
+
{ src: 'xaml_t1_j2_customer_1772065290030.png', dest: 'images/t1/bes2_customer.png' },
|
| 36 |
+
{ src: 'xaml_t1_j3_problem_1772065392345.png', dest: 'images/t1/bes3_problem.png' },
|
| 37 |
+
{ src: 'xaml_t1_j4_solution_1772065519438.png', dest: 'images/t1/bes4_solution.png' },
|
| 38 |
+
{ src: 'xaml_t1_j5_differentiation_v2_1772065582075.png', dest: 'images/t1/bes5_differentiation.png' },
|
| 39 |
+
{ src: 'xaml_t1_j6_pricing_v2_1772065655264.png', dest: 'images/t1/bes6_pricing.png' },
|
| 40 |
+
{ src: 'xaml_t1_j7_channel_sales_v2_1772065752541.png', dest: 'images/t1/bes7_channel.png' },
|
| 41 |
+
{ src: 'xaml_t1_j8_trust_1772065782385.png', dest: 'images/t1/bes8_trust.png' },
|
| 42 |
+
{ src: 'xaml_t1_j9_pitch_1772065807317.png', dest: 'images/t1/bes9_pitch.png' },
|
| 43 |
+
{ src: 'xaml_t1_j10_objections_1772065830459.png', dest: 'images/t1/bes10_objections.png' },
|
| 44 |
+
{ src: 'xaml_t1_j11_plan_1772065894417.png', dest: 'images/t1/bes11_plan.png' },
|
| 45 |
+
{ src: 'xaml_t1_j12_success_1772065982976.png', dest: 'images/t1/bes12_success.png' },
|
| 46 |
+
];
|
| 47 |
+
|
| 48 |
+
async function main() {
|
| 49 |
+
const { R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_PUBLIC_URL } = process.env;
|
| 50 |
+
|
| 51 |
+
console.log('📋 R2 Config Check:');
|
| 52 |
+
console.log(' R2_ACCOUNT_ID:', R2_ACCOUNT_ID ? '✅ SET' : '❌ MISSING');
|
| 53 |
+
console.log(' R2_BUCKET:', R2_BUCKET ? `✅ ${R2_BUCKET}` : '❌ MISSING');
|
| 54 |
+
console.log(' R2_ACCESS_KEY_ID:', R2_ACCESS_KEY_ID ? '✅ SET' : '❌ MISSING');
|
| 55 |
+
console.log(' R2_SECRET_ACCESS_KEY:', R2_SECRET_ACCESS_KEY ? '✅ SET' : '❌ MISSING');
|
| 56 |
+
console.log(' R2_PUBLIC_URL:', R2_PUBLIC_URL || '❌ MISSING');
|
| 57 |
+
|
| 58 |
+
if (!R2_ACCOUNT_ID || !R2_BUCKET || !R2_ACCESS_KEY_ID || !R2_SECRET_ACCESS_KEY) {
|
| 59 |
+
console.error('\n❌ Missing R2 environment variables. Stopping.');
|
| 60 |
+
process.exit(1);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
const client = new S3Client({
|
| 64 |
+
region: 'auto',
|
| 65 |
+
endpoint: `https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
|
| 66 |
+
credentials: { accessKeyId: R2_ACCESS_KEY_ID, secretAccessKey: R2_SECRET_ACCESS_KEY },
|
| 67 |
+
});
|
| 68 |
+
|
| 69 |
+
console.log('\n🚀 Uploading 13 T1 images to R2...\n');
|
| 70 |
+
let ok = 0, failed = 0;
|
| 71 |
+
|
| 72 |
+
for (const { src, dest } of IMAGE_MAP) {
|
| 73 |
+
const srcPath = path.join(ARTIFACTS_DIR, src);
|
| 74 |
+
|
| 75 |
+
if (!fs.existsSync(srcPath)) {
|
| 76 |
+
console.warn(`⚠️ Not found: ${src}`);
|
| 77 |
+
failed++;
|
| 78 |
+
continue;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
try {
|
| 82 |
+
const buf = fs.readFileSync(srcPath);
|
| 83 |
+
await client.send(new PutObjectCommand({
|
| 84 |
+
Bucket: R2_BUCKET,
|
| 85 |
+
Key: dest,
|
| 86 |
+
Body: buf,
|
| 87 |
+
ContentType: 'image/png',
|
| 88 |
+
CacheControl: 'public, max-age=31536000',
|
| 89 |
+
}));
|
| 90 |
+
const publicUrl = `${(R2_PUBLIC_URL || '').replace(/\/$/, '')}/${dest}`;
|
| 91 |
+
console.log(`✅ ${dest}`);
|
| 92 |
+
console.log(` URL: ${publicUrl}`);
|
| 93 |
+
ok++;
|
| 94 |
+
} catch (e: any) {
|
| 95 |
+
console.error(`❌ ${dest}: ${e.message}`);
|
| 96 |
+
failed++;
|
| 97 |
+
}
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
console.log(`\n── RÉSULTAT ────────────────────`);
|
| 101 |
+
console.log(`✅ Uploaded: ${ok}/${IMAGE_MAP.length}`);
|
| 102 |
+
if (failed > 0) {
|
| 103 |
+
console.log(`❌ Failed: ${failed}`);
|
| 104 |
+
process.exit(1);
|
| 105 |
+
} else {
|
| 106 |
+
console.log(`\n🎉 Toutes les images T1 sont maintenant sur R2 !`);
|
| 107 |
+
console.log(` Les leçons WhatsApp du module T1 afficheront bien les images.`);
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
main().catch(e => { console.error(e); process.exit(1); });
|
|
@@ -95,6 +95,24 @@ export class WhatsAppService {
|
|
| 95 |
return;
|
| 96 |
}
|
| 97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
if (normalizedText === 'SEED') {
|
| 99 |
// Reply immediately so the webhook doesn't time out
|
| 100 |
console.log(`[SEED] Triggered by user ${user.id}`);
|
|
|
|
| 95 |
return;
|
| 96 |
}
|
| 97 |
|
| 98 |
+
if (normalizedText.startsWith('TEST_VIDEO')) {
|
| 99 |
+
const parts = normalizedText.split(' ');
|
| 100 |
+
if (parts.length < 3) {
|
| 101 |
+
await scheduleMessage(user.id, "Usage: TEST_VIDEO <TrackId> <DayNumber>");
|
| 102 |
+
return;
|
| 103 |
+
}
|
| 104 |
+
const trackId = parts[1];
|
| 105 |
+
const dayNumber = parseFloat(parts[2]);
|
| 106 |
+
|
| 107 |
+
await scheduleMessage(user.id, `🧪 Test Video pour ${trackId} J${dayNumber}...`);
|
| 108 |
+
await whatsappQueue.add('send-content', {
|
| 109 |
+
userId: user.id,
|
| 110 |
+
trackId,
|
| 111 |
+
dayNumber
|
| 112 |
+
});
|
| 113 |
+
return;
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
if (normalizedText === 'SEED') {
|
| 117 |
// Reply immediately so the webhook doesn't time out
|
| 118 |
console.log(`[SEED] Triggered by user ${user.id}`);
|
|
@@ -445,7 +445,7 @@ const worker = new Worker('whatsapp-queue', async (job: Job) => {
|
|
| 445 |
if (transcribeRes.ok) {
|
| 446 |
const data = await transcribeRes.json() as any;
|
| 447 |
const isSuspect = data.isSuspect || false;
|
| 448 |
-
|
| 449 |
|
| 450 |
const user = await prisma.user.findFirst({ where: { phone } });
|
| 451 |
|
|
|
|
| 445 |
if (transcribeRes.ok) {
|
| 446 |
const data = await transcribeRes.json() as any;
|
| 447 |
const isSuspect = data.isSuspect || false;
|
| 448 |
+
transcribedText = data.text || '';
|
| 449 |
|
| 450 |
const user = await prisma.user.findFirst({ where: { phone } });
|
| 451 |
|
|
@@ -1,5 +1,5 @@
|
|
| 1 |
import { PrismaClient } from '@repo/database';
|
| 2 |
-
import { sendTextMessage, sendAudioMessage, sendInteractiveButtonMessage, sendInteractiveListMessage, sendImageMessage } from './whatsapp-cloud';
|
| 3 |
import { requireHttpUrl, getAdminApiKey, isFeatureEnabled } from './config';
|
| 4 |
import { shortenForWhatsApp } from './normalizeWolof';
|
| 5 |
|
|
@@ -117,8 +117,37 @@ export async function sendLessonDay(userId: string, trackId: string, dayNumber:
|
|
| 117 |
|
| 118 |
lessonText = header + lessonText;
|
| 119 |
|
| 120 |
-
// 🌟 Visuals WoW: Send day
|
| 121 |
-
if ((trackDay as any).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
console.log(`[PEDAGOGY] Sending daily image: ${(trackDay as any).imageUrl}`);
|
| 123 |
await sendImageMessage(user.phone, (trackDay as any).imageUrl);
|
| 124 |
}
|
|
|
|
| 1 |
import { PrismaClient } from '@repo/database';
|
| 2 |
+
import { sendTextMessage, sendAudioMessage, sendInteractiveButtonMessage, sendInteractiveListMessage, sendImageMessage, sendVideoMessage } from './whatsapp-cloud';
|
| 3 |
import { requireHttpUrl, getAdminApiKey, isFeatureEnabled } from './config';
|
| 4 |
import { shortenForWhatsApp } from './normalizeWolof';
|
| 5 |
|
|
|
|
| 117 |
|
| 118 |
lessonText = header + lessonText;
|
| 119 |
|
| 120 |
+
// 🌟 Visuals WoW: Send day video if available (Production Ready v2) 🌟
|
| 121 |
+
if ((trackDay as any).videoUrl) {
|
| 122 |
+
const vUrl = (trackDay as any).videoUrl;
|
| 123 |
+
const vCaption = (trackDay as any).videoCaption || (isWolof ? "Xoolal vidéo bi !" : "Regarde cette vidéo !");
|
| 124 |
+
|
| 125 |
+
console.log(`[VIDEO] Sending video day=${dayNumber} track=${trackId} url=${vUrl}`);
|
| 126 |
+
|
| 127 |
+
try {
|
| 128 |
+
await sendVideoMessage(user.phone, vUrl, vCaption);
|
| 129 |
+
console.log(`[VIDEO_OK] WhatsApp accepted video for ${user.phone}`);
|
| 130 |
+
} catch (vErr: any) {
|
| 131 |
+
console.warn(`[VIDEO_FALLBACK] reason=${vErr.message}. Sending image fallback for ${user.phone}`);
|
| 132 |
+
|
| 133 |
+
// Fallback: Image + Link + "Clique pour regarder"
|
| 134 |
+
const fallbackText = isWolof
|
| 135 |
+
? `⚠️ Vidéo bi mënul neex léegi. Klikal fii ngir seeti ko :\n${vUrl}\n(Xoolal nataal bi ci suuf)`
|
| 136 |
+
: `⚠️ La vidéo ne peut pas être affichée directement. Clique ici pour la voir :\n${vUrl}\n(Regarde l'image ci-dessous)`;
|
| 137 |
+
|
| 138 |
+
await sendTextMessage(user.phone, fallbackText);
|
| 139 |
+
|
| 140 |
+
if ((trackDay as any).imageUrl) {
|
| 141 |
+
await sendImageMessage(user.phone, (trackDay as any).imageUrl);
|
| 142 |
+
} else {
|
| 143 |
+
// Secondary fallback image if no specific day image exists
|
| 144 |
+
await sendImageMessage(user.phone, 'https://r2.xamle.sn/branding/bes1_welcome.png');
|
| 145 |
+
}
|
| 146 |
+
}
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
// 🌟 Visuals WoW: Send day image if available (only if not already sent by fallback) 🌟
|
| 150 |
+
if ((trackDay as any).imageUrl && !(trackDay as any).videoUrl) {
|
| 151 |
console.log(`[PEDAGOGY] Sending daily image: ${(trackDay as any).imageUrl}`);
|
| 152 |
await sendImageMessage(user.phone, (trackDay as any).imageUrl);
|
| 153 |
}
|
|
@@ -149,6 +149,34 @@ export async function sendAudioMessage(to: string, audioUrl: string): Promise<vo
|
|
| 149 |
console.log(`[WhatsApp] ✅ Audio message sent to ${to}`);
|
| 150 |
}
|
| 151 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
/**
|
| 153 |
* Send an interactive message with up to 3 quick reply buttons.
|
| 154 |
* @param to - Recipient phone number
|
|
|
|
| 149 |
console.log(`[WhatsApp] ✅ Audio message sent to ${to}`);
|
| 150 |
}
|
| 151 |
|
| 152 |
+
/**
|
| 153 |
+
* Send a video message via a public URL.
|
| 154 |
+
* @param to - Recipient phone number
|
| 155 |
+
* @param videoUrl - Public URL of the video file (MP4)
|
| 156 |
+
* @param caption - Optional caption shown under the video
|
| 157 |
+
*/
|
| 158 |
+
export async function sendVideoMessage(to: string, videoUrl: string, caption?: string): Promise<void> {
|
| 159 |
+
if (process.env.DISABLE_WHATSAPP_SEND === 'true') {
|
| 160 |
+
console.warn(`[WhatsApp] DISABLE_WHATSAPP_SEND=true — Skipping video send to ${to}.`);
|
| 161 |
+
return;
|
| 162 |
+
}
|
| 163 |
+
const body = {
|
| 164 |
+
messaging_product: 'whatsapp',
|
| 165 |
+
recipient_type: 'individual',
|
| 166 |
+
to,
|
| 167 |
+
type: 'video',
|
| 168 |
+
video: { link: videoUrl, ...(caption ? { caption } : {}) },
|
| 169 |
+
};
|
| 170 |
+
|
| 171 |
+
try {
|
| 172 |
+
await axios.post(getBaseUrl(), body, { headers: getHeaders() });
|
| 173 |
+
} catch (err: any) {
|
| 174 |
+
throw new Error(`[WhatsApp] sendVideoMessage failed for URL [${videoUrl}]: ${err.response?.data?.error?.message || err.message}`);
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
console.log(`[WhatsApp] ✅ Video message sent to ${to}`);
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
/**
|
| 181 |
* Send an interactive message with up to 3 quick reply buttons.
|
| 182 |
* @param to - Recipient phone number
|
|
@@ -1,561 +1,583 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
},
|
| 31 |
-
{
|
| 32 |
-
"id": "ZONE",
|
| 33 |
-
"desc": "Lieu ou quartier d'exercice",
|
| 34 |
-
"weight": 2
|
| 35 |
-
}
|
| 36 |
-
],
|
| 37 |
-
"threshold": {
|
| 38 |
-
"minScore": 5,
|
| 39 |
-
"minMustPass": 2
|
| 40 |
-
}
|
| 41 |
-
},
|
| 42 |
-
"evaluation": {
|
| 43 |
-
"tone": "coach_enthusiastic",
|
| 44 |
-
"format": "3_lines",
|
| 45 |
-
"examples": "Valide si l'intention est présente : 'Je vends des jus à Grand Yoff' est valide."
|
| 46 |
-
},
|
| 47 |
-
"remediation": {
|
| 48 |
-
"dayNumber": 1.5,
|
| 49 |
-
"hint": "Donne un exemple concret (produit exact + client exact + lieu exact)."
|
| 50 |
-
}
|
| 51 |
},
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
},
|
| 57 |
-
{
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
|
|
|
| 94 |
},
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
},
|
| 100 |
-
{
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
}
|
| 132 |
-
},
|
| 133 |
-
"evaluation": {
|
| 134 |
-
"tone": "coach_enthusiastic",
|
| 135 |
-
"format": "3_lines"
|
| 136 |
-
}
|
| 137 |
},
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
},
|
| 143 |
-
{
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
"evaluation": {
|
| 172 |
-
"tone": "coach_enthusiastic",
|
| 173 |
-
"format": "3_lines"
|
| 174 |
-
}
|
| 175 |
},
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
},
|
| 181 |
-
{
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
"evaluation": {
|
| 215 |
-
"tone": "coach_enthusiastic",
|
| 216 |
-
"format": "3_lines"
|
| 217 |
-
}
|
| 218 |
},
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 223 |
},
|
| 224 |
-
{
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
"evaluation": {
|
| 253 |
-
"tone": "coach_enthusiastic",
|
| 254 |
-
"format": "3_lines"
|
| 255 |
-
}
|
| 256 |
},
|
| 257 |
-
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 261 |
},
|
| 262 |
-
{
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
|
| 269 |
-
|
| 270 |
-
|
| 271 |
-
|
| 272 |
-
|
| 273 |
-
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
"evaluation": {
|
| 296 |
-
"tone": "coach_enthusiastic",
|
| 297 |
-
"format": "3_lines"
|
| 298 |
-
}
|
| 299 |
},
|
| 300 |
-
|
| 301 |
-
|
| 302 |
-
|
| 303 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 304 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 305 |
{
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
"lessonText": "Où se fait la vente ?\n\nExemples :\n- marché\n- boutique\n- WhatsApp\n- livraison\n- terrain\n- recommandation\n\nAujourd’hui : on choisit 1 canal principal + 1 secondaire.",
|
| 309 |
-
"exerciseType": "BUTTON",
|
| 310 |
-
"exercisePrompt": "Choisis ton canal principal de vente.",
|
| 311 |
-
"buttonsJson": [
|
| 312 |
-
{
|
| 313 |
-
"id": "whatsapp",
|
| 314 |
-
"title": "WhatsApp"
|
| 315 |
-
},
|
| 316 |
-
{
|
| 317 |
-
"id": "marche",
|
| 318 |
-
"title": "Marché"
|
| 319 |
-
},
|
| 320 |
-
{
|
| 321 |
-
"id": "boutique",
|
| 322 |
-
"title": "Boutique"
|
| 323 |
-
},
|
| 324 |
-
{
|
| 325 |
-
"id": "terrain",
|
| 326 |
-
"title": "Terrain / Porte-à-porte"
|
| 327 |
-
},
|
| 328 |
-
{
|
| 329 |
-
"id": "en_ligne",
|
| 330 |
-
"title": "En ligne"
|
| 331 |
-
}
|
| 332 |
-
],
|
| 333 |
-
"exerciseCriteria": {
|
| 334 |
-
"version": "1.0",
|
| 335 |
-
"type": "BUTTON",
|
| 336 |
-
"goal": "Choix du canal de distribution",
|
| 337 |
-
"success": {
|
| 338 |
-
"mustInclude": [
|
| 339 |
-
{
|
| 340 |
-
"id": "CHOICE",
|
| 341 |
-
"desc": "Un canal sélectionné",
|
| 342 |
-
"weight": 1
|
| 343 |
-
}
|
| 344 |
-
],
|
| 345 |
-
"threshold": {
|
| 346 |
-
"minScore": 1,
|
| 347 |
-
"minMustPass": 1
|
| 348 |
-
}
|
| 349 |
-
},
|
| 350 |
-
"evaluation": {
|
| 351 |
-
"tone": "coach_enthusiastic",
|
| 352 |
-
"format": "3_lines"
|
| 353 |
-
}
|
| 354 |
-
},
|
| 355 |
-
"badges": [
|
| 356 |
-
"CANAL"
|
| 357 |
-
],
|
| 358 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j7_channel_sales_v2_1772065752541.png"
|
| 359 |
},
|
| 360 |
{
|
| 361 |
-
|
| 362 |
-
|
| 363 |
-
"lessonText": "Les gens achètent quand ils ont confiance.\n\nAujourd’hui : on liste des preuves simples :\n- témoignage\n- avant/après\n- photos\n- garantie\n- expérience\n\n✅ Une preuve = une vente plus facile.",
|
| 364 |
-
"exerciseType": "TEXT",
|
| 365 |
-
"exercisePrompt": "Donne 2 preuves que tu peux montrer pour rassurer ton client (ex: photo, témoignage, garantie, résultats).",
|
| 366 |
-
"exerciseCriteria": {
|
| 367 |
-
"version": "1.0",
|
| 368 |
-
"type": "TEXT",
|
| 369 |
-
"goal": "Établir la crédibilité",
|
| 370 |
-
"success": {
|
| 371 |
-
"mustInclude": [
|
| 372 |
-
{
|
| 373 |
-
"id": "PREUVE1",
|
| 374 |
-
"desc": "Première preuve de confiance",
|
| 375 |
-
"weight": 5
|
| 376 |
-
},
|
| 377 |
-
{
|
| 378 |
-
"id": "PREUVE2",
|
| 379 |
-
"desc": "Deuxième preuve de confiance",
|
| 380 |
-
"weight": 5
|
| 381 |
-
}
|
| 382 |
-
],
|
| 383 |
-
"threshold": {
|
| 384 |
-
"minScore": 5,
|
| 385 |
-
"minMustPass": 1
|
| 386 |
-
}
|
| 387 |
-
},
|
| 388 |
-
"evaluation": {
|
| 389 |
-
"tone": "coach_enthusiastic",
|
| 390 |
-
"format": "3_lines"
|
| 391 |
-
}
|
| 392 |
-
},
|
| 393 |
-
"badges": [
|
| 394 |
-
"CONFIANCE"
|
| 395 |
-
],
|
| 396 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j8_trust_1772065782385.png"
|
| 397 |
},
|
| 398 |
{
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
"lessonText": "On assemble tout en un pitch court.\n\nStructure :\n1) Je fais…\n2) Pour…\n3) Parce que…\n4) Je me différencie par…\n5) Contact / prochaine action\n\n✅ Court. Clair. Sans bla-bla.",
|
| 402 |
-
"exerciseType": "AUDIO",
|
| 403 |
-
"exercisePrompt": "Envoie ton pitch en 30 secondes (vocal).",
|
| 404 |
-
"exerciseCriteria": {
|
| 405 |
-
"version": "1.0",
|
| 406 |
-
"type": "AUDIO",
|
| 407 |
-
"goal": "Synthèse du projet",
|
| 408 |
-
"success": {
|
| 409 |
-
"mustInclude": [
|
| 410 |
-
{
|
| 411 |
-
"id": "ACTIVITE",
|
| 412 |
-
"desc": "Description du quoi",
|
| 413 |
-
"weight": 3
|
| 414 |
-
},
|
| 415 |
-
{
|
| 416 |
-
"id": "CLIENT",
|
| 417 |
-
"desc": "Cible",
|
| 418 |
-
"weight": 3
|
| 419 |
-
},
|
| 420 |
-
{
|
| 421 |
-
"id": "DIFFERENCE",
|
| 422 |
-
"desc": "Argument fort",
|
| 423 |
-
"weight": 4
|
| 424 |
-
}
|
| 425 |
-
],
|
| 426 |
-
"threshold": {
|
| 427 |
-
"minScore": 6,
|
| 428 |
-
"minMustPass": 2
|
| 429 |
-
}
|
| 430 |
-
},
|
| 431 |
-
"evaluation": {
|
| 432 |
-
"tone": "coach_enthusiastic",
|
| 433 |
-
"format": "3_lines"
|
| 434 |
-
}
|
| 435 |
-
},
|
| 436 |
-
"badges": [
|
| 437 |
-
"PITCH"
|
| 438 |
-
],
|
| 439 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j9_pitch_1772065807317.png"
|
| 440 |
},
|
| 441 |
{
|
| 442 |
-
|
| 443 |
-
|
| 444 |
-
"lessonText": "Un client va dire : ‘c’est cher’, ‘je vais réfléchir’, ‘je ne connais pas’.\n\nAujourd’hui : on prépare une réponse simple et polie.\n✅ écouter\n✅ rassurer\n✅ proposer une action (essai, petite quantité, preuve)",
|
| 445 |
-
"exerciseType": "TEXT",
|
| 446 |
-
"exercisePrompt": "Choisis 1 objection fréquente de tes clients et écris ta réponse en 2–3 phrases.",
|
| 447 |
-
"exerciseCriteria": {
|
| 448 |
-
"version": "1.0",
|
| 449 |
-
"type": "TEXT",
|
| 450 |
-
"goal": "Gestion de la relation client",
|
| 451 |
-
"success": {
|
| 452 |
-
"mustInclude": [
|
| 453 |
-
{
|
| 454 |
-
"id": "OBJECTION",
|
| 455 |
-
"desc": "Objection identifiée",
|
| 456 |
-
"weight": 5
|
| 457 |
-
},
|
| 458 |
-
{
|
| 459 |
-
"id": "REPONSE",
|
| 460 |
-
"desc": "Réponse constructive",
|
| 461 |
-
"weight": 5
|
| 462 |
-
}
|
| 463 |
-
],
|
| 464 |
-
"threshold": {
|
| 465 |
-
"minScore": 5,
|
| 466 |
-
"minMustPass": 1
|
| 467 |
-
}
|
| 468 |
-
},
|
| 469 |
-
"evaluation": {
|
| 470 |
-
"tone": "coach_enthusiastic",
|
| 471 |
-
"format": "3_lines"
|
| 472 |
-
}
|
| 473 |
-
},
|
| 474 |
-
"badges": [
|
| 475 |
-
"OBJECTIONS"
|
| 476 |
-
],
|
| 477 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j10_objections_1772065830459.png"
|
| 478 |
},
|
| 479 |
{
|
| 480 |
-
|
| 481 |
-
|
| 482 |
-
|
| 483 |
-
|
| 484 |
-
|
| 485 |
-
|
| 486 |
-
|
| 487 |
-
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
|
| 491 |
-
|
| 492 |
-
|
| 493 |
-
|
| 494 |
-
|
| 495 |
-
|
| 496 |
-
|
| 497 |
-
|
| 498 |
-
|
| 499 |
-
|
| 500 |
-
|
| 501 |
-
|
| 502 |
-
|
| 503 |
-
|
| 504 |
-
|
| 505 |
-
|
| 506 |
-
|
| 507 |
-
|
| 508 |
-
|
| 509 |
-
|
| 510 |
-
|
| 511 |
-
|
| 512 |
-
|
| 513 |
-
|
| 514 |
-
|
| 515 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 516 |
},
|
| 517 |
-
|
| 518 |
-
|
| 519 |
-
|
| 520 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 521 |
},
|
| 522 |
-
{
|
| 523 |
-
|
| 524 |
-
|
| 525 |
-
|
| 526 |
-
|
| 527 |
-
|
| 528 |
-
|
| 529 |
-
|
| 530 |
-
|
| 531 |
-
|
| 532 |
-
|
| 533 |
-
|
| 534 |
-
|
| 535 |
-
|
| 536 |
-
|
| 537 |
-
|
| 538 |
-
|
| 539 |
-
|
| 540 |
-
|
| 541 |
-
|
| 542 |
-
|
| 543 |
-
|
| 544 |
-
|
| 545 |
-
|
| 546 |
-
|
| 547 |
-
|
| 548 |
-
|
| 549 |
-
|
| 550 |
-
|
| 551 |
-
|
| 552 |
-
|
| 553 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 554 |
},
|
| 555 |
-
|
| 556 |
-
|
| 557 |
-
|
| 558 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 559 |
}
|
| 560 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 561 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T1-FR",
|
| 3 |
+
"title": "Comprendre son business",
|
| 4 |
+
"language": "FR",
|
| 5 |
+
"description": "Apprenez à définir, tester et vendre votre projet en 12 leçons.",
|
| 6 |
+
"totalDays": 12,
|
| 7 |
+
"version": "1.0.0",
|
| 8 |
+
"days": [
|
| 9 |
+
{
|
| 10 |
+
"dayNumber": 1,
|
| 11 |
+
"title": "Clarifier ton activité",
|
| 12 |
+
"lessonText": "Aujourd’hui, on clarifie ton activité en 1 phrase simple. Ton objectif : expliquer clairement ce que tu fais, pour qui, et pourquoi ça compte.\n\n✅ Règle : pas de phrases vagues.\n✅ Règle : une seule activité principale.",
|
| 13 |
+
"exerciseType": "AUDIO",
|
| 14 |
+
"exercisePrompt": "En 20–30 secondes, explique : (1) ce que tu vends/fais, (2) à qui tu le vends, (3) dans quelle zone (quartier/ville).",
|
| 15 |
+
"exerciseCriteria": {
|
| 16 |
+
"version": "1.0",
|
| 17 |
+
"type": "AUDIO",
|
| 18 |
+
"goal": "Clarifier l'activité (Offre + Client + Zone)",
|
| 19 |
+
"success": {
|
| 20 |
+
"mustInclude": [
|
| 21 |
+
{
|
| 22 |
+
"id": "OFFRE",
|
| 23 |
+
"desc": "Produit ou service vendu",
|
| 24 |
+
"weight": 3
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"id": "CLIENT",
|
| 28 |
+
"desc": "Cible précise qui paye",
|
| 29 |
+
"weight": 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
},
|
| 31 |
+
{
|
| 32 |
+
"id": "ZONE",
|
| 33 |
+
"desc": "Lieu ou quartier d'exercice",
|
| 34 |
+
"weight": 2
|
| 35 |
+
}
|
| 36 |
+
],
|
| 37 |
+
"threshold": {
|
| 38 |
+
"minScore": 5,
|
| 39 |
+
"minMustPass": 2
|
| 40 |
+
}
|
| 41 |
},
|
| 42 |
+
"evaluation": {
|
| 43 |
+
"tone": "coach_enthusiastic",
|
| 44 |
+
"format": "3_lines",
|
| 45 |
+
"examples": "Valide si l'intention est présente : 'Je vends des jus à Grand Yoff' est valide."
|
| 46 |
+
},
|
| 47 |
+
"remediation": {
|
| 48 |
+
"dayNumber": 1.5,
|
| 49 |
+
"hint": "Donne un exemple concret (produit exact + client exact + lieu exact)."
|
| 50 |
+
}
|
| 51 |
+
},
|
| 52 |
+
"badges": [
|
| 53 |
+
"DÉMARRAGE"
|
| 54 |
+
],
|
| 55 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes1_activity.png",
|
| 56 |
+
"videoUrl": "https://r2.xamle.sn/videos/v1_1.mp4",
|
| 57 |
+
"videoCaption": "🧠 Mindset : Da ngay war a dëggal sa mbir !"
|
| 58 |
+
},
|
| 59 |
+
{
|
| 60 |
+
"dayNumber": 1.5,
|
| 61 |
+
"title": "Remédiation — Clarifier ton activité",
|
| 62 |
+
"lessonText": "Pas grave — on va simplifier.\n\n✅ Modèle à répéter :\nJe vends [PRODUIT] à [CLIENT] à [LIEU].\n\nExemple : Je vends de l’engrais organique aux maraîchers à Pikine.",
|
| 63 |
+
"exerciseType": "TEXT",
|
| 64 |
+
"exercisePrompt": "Complète cette phrase : Je vends/fais _______ pour _______ à _______.",
|
| 65 |
+
"exerciseCriteria": {
|
| 66 |
+
"version": "1.0",
|
| 67 |
+
"type": "TEXT",
|
| 68 |
+
"goal": "Correction simplifiée de l'activité",
|
| 69 |
+
"success": {
|
| 70 |
+
"mustInclude": [
|
| 71 |
+
{
|
| 72 |
+
"id": "PRODUIT",
|
| 73 |
+
"desc": "Nom du produit",
|
| 74 |
+
"weight": 4
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"id": "CLIENT",
|
| 78 |
+
"desc": "Cible",
|
| 79 |
+
"weight": 3
|
| 80 |
},
|
| 81 |
+
{
|
| 82 |
+
"id": "LIEU",
|
| 83 |
+
"desc": "Lieu",
|
| 84 |
+
"weight": 3
|
| 85 |
+
}
|
| 86 |
+
],
|
| 87 |
+
"threshold": {
|
| 88 |
+
"minScore": 6,
|
| 89 |
+
"minMustPass": 2
|
| 90 |
+
}
|
| 91 |
},
|
| 92 |
+
"evaluation": {
|
| 93 |
+
"tone": "coach_enthusiastic",
|
| 94 |
+
"format": "3_lines"
|
| 95 |
+
}
|
| 96 |
+
},
|
| 97 |
+
"badges": [
|
| 98 |
+
"REPRISE"
|
| 99 |
+
],
|
| 100 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes1_5_remediation.png"
|
| 101 |
+
},
|
| 102 |
+
{
|
| 103 |
+
"dayNumber": 2,
|
| 104 |
+
"title": "Ton client qui paye",
|
| 105 |
+
"lessonText": "Un business marche quand tu sais EXACTEMENT qui paye.\n\nAujourd’hui, on choisit une cible principale :\n- Qui achète ?\n- Quel âge / profil ?\n- Où tu le trouves ?\n\n✅ Plus ta cible est précise, plus tu vends.",
|
| 106 |
+
"exerciseType": "TEXT",
|
| 107 |
+
"exercisePrompt": "Décris ton client principal en 3 points : (1) qui c’est, (2) où tu le trouves, (3) pourquoi il achète.",
|
| 108 |
+
"exerciseCriteria": {
|
| 109 |
+
"version": "1.0",
|
| 110 |
+
"type": "TEXT",
|
| 111 |
+
"goal": "Définition précise du client",
|
| 112 |
+
"success": {
|
| 113 |
+
"mustInclude": [
|
| 114 |
+
{
|
| 115 |
+
"id": "PROFIL",
|
| 116 |
+
"desc": "Profil du client",
|
| 117 |
+
"weight": 4
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"id": "LIEU",
|
| 121 |
+
"desc": "Localisation ou canal de contact",
|
| 122 |
+
"weight": 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
},
|
| 124 |
+
{
|
| 125 |
+
"id": "RAISON",
|
| 126 |
+
"desc": "Motivation d'achat",
|
| 127 |
+
"weight": 3
|
| 128 |
+
}
|
| 129 |
+
],
|
| 130 |
+
"threshold": {
|
| 131 |
+
"minScore": 6,
|
| 132 |
+
"minMustPass": 2
|
| 133 |
+
}
|
| 134 |
},
|
| 135 |
+
"evaluation": {
|
| 136 |
+
"tone": "coach_enthusiastic",
|
| 137 |
+
"format": "3_lines"
|
| 138 |
+
}
|
| 139 |
+
},
|
| 140 |
+
"badges": [
|
| 141 |
+
"CIBLE"
|
| 142 |
+
],
|
| 143 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes2_customer.png",
|
| 144 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_1.mp4",
|
| 145 |
+
"videoCaption": "👥 Segments : Ñoom ñan ñoo lay faye ?"
|
| 146 |
+
},
|
| 147 |
+
{
|
| 148 |
+
"dayNumber": 3,
|
| 149 |
+
"title": "Le problème réel",
|
| 150 |
+
"lessonText": "Les gens n’achètent pas un produit. Ils achètent une solution à un problème.\n\nAujourd’hui : on formule le problème du client en mots simples.\n✅ ‘Quand…, je…’\n✅ ‘Ça me coûte…’\n✅ ‘Ça me bloque…’",
|
| 151 |
+
"exerciseType": "AUDIO",
|
| 152 |
+
"exercisePrompt": "En 20–30 secondes, décris le problème principal de ton client : ce qui lui fait perdre du temps, de l’argent, ou le stresse.",
|
| 153 |
+
"exerciseCriteria": {
|
| 154 |
+
"version": "1.0",
|
| 155 |
+
"type": "AUDIO",
|
| 156 |
+
"goal": "Identifier la douleur client",
|
| 157 |
+
"success": {
|
| 158 |
+
"mustInclude": [
|
| 159 |
+
{
|
| 160 |
+
"id": "DOULEUR",
|
| 161 |
+
"desc": "Problème ou contrainte",
|
| 162 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
},
|
| 164 |
+
{
|
| 165 |
+
"id": "CONSEQUENCE",
|
| 166 |
+
"desc": "Impact du problème",
|
| 167 |
+
"weight": 5
|
| 168 |
+
}
|
| 169 |
+
],
|
| 170 |
+
"threshold": {
|
| 171 |
+
"minScore": 5,
|
| 172 |
+
"minMustPass": 1
|
| 173 |
+
}
|
| 174 |
},
|
| 175 |
+
"evaluation": {
|
| 176 |
+
"tone": "coach_enthusiastic",
|
| 177 |
+
"format": "3_lines"
|
| 178 |
+
}
|
| 179 |
+
},
|
| 180 |
+
"badges": [
|
| 181 |
+
"PROBLÈME"
|
| 182 |
+
],
|
| 183 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes3_problem.png",
|
| 184 |
+
"videoUrl": "https://r2.xamle.sn/videos/v2_1.mp4",
|
| 185 |
+
"videoCaption": "❓ Problème : Lan mooy sonnal sa kiliifa ?"
|
| 186 |
+
},
|
| 187 |
+
{
|
| 188 |
+
"dayNumber": 4,
|
| 189 |
+
"title": "Ta solution en 1 phrase",
|
| 190 |
+
"lessonText": "Maintenant, on transforme le problème en solution.\n\n✅ Modèle :\nJ’aide [CLIENT] à [RÉSULTAT] grâce à [SOLUTION].\n\nObjectif : une phrase courte, claire.",
|
| 191 |
+
"exerciseType": "TEXT",
|
| 192 |
+
"exercisePrompt": "Écris ta phrase : J’aide ___ à ___ grâce à ___.",
|
| 193 |
+
"exerciseCriteria": {
|
| 194 |
+
"version": "1.0",
|
| 195 |
+
"type": "TEXT",
|
| 196 |
+
"goal": "Formulation de la proposition de valeur",
|
| 197 |
+
"success": {
|
| 198 |
+
"mustInclude": [
|
| 199 |
+
{
|
| 200 |
+
"id": "CLIENT",
|
| 201 |
+
"desc": "Bénéficiaire",
|
| 202 |
+
"weight": 3
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"id": "RESULTAT",
|
| 206 |
+
"desc": "Bénéfice apporté",
|
| 207 |
+
"weight": 4
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
},
|
| 209 |
+
{
|
| 210 |
+
"id": "MOYEN",
|
| 211 |
+
"desc": "Moyen ou produit utilisé",
|
| 212 |
+
"weight": 3
|
| 213 |
+
}
|
| 214 |
+
],
|
| 215 |
+
"threshold": {
|
| 216 |
+
"minScore": 6,
|
| 217 |
+
"minMustPass": 2
|
| 218 |
+
}
|
| 219 |
},
|
| 220 |
+
"evaluation": {
|
| 221 |
+
"tone": "coach_enthusiastic",
|
| 222 |
+
"format": "3_lines"
|
| 223 |
+
}
|
| 224 |
+
},
|
| 225 |
+
"badges": [
|
| 226 |
+
"CLARTÉ"
|
| 227 |
+
],
|
| 228 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes4_solution.png",
|
| 229 |
+
"videoUrl": "https://r2.xamle.sn/videos/v3_1.mp4",
|
| 230 |
+
"videoCaption": "💡 Solutions : Naka ngay fajjé jafe-jafe bi ?"
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"dayNumber": 5,
|
| 234 |
+
"title": "Différenciation — pourquoi toi ?",
|
| 235 |
+
"lessonText": "Si 10 personnes vendent la même chose, pourquoi on achèterait chez toi ?\n\nAujourd’hui : on trouve 1–2 différences simples :\n- qualité\n- prix\n- rapidité\n- proximité\n- confiance\n- service après-vente\n\n✅ Une bonne différence = un argument de vente.",
|
| 236 |
+
"exerciseType": "TEXT",
|
| 237 |
+
"exercisePrompt": "Donne 2 raisons concrètes qui font que ton client te choisit toi (et pas un autre).",
|
| 238 |
+
"exerciseCriteria": {
|
| 239 |
+
"version": "1.0",
|
| 240 |
+
"type": "TEXT",
|
| 241 |
+
"goal": "Identifier les avantages concurrentiels",
|
| 242 |
+
"success": {
|
| 243 |
+
"mustInclude": [
|
| 244 |
+
{
|
| 245 |
+
"id": "RAISON1",
|
| 246 |
+
"desc": "Premier avantage compétitif",
|
| 247 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
| 248 |
},
|
| 249 |
+
{
|
| 250 |
+
"id": "RAISON2",
|
| 251 |
+
"desc": "Deuxième avantage compétitif",
|
| 252 |
+
"weight": 5
|
| 253 |
+
}
|
| 254 |
+
],
|
| 255 |
+
"threshold": {
|
| 256 |
+
"minScore": 5,
|
| 257 |
+
"minMustPass": 1
|
| 258 |
+
}
|
| 259 |
},
|
| 260 |
+
"evaluation": {
|
| 261 |
+
"tone": "coach_enthusiastic",
|
| 262 |
+
"format": "3_lines"
|
| 263 |
+
}
|
| 264 |
+
},
|
| 265 |
+
"badges": [
|
| 266 |
+
"AVANTAGE"
|
| 267 |
+
],
|
| 268 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes5_differentiation.png",
|
| 269 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_2.mp4",
|
| 270 |
+
"videoCaption": "🎁 Valeur : Lan moo la gënal ci marché bi ?"
|
| 271 |
+
},
|
| 272 |
+
{
|
| 273 |
+
"dayNumber": 6,
|
| 274 |
+
"title": "Prix — comment tu gagnes de l’argent",
|
| 275 |
+
"lessonText": "Un business sans prix clair = confusion.\n\nAujourd’hui : on fixe une logique simple :\n- Prix unitaire\n- Pack / abonnement\n- Commission\n\n✅ Même si tu ajustes plus tard, il faut une base.",
|
| 276 |
+
"exerciseType": "TEXT",
|
| 277 |
+
"exercisePrompt": "Explique ta façon de gagner de l’argent : combien tu vends, à quel prix, et ce que le client reçoit.",
|
| 278 |
+
"exerciseCriteria": {
|
| 279 |
+
"version": "1.0",
|
| 280 |
+
"type": "TEXT",
|
| 281 |
+
"goal": "Définir le modèle de revenu",
|
| 282 |
+
"success": {
|
| 283 |
+
"mustInclude": [
|
| 284 |
+
{
|
| 285 |
+
"id": "PRIX",
|
| 286 |
+
"desc": "Montant ou fourchette",
|
| 287 |
+
"weight": 4
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"id": "UNITE",
|
| 291 |
+
"desc": "Unité de mesure (sac, heure, etc.)",
|
| 292 |
+
"weight": 3
|
|
|
|
|
|
|
|
|
|
|
|
|
| 293 |
},
|
| 294 |
+
{
|
| 295 |
+
"id": "OFFRE",
|
| 296 |
+
"desc": "Précision de ce qui est inclus",
|
| 297 |
+
"weight": 3
|
| 298 |
+
}
|
| 299 |
+
],
|
| 300 |
+
"threshold": {
|
| 301 |
+
"minScore": 6,
|
| 302 |
+
"minMustPass": 2
|
| 303 |
+
}
|
| 304 |
},
|
| 305 |
+
"evaluation": {
|
| 306 |
+
"tone": "coach_enthusiastic",
|
| 307 |
+
"format": "3_lines"
|
| 308 |
+
}
|
| 309 |
+
},
|
| 310 |
+
"badges": [
|
| 311 |
+
"PRIX"
|
| 312 |
+
],
|
| 313 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes6_pricing.png",
|
| 314 |
+
"videoUrl": "https://r2.xamle.sn/videos/v6_1.mp4",
|
| 315 |
+
"videoCaption": "💰 Prix : Naka ngay tànnee sa prix ?"
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"dayNumber": 7,
|
| 319 |
+
"title": "Canal de vente — où tu vends",
|
| 320 |
+
"lessonText": "Où se fait la vente ?\n\nExemples :\n- marché\n- boutique\n- WhatsApp\n- livraison\n- terrain\n- recommandation\n\nAujourd’hui : on choisit 1 canal principal + 1 secondaire.",
|
| 321 |
+
"exerciseType": "BUTTON",
|
| 322 |
+
"exercisePrompt": "Choisis ton canal principal de vente.",
|
| 323 |
+
"buttonsJson": [
|
| 324 |
{
|
| 325 |
+
"id": "whatsapp",
|
| 326 |
+
"title": "WhatsApp"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 327 |
},
|
| 328 |
{
|
| 329 |
+
"id": "marche",
|
| 330 |
+
"title": "Marché"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 331 |
},
|
| 332 |
{
|
| 333 |
+
"id": "boutique",
|
| 334 |
+
"title": "Boutique"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 335 |
},
|
| 336 |
{
|
| 337 |
+
"id": "terrain",
|
| 338 |
+
"title": "Terrain / Porte-à-porte"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 339 |
},
|
| 340 |
{
|
| 341 |
+
"id": "en_ligne",
|
| 342 |
+
"title": "En ligne"
|
| 343 |
+
}
|
| 344 |
+
],
|
| 345 |
+
"exerciseCriteria": {
|
| 346 |
+
"version": "1.0",
|
| 347 |
+
"type": "BUTTON",
|
| 348 |
+
"goal": "Choix du canal de distribution",
|
| 349 |
+
"success": {
|
| 350 |
+
"mustInclude": [
|
| 351 |
+
{
|
| 352 |
+
"id": "CHOICE",
|
| 353 |
+
"desc": "Un canal sélectionné",
|
| 354 |
+
"weight": 1
|
| 355 |
+
}
|
| 356 |
+
],
|
| 357 |
+
"threshold": {
|
| 358 |
+
"minScore": 1,
|
| 359 |
+
"minMustPass": 1
|
| 360 |
+
}
|
| 361 |
+
},
|
| 362 |
+
"evaluation": {
|
| 363 |
+
"tone": "coach_enthusiastic",
|
| 364 |
+
"format": "3_lines"
|
| 365 |
+
}
|
| 366 |
+
},
|
| 367 |
+
"badges": [
|
| 368 |
+
"CANAL"
|
| 369 |
+
],
|
| 370 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes7_channel.png",
|
| 371 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_3.mp4",
|
| 372 |
+
"videoCaption": "🚀 Canaux : Naka ngay jot sa kiliifa ?"
|
| 373 |
+
},
|
| 374 |
+
{
|
| 375 |
+
"dayNumber": 8,
|
| 376 |
+
"title": "Confiance — preuve & crédibilité",
|
| 377 |
+
"lessonText": "Les gens achètent quand ils ont confiance.\n\nAujourd’hui : on liste des preuves simples :\n- témoignage\n- avant/après\n- photos\n- garantie\n- expérience\n\n✅ Une preuve = une vente plus facile.",
|
| 378 |
+
"exerciseType": "TEXT",
|
| 379 |
+
"exercisePrompt": "Donne 2 preuves que tu peux montrer pour rassurer ton client (ex: photo, témoignage, garantie, résultats).",
|
| 380 |
+
"exerciseCriteria": {
|
| 381 |
+
"version": "1.0",
|
| 382 |
+
"type": "TEXT",
|
| 383 |
+
"goal": "Établir la crédibilité",
|
| 384 |
+
"success": {
|
| 385 |
+
"mustInclude": [
|
| 386 |
+
{
|
| 387 |
+
"id": "PREUVE1",
|
| 388 |
+
"desc": "Première preuve de confiance",
|
| 389 |
+
"weight": 5
|
| 390 |
},
|
| 391 |
+
{
|
| 392 |
+
"id": "PREUVE2",
|
| 393 |
+
"desc": "Deuxième preuve de confiance",
|
| 394 |
+
"weight": 5
|
| 395 |
+
}
|
| 396 |
+
],
|
| 397 |
+
"threshold": {
|
| 398 |
+
"minScore": 5,
|
| 399 |
+
"minMustPass": 1
|
| 400 |
+
}
|
| 401 |
},
|
| 402 |
+
"evaluation": {
|
| 403 |
+
"tone": "coach_enthusiastic",
|
| 404 |
+
"format": "3_lines"
|
| 405 |
+
}
|
| 406 |
+
},
|
| 407 |
+
"badges": [
|
| 408 |
+
"CONFIANCE"
|
| 409 |
+
],
|
| 410 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes8_trust.png",
|
| 411 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_2.mp4",
|
| 412 |
+
"videoCaption": "🤝 Confiance : Naka ngay dëggal sa digganté ak kiliifa ?"
|
| 413 |
+
},
|
| 414 |
+
{
|
| 415 |
+
"dayNumber": 9,
|
| 416 |
+
"title": "Ton pitch 30 secondes",
|
| 417 |
+
"lessonText": "On assemble tout en un pitch court.\n\nStructure :\n1) Je fais…\n2) Pour…\n3) Parce que…\n4) Je me différencie par…\n5) Contact / prochaine action\n\n✅ Court. Clair. Sans bla-bla.",
|
| 418 |
+
"exerciseType": "AUDIO",
|
| 419 |
+
"exercisePrompt": "Envoie ton pitch en 30 secondes (vocal).",
|
| 420 |
+
"exerciseCriteria": {
|
| 421 |
+
"version": "1.0",
|
| 422 |
+
"type": "AUDIO",
|
| 423 |
+
"goal": "Synthèse du projet",
|
| 424 |
+
"success": {
|
| 425 |
+
"mustInclude": [
|
| 426 |
+
{
|
| 427 |
+
"id": "ACTIVITE",
|
| 428 |
+
"desc": "Description du quoi",
|
| 429 |
+
"weight": 3
|
| 430 |
+
},
|
| 431 |
+
{
|
| 432 |
+
"id": "CLIENT",
|
| 433 |
+
"desc": "Cible",
|
| 434 |
+
"weight": 3
|
| 435 |
+
},
|
| 436 |
+
{
|
| 437 |
+
"id": "DIFFERENCE",
|
| 438 |
+
"desc": "Argument fort",
|
| 439 |
+
"weight": 4
|
| 440 |
+
}
|
| 441 |
+
],
|
| 442 |
+
"threshold": {
|
| 443 |
+
"minScore": 6,
|
| 444 |
+
"minMustPass": 2
|
| 445 |
+
}
|
| 446 |
+
},
|
| 447 |
+
"evaluation": {
|
| 448 |
+
"tone": "coach_enthusiastic",
|
| 449 |
+
"format": "3_lines"
|
| 450 |
+
}
|
| 451 |
+
},
|
| 452 |
+
"badges": [
|
| 453 |
+
"PITCH"
|
| 454 |
+
],
|
| 455 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes9_pitch.png",
|
| 456 |
+
"videoUrl": "https://r2.xamle.sn/videos/v3_2.mp4",
|
| 457 |
+
"videoCaption": "🛠️ Prototype : Tàmbalil ak li nga am léegi !"
|
| 458 |
+
},
|
| 459 |
+
{
|
| 460 |
+
"dayNumber": 10,
|
| 461 |
+
"title": "Objection — répondre sans se fâcher",
|
| 462 |
+
"lessonText": "Un client va dire : ‘c’est cher’, ‘je vais réfléchir’, ‘je ne connais pas’.\n\nAujourd’hui : on prépare une réponse simple et polie.\n✅ écouter\n✅ rassurer\n✅ proposer une action (essai, petite quantité, preuve)",
|
| 463 |
+
"exerciseType": "TEXT",
|
| 464 |
+
"exercisePrompt": "Choisis 1 objection fréquente de tes clients et écris ta réponse en 2–3 phrases.",
|
| 465 |
+
"exerciseCriteria": {
|
| 466 |
+
"version": "1.0",
|
| 467 |
+
"type": "TEXT",
|
| 468 |
+
"goal": "Gestion de la relation client",
|
| 469 |
+
"success": {
|
| 470 |
+
"mustInclude": [
|
| 471 |
+
{
|
| 472 |
+
"id": "OBJECTION",
|
| 473 |
+
"desc": "Objection identifiée",
|
| 474 |
+
"weight": 5
|
| 475 |
+
},
|
| 476 |
+
{
|
| 477 |
+
"id": "REPONSE",
|
| 478 |
+
"desc": "Réponse constructive",
|
| 479 |
+
"weight": 5
|
| 480 |
+
}
|
| 481 |
+
],
|
| 482 |
+
"threshold": {
|
| 483 |
+
"minScore": 5,
|
| 484 |
+
"minMustPass": 1
|
| 485 |
+
}
|
| 486 |
+
},
|
| 487 |
+
"evaluation": {
|
| 488 |
+
"tone": "coach_enthusiastic",
|
| 489 |
+
"format": "3_lines"
|
| 490 |
+
}
|
| 491 |
+
},
|
| 492 |
+
"badges": [
|
| 493 |
+
"OBJECTIONS"
|
| 494 |
+
],
|
| 495 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes10_objections.png",
|
| 496 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_3.mp4",
|
| 497 |
+
"videoCaption": "📢 Feedback : Écouter pour s’améliorer."
|
| 498 |
+
},
|
| 499 |
+
{
|
| 500 |
+
"dayNumber": 11,
|
| 501 |
+
"title": "Plan 7 jours — passage à l’action",
|
| 502 |
+
"lessonText": "On termine avec un plan simple.\n\nObjectif : 7 jours = 7 actions.\n✅ petit\n✅ réaliste\n✅ mesurable\n\nExemple : 10 messages WhatsApp, 3 visites terrain, 1 photo produit.",
|
| 503 |
+
"exerciseType": "TEXT",
|
| 504 |
+
"exercisePrompt": "Écris ton plan 7 jours : liste 5 actions concrètes que tu feras cette semaine pour vendre ou améliorer ton business.",
|
| 505 |
+
"exerciseCriteria": {
|
| 506 |
+
"version": "1.0",
|
| 507 |
+
"type": "TEXT",
|
| 508 |
+
"goal": "Plan d'action opérationnel",
|
| 509 |
+
"success": {
|
| 510 |
+
"mustInclude": [
|
| 511 |
+
{
|
| 512 |
+
"id": "ACTION1",
|
| 513 |
+
"desc": "Action 1",
|
| 514 |
+
"weight": 3
|
| 515 |
},
|
| 516 |
+
{
|
| 517 |
+
"id": "ACTION2",
|
| 518 |
+
"desc": "Action 2",
|
| 519 |
+
"weight": 3
|
| 520 |
+
},
|
| 521 |
+
{
|
| 522 |
+
"id": "ACTION3",
|
| 523 |
+
"desc": "Action 3",
|
| 524 |
+
"weight": 4
|
| 525 |
+
}
|
| 526 |
+
],
|
| 527 |
+
"threshold": {
|
| 528 |
+
"minScore": 6,
|
| 529 |
+
"minMustPass": 2
|
| 530 |
+
}
|
| 531 |
+
},
|
| 532 |
+
"evaluation": {
|
| 533 |
+
"tone": "coach_enthusiastic",
|
| 534 |
+
"format": "3_lines"
|
| 535 |
+
}
|
| 536 |
+
},
|
| 537 |
+
"badges": [
|
| 538 |
+
"ACTION"
|
| 539 |
+
],
|
| 540 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes11_plan.png",
|
| 541 |
+
"videoUrl": "https://r2.xamle.sn/videos/v1_2.mp4",
|
| 542 |
+
"videoCaption": "📈 Discipline : La régularité est la clé."
|
| 543 |
+
},
|
| 544 |
+
{
|
| 545 |
+
"dayNumber": 12,
|
| 546 |
+
"title": "Livrable final — Pitch + prochaine étape",
|
| 547 |
+
"lessonText": "Bravo. Aujourd’hui, tu finalises ton pitch et ta prochaine étape.\n\n✅ On veut un pitch clair + une action immédiate (RDV, appel, message, visite).\n\nAprès ça, tu recevras ton récap (pitch deck) automatiquement.",
|
| 548 |
+
"exerciseType": "AUDIO",
|
| 549 |
+
"exercisePrompt": "Envoie ton pitch final en 30–45 secondes + dis ta prochaine étape (ce que tu fais demain).",
|
| 550 |
+
"exerciseCriteria": {
|
| 551 |
+
"version": "1.0",
|
| 552 |
+
"type": "AUDIO",
|
| 553 |
+
"goal": "Clôture du Niveau 1 et Transition",
|
| 554 |
+
"success": {
|
| 555 |
+
"mustInclude": [
|
| 556 |
+
{
|
| 557 |
+
"id": "PITCH",
|
| 558 |
+
"desc": "Pitch complet",
|
| 559 |
+
"weight": 5
|
| 560 |
+
},
|
| 561 |
+
{
|
| 562 |
+
"id": "PROCHAINE_ACTION",
|
| 563 |
+
"desc": "Action future immédiate",
|
| 564 |
+
"weight": 5
|
| 565 |
+
}
|
| 566 |
+
],
|
| 567 |
+
"threshold": {
|
| 568 |
+
"minScore": 5,
|
| 569 |
+
"minMustPass": 1
|
| 570 |
+
}
|
| 571 |
+
},
|
| 572 |
+
"evaluation": {
|
| 573 |
+
"tone": "coach_enthusiastic",
|
| 574 |
+
"format": "3_lines"
|
| 575 |
}
|
| 576 |
+
},
|
| 577 |
+
"badges": [
|
| 578 |
+
"FINISHER"
|
| 579 |
+
],
|
| 580 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes12_success.png"
|
| 581 |
+
}
|
| 582 |
+
]
|
| 583 |
}
|
|
@@ -1,414 +1,436 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
},
|
| 24 |
-
{
|
| 25 |
-
"id": "WHAT",
|
| 26 |
-
"desc": "lan (produit)",
|
| 27 |
-
"weight": 3
|
| 28 |
-
},
|
| 29 |
-
{
|
| 30 |
-
"id": "HOW",
|
| 31 |
-
"desc": "naka (naka ngay jaayé)",
|
| 32 |
-
"weight": 2
|
| 33 |
-
}
|
| 34 |
-
],
|
| 35 |
-
"threshold": {
|
| 36 |
-
"minScore": 5,
|
| 37 |
-
"minMustPass": 2
|
| 38 |
-
}
|
| 39 |
-
},
|
| 40 |
-
"evaluation": {
|
| 41 |
-
"tone": "coach_enthusiastic",
|
| 42 |
-
"format": "3_lines"
|
| 43 |
-
},
|
| 44 |
-
"remediation": {
|
| 45 |
-
"enabled": true,
|
| 46 |
-
"dayNumber": 1.5,
|
| 47 |
-
"message": "Waaw, mu ngi ñëw ! Leeralal ma bu baax ÑAN mooy sa kiliifa te LAN ngay jaay exactement.",
|
| 48 |
-
"hint": "Ex: Damay jaay ___ ñi ___"
|
| 49 |
-
}
|
| 50 |
},
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
"title": "Pexe : Leeral sa kiliifa",
|
| 56 |
-
"lessonText": "Baax na, dañuy gën a leeral. Ngir nga roussi, sa phrase dafa war a leer nàññ. Exemple : 'Damay jaay (LAN) mburu (ÑAN) wa kër yi (NAKA) suba sa tel.'",
|
| 57 |
-
"exercisePrompt": "Réessaiel sa phrase ak ÑAN + LAN + NAKA :",
|
| 58 |
-
"exerciseType": "TEXT",
|
| 59 |
-
"exerciseCriteria": {
|
| 60 |
-
"version": "1.0",
|
| 61 |
-
"type": "TEXT",
|
| 62 |
-
"goal": "Correction simplifiée de l'activité (WOLOF)",
|
| 63 |
-
"success": {
|
| 64 |
-
"mustInclude": [
|
| 65 |
-
{
|
| 66 |
-
"id": "WHO",
|
| 67 |
-
"desc": "ñan",
|
| 68 |
-
"weight": 5
|
| 69 |
-
},
|
| 70 |
-
{
|
| 71 |
-
"id": "WHAT",
|
| 72 |
-
"desc": "lan",
|
| 73 |
-
"weight": 5
|
| 74 |
-
}
|
| 75 |
-
],
|
| 76 |
-
"threshold": {
|
| 77 |
-
"minScore": 5,
|
| 78 |
-
"minMustPass": 1
|
| 79 |
-
}
|
| 80 |
-
},
|
| 81 |
-
"evaluation": {
|
| 82 |
-
"tone": "coach_enthusiastic",
|
| 83 |
-
"format": "3_lines"
|
| 84 |
-
}
|
| 85 |
},
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
},
|
| 88 |
-
{
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
"lessonText": "Kiliifa bi du jënd sa produit, dafay jënd NJARIÑ li mu koy uutal. Du jënd moustiquaire, dafay jënd nelaw bu neex te amul fital.",
|
| 92 |
-
"exercisePrompt": "Yan njariñ la sa kiliifa di am ci yaw ?",
|
| 93 |
-
"exerciseType": "AUDIO",
|
| 94 |
-
"exerciseCriteria": {
|
| 95 |
-
"version": "1.0",
|
| 96 |
-
"type": "AUDIO",
|
| 97 |
-
"goal": "Identifier le bénéfice client (WOLOF)",
|
| 98 |
-
"success": {
|
| 99 |
-
"mustInclude": [
|
| 100 |
-
{
|
| 101 |
-
"id": "BENEFIT",
|
| 102 |
-
"desc": "njariñ (wergu yaram, jamono, mbégte)",
|
| 103 |
-
"weight": 5
|
| 104 |
-
}
|
| 105 |
-
],
|
| 106 |
-
"threshold": {
|
| 107 |
-
"minScore": 5,
|
| 108 |
-
"minMustPass": 1
|
| 109 |
-
}
|
| 110 |
-
},
|
| 111 |
-
"evaluation": {
|
| 112 |
-
"tone": "coach_enthusiastic",
|
| 113 |
-
"format": "3_lines"
|
| 114 |
-
}
|
| 115 |
-
},
|
| 116 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j2_customer_1772065290030.png"
|
| 117 |
},
|
| 118 |
-
{
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
"id": "CHOICE",
|
| 146 |
-
"desc": "tann na benn",
|
| 147 |
-
"weight": 1
|
| 148 |
-
}
|
| 149 |
-
],
|
| 150 |
-
"threshold": {
|
| 151 |
-
"minScore": 1,
|
| 152 |
-
"minMustPass": 1
|
| 153 |
-
}
|
| 154 |
-
}
|
| 155 |
},
|
| 156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 157 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 158 |
{
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
"lessonText": "Saa su nekk nit di jënd, dafa am jafe-jafe bu mu bëgg dakkal. Su kiliifa bi sonnul, du fay xaalis.",
|
| 162 |
-
"exercisePrompt": "Lan mooy jafe-jafe bi nga koy dakkal ?",
|
| 163 |
-
"exerciseType": "TEXT",
|
| 164 |
-
"exerciseCriteria": {
|
| 165 |
-
"version": "1.0",
|
| 166 |
-
"type": "TEXT",
|
| 167 |
-
"goal": "Identifier la douleur client (WOLOF)",
|
| 168 |
-
"success": {
|
| 169 |
-
"mustInclude": [
|
| 170 |
-
{
|
| 171 |
-
"id": "PAIN",
|
| 172 |
-
"desc": "jafe-jafe bu leer",
|
| 173 |
-
"weight": 5
|
| 174 |
-
}
|
| 175 |
-
],
|
| 176 |
-
"threshold": {
|
| 177 |
-
"minScore": 5,
|
| 178 |
-
"minMustPass": 1
|
| 179 |
-
}
|
| 180 |
-
},
|
| 181 |
-
"evaluation": {
|
| 182 |
-
"tone": "coach_enthusiastic",
|
| 183 |
-
"format": "3_lines"
|
| 184 |
-
}
|
| 185 |
-
},
|
| 186 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j4_solution_1772065519438.png"
|
| 187 |
},
|
| 188 |
{
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
"lessonText": "Kañ la sa kiliifa soxla la ? Su bëggé naan ci diggu bëccëk te sa boutique dafa faye, am nga jafe-jafe.",
|
| 192 |
-
"exercisePrompt": "Sa kiliifa dafa la soxla bis bu ne ?",
|
| 193 |
-
"exerciseType": "BUTTON",
|
| 194 |
-
"buttonsJson": [
|
| 195 |
-
{
|
| 196 |
-
"id": "chaque_jour",
|
| 197 |
-
"title": "Bis bu ne"
|
| 198 |
-
},
|
| 199 |
-
{
|
| 200 |
-
"id": "parfois",
|
| 201 |
-
"title": "Léeg léeg / Urgence"
|
| 202 |
-
},
|
| 203 |
-
{
|
| 204 |
-
"id": "rarement",
|
| 205 |
-
"title": "Rarement (Mariage, Fête)"
|
| 206 |
-
}
|
| 207 |
-
],
|
| 208 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j5_differentiation_v2_1772065582075.png"
|
| 209 |
},
|
| 210 |
{
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 240 |
{
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
"lessonText": "Léegi leeralal sa pexe. Bul jëfandiku wax yu seer. Nettoolil ma sa mbir naka kooku maam di dégge.",
|
| 244 |
-
"exercisePrompt": "Leeralal ma sa pexe ci benn phrase :",
|
| 245 |
-
"exerciseType": "TEXT",
|
| 246 |
-
"exerciseCriteria": {
|
| 247 |
-
"version": "1.0",
|
| 248 |
-
"type": "TEXT",
|
| 249 |
-
"goal": "Clarté de l'offre (WOLOF)",
|
| 250 |
-
"success": {
|
| 251 |
-
"mustInclude": [
|
| 252 |
-
{
|
| 253 |
-
"id": "SOLUTION",
|
| 254 |
-
"desc": "pexe bu leer",
|
| 255 |
-
"weight": 5
|
| 256 |
-
}
|
| 257 |
-
],
|
| 258 |
-
"threshold": {
|
| 259 |
-
"minScore": 5,
|
| 260 |
-
"minMustPass": 1
|
| 261 |
-
}
|
| 262 |
-
},
|
| 263 |
-
"evaluation": {
|
| 264 |
-
"tone": "coach_enthusiastic",
|
| 265 |
-
"format": "3_lines"
|
| 266 |
-
}
|
| 267 |
-
},
|
| 268 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j7_channel_sales_v2_1772065752541.png"
|
| 269 |
},
|
| 270 |
{
|
| 271 |
-
|
| 272 |
-
|
| 273 |
-
"lessonText": "Mënoo am lépp. Dangay gaaw ? Walla daggay yomb ? Walla sa mbir moo gën a baax ?",
|
| 274 |
-
"exercisePrompt": "Lan mooy sa doolé ?",
|
| 275 |
-
"exerciseType": "BUTTON",
|
| 276 |
-
"buttonsJson": [
|
| 277 |
-
{
|
| 278 |
-
"id": "rapidite",
|
| 279 |
-
"title": "Dama gën a gaaw"
|
| 280 |
-
},
|
| 281 |
-
{
|
| 282 |
-
"id": "prix",
|
| 283 |
-
"title": "Dama gën a yomb"
|
| 284 |
-
},
|
| 285 |
-
{
|
| 286 |
-
"id": "qualite",
|
| 287 |
-
"title": "Sama mbir moo gën a dëgër"
|
| 288 |
-
}
|
| 289 |
-
],
|
| 290 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j8_trust_1772065782385.png"
|
| 291 |
},
|
| 292 |
{
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
|
| 299 |
-
|
| 300 |
-
|
| 301 |
-
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
|
| 305 |
-
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
|
| 316 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 317 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 318 |
{
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
"lessonText": "Jaay baax na, waaye gagné moo gën. Ñata ngay faye ngir uut benn produit (transport bi ci biir) ?",
|
| 322 |
-
"exercisePrompt": "Bindal ma estimé bi ngay faye ngir benn produit :",
|
| 323 |
-
"exerciseType": "TEXT",
|
| 324 |
-
"exerciseCriteria": {
|
| 325 |
-
"version": "1.0",
|
| 326 |
-
"type": "TEXT",
|
| 327 |
-
"goal": "Prise de conscience des coûts (WOLOF)",
|
| 328 |
-
"success": {
|
| 329 |
-
"mustInclude": [
|
| 330 |
-
{
|
| 331 |
-
"id": "COST",
|
| 332 |
-
"desc": "prix walla lan lay faye",
|
| 333 |
-
"weight": 5
|
| 334 |
-
}
|
| 335 |
-
],
|
| 336 |
-
"threshold": {
|
| 337 |
-
"minScore": 5,
|
| 338 |
-
"minMustPass": 1
|
| 339 |
-
}
|
| 340 |
-
}
|
| 341 |
-
},
|
| 342 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j10_objections_1772065830459.png"
|
| 343 |
},
|
| 344 |
{
|
| 345 |
-
|
| 346 |
-
|
| 347 |
-
"lessonText": "Ci businessu Senegaal, woolu mooy lépp. Naka ngay def ngir kiliifa bi dëgërël sa wax ?",
|
| 348 |
-
"exercisePrompt": "Lan ngay def ngir ñu gën laa woolu ?",
|
| 349 |
-
"exerciseType": "TEXT",
|
| 350 |
-
"exerciseCriteria": {
|
| 351 |
-
"version": "1.0",
|
| 352 |
-
"type": "TEXT",
|
| 353 |
-
"goal": "Argument de confiance (WOLOF)",
|
| 354 |
-
"success": {
|
| 355 |
-
"mustInclude": [
|
| 356 |
-
{
|
| 357 |
-
"id": "TRUST",
|
| 358 |
-
"desc": "garantie walla Wollo",
|
| 359 |
-
"weight": 5
|
| 360 |
-
}
|
| 361 |
-
],
|
| 362 |
-
"threshold": {
|
| 363 |
-
"minScore": 5,
|
| 364 |
-
"minMustPass": 1
|
| 365 |
-
}
|
| 366 |
-
}
|
| 367 |
-
},
|
| 368 |
-
"imageUrl": "https://dummy-storage.com/xaml_t1_j11_plan_1772065894417.png"
|
| 369 |
},
|
| 370 |
{
|
| 371 |
-
|
| 372 |
-
|
| 373 |
-
|
| 374 |
-
|
| 375 |
-
|
| 376 |
-
|
| 377 |
-
|
| 378 |
-
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
|
| 383 |
-
|
| 384 |
-
|
| 385 |
-
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 407 |
},
|
| 408 |
-
|
| 409 |
-
|
| 410 |
-
|
| 411 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 412 |
}
|
| 413 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 414 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T1-WO",
|
| 3 |
+
"title": "Comprendre Son Business (WOLOF)",
|
| 4 |
+
"language": "WOLOF",
|
| 5 |
+
"description": "Apprenez à définir, tester et vendre votre projet en 12 leçons.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Kan, Lan, Naka",
|
| 10 |
+
"lessonText": "Dalal jàmm ci XAMLÉ ! Tey dañuy tàmbale lu yomb. Ñu bari dañuy wax : 'damay def commerce'. Waaye loolu leeralul sa kiliifa dara. Wax ma bu leer : Ñan ngay jàppale, Lan ngay def, te Naka ngay amé xaalis ?",
|
| 11 |
+
"exercisePrompt": "Yónnee ma sa phrase (ex: Damay jaay cere biir quartier bi) :",
|
| 12 |
+
"exerciseType": "AUDIO",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "AUDIO",
|
| 16 |
+
"goal": "Définir la trinité business : ÑAN + LAN + NAKA",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "WHO",
|
| 21 |
+
"desc": "ñan (kiliifa)",
|
| 22 |
+
"weight": 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
},
|
| 24 |
+
{
|
| 25 |
+
"id": "WHAT",
|
| 26 |
+
"desc": "lan (produit)",
|
| 27 |
+
"weight": 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
},
|
| 29 |
+
{
|
| 30 |
+
"id": "HOW",
|
| 31 |
+
"desc": "naka (naka ngay jaayé)",
|
| 32 |
+
"weight": 2
|
| 33 |
+
}
|
| 34 |
+
],
|
| 35 |
+
"threshold": {
|
| 36 |
+
"minScore": 5,
|
| 37 |
+
"minMustPass": 2
|
| 38 |
+
}
|
| 39 |
},
|
| 40 |
+
"evaluation": {
|
| 41 |
+
"tone": "coach_enthusiastic",
|
| 42 |
+
"format": "3_lines"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
},
|
| 44 |
+
"remediation": {
|
| 45 |
+
"enabled": true,
|
| 46 |
+
"dayNumber": 1.5,
|
| 47 |
+
"message": "Waaw, mu ngi ñëw ! Leeralal ma bu baax ÑAN mooy sa kiliifa te LAN ngay jaay exactement.",
|
| 48 |
+
"hint": "Ex: Damay jaay ___ ñi ___"
|
| 49 |
+
}
|
| 50 |
+
},
|
| 51 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes1_activity.png",
|
| 52 |
+
"videoUrl": "https://r2.xamle.sn/videos/v1_1.mp4",
|
| 53 |
+
"videoCaption": "🧠 Mindset : Da ngay war a dëggal sa mbir !"
|
| 54 |
+
},
|
| 55 |
+
{
|
| 56 |
+
"dayNumber": 1.5,
|
| 57 |
+
"title": "Pexe : Leeral sa kiliifa",
|
| 58 |
+
"lessonText": "Baax na, dañuy gën a leeral. Ngir nga roussi, sa phrase dafa war a leer nàññ. Exemple : 'Damay jaay (LAN) mburu (ÑAN) wa kër yi (NAKA) suba sa tel.'",
|
| 59 |
+
"exercisePrompt": "Réessaiel sa phrase ak ÑAN + LAN + NAKA :",
|
| 60 |
+
"exerciseType": "TEXT",
|
| 61 |
+
"exerciseCriteria": {
|
| 62 |
+
"version": "1.0",
|
| 63 |
+
"type": "TEXT",
|
| 64 |
+
"goal": "Correction simplifiée de l'activité (WOLOF)",
|
| 65 |
+
"success": {
|
| 66 |
+
"mustInclude": [
|
| 67 |
+
{
|
| 68 |
+
"id": "WHO",
|
| 69 |
+
"desc": "ñan",
|
| 70 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
},
|
| 72 |
+
{
|
| 73 |
+
"id": "WHAT",
|
| 74 |
+
"desc": "lan",
|
| 75 |
+
"weight": 5
|
| 76 |
+
}
|
| 77 |
+
],
|
| 78 |
+
"threshold": {
|
| 79 |
+
"minScore": 5,
|
| 80 |
+
"minMustPass": 1
|
| 81 |
+
}
|
| 82 |
},
|
| 83 |
+
"evaluation": {
|
| 84 |
+
"tone": "coach_enthusiastic",
|
| 85 |
+
"format": "3_lines"
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes1_5_remediation.png"
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"dayNumber": 2,
|
| 92 |
+
"title": "Njariñ li",
|
| 93 |
+
"lessonText": "Kiliifa bi du jënd sa produit, dafay jënd NJARIÑ li mu koy uutal. Du jënd moustiquaire, dafay jënd nelaw bu neex te amul fital.",
|
| 94 |
+
"exercisePrompt": "Yan njariñ la sa kiliifa di am ci yaw ?",
|
| 95 |
+
"exerciseType": "AUDIO",
|
| 96 |
+
"exerciseCriteria": {
|
| 97 |
+
"version": "1.0",
|
| 98 |
+
"type": "AUDIO",
|
| 99 |
+
"goal": "Identifier le bénéfice client (WOLOF)",
|
| 100 |
+
"success": {
|
| 101 |
+
"mustInclude": [
|
| 102 |
+
{
|
| 103 |
+
"id": "BENEFIT",
|
| 104 |
+
"desc": "njariñ (wergu yaram, jamono, mbégte)",
|
| 105 |
+
"weight": 5
|
| 106 |
+
}
|
| 107 |
+
],
|
| 108 |
+
"threshold": {
|
| 109 |
+
"minScore": 5,
|
| 110 |
+
"minMustPass": 1
|
| 111 |
+
}
|
| 112 |
+
},
|
| 113 |
+
"evaluation": {
|
| 114 |
+
"tone": "coach_enthusiastic",
|
| 115 |
+
"format": "3_lines"
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes2_customer.png",
|
| 119 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_1.mp4",
|
| 120 |
+
"videoCaption": "👥 Segments : Ñoom ñan ñoo lay faye ?"
|
| 121 |
+
},
|
| 122 |
+
{
|
| 123 |
+
"dayNumber": 3,
|
| 124 |
+
"title": "Sa Kiliifa bu mag",
|
| 125 |
+
"lessonText": "Jaay ñépp = jaayul kën. Tannal benn kiliifa bu mag. Jigéen ñi ? Ndaw ñi ? Boutiques yi ?",
|
| 126 |
+
"exercisePrompt": "Tannal sa kiliifa bu mag ci yii :",
|
| 127 |
+
"exerciseType": "BUTTON",
|
| 128 |
+
"buttonsJson": [
|
| 129 |
{
|
| 130 |
+
"id": "particuliers",
|
| 131 |
+
"title": "Nit ñi / Kër yi"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
},
|
| 133 |
{
|
| 134 |
+
"id": "boutiques",
|
| 135 |
+
"title": "Boutiques / Grossistes"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
},
|
| 137 |
{
|
| 138 |
+
"id": "entreprises",
|
| 139 |
+
"title": "Entreprises / L'État"
|
| 140 |
+
}
|
| 141 |
+
],
|
| 142 |
+
"exerciseCriteria": {
|
| 143 |
+
"version": "1.0",
|
| 144 |
+
"type": "BUTTON",
|
| 145 |
+
"goal": "Segmentation client (WOLOF)",
|
| 146 |
+
"success": {
|
| 147 |
+
"mustInclude": [
|
| 148 |
+
{
|
| 149 |
+
"id": "CHOICE",
|
| 150 |
+
"desc": "tann na benn",
|
| 151 |
+
"weight": 1
|
| 152 |
+
}
|
| 153 |
+
],
|
| 154 |
+
"threshold": {
|
| 155 |
+
"minScore": 1,
|
| 156 |
+
"minMustPass": 1
|
| 157 |
+
}
|
| 158 |
+
}
|
| 159 |
+
},
|
| 160 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes3_problem.png",
|
| 161 |
+
"videoUrl": "https://r2.xamle.sn/videos/v2_1.mp4",
|
| 162 |
+
"videoCaption": "❓ Problème : Lan mooy sonnal sa kiliifa ?"
|
| 163 |
+
},
|
| 164 |
+
{
|
| 165 |
+
"dayNumber": 4,
|
| 166 |
+
"title": "Jafe-jafe bi",
|
| 167 |
+
"lessonText": "Saa su nekk nit di jënd, dafa am jafe-jafe bu mu bëgg dakkal. Su kiliifa bi sonnul, du fay xaalis.",
|
| 168 |
+
"exercisePrompt": "Lan mooy jafe-jafe bi nga koy dakkal ?",
|
| 169 |
+
"exerciseType": "TEXT",
|
| 170 |
+
"exerciseCriteria": {
|
| 171 |
+
"version": "1.0",
|
| 172 |
+
"type": "TEXT",
|
| 173 |
+
"goal": "Identifier la douleur client (WOLOF)",
|
| 174 |
+
"success": {
|
| 175 |
+
"mustInclude": [
|
| 176 |
+
{
|
| 177 |
+
"id": "PAIN",
|
| 178 |
+
"desc": "jafe-jafe bu leer",
|
| 179 |
+
"weight": 5
|
| 180 |
+
}
|
| 181 |
+
],
|
| 182 |
+
"threshold": {
|
| 183 |
+
"minScore": 5,
|
| 184 |
+
"minMustPass": 1
|
| 185 |
+
}
|
| 186 |
},
|
| 187 |
+
"evaluation": {
|
| 188 |
+
"tone": "coach_enthusiastic",
|
| 189 |
+
"format": "3_lines"
|
| 190 |
+
}
|
| 191 |
+
},
|
| 192 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes4_solution.png",
|
| 193 |
+
"videoUrl": "https://r2.xamle.sn/videos/v3_1.mp4",
|
| 194 |
+
"videoCaption": "💡 Solutions : Naka ngay fajjé jafe-jafe bi ?"
|
| 195 |
+
},
|
| 196 |
+
{
|
| 197 |
+
"dayNumber": 5,
|
| 198 |
+
"title": "Jamono bi",
|
| 199 |
+
"lessonText": "Kañ la sa kiliifa soxla la ? Su bëggé naan ci diggu bëccëk te sa boutique dafa faye, am nga jafe-jafe.",
|
| 200 |
+
"exercisePrompt": "Sa kiliifa dafa la soxla bis bu ne ?",
|
| 201 |
+
"exerciseType": "BUTTON",
|
| 202 |
+
"buttonsJson": [
|
| 203 |
{
|
| 204 |
+
"id": "chaque_jour",
|
| 205 |
+
"title": "Bis bu ne"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
},
|
| 207 |
{
|
| 208 |
+
"id": "parfois",
|
| 209 |
+
"title": "Léeg léeg / Urgence"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 210 |
},
|
| 211 |
{
|
| 212 |
+
"id": "rarement",
|
| 213 |
+
"title": "Rarement (Mariage, Fête)"
|
| 214 |
+
}
|
| 215 |
+
],
|
| 216 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes5_differentiation.png",
|
| 217 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_2.mp4",
|
| 218 |
+
"videoCaption": "🎁 Valeur : Lan moo la gënal ci marché bi ?"
|
| 219 |
+
},
|
| 220 |
+
{
|
| 221 |
+
"dayNumber": 6,
|
| 222 |
+
"title": "Li fi amoon",
|
| 223 |
+
"lessonText": "Lata yaw di ñëw, naka la doon def ? Da doon jënd ci dëkkëndo bi walla da doon faye gën a jar ?",
|
| 224 |
+
"exercisePrompt": "Waxal ma benn exemple lu sa kiliifa doon def lata yaw :",
|
| 225 |
+
"exerciseType": "TEXT",
|
| 226 |
+
"exerciseCriteria": {
|
| 227 |
+
"version": "1.0",
|
| 228 |
+
"type": "TEXT",
|
| 229 |
+
"goal": "Connaître la concurrence (WOLOF)",
|
| 230 |
+
"success": {
|
| 231 |
+
"mustInclude": [
|
| 232 |
+
{
|
| 233 |
+
"id": "COMPETITOR",
|
| 234 |
+
"desc": "pexe bu kiliifa bi amoon",
|
| 235 |
+
"weight": 5
|
| 236 |
+
}
|
| 237 |
+
],
|
| 238 |
+
"threshold": {
|
| 239 |
+
"minScore": 5,
|
| 240 |
+
"minMustPass": 1
|
| 241 |
+
}
|
| 242 |
},
|
| 243 |
+
"evaluation": {
|
| 244 |
+
"tone": "coach_enthusiastic",
|
| 245 |
+
"format": "3_lines"
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes6_pricing.png",
|
| 249 |
+
"videoUrl": "https://r2.xamle.sn/videos/v6_1.mp4",
|
| 250 |
+
"videoCaption": "💰 Prix : Naka ngay tànnee sa prix ?"
|
| 251 |
+
},
|
| 252 |
+
{
|
| 253 |
+
"dayNumber": 7,
|
| 254 |
+
"title": "Sa Pexe",
|
| 255 |
+
"lessonText": "Léegi leeralal sa pexe. Bul jëfandiku wax yu seer. Nettoolil ma sa mbir naka kooku maam di dégge.",
|
| 256 |
+
"exercisePrompt": "Leeralal ma sa pexe ci benn phrase :",
|
| 257 |
+
"exerciseType": "TEXT",
|
| 258 |
+
"exerciseCriteria": {
|
| 259 |
+
"version": "1.0",
|
| 260 |
+
"type": "TEXT",
|
| 261 |
+
"goal": "Clarté de l'offre (WOLOF)",
|
| 262 |
+
"success": {
|
| 263 |
+
"mustInclude": [
|
| 264 |
+
{
|
| 265 |
+
"id": "SOLUTION",
|
| 266 |
+
"desc": "pexe bu leer",
|
| 267 |
+
"weight": 5
|
| 268 |
+
}
|
| 269 |
+
],
|
| 270 |
+
"threshold": {
|
| 271 |
+
"minScore": 5,
|
| 272 |
+
"minMustPass": 1
|
| 273 |
+
}
|
| 274 |
+
},
|
| 275 |
+
"evaluation": {
|
| 276 |
+
"tone": "coach_enthusiastic",
|
| 277 |
+
"format": "3_lines"
|
| 278 |
+
}
|
| 279 |
+
},
|
| 280 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes7_channel.png",
|
| 281 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_3.mp4",
|
| 282 |
+
"videoCaption": "🚀 Canaux : Naka ngay jot sa kiliifa ?"
|
| 283 |
+
},
|
| 284 |
+
{
|
| 285 |
+
"dayNumber": 8,
|
| 286 |
+
"title": "Sa Doolé",
|
| 287 |
+
"lessonText": "Mënoo am lépp. Dangay gaaw ? Walla daggay yomb ? Walla sa mbir moo gën a baax ?",
|
| 288 |
+
"exercisePrompt": "Lan mooy sa doolé ?",
|
| 289 |
+
"exerciseType": "BUTTON",
|
| 290 |
+
"buttonsJson": [
|
| 291 |
{
|
| 292 |
+
"id": "rapidite",
|
| 293 |
+
"title": "Dama gën a gaaw"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 294 |
},
|
| 295 |
{
|
| 296 |
+
"id": "prix",
|
| 297 |
+
"title": "Dama gën a yomb"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 298 |
},
|
| 299 |
{
|
| 300 |
+
"id": "qualite",
|
| 301 |
+
"title": "Sama mbir moo gën a dëgër"
|
| 302 |
+
}
|
| 303 |
+
],
|
| 304 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes8_trust.png",
|
| 305 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_2.mp4",
|
| 306 |
+
"videoCaption": "🤝 Confiance : Naka ngay dëggal sa digganté ak kiliifa ?"
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"dayNumber": 9,
|
| 310 |
+
"title": "Natt bi",
|
| 311 |
+
"lessonText": "Demal ci terrain bi. Waxal ak 3 nit. Laaj leen : 'Su ma jaayé lii ci prix bii, daggay jënd ?'",
|
| 312 |
+
"exercisePrompt": "Ñata nit ñoo la wax WAAW ? (Bindal chiffre bi rek)",
|
| 313 |
+
"exerciseType": "TEXT",
|
| 314 |
+
"exerciseCriteria": {
|
| 315 |
+
"version": "1.0",
|
| 316 |
+
"type": "TEXT",
|
| 317 |
+
"goal": "Validation terrain (WOLOF)",
|
| 318 |
+
"success": {
|
| 319 |
+
"mustInclude": [
|
| 320 |
+
{
|
| 321 |
+
"id": "NUMBER",
|
| 322 |
+
"desc": "chiffre diggenté 0 ak 3",
|
| 323 |
+
"weight": 5
|
| 324 |
+
}
|
| 325 |
+
],
|
| 326 |
+
"threshold": {
|
| 327 |
+
"minScore": 5,
|
| 328 |
+
"minMustPass": 1
|
| 329 |
+
}
|
| 330 |
+
}
|
| 331 |
+
},
|
| 332 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes9_pitch.png",
|
| 333 |
+
"videoUrl": "https://r2.xamle.sn/videos/v3_2.mp4",
|
| 334 |
+
"videoCaption": "🛠️ Prototype : Tàmbalil ak li nga am léegi !"
|
| 335 |
+
},
|
| 336 |
+
{
|
| 337 |
+
"dayNumber": 10,
|
| 338 |
+
"title": "Li ngay faye",
|
| 339 |
+
"lessonText": "Jaay baax na, waaye gagné moo gën. Ñata ngay faye ngir uut benn produit (transport bi ci biir) ?",
|
| 340 |
+
"exercisePrompt": "Bindal ma estimé bi ngay faye ngir benn produit :",
|
| 341 |
+
"exerciseType": "TEXT",
|
| 342 |
+
"exerciseCriteria": {
|
| 343 |
+
"version": "1.0",
|
| 344 |
+
"type": "TEXT",
|
| 345 |
+
"goal": "Prise de conscience des coûts (WOLOF)",
|
| 346 |
+
"success": {
|
| 347 |
+
"mustInclude": [
|
| 348 |
+
{
|
| 349 |
+
"id": "COST",
|
| 350 |
+
"desc": "prix walla lan lay faye",
|
| 351 |
+
"weight": 5
|
| 352 |
+
}
|
| 353 |
+
],
|
| 354 |
+
"threshold": {
|
| 355 |
+
"minScore": 5,
|
| 356 |
+
"minMustPass": 1
|
| 357 |
+
}
|
| 358 |
+
}
|
| 359 |
+
},
|
| 360 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes10_objections.png",
|
| 361 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_3.mp4",
|
| 362 |
+
"videoCaption": "📢 Feedback : Écouter pour s’améliorer."
|
| 363 |
+
},
|
| 364 |
+
{
|
| 365 |
+
"dayNumber": 11,
|
| 366 |
+
"title": "Kooluté",
|
| 367 |
+
"lessonText": "Ci businessu Senegaal, woolu mooy lépp. Naka ngay def ngir kiliifa bi dëgërël sa wax ?",
|
| 368 |
+
"exercisePrompt": "Lan ngay def ngir ñu gën laa woolu ?",
|
| 369 |
+
"exerciseType": "TEXT",
|
| 370 |
+
"exerciseCriteria": {
|
| 371 |
+
"version": "1.0",
|
| 372 |
+
"type": "TEXT",
|
| 373 |
+
"goal": "Argument de confiance (WOLOF)",
|
| 374 |
+
"success": {
|
| 375 |
+
"mustInclude": [
|
| 376 |
+
{
|
| 377 |
+
"id": "TRUST",
|
| 378 |
+
"desc": "garantie walla Wollo",
|
| 379 |
+
"weight": 5
|
| 380 |
+
}
|
| 381 |
+
],
|
| 382 |
+
"threshold": {
|
| 383 |
+
"minScore": 5,
|
| 384 |
+
"minMustPass": 1
|
| 385 |
+
}
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes11_plan.png",
|
| 389 |
+
"videoUrl": "https://r2.xamle.sn/videos/v1_2.mp4",
|
| 390 |
+
"videoCaption": "📈 Discipline : La régularité est la clé."
|
| 391 |
+
},
|
| 392 |
+
{
|
| 393 |
+
"dayNumber": 12,
|
| 394 |
+
"title": "Mini Pitch",
|
| 395 |
+
"lessonText": "Félicitations ! Mat nga Niveau 1. Léegi, wone ko. Waxal sa pitch bi ci 30 seconde.",
|
| 396 |
+
"exercisePrompt": "Yónnee ma audio : Maangi tudd [Nom], damay jaay [Lan] ñi [Ñan] ngir dakkal [Jafe-jafe].",
|
| 397 |
+
"exerciseType": "AUDIO",
|
| 398 |
+
"exerciseCriteria": {
|
| 399 |
+
"version": "1.0",
|
| 400 |
+
"type": "AUDIO",
|
| 401 |
+
"goal": "Pitch final Niveau 1 (WOLOF)",
|
| 402 |
+
"success": {
|
| 403 |
+
"mustInclude": [
|
| 404 |
+
{
|
| 405 |
+
"id": "WHO",
|
| 406 |
+
"desc": "ñan",
|
| 407 |
+
"weight": 3
|
| 408 |
+
},
|
| 409 |
+
{
|
| 410 |
+
"id": "WHAT",
|
| 411 |
+
"desc": "lan",
|
| 412 |
+
"weight": 3
|
| 413 |
},
|
| 414 |
+
{
|
| 415 |
+
"id": "WHY",
|
| 416 |
+
"desc": "lu tax",
|
| 417 |
+
"weight": 4
|
| 418 |
+
}
|
| 419 |
+
],
|
| 420 |
+
"threshold": {
|
| 421 |
+
"minScore": 7,
|
| 422 |
+
"minMustPass": 2
|
| 423 |
+
}
|
| 424 |
+
},
|
| 425 |
+
"evaluation": {
|
| 426 |
+
"tone": "coach_enthusiastic",
|
| 427 |
+
"format": "3_lines"
|
| 428 |
}
|
| 429 |
+
},
|
| 430 |
+
"badges": [
|
| 431 |
+
"B_MODULE_1_OK"
|
| 432 |
+
],
|
| 433 |
+
"imageUrl": "https://pub-e770286d75114b3691f9142d5e451a41.r2.dev/images/t1/bes12_success.png"
|
| 434 |
+
}
|
| 435 |
+
]
|
| 436 |
}
|
|
@@ -1,196 +1,202 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
"lessonText": "C'est plus facile de vendre à un client qui te connaît déjà. Est-ce que ton client achète une seule fois (ex: un lit) ou souvent (ex: du riz) ?",
|
| 40 |
-
"exercisePrompt": "Ton client revient-il te voir tous les mois ?",
|
| 41 |
-
"exerciseType": "BUTTON",
|
| 42 |
-
"buttonsJson": [
|
| 43 |
-
{
|
| 44 |
-
"id": "souvent",
|
| 45 |
-
"title": "Oui, souvent"
|
| 46 |
-
},
|
| 47 |
-
{
|
| 48 |
-
"id": "rarement",
|
| 49 |
-
"title": "Rarement / Une fois"
|
| 50 |
-
}
|
| 51 |
-
]
|
| 52 |
},
|
| 53 |
{
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
|
|
|
| 76 |
}
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
"
|
| 80 |
-
"
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
}
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
"
|
| 105 |
-
"
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
|
|
|
|
|
|
| 126 |
}
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
"
|
| 130 |
-
"
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
}
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
"
|
| 155 |
-
"
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
"threshold": {
|
| 182 |
-
"minScore": 6,
|
| 183 |
-
"minMustPass": 2
|
| 184 |
-
}
|
| 185 |
-
},
|
| 186 |
-
"evaluation": {
|
| 187 |
-
"tone": "coach_enthusiastic",
|
| 188 |
-
"format": "3_lines"
|
| 189 |
-
}
|
| 190 |
},
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
}
|
| 195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T2-FR",
|
| 3 |
+
"title": "Structurer Son Modèle Économique (FR)",
|
| 4 |
+
"language": "FR",
|
| 5 |
+
"description": "Apprenez à calculer votre rentabilité et à gérer votre argent comme un pro.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "D'où vient l'argent ?",
|
| 10 |
+
"lessonText": "Bienvenue au Niveau 2 ! Aujourd'hui, on liste tes sources de revenus. Est-ce que tu vends un produit, un service, ou les deux ?",
|
| 11 |
+
"exercisePrompt": "Quelles sont tes 2 sources de revenus principales ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Identifier les flux de revenus",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "REVENUE",
|
| 21 |
+
"desc": "au moins une source de revenu claire",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_4.mp4",
|
| 36 |
+
"videoCaption": "💵 Revenus : Fan la xaalis bi di jóge ?"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"dayNumber": 2,
|
| 40 |
+
"title": "Vendre une fois vs plusieurs",
|
| 41 |
+
"lessonText": "C'est plus facile de vendre à un client qui te connaît déjà. Est-ce que ton client achète une seule fois (ex: un lit) ou souvent (ex: du riz) ?",
|
| 42 |
+
"exercisePrompt": "Ton client revient-il te voir tous les mois ?",
|
| 43 |
+
"exerciseType": "BUTTON",
|
| 44 |
+
"buttonsJson": [
|
| 45 |
{
|
| 46 |
+
"id": "souvent",
|
| 47 |
+
"title": "Oui, souvent"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
},
|
| 49 |
{
|
| 50 |
+
"id": "rarement",
|
| 51 |
+
"title": "Rarement / Une fois"
|
| 52 |
+
}
|
| 53 |
+
],
|
| 54 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_1.mp4",
|
| 55 |
+
"videoCaption": "💎 Fidélité : Teal sa kiliifa yi nekk fi !"
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"dayNumber": 3,
|
| 59 |
+
"title": "Le Prix Juste",
|
| 60 |
+
"lessonText": "Ton prix = Coût de revient + Marge. Si tu oublies tes frais de transport, tu travailles gratuitement.",
|
| 61 |
+
"exercisePrompt": "Comment as-tu fixé ton prix actuel ?",
|
| 62 |
+
"exerciseType": "TEXT",
|
| 63 |
+
"exerciseCriteria": {
|
| 64 |
+
"version": "1.0",
|
| 65 |
+
"type": "TEXT",
|
| 66 |
+
"goal": "Comprendre la fixation du prix",
|
| 67 |
+
"success": {
|
| 68 |
+
"mustInclude": [
|
| 69 |
+
{
|
| 70 |
+
"id": "METHOD",
|
| 71 |
+
"desc": "description d'un calcul ou comparaison",
|
| 72 |
+
"weight": 5
|
| 73 |
}
|
| 74 |
+
],
|
| 75 |
+
"threshold": {
|
| 76 |
+
"minScore": 5,
|
| 77 |
+
"minMustPass": 1
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"dayNumber": 4,
|
| 84 |
+
"title": "La Marge",
|
| 85 |
+
"lessonText": "La marge, c'est ce qui te reste dans la poche après avoir payé TOUS les frais. Sans marge, ton business meurt.",
|
| 86 |
+
"exercisePrompt": "Sur 1000 FCFA vendus, combien te reste-t-il après avoir payé la marchandise ?",
|
| 87 |
+
"exerciseType": "TEXT",
|
| 88 |
+
"exerciseCriteria": {
|
| 89 |
+
"version": "1.0",
|
| 90 |
+
"type": "TEXT",
|
| 91 |
+
"goal": "Calcul de marge brute",
|
| 92 |
+
"success": {
|
| 93 |
+
"mustInclude": [
|
| 94 |
+
{
|
| 95 |
+
"id": "MARGIN",
|
| 96 |
+
"desc": "un montant ou pourcentage",
|
| 97 |
+
"weight": 5
|
| 98 |
}
|
| 99 |
+
],
|
| 100 |
+
"threshold": {
|
| 101 |
+
"minScore": 5,
|
| 102 |
+
"minMustPass": 1
|
| 103 |
+
}
|
| 104 |
+
}
|
| 105 |
+
},
|
| 106 |
+
"videoUrl": "https://r2.xamle.sn/videos/v5_1.mp4",
|
| 107 |
+
"videoCaption": "📊 Marge : Xoolal li ngay gagne ci dëgg-dëgg."
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"dayNumber": 5,
|
| 111 |
+
"title": "Le Point Mort",
|
| 112 |
+
"lessonText": "Combien de produits dois-tu vendre par jour juste pour payer ton loyer et tes charges ?",
|
| 113 |
+
"exercisePrompt": "Donne un chiffre : Combien de ventes minimum par jour ?",
|
| 114 |
+
"exerciseType": "TEXT",
|
| 115 |
+
"exerciseCriteria": {
|
| 116 |
+
"version": "1.0",
|
| 117 |
+
"type": "TEXT",
|
| 118 |
+
"goal": "Seuil de rentabilité",
|
| 119 |
+
"success": {
|
| 120 |
+
"mustInclude": [
|
| 121 |
+
{
|
| 122 |
+
"id": "BREAKEVEN",
|
| 123 |
+
"desc": "un chiffre réaliste",
|
| 124 |
+
"weight": 5
|
| 125 |
}
|
| 126 |
+
],
|
| 127 |
+
"threshold": {
|
| 128 |
+
"minScore": 5,
|
| 129 |
+
"minMustPass": 1
|
| 130 |
+
}
|
| 131 |
+
}
|
| 132 |
+
}
|
| 133 |
+
},
|
| 134 |
+
{
|
| 135 |
+
"dayNumber": 6,
|
| 136 |
+
"title": "Investir vs Dépenser",
|
| 137 |
+
"lessonText": "Acheter une machine pour produire plus est un investissement. Acheter un nouveau téléphone perso est une dépense.",
|
| 138 |
+
"exercisePrompt": "Quel serait ton prochain gros investissement business ?",
|
| 139 |
+
"exerciseType": "TEXT",
|
| 140 |
+
"exerciseCriteria": {
|
| 141 |
+
"version": "1.0",
|
| 142 |
+
"type": "TEXT",
|
| 143 |
+
"goal": "Capacité d'investissement",
|
| 144 |
+
"success": {
|
| 145 |
+
"mustInclude": [
|
| 146 |
+
{
|
| 147 |
+
"id": "INVEST",
|
| 148 |
+
"desc": "un actif productif",
|
| 149 |
+
"weight": 5
|
| 150 |
}
|
| 151 |
+
],
|
| 152 |
+
"threshold": {
|
| 153 |
+
"minScore": 5,
|
| 154 |
+
"minMustPass": 1
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"dayNumber": 7,
|
| 161 |
+
"title": "Le Petit Plan Financier",
|
| 162 |
+
"lessonText": "Bravo ! Tu maîtrises tes chiffres. Envoie-moi un audio pour résumer : Mon prix est de..., ma marge est de..., mon objectif est de vendre X par jour.",
|
| 163 |
+
"exercisePrompt": "Envoie ton résumé financier par audio :",
|
| 164 |
+
"exerciseType": "AUDIO",
|
| 165 |
+
"exerciseCriteria": {
|
| 166 |
+
"version": "1.0",
|
| 167 |
+
"type": "AUDIO",
|
| 168 |
+
"goal": "Synthèse financière Niveau 2",
|
| 169 |
+
"success": {
|
| 170 |
+
"mustInclude": [
|
| 171 |
+
{
|
| 172 |
+
"id": "PRICE",
|
| 173 |
+
"desc": "prix mentionné",
|
| 174 |
+
"weight": 3
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"id": "MARGIN",
|
| 178 |
+
"desc": "marge mentionnée",
|
| 179 |
+
"weight": 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
},
|
| 181 |
+
{
|
| 182 |
+
"id": "VOLUME",
|
| 183 |
+
"desc": "objectif de vente",
|
| 184 |
+
"weight": 4
|
| 185 |
+
}
|
| 186 |
+
],
|
| 187 |
+
"threshold": {
|
| 188 |
+
"minScore": 6,
|
| 189 |
+
"minMustPass": 2
|
| 190 |
+
}
|
| 191 |
+
},
|
| 192 |
+
"evaluation": {
|
| 193 |
+
"tone": "coach_enthusiastic",
|
| 194 |
+
"format": "3_lines"
|
| 195 |
}
|
| 196 |
+
},
|
| 197 |
+
"badges": [
|
| 198 |
+
"B_MODULE_2_OK"
|
| 199 |
+
]
|
| 200 |
+
}
|
| 201 |
+
]
|
| 202 |
}
|
|
@@ -1,196 +1,202 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
"lessonText": "Dafa gën a yomb nga jaayaat kiliifa bu la xam ba pare. Ndax sa kiliifa dafay jëndaat bis bu ne walla dafay jënd benn yoon rekk ?",
|
| 40 |
-
"exercisePrompt": "Sa kiliifa dafay dellu si léeg léeg ?",
|
| 41 |
-
"exerciseType": "BUTTON",
|
| 42 |
-
"buttonsJson": [
|
| 43 |
-
{
|
| 44 |
-
"id": "souvent",
|
| 45 |
-
"title": "Waaw, saa su ne"
|
| 46 |
-
},
|
| 47 |
-
{
|
| 48 |
-
"id": "rarement",
|
| 49 |
-
"title": "Déet, benn yoon rekk"
|
| 50 |
-
}
|
| 51 |
-
]
|
| 52 |
},
|
| 53 |
{
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
|
|
|
| 76 |
}
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
"
|
| 80 |
-
"
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
}
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
"
|
| 105 |
-
"
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
|
|
|
|
|
|
| 126 |
}
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
"
|
| 130 |
-
"
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
}
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
"
|
| 155 |
-
"
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
"threshold": {
|
| 182 |
-
"minScore": 6,
|
| 183 |
-
"minMustPass": 2
|
| 184 |
-
}
|
| 185 |
-
},
|
| 186 |
-
"evaluation": {
|
| 187 |
-
"tone": "coach_enthusiastic",
|
| 188 |
-
"format": "3_lines"
|
| 189 |
-
}
|
| 190 |
},
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
}
|
| 195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T2-WO",
|
| 3 |
+
"title": "Structurer Son Modèle Économique (WOLOF)",
|
| 4 |
+
"language": "WOLOF",
|
| 5 |
+
"description": "Apprenez à calculer votre rentabilité et à gérer votre argent comme un pro.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Fan la xaalis di jóge ?",
|
| 10 |
+
"lessonText": "Dalal jàmm ci Niveau 2 ! Tey dañuy lim fan la sa xaalis di dugge. Ndax dangay jaay produit, walla service, walla ñari yépp ?",
|
| 11 |
+
"exercisePrompt": "Fan la sa xaalis gën a dugge (lim ma ñaari mbir) ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Identifier les flux de revenus (WOLOF)",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "REVENUE",
|
| 21 |
+
"desc": "li koy uutal xaalis bu leer",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_4.mp4",
|
| 36 |
+
"videoCaption": "💵 Revenus : Fan la xaalis bi di jóge ?"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"dayNumber": 2,
|
| 40 |
+
"title": "Jaay benn yoon walla yu bari",
|
| 41 |
+
"lessonText": "Dafa gën a yomb nga jaayaat kiliifa bu la xam ba pare. Ndax sa kiliifa dafay jëndaat bis bu ne walla dafay jënd benn yoon rekk ?",
|
| 42 |
+
"exercisePrompt": "Sa kiliifa dafay dellu si léeg léeg ?",
|
| 43 |
+
"exerciseType": "BUTTON",
|
| 44 |
+
"buttonsJson": [
|
| 45 |
{
|
| 46 |
+
"id": "souvent",
|
| 47 |
+
"title": "Waaw, saa su ne"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
},
|
| 49 |
{
|
| 50 |
+
"id": "rarement",
|
| 51 |
+
"title": "Déet, benn yoon rekk"
|
| 52 |
+
}
|
| 53 |
+
],
|
| 54 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_1.mp4",
|
| 55 |
+
"videoCaption": "💎 Fidélité : Teal sa kiliifa yi nekk fi !"
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"dayNumber": 3,
|
| 59 |
+
"title": "Prix bu dëggu",
|
| 60 |
+
"lessonText": "Sa prix = Li nga faye + Sa njariñ (marge). Su nga fatte li nga faye ci transport walla courant, dangay liggéeyal keneen.",
|
| 61 |
+
"exercisePrompt": "Naka nga faye sa prix tey ?",
|
| 62 |
+
"exerciseType": "TEXT",
|
| 63 |
+
"exerciseCriteria": {
|
| 64 |
+
"version": "1.0",
|
| 65 |
+
"type": "TEXT",
|
| 66 |
+
"goal": "Comprendre la fixation du prix (WOLOF)",
|
| 67 |
+
"success": {
|
| 68 |
+
"mustInclude": [
|
| 69 |
+
{
|
| 70 |
+
"id": "METHOD",
|
| 71 |
+
"desc": "nu la limé prix bi",
|
| 72 |
+
"weight": 5
|
| 73 |
}
|
| 74 |
+
],
|
| 75 |
+
"threshold": {
|
| 76 |
+
"minScore": 5,
|
| 77 |
+
"minMustPass": 1
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"dayNumber": 4,
|
| 84 |
+
"title": "Sa Marge",
|
| 85 |
+
"lessonText": "Marge bi, mooy li la koy des ci sa poos su nga faye faye yi ba pare. Su amul marge, sa business du wéy.",
|
| 86 |
+
"exercisePrompt": "Su nga jaayé 1000 FCFA, ñata moo la koy des su nga faye marchandise bi ?",
|
| 87 |
+
"exerciseType": "TEXT",
|
| 88 |
+
"exerciseCriteria": {
|
| 89 |
+
"version": "1.0",
|
| 90 |
+
"type": "TEXT",
|
| 91 |
+
"goal": "Calcul de marge brute (WOLOF)",
|
| 92 |
+
"success": {
|
| 93 |
+
"mustInclude": [
|
| 94 |
+
{
|
| 95 |
+
"id": "MARGIN",
|
| 96 |
+
"desc": "montant walla pourcentage bu leer",
|
| 97 |
+
"weight": 5
|
| 98 |
}
|
| 99 |
+
],
|
| 100 |
+
"threshold": {
|
| 101 |
+
"minScore": 5,
|
| 102 |
+
"minMustPass": 1
|
| 103 |
+
}
|
| 104 |
+
}
|
| 105 |
+
},
|
| 106 |
+
"videoUrl": "https://r2.xamle.sn/videos/v5_1.mp4",
|
| 107 |
+
"videoCaption": "📊 Marge : Xoolal li ngay gagne ci dëgg-dëgg."
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"dayNumber": 5,
|
| 111 |
+
"title": "Point Mort",
|
| 112 |
+
"lessonText": "Ñata produit nga war a jaay bis bu ne ngir dakkal sa looyer ak sa faye yi ?",
|
| 113 |
+
"exercisePrompt": "Bindal ma benn chiffre : Ñata nga war a jaay minimum bis bu ne ?",
|
| 114 |
+
"exerciseType": "TEXT",
|
| 115 |
+
"exerciseCriteria": {
|
| 116 |
+
"version": "1.0",
|
| 117 |
+
"type": "TEXT",
|
| 118 |
+
"goal": "Seuil de rentabilité (WOLOF)",
|
| 119 |
+
"success": {
|
| 120 |
+
"mustInclude": [
|
| 121 |
+
{
|
| 122 |
+
"id": "BREAKEVEN",
|
| 123 |
+
"desc": "chiffre bu leer",
|
| 124 |
+
"weight": 5
|
| 125 |
}
|
| 126 |
+
],
|
| 127 |
+
"threshold": {
|
| 128 |
+
"minScore": 5,
|
| 129 |
+
"minMustPass": 1
|
| 130 |
+
}
|
| 131 |
+
}
|
| 132 |
+
}
|
| 133 |
+
},
|
| 134 |
+
{
|
| 135 |
+
"dayNumber": 6,
|
| 136 |
+
"title": "Investir walla Faye",
|
| 137 |
+
"lessonText": "Jënd masin ngir liggéey mu gën a gaaw mooy investir. Jënd portabel bu bees ngir sa bopp, loolu faye la.",
|
| 138 |
+
"exercisePrompt": "Lan mooy sa prochain gros investissement ci sa business ?",
|
| 139 |
+
"exerciseType": "TEXT",
|
| 140 |
+
"exerciseCriteria": {
|
| 141 |
+
"version": "1.0",
|
| 142 |
+
"type": "TEXT",
|
| 143 |
+
"goal": "Capacité d'investissement (WOLOF)",
|
| 144 |
+
"success": {
|
| 145 |
+
"mustInclude": [
|
| 146 |
+
{
|
| 147 |
+
"id": "INVEST",
|
| 148 |
+
"desc": "mbir mur koy gën a uutal xaalis",
|
| 149 |
+
"weight": 5
|
| 150 |
}
|
| 151 |
+
],
|
| 152 |
+
"threshold": {
|
| 153 |
+
"minScore": 5,
|
| 154 |
+
"minMustPass": 1
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"dayNumber": 7,
|
| 161 |
+
"title": "Sa Plan Financier",
|
| 162 |
+
"lessonText": "Baax na ! Xam nga sa chiffre yi. Yónnee ma audio ngir résumer : Sama prix mu ngi tollu ci..., sama marge mu ngi tollu ci..., dama bëgg a jaay X bis bu ne.",
|
| 163 |
+
"exercisePrompt": "Yónnee ma sa résumé financier ci audio :",
|
| 164 |
+
"exerciseType": "AUDIO",
|
| 165 |
+
"exerciseCriteria": {
|
| 166 |
+
"version": "1.0",
|
| 167 |
+
"type": "AUDIO",
|
| 168 |
+
"goal": "Synthèse financière Niveau 2 (WOLOF)",
|
| 169 |
+
"success": {
|
| 170 |
+
"mustInclude": [
|
| 171 |
+
{
|
| 172 |
+
"id": "PRICE",
|
| 173 |
+
"desc": "prix bi",
|
| 174 |
+
"weight": 3
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"id": "MARGIN",
|
| 178 |
+
"desc": "marge bi",
|
| 179 |
+
"weight": 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
},
|
| 181 |
+
{
|
| 182 |
+
"id": "VOLUME",
|
| 183 |
+
"desc": "ñaata lay jaay",
|
| 184 |
+
"weight": 4
|
| 185 |
+
}
|
| 186 |
+
],
|
| 187 |
+
"threshold": {
|
| 188 |
+
"minScore": 6,
|
| 189 |
+
"minMustPass": 2
|
| 190 |
+
}
|
| 191 |
+
},
|
| 192 |
+
"evaluation": {
|
| 193 |
+
"tone": "coach_enthusiastic",
|
| 194 |
+
"format": "3_lines"
|
| 195 |
}
|
| 196 |
+
},
|
| 197 |
+
"badges": [
|
| 198 |
+
"B_MODULE_2_OK"
|
| 199 |
+
]
|
| 200 |
+
}
|
| 201 |
+
]
|
| 202 |
}
|
|
@@ -1,258 +1,264 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
| 36 |
-
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
|
|
|
| 59 |
}
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
"
|
| 63 |
-
"
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
}
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
"
|
| 88 |
-
"
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
}
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
"
|
| 113 |
-
"
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
|
|
|
|
|
|
| 144 |
}
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
"
|
| 148 |
-
"
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
"format": "3_lines"
|
| 182 |
-
}
|
| 183 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 184 |
},
|
| 185 |
-
{
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
}
|
| 218 |
}
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
"
|
| 222 |
-
"
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
"threshold": {
|
| 244 |
-
"minScore": 5,
|
| 245 |
-
"minMustPass": 1
|
| 246 |
-
}
|
| 247 |
-
},
|
| 248 |
-
"evaluation": {
|
| 249 |
-
"tone": "coach_enthusiastic",
|
| 250 |
-
"format": "3_lines"
|
| 251 |
-
}
|
| 252 |
},
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
}
|
| 257 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 258 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T3-FR",
|
| 3 |
+
"title": "Vente & Persuasion (FR)",
|
| 4 |
+
"language": "FR",
|
| 5 |
+
"description": "Apprenez les techniques de vente terrain et les scripts de persuasion pour closer plus de clients.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Pourquoi les gens achètent",
|
| 10 |
+
"lessonText": "Bienvenue au Niveau 3 ! Les gens n'achètent pas par logique, mais par émotion. Ils achètent pour résoudre une peur ou gagner un plaisir.",
|
| 11 |
+
"exercisePrompt": "Quelle émotion principale ton produit apporte-t-il à ton client ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Identifier l'émotion d'achat",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "EMOTION",
|
| 21 |
+
"desc": "fierté, sécurité, plaisir ou gain mentionné",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_4.mp4",
|
| 36 |
+
"videoCaption": "✨ Expérience : Defal sa kiliifa lu mu fatte-wul !"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"dayNumber": 2,
|
| 40 |
+
"title": "L'Argumentaire Simple",
|
| 41 |
+
"lessonText": "Ton argumentaire doit être court : 'Je fais X pour que tu obtienne Y'. Concentre-toi sur le résultat final.",
|
| 42 |
+
"exercisePrompt": "Donne ton meilleur argument de vente en une phrase :",
|
| 43 |
+
"exerciseType": "TEXT",
|
| 44 |
+
"exerciseCriteria": {
|
| 45 |
+
"version": "1.0",
|
| 46 |
+
"type": "TEXT",
|
| 47 |
+
"goal": "Rédaction d'un argumentaire orienté bénéfice",
|
| 48 |
+
"success": {
|
| 49 |
+
"mustInclude": [
|
| 50 |
+
{
|
| 51 |
+
"id": "BENEFIT",
|
| 52 |
+
"desc": "un bénéfice concret pour le client",
|
| 53 |
+
"weight": 5
|
| 54 |
}
|
| 55 |
+
],
|
| 56 |
+
"threshold": {
|
| 57 |
+
"minScore": 5,
|
| 58 |
+
"minMustPass": 1
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"dayNumber": 3,
|
| 65 |
+
"title": "Les Objections",
|
| 66 |
+
"lessonText": "'C'est trop cher' n'est pas un non. C'est une demande de preuve. Montre la valeur avant d'expliquer le prix.",
|
| 67 |
+
"exercisePrompt": "Quelle est l'objection que tu entends le plus souvent ?",
|
| 68 |
+
"exerciseType": "TEXT",
|
| 69 |
+
"exerciseCriteria": {
|
| 70 |
+
"version": "1.0",
|
| 71 |
+
"type": "TEXT",
|
| 72 |
+
"goal": "Identifier les freins à la vente",
|
| 73 |
+
"success": {
|
| 74 |
+
"mustInclude": [
|
| 75 |
+
{
|
| 76 |
+
"id": "OBJECTION",
|
| 77 |
+
"desc": "un frein réel (prix, temps, confiance)",
|
| 78 |
+
"weight": 5
|
| 79 |
}
|
| 80 |
+
],
|
| 81 |
+
"threshold": {
|
| 82 |
+
"minScore": 5,
|
| 83 |
+
"minMustPass": 1
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"dayNumber": 4,
|
| 90 |
+
"title": "Storytelling Local",
|
| 91 |
+
"lessonText": "Raconte l'histoire d'un client satisfait. 'Le voisin de Rufisque a pris mon produit et maintenant il gagne 2h par jour'.",
|
| 92 |
+
"exercisePrompt": "Raconte en 2 phrases comment tu as aidé un vrai client récemment :",
|
| 93 |
+
"exerciseType": "TEXT",
|
| 94 |
+
"exerciseCriteria": {
|
| 95 |
+
"version": "1.0",
|
| 96 |
+
"type": "TEXT",
|
| 97 |
+
"goal": "Preuve sociale par le récit",
|
| 98 |
+
"success": {
|
| 99 |
+
"mustInclude": [
|
| 100 |
+
{
|
| 101 |
+
"id": "STORY",
|
| 102 |
+
"desc": "un exemple concret de client aidé",
|
| 103 |
+
"weight": 5
|
| 104 |
}
|
| 105 |
+
],
|
| 106 |
+
"threshold": {
|
| 107 |
+
"minScore": 5,
|
| 108 |
+
"minMustPass": 1
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
},
|
| 112 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_6.mp4",
|
| 113 |
+
"videoCaption": "🤝 Partenaires : Ñan ñoo la mën a jàpple ?"
|
| 114 |
+
},
|
| 115 |
+
{
|
| 116 |
+
"dayNumber": 5,
|
| 117 |
+
"title": "Script WhatsApp",
|
| 118 |
+
"lessonText": "Sur WhatsApp, sois rapide. Utilise des emojis pour être chaleureux. Propose toujours une étape suivante (appel ou visite).",
|
| 119 |
+
"exercisePrompt": "Écris le premier message que tu envoies à un nouveau contact WhatsApp :",
|
| 120 |
+
"exerciseType": "TEXT",
|
| 121 |
+
"exerciseCriteria": {
|
| 122 |
+
"version": "1.0",
|
| 123 |
+
"type": "TEXT",
|
| 124 |
+
"goal": "Script de premier contact WhatsApp",
|
| 125 |
+
"success": {
|
| 126 |
+
"mustInclude": [
|
| 127 |
+
{
|
| 128 |
+
"id": "POLITE",
|
| 129 |
+
"desc": "salutation polie",
|
| 130 |
+
"weight": 2
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"id": "CLEAR",
|
| 134 |
+
"desc": "raison du message",
|
| 135 |
+
"weight": 3
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"id": "CTA",
|
| 139 |
+
"desc": "appel à l'action (clique, appelle, passe voir)",
|
| 140 |
+
"weight": 3
|
| 141 |
}
|
| 142 |
+
],
|
| 143 |
+
"threshold": {
|
| 144 |
+
"minScore": 5,
|
| 145 |
+
"minMustPass": 2
|
| 146 |
+
}
|
| 147 |
+
}
|
| 148 |
+
},
|
| 149 |
+
"videoUrl": "https://r2.xamle.sn/videos/v9_1.mp4",
|
| 150 |
+
"videoCaption": "📱 WhatsApp Pro : Sa boutique ci sa pocket !"
|
| 151 |
+
},
|
| 152 |
+
{
|
| 153 |
+
"dayNumber": 6,
|
| 154 |
+
"title": "Le Pitch 30s",
|
| 155 |
+
"lessonText": "Imagine que tu croises ton client idéal dans le taxi. Tu as 30 secondes pour le convaincre.",
|
| 156 |
+
"exercisePrompt": "Envoie un audio de ton pitch de 30 secondes concentré sur la vente :",
|
| 157 |
+
"exerciseType": "AUDIO",
|
| 158 |
+
"exerciseCriteria": {
|
| 159 |
+
"version": "1.0",
|
| 160 |
+
"type": "AUDIO",
|
| 161 |
+
"goal": "Pitch de vente rapide",
|
| 162 |
+
"success": {
|
| 163 |
+
"mustInclude": [
|
| 164 |
+
{
|
| 165 |
+
"id": "HOOK",
|
| 166 |
+
"desc": "accroche captivante",
|
| 167 |
+
"weight": 3
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"id": "VALUE",
|
| 171 |
+
"desc": "valeur apportée",
|
| 172 |
+
"weight": 4
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"id": "CTA",
|
| 176 |
+
"desc": "invitation à l'action",
|
| 177 |
+
"weight": 3
|
|
|
|
|
|
|
| 178 |
}
|
| 179 |
+
],
|
| 180 |
+
"threshold": {
|
| 181 |
+
"minScore": 7,
|
| 182 |
+
"minMustPass": 2
|
| 183 |
+
}
|
| 184 |
},
|
| 185 |
+
"evaluation": {
|
| 186 |
+
"tone": "coach_enthusiastic",
|
| 187 |
+
"format": "3_lines"
|
| 188 |
+
}
|
| 189 |
+
}
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"dayNumber": 7,
|
| 193 |
+
"title": "Le Pitch 2min",
|
| 194 |
+
"lessonText": "Léegi am nga jamono. Explique ton parcours, ton produit et pourquoi tu es le meilleur.",
|
| 195 |
+
"exercisePrompt": "Envoie un audio de 2 minutes pour présenter ton business en profondeur :",
|
| 196 |
+
"exerciseType": "AUDIO",
|
| 197 |
+
"exerciseCriteria": {
|
| 198 |
+
"version": "1.0",
|
| 199 |
+
"type": "AUDIO",
|
| 200 |
+
"goal": "Pitch de présentation complet",
|
| 201 |
+
"success": {
|
| 202 |
+
"mustInclude": [
|
| 203 |
+
{
|
| 204 |
+
"id": "EXPERTISE",
|
| 205 |
+
"desc": "pourquoi toi (expérience)",
|
| 206 |
+
"weight": 3
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"id": "PROOF",
|
| 210 |
+
"desc": "résultats obtenus",
|
| 211 |
+
"weight": 4
|
| 212 |
+
},
|
| 213 |
+
{
|
| 214 |
+
"id": "FUTURE",
|
| 215 |
+
"desc": "vision ou demande",
|
| 216 |
+
"weight": 3
|
|
|
|
| 217 |
}
|
| 218 |
+
],
|
| 219 |
+
"threshold": {
|
| 220 |
+
"minScore": 7,
|
| 221 |
+
"minMustPass": 2
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"dayNumber": 8,
|
| 228 |
+
"title": "Simulation Réelle",
|
| 229 |
+
"lessonText": "Dernier test : Je suis un client difficile qui dit 'Ton concurrent est moins cher'. Convaincs-moi !",
|
| 230 |
+
"exercisePrompt": "Réponds-moi par audio pour défendre ta valeur :",
|
| 231 |
+
"exerciseType": "AUDIO",
|
| 232 |
+
"exerciseCriteria": {
|
| 233 |
+
"version": "1.0",
|
| 234 |
+
"type": "AUDIO",
|
| 235 |
+
"goal": "Gestion d'objection finale",
|
| 236 |
+
"success": {
|
| 237 |
+
"mustInclude": [
|
| 238 |
+
{
|
| 239 |
+
"id": "VALUE",
|
| 240 |
+
"desc": "insister sur la qualité/service",
|
| 241 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 242 |
},
|
| 243 |
+
{
|
| 244 |
+
"id": "TRUST",
|
| 245 |
+
"desc": "rassurer le client",
|
| 246 |
+
"weight": 5
|
| 247 |
+
}
|
| 248 |
+
],
|
| 249 |
+
"threshold": {
|
| 250 |
+
"minScore": 5,
|
| 251 |
+
"minMustPass": 1
|
| 252 |
+
}
|
| 253 |
+
},
|
| 254 |
+
"evaluation": {
|
| 255 |
+
"tone": "coach_enthusiastic",
|
| 256 |
+
"format": "3_lines"
|
| 257 |
}
|
| 258 |
+
},
|
| 259 |
+
"badges": [
|
| 260 |
+
"B_MODULE_3_OK"
|
| 261 |
+
]
|
| 262 |
+
}
|
| 263 |
+
]
|
| 264 |
}
|
|
@@ -1,258 +1,264 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
| 36 |
-
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
|
|
|
| 59 |
}
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
"
|
| 63 |
-
"
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
}
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
"
|
| 88 |
-
"
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
}
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
"
|
| 113 |
-
"
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
|
|
|
|
|
|
| 144 |
}
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
"
|
| 148 |
-
"
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
"format": "3_lines"
|
| 182 |
-
}
|
| 183 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 184 |
},
|
| 185 |
-
{
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
}
|
| 218 |
}
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
"
|
| 222 |
-
"
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
"threshold": {
|
| 244 |
-
"minScore": 5,
|
| 245 |
-
"minMustPass": 1
|
| 246 |
-
}
|
| 247 |
-
},
|
| 248 |
-
"evaluation": {
|
| 249 |
-
"tone": "coach_enthusiastic",
|
| 250 |
-
"format": "3_lines"
|
| 251 |
-
}
|
| 252 |
},
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
}
|
| 257 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 258 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T3-WO",
|
| 3 |
+
"title": "Vente & Persuasion (WOLOF)",
|
| 4 |
+
"language": "WOLOF",
|
| 5 |
+
"description": "Apprenez les techniques de vente terrain et les scripts de persuasion pour closer plus de clients.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Lu tax nit di jënd",
|
| 10 |
+
"lessonText": "Dalal jàmm ci Niveau 3 bi ! Nit ñi duñuy jënd ndax logique, dañuy jënd ndax li ñu yëg (émotion). Dañuy jënd ngir dakkal tiitaange walla ngir am mbégte.",
|
| 11 |
+
"exercisePrompt": "Yan yëg-yëg la sa produit di uutal sa kiliifa ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Identifier l'émotion d'achat (WOLOF)",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "EMOTION",
|
| 21 |
+
"desc": "titaange, woolu, mbégte walla plaisir",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"videoUrl": "https://r2.xamle.sn/videos/v7_4.mp4",
|
| 36 |
+
"videoCaption": "✨ Expérience : Defal sa kiliifa lu mu fatte-wul !"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"dayNumber": 2,
|
| 40 |
+
"title": "Wax ju gàtt te leer",
|
| 41 |
+
"lessonText": "Sa waxu jaay war na gàtt : 'Damay def lii ngir nga am lée'. Waxal ci njariñ bi kiliifa bi di am.",
|
| 42 |
+
"exercisePrompt": "Bindal ma sa meilleur argument de vente ci benn phrase :",
|
| 43 |
+
"exerciseType": "TEXT",
|
| 44 |
+
"exerciseCriteria": {
|
| 45 |
+
"version": "1.0",
|
| 46 |
+
"type": "TEXT",
|
| 47 |
+
"goal": "Rédaction d'un argumentaire orienté bénéfice (WOLOF)",
|
| 48 |
+
"success": {
|
| 49 |
+
"mustInclude": [
|
| 50 |
+
{
|
| 51 |
+
"id": "BENEFIT",
|
| 52 |
+
"desc": "njariñ bu leer",
|
| 53 |
+
"weight": 5
|
| 54 |
}
|
| 55 |
+
],
|
| 56 |
+
"threshold": {
|
| 57 |
+
"minScore": 5,
|
| 58 |
+
"minMustPass": 1
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"dayNumber": 3,
|
| 65 |
+
"title": "Su ñu waxee 'Dafa jar'",
|
| 66 |
+
"lessonText": "'Dafa jar' du 'Dét'. Dafa bëgg gën a xam sa produit. Woneel njariñ li lata nga koy wax prix bi.",
|
| 67 |
+
"exercisePrompt": "Lan mooy wax ji ngay gën a faral di dégg ci kiliifa yi (objections) ?",
|
| 68 |
+
"exerciseType": "TEXT",
|
| 69 |
+
"exerciseCriteria": {
|
| 70 |
+
"version": "1.0",
|
| 71 |
+
"type": "TEXT",
|
| 72 |
+
"goal": "Identifier les freins à la vente (WOLOF)",
|
| 73 |
+
"success": {
|
| 74 |
+
"mustInclude": [
|
| 75 |
+
{
|
| 76 |
+
"id": "OBJECTION",
|
| 77 |
+
"desc": "jafe-jafe (prix, jamono, woolu)",
|
| 78 |
+
"weight": 5
|
| 79 |
}
|
| 80 |
+
],
|
| 81 |
+
"threshold": {
|
| 82 |
+
"minScore": 5,
|
| 83 |
+
"minMustPass": 1
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"dayNumber": 4,
|
| 90 |
+
"title": "Nettooli pexe",
|
| 91 |
+
"lessonText": "Nettooli pexe bi benn kiliifa amoon. 'Benn dëkkëndo ci Rufisque da doon jënd sama produit tey mu ngi nélaw bu neex'.",
|
| 92 |
+
"exercisePrompt": "Nettoolil ma naka nga jàppalee benn kiliifa légui rek :",
|
| 93 |
+
"exerciseType": "TEXT",
|
| 94 |
+
"exerciseCriteria": {
|
| 95 |
+
"version": "1.0",
|
| 96 |
+
"type": "TEXT",
|
| 97 |
+
"goal": "Preuve sociale par le récit (WOLOF)",
|
| 98 |
+
"success": {
|
| 99 |
+
"mustInclude": [
|
| 100 |
+
{
|
| 101 |
+
"id": "STORY",
|
| 102 |
+
"desc": "exemple bu leer ci kiliifa bu contane",
|
| 103 |
+
"weight": 5
|
| 104 |
}
|
| 105 |
+
],
|
| 106 |
+
"threshold": {
|
| 107 |
+
"minScore": 5,
|
| 108 |
+
"minMustPass": 1
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
},
|
| 112 |
+
"videoUrl": "https://r2.xamle.sn/videos/v4_6.mp4",
|
| 113 |
+
"videoCaption": "🤝 Partenaires : Ñan ñoo la mën a jàpple ?"
|
| 114 |
+
},
|
| 115 |
+
{
|
| 116 |
+
"dayNumber": 5,
|
| 117 |
+
"title": "Script WhatsApp",
|
| 118 |
+
"lessonText": "Ci WhatsApp, war nga gaaw. Jëfandiku emojis ngir neexal waxtaan bi. Laaj ko kiliifa bi kañ la mën a ñëw walla woo la.",
|
| 119 |
+
"exercisePrompt": "Bindal ma premier message bi ngay yónnee kiliifa bu bees ci WhatsApp :",
|
| 120 |
+
"exerciseType": "TEXT",
|
| 121 |
+
"exerciseCriteria": {
|
| 122 |
+
"version": "1.0",
|
| 123 |
+
"type": "TEXT",
|
| 124 |
+
"goal": "Script de premier contact WhatsApp (WOLOF)",
|
| 125 |
+
"success": {
|
| 126 |
+
"mustInclude": [
|
| 127 |
+
{
|
| 128 |
+
"id": "POLITE",
|
| 129 |
+
"desc": "nuyu bu neex",
|
| 130 |
+
"weight": 2
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"id": "CLEAR",
|
| 134 |
+
"desc": "lu tax nga koy bind",
|
| 135 |
+
"weight": 3
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"id": "CTA",
|
| 139 |
+
"desc": "appel à l'action (clique, woo ko, ñëwal)",
|
| 140 |
+
"weight": 3
|
| 141 |
}
|
| 142 |
+
],
|
| 143 |
+
"threshold": {
|
| 144 |
+
"minScore": 5,
|
| 145 |
+
"minMustPass": 2
|
| 146 |
+
}
|
| 147 |
+
}
|
| 148 |
+
},
|
| 149 |
+
"videoUrl": "https://r2.xamle.sn/videos/v9_1.mp4",
|
| 150 |
+
"videoCaption": "📱 WhatsApp Pro : Sa boutique ci sa pocket !"
|
| 151 |
+
},
|
| 152 |
+
{
|
| 153 |
+
"dayNumber": 6,
|
| 154 |
+
"title": "Pitch 30s",
|
| 155 |
+
"lessonText": "Naka ngay wóoral kiliifa bi ngay guiss ci taxi walla ci marche bi ci 30 seconde ?",
|
| 156 |
+
"exercisePrompt": "Yónnee ma audio sa pitch bu gàtt ci 30 seconde ngir jaay sa mbir :",
|
| 157 |
+
"exerciseType": "AUDIO",
|
| 158 |
+
"exerciseCriteria": {
|
| 159 |
+
"version": "1.0",
|
| 160 |
+
"type": "AUDIO",
|
| 161 |
+
"goal": "Pitch de vente rapide (WOLOF)",
|
| 162 |
+
"success": {
|
| 163 |
+
"mustInclude": [
|
| 164 |
+
{
|
| 165 |
+
"id": "HOOK",
|
| 166 |
+
"desc": "wax bu neex",
|
| 167 |
+
"weight": 3
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"id": "VALUE",
|
| 171 |
+
"desc": "njariñ li",
|
| 172 |
+
"weight": 4
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"id": "CTA",
|
| 176 |
+
"desc": "baax na",
|
| 177 |
+
"weight": 3
|
|
|
|
|
|
|
| 178 |
}
|
| 179 |
+
],
|
| 180 |
+
"threshold": {
|
| 181 |
+
"minScore": 7,
|
| 182 |
+
"minMustPass": 2
|
| 183 |
+
}
|
| 184 |
},
|
| 185 |
+
"evaluation": {
|
| 186 |
+
"tone": "coach_enthusiastic",
|
| 187 |
+
"format": "3_lines"
|
| 188 |
+
}
|
| 189 |
+
}
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"dayNumber": 7,
|
| 193 |
+
"title": "Pitch 2min",
|
| 194 |
+
"lessonText": "Léegi am nga jamono. Leeral sa parcours, sa produit ak lu tax yaw nga gën ñeneen ñi.",
|
| 195 |
+
"exercisePrompt": "Yónnee ma audio bu mat 2 minute ngir leeral sa business bu baax :",
|
| 196 |
+
"exerciseType": "AUDIO",
|
| 197 |
+
"exerciseCriteria": {
|
| 198 |
+
"version": "1.0",
|
| 199 |
+
"type": "AUDIO",
|
| 200 |
+
"goal": "Pitch de présentation complet (WOLOF)",
|
| 201 |
+
"success": {
|
| 202 |
+
"mustInclude": [
|
| 203 |
+
{
|
| 204 |
+
"id": "EXPERTISE",
|
| 205 |
+
"desc": "lu tax yaw (expérience)",
|
| 206 |
+
"weight": 3
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"id": "PROOF",
|
| 210 |
+
"desc": "résultats yi",
|
| 211 |
+
"weight": 4
|
| 212 |
+
},
|
| 213 |
+
{
|
| 214 |
+
"id": "FUTURE",
|
| 215 |
+
"desc": "vision walla demande",
|
| 216 |
+
"weight": 3
|
|
|
|
| 217 |
}
|
| 218 |
+
],
|
| 219 |
+
"threshold": {
|
| 220 |
+
"minScore": 7,
|
| 221 |
+
"minMustPass": 2
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"dayNumber": 8,
|
| 228 |
+
"title": "Natt bi",
|
| 229 |
+
"lessonText": "Natt bi tollu na : Naka ngay tontu kiliifa bu la wax 'Sa moroom dafa yomb' ?",
|
| 230 |
+
"exercisePrompt": "Yónnee ma audio ngir wóoral ma ma jënd ci yaw :",
|
| 231 |
+
"exerciseType": "AUDIO",
|
| 232 |
+
"exerciseCriteria": {
|
| 233 |
+
"version": "1.0",
|
| 234 |
+
"type": "AUDIO",
|
| 235 |
+
"goal": "Gestion d'objection finale (WOLOF)",
|
| 236 |
+
"success": {
|
| 237 |
+
"mustInclude": [
|
| 238 |
+
{
|
| 239 |
+
"id": "VALUE",
|
| 240 |
+
"desc": "defendre valeur bi (baax, dëgër)",
|
| 241 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 242 |
},
|
| 243 |
+
{
|
| 244 |
+
"id": "TRUST",
|
| 245 |
+
"desc": "woolu",
|
| 246 |
+
"weight": 5
|
| 247 |
+
}
|
| 248 |
+
],
|
| 249 |
+
"threshold": {
|
| 250 |
+
"minScore": 5,
|
| 251 |
+
"minMustPass": 1
|
| 252 |
+
}
|
| 253 |
+
},
|
| 254 |
+
"evaluation": {
|
| 255 |
+
"tone": "coach_enthusiastic",
|
| 256 |
+
"format": "3_lines"
|
| 257 |
}
|
| 258 |
+
},
|
| 259 |
+
"badges": [
|
| 260 |
+
"B_MODULE_3_OK"
|
| 261 |
+
]
|
| 262 |
+
}
|
| 263 |
+
]
|
| 264 |
}
|
|
@@ -1,191 +1,197 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
"lessonText": "En étant formel, tu peux protéger ton patrimoine perso. Tes dettes business ne touchent pas ta maison.",
|
| 40 |
-
"exercisePrompt": "Lequel de ces avantages t'intéresse le plus ?",
|
| 41 |
-
"exerciseType": "BUTTON",
|
| 42 |
-
"buttonsJson": [
|
| 43 |
-
{
|
| 44 |
-
"id": "protection",
|
| 45 |
-
"title": "Protection du patrimoine"
|
| 46 |
-
},
|
| 47 |
-
{
|
| 48 |
-
"id": "appels",
|
| 49 |
-
"title": "Appels d'offres"
|
| 50 |
-
},
|
| 51 |
-
{
|
| 52 |
-
"id": "financement",
|
| 53 |
-
"title": "Accès au financement"
|
| 54 |
-
}
|
| 55 |
-
]
|
| 56 |
-
},
|
| 57 |
-
{
|
| 58 |
-
"dayNumber": 3,
|
| 59 |
-
"title": "Crédibilité Partenaires",
|
| 60 |
-
"lessonText": "Les banques et les gros fournisseurs demandent des papiers. Sans ça, tu restes un petit commerçant de quartier.",
|
| 61 |
-
"exercisePrompt": "Quelle opportunité as-tu manqué par manque de papiers officiels ?",
|
| 62 |
-
"exerciseType": "TEXT",
|
| 63 |
-
"exerciseCriteria": {
|
| 64 |
-
"version": "1.0",
|
| 65 |
-
"type": "TEXT",
|
| 66 |
-
"goal": "Prise de conscience du coût d'opportunité",
|
| 67 |
-
"success": {
|
| 68 |
-
"mustInclude": [
|
| 69 |
-
{
|
| 70 |
-
"id": "MISSED",
|
| 71 |
-
"desc": "exemple de contrat ou prêt manqué",
|
| 72 |
-
"weight": 5
|
| 73 |
-
}
|
| 74 |
-
],
|
| 75 |
-
"threshold": {
|
| 76 |
-
"minScore": 5,
|
| 77 |
-
"minMustPass": 1
|
| 78 |
-
}
|
| 79 |
-
}
|
| 80 |
-
}
|
| 81 |
},
|
| 82 |
{
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
"lessonText": "Pas besoin d'être comptable. Commence par un classeur pour tes reçus et tes factures.",
|
| 86 |
-
"exercisePrompt": "As-tu aujourd'hui un endroit unique où tu ranges tous tes reçus ?",
|
| 87 |
-
"exerciseType": "BUTTON",
|
| 88 |
-
"buttonsJson": [
|
| 89 |
-
{
|
| 90 |
-
"id": "oui",
|
| 91 |
-
"title": "Oui, tout est rangé"
|
| 92 |
-
},
|
| 93 |
-
{
|
| 94 |
-
"id": "un_peu",
|
| 95 |
-
"title": "Un peu partout"
|
| 96 |
-
},
|
| 97 |
-
{
|
| 98 |
-
"id": "non",
|
| 99 |
-
"title": "Pas du tout"
|
| 100 |
-
}
|
| 101 |
-
]
|
| 102 |
},
|
| 103 |
{
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
}
|
| 126 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
},
|
| 128 |
{
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
"lessonText": "Note chaque entrée et chaque sortie. Ne mélange jamais ton argent de poche avec celui du business.",
|
| 132 |
-
"exercisePrompt": "Si tu devais séparer tes comptes demain, quelle serait la difficulté ?",
|
| 133 |
-
"exerciseType": "TEXT",
|
| 134 |
-
"exerciseCriteria": {
|
| 135 |
-
"version": "1.0",
|
| 136 |
-
"type": "TEXT",
|
| 137 |
-
"goal": "Séparation des finances perso/pro",
|
| 138 |
-
"success": {
|
| 139 |
-
"mustInclude": [
|
| 140 |
-
{
|
| 141 |
-
"id": "DIFFICULTY",
|
| 142 |
-
"desc": "analyse de la difficulté de séparation",
|
| 143 |
-
"weight": 5
|
| 144 |
-
}
|
| 145 |
-
],
|
| 146 |
-
"threshold": {
|
| 147 |
-
"minScore": 5,
|
| 148 |
-
"minMustPass": 1
|
| 149 |
-
}
|
| 150 |
-
}
|
| 151 |
-
}
|
| 152 |
},
|
| 153 |
{
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
},
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 189 |
}
|
| 190 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T4-FR",
|
| 3 |
+
"title": "Formalisation & Structuration (FR)",
|
| 4 |
+
"language": "FR",
|
| 5 |
+
"description": "Passez de l'informel à une entreprise structurée et crédible pour les partenaires et les banques.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Pourquoi Formaliser ?",
|
| 10 |
+
"lessonText": "Bienvenue au Niveau 4 ! La formalisation n'est pas qu'une histoire de taxes, c'est ta porte d'entrée vers les gros contrats et le crédit.",
|
| 11 |
+
"exercisePrompt": "Quel est le plus gros obstacle qui t'empêche de formaliser ton business ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Identifier les freins à la formalisation",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "BARRIER",
|
| 21 |
+
"desc": "peur des impôts, complexité ou coût cité",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
}
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"dayNumber": 2,
|
| 38 |
+
"title": "Avantages Fiscaux & Légaux",
|
| 39 |
+
"lessonText": "En étant formel, tu peux protéger ton patrimoine perso. Tes dettes business ne touchent pas ta maison.",
|
| 40 |
+
"exercisePrompt": "Lequel de ces avantages t'intéresse le plus ?",
|
| 41 |
+
"exerciseType": "BUTTON",
|
| 42 |
+
"buttonsJson": [
|
| 43 |
{
|
| 44 |
+
"id": "protection",
|
| 45 |
+
"title": "Protection du patrimoine"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
},
|
| 47 |
{
|
| 48 |
+
"id": "appels",
|
| 49 |
+
"title": "Appels d'offres"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
},
|
| 51 |
{
|
| 52 |
+
"id": "financement",
|
| 53 |
+
"title": "Accès au financement"
|
| 54 |
+
}
|
| 55 |
+
]
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"dayNumber": 3,
|
| 59 |
+
"title": "Crédibilité Partenaires",
|
| 60 |
+
"lessonText": "Les banques et les gros fournisseurs demandent des papiers. Sans ça, tu restes un petit commerçant de quartier.",
|
| 61 |
+
"exercisePrompt": "Quelle opportunité as-tu manqué par manque de papiers officiels ?",
|
| 62 |
+
"exerciseType": "TEXT",
|
| 63 |
+
"exerciseCriteria": {
|
| 64 |
+
"version": "1.0",
|
| 65 |
+
"type": "TEXT",
|
| 66 |
+
"goal": "Prise de conscience du coût d'opportunité",
|
| 67 |
+
"success": {
|
| 68 |
+
"mustInclude": [
|
| 69 |
+
{
|
| 70 |
+
"id": "MISSED",
|
| 71 |
+
"desc": "exemple de contrat ou prêt manqué",
|
| 72 |
+
"weight": 5
|
|
|
|
| 73 |
}
|
| 74 |
+
],
|
| 75 |
+
"threshold": {
|
| 76 |
+
"minScore": 5,
|
| 77 |
+
"minMustPass": 1
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"dayNumber": 4,
|
| 84 |
+
"title": "Organisation Simple",
|
| 85 |
+
"lessonText": "Pas besoin d'être comptable. Commence par un classeur pour tes reçus et tes factures.",
|
| 86 |
+
"exercisePrompt": "As-tu aujourd'hui un endroit unique où tu ranges tous tes reçus ?",
|
| 87 |
+
"exerciseType": "BUTTON",
|
| 88 |
+
"buttonsJson": [
|
| 89 |
+
{
|
| 90 |
+
"id": "oui",
|
| 91 |
+
"title": "Oui, tout est rangé"
|
| 92 |
},
|
| 93 |
{
|
| 94 |
+
"id": "un_peu",
|
| 95 |
+
"title": "Un peu partout"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
},
|
| 97 |
{
|
| 98 |
+
"id": "non",
|
| 99 |
+
"title": "Pas du tout"
|
| 100 |
+
}
|
| 101 |
+
]
|
| 102 |
+
},
|
| 103 |
+
{
|
| 104 |
+
"dayNumber": 5,
|
| 105 |
+
"title": "Gestion de Stock",
|
| 106 |
+
"lessonText": "Ton stock, c'est ton argent. Si tu ne sais pas ce que tu as, tu perds de l'argent chaque jour.",
|
| 107 |
+
"exercisePrompt": "Fais un inventaire rapide de tes 3 produits les plus chers. Combien en as-tu ?",
|
| 108 |
+
"exerciseType": "TEXT",
|
| 109 |
+
"exerciseCriteria": {
|
| 110 |
+
"version": "1.0",
|
| 111 |
+
"type": "TEXT",
|
| 112 |
+
"goal": "Contrôle d'inventaire",
|
| 113 |
+
"success": {
|
| 114 |
+
"mustInclude": [
|
| 115 |
+
{
|
| 116 |
+
"id": "INVENTORY",
|
| 117 |
+
"desc": "liste de produits avec quantités",
|
| 118 |
+
"weight": 5
|
| 119 |
+
}
|
| 120 |
+
],
|
| 121 |
+
"threshold": {
|
| 122 |
+
"minScore": 5,
|
| 123 |
+
"minMustPass": 1
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
},
|
| 127 |
+
"videoUrl": "https://r2.xamle.sn/videos/v5_3.mp4",
|
| 128 |
+
"videoCaption": "📦 Stock : Bul bàyyi sa marchandise di gaañu !"
|
| 129 |
+
},
|
| 130 |
+
{
|
| 131 |
+
"dayNumber": 6,
|
| 132 |
+
"title": "Le Cahier de Cash",
|
| 133 |
+
"lessonText": "Note chaque entrée et chaque sortie. Ne mélange jamais ton argent de poche avec celui du business.",
|
| 134 |
+
"exercisePrompt": "Si tu devais séparer tes comptes demain, quelle serait la difficulté ?",
|
| 135 |
+
"exerciseType": "TEXT",
|
| 136 |
+
"exerciseCriteria": {
|
| 137 |
+
"version": "1.0",
|
| 138 |
+
"type": "TEXT",
|
| 139 |
+
"goal": "Séparation des finances perso/pro",
|
| 140 |
+
"success": {
|
| 141 |
+
"mustInclude": [
|
| 142 |
+
{
|
| 143 |
+
"id": "DIFFICULTY",
|
| 144 |
+
"desc": "analyse de la difficulté de séparation",
|
| 145 |
+
"weight": 5
|
| 146 |
+
}
|
| 147 |
+
],
|
| 148 |
+
"threshold": {
|
| 149 |
+
"minScore": 5,
|
| 150 |
+
"minMustPass": 1
|
| 151 |
+
}
|
| 152 |
+
}
|
| 153 |
+
},
|
| 154 |
+
"videoUrl": "https://r2.xamle.sn/videos/v9_3.mp4",
|
| 155 |
+
"videoCaption": "💸 Wave Business : Gérer son argent comme un pro !"
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"dayNumber": 7,
|
| 159 |
+
"title": "Plan d'Action",
|
| 160 |
+
"lessonText": "Bravo ! Tu as compris la structure. Quelle est ta première action concrète pour formaliser ?",
|
| 161 |
+
"exercisePrompt": "Envoie un audio décrivant ton action pour les 30 prochains jours :",
|
| 162 |
+
"exerciseType": "AUDIO",
|
| 163 |
+
"exerciseCriteria": {
|
| 164 |
+
"version": "1.0",
|
| 165 |
+
"type": "AUDIO",
|
| 166 |
+
"goal": "Plan d'action de formalisation",
|
| 167 |
+
"success": {
|
| 168 |
+
"mustInclude": [
|
| 169 |
+
{
|
| 170 |
+
"id": "ACTION",
|
| 171 |
+
"desc": "action concrète (ex: aller à la mairie)",
|
| 172 |
+
"weight": 5
|
| 173 |
},
|
| 174 |
+
{
|
| 175 |
+
"id": "DEADLINE",
|
| 176 |
+
"desc": "un délai cité",
|
| 177 |
+
"weight": 5
|
| 178 |
+
}
|
| 179 |
+
],
|
| 180 |
+
"threshold": {
|
| 181 |
+
"minScore": 7,
|
| 182 |
+
"minMustPass": 1
|
| 183 |
+
}
|
| 184 |
+
},
|
| 185 |
+
"evaluation": {
|
| 186 |
+
"tone": "coach_enthusiastic",
|
| 187 |
+
"format": "3_lines"
|
| 188 |
}
|
| 189 |
+
},
|
| 190 |
+
"badges": [
|
| 191 |
+
"B_MODULE_4_OK"
|
| 192 |
+
],
|
| 193 |
+
"videoUrl": "https://r2.xamle.sn/videos/v10_1.mp4",
|
| 194 |
+
"videoCaption": "🛡️ Sécurité : Épargne bi ngay muccé."
|
| 195 |
+
}
|
| 196 |
+
]
|
| 197 |
}
|
|
@@ -1,191 +1,197 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
"lessonText": "Su sa mbir bindoone, daggay protéger sa alal bopp. Sa boru business du touché sa kër walla sa auto.",
|
| 40 |
-
"exercisePrompt": "Sa yan njariñ moo la ci gën a soxal ?",
|
| 41 |
-
"exerciseType": "BUTTON",
|
| 42 |
-
"buttonsJson": [
|
| 43 |
-
{
|
| 44 |
-
"id": "protection",
|
| 45 |
-
"title": "Sama alal woor"
|
| 46 |
-
},
|
| 47 |
-
{
|
| 48 |
-
"id": "appels",
|
| 49 |
-
"title": "Appels d'offres"
|
| 50 |
-
},
|
| 51 |
-
{
|
| 52 |
-
"id": "financement",
|
| 53 |
-
"title": "Accès ci xaalis"
|
| 54 |
-
}
|
| 55 |
-
]
|
| 56 |
-
},
|
| 57 |
-
{
|
| 58 |
-
"dayNumber": 3,
|
| 59 |
-
"title": "Wollo bi",
|
| 60 |
-
"lessonText": "Banque yi ak fournisseur yu mag yi, papier lañuy laaj. Su nga amul papier, daggay des commerçant bu ndaw rekk.",
|
| 61 |
-
"exercisePrompt": "Baax na, yan opportunité nga mas a ñàkk ndax sa mbir bindoowul ?",
|
| 62 |
-
"exerciseType": "TEXT",
|
| 63 |
-
"exerciseCriteria": {
|
| 64 |
-
"version": "1.0",
|
| 65 |
-
"type": "TEXT",
|
| 66 |
-
"goal": "Prise de conscience du coût d'opportunité (WOLOF)",
|
| 67 |
-
"success": {
|
| 68 |
-
"mustInclude": [
|
| 69 |
-
{
|
| 70 |
-
"id": "MISSED",
|
| 71 |
-
"desc": "contrat walla prêt bu mu ñàkk",
|
| 72 |
-
"weight": 5
|
| 73 |
-
}
|
| 74 |
-
],
|
| 75 |
-
"threshold": {
|
| 76 |
-
"minScore": 5,
|
| 77 |
-
"minMustPass": 1
|
| 78 |
-
}
|
| 79 |
-
}
|
| 80 |
-
}
|
| 81 |
},
|
| 82 |
{
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
"lessonText": "Dinu la laaj nga nekk expert comptable. Tàmbaleel ak benn classeur booy denc sa facture ak sa reçu yi.",
|
| 86 |
-
"exercisePrompt": "Am nga tey benn place booy denc sa reçu yépp ?",
|
| 87 |
-
"exerciseType": "BUTTON",
|
| 88 |
-
"buttonsJson": [
|
| 89 |
-
{
|
| 90 |
-
"id": "oui",
|
| 91 |
-
"title": "Waaw, mu ngi dencu"
|
| 92 |
-
},
|
| 93 |
-
{
|
| 94 |
-
"id": "un_peu",
|
| 95 |
-
"title": "Dafa paré paré"
|
| 96 |
-
},
|
| 97 |
-
{
|
| 98 |
-
"id": "non",
|
| 99 |
-
"title": "Déet, amul"
|
| 100 |
-
}
|
| 101 |
-
]
|
| 102 |
},
|
| 103 |
{
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
}
|
| 126 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
},
|
| 128 |
{
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
"lessonText": "Bindal lépp li duggu ak li génn. Bul jaxasse sa xaalissu bopp ak xaalissu business bi.",
|
| 132 |
-
"exercisePrompt": "Su nga bëggoon a séparer sa deux comptes suba, lan mooy jafe jafe bi ?",
|
| 133 |
-
"exerciseType": "TEXT",
|
| 134 |
-
"exerciseCriteria": {
|
| 135 |
-
"version": "1.0",
|
| 136 |
-
"type": "TEXT",
|
| 137 |
-
"goal": "Séparation des finances perso/pro (WOLOF)",
|
| 138 |
-
"success": {
|
| 139 |
-
"mustInclude": [
|
| 140 |
-
{
|
| 141 |
-
"id": "DIFFICULTY",
|
| 142 |
-
"desc": "jafe-jafe ci jaxasse xaalis",
|
| 143 |
-
"weight": 5
|
| 144 |
-
}
|
| 145 |
-
],
|
| 146 |
-
"threshold": {
|
| 147 |
-
"minScore": 5,
|
| 148 |
-
"minMustPass": 1
|
| 149 |
-
}
|
| 150 |
-
}
|
| 151 |
-
}
|
| 152 |
},
|
| 153 |
{
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
},
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 189 |
}
|
| 190 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T4-WO",
|
| 3 |
+
"title": "Formalisation & Structuration (WOLOF)",
|
| 4 |
+
"language": "WOLOF",
|
| 5 |
+
"description": "Passez de l'informel à une entreprise structurée et crédible pour les partenaires et les banques.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Lu tax war a formaliser ?",
|
| 10 |
+
"lessonText": "Dalal jàmm ci Niveau 4 bi ! Formalisation du mbirum impôts rekk, waaye mooy sa bunt bu ngay jaar ngir am contrat yu mag ak crédit.",
|
| 11 |
+
"exercisePrompt": "Lan mooy jafe-jafe bi la gën a tée formaliser sa business ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Identifier les freins à la formalisation (WOLOF)",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "BARRIER",
|
| 21 |
+
"desc": "ragal impôts, jafe walla seer cités",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
}
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"dayNumber": 2,
|
| 38 |
+
"title": "Njariñ li ci nekk",
|
| 39 |
+
"lessonText": "Su sa mbir bindoone, daggay protéger sa alal bopp. Sa boru business du touché sa kër walla sa auto.",
|
| 40 |
+
"exercisePrompt": "Sa yan njariñ moo la ci gën a soxal ?",
|
| 41 |
+
"exerciseType": "BUTTON",
|
| 42 |
+
"buttonsJson": [
|
| 43 |
{
|
| 44 |
+
"id": "protection",
|
| 45 |
+
"title": "Sama alal woor"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
},
|
| 47 |
{
|
| 48 |
+
"id": "appels",
|
| 49 |
+
"title": "Appels d'offres"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
},
|
| 51 |
{
|
| 52 |
+
"id": "financement",
|
| 53 |
+
"title": "Accès ci xaalis"
|
| 54 |
+
}
|
| 55 |
+
]
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"dayNumber": 3,
|
| 59 |
+
"title": "Wollo bi",
|
| 60 |
+
"lessonText": "Banque yi ak fournisseur yu mag yi, papier lañuy laaj. Su nga amul papier, daggay des commerçant bu ndaw rekk.",
|
| 61 |
+
"exercisePrompt": "Baax na, yan opportunité nga mas a ñàkk ndax sa mbir bindoowul ?",
|
| 62 |
+
"exerciseType": "TEXT",
|
| 63 |
+
"exerciseCriteria": {
|
| 64 |
+
"version": "1.0",
|
| 65 |
+
"type": "TEXT",
|
| 66 |
+
"goal": "Prise de conscience du coût d'opportunité (WOLOF)",
|
| 67 |
+
"success": {
|
| 68 |
+
"mustInclude": [
|
| 69 |
+
{
|
| 70 |
+
"id": "MISSED",
|
| 71 |
+
"desc": "contrat walla prêt bu mu ñàkk",
|
| 72 |
+
"weight": 5
|
|
|
|
| 73 |
}
|
| 74 |
+
],
|
| 75 |
+
"threshold": {
|
| 76 |
+
"minScore": 5,
|
| 77 |
+
"minMustPass": 1
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"dayNumber": 4,
|
| 84 |
+
"title": "Organiser sa mbir",
|
| 85 |
+
"lessonText": "Dinu la laaj nga nekk expert comptable. Tàmbaleel ak benn classeur booy denc sa facture ak sa reçu yi.",
|
| 86 |
+
"exercisePrompt": "Am nga tey benn place booy denc sa reçu yépp ?",
|
| 87 |
+
"exerciseType": "BUTTON",
|
| 88 |
+
"buttonsJson": [
|
| 89 |
+
{
|
| 90 |
+
"id": "oui",
|
| 91 |
+
"title": "Waaw, mu ngi dencu"
|
| 92 |
},
|
| 93 |
{
|
| 94 |
+
"id": "un_peu",
|
| 95 |
+
"title": "Dafa paré paré"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
},
|
| 97 |
{
|
| 98 |
+
"id": "non",
|
| 99 |
+
"title": "Déet, amul"
|
| 100 |
+
}
|
| 101 |
+
]
|
| 102 |
+
},
|
| 103 |
+
{
|
| 104 |
+
"dayNumber": 5,
|
| 105 |
+
"title": "Gestion Stock",
|
| 106 |
+
"lessonText": "Sa stock, sa xaalis la. Su nga xamul li nga am, yaay ñàkk xaalis saa su nekk.",
|
| 107 |
+
"exercisePrompt": "Limal ma sa ñaari produit yu gën a jar xaalis. Ñaata nga ci am léegi ?",
|
| 108 |
+
"exerciseType": "TEXT",
|
| 109 |
+
"exerciseCriteria": {
|
| 110 |
+
"version": "1.0",
|
| 111 |
+
"type": "TEXT",
|
| 112 |
+
"goal": "Contrôle d'inventaire (WOLOF)",
|
| 113 |
+
"success": {
|
| 114 |
+
"mustInclude": [
|
| 115 |
+
{
|
| 116 |
+
"id": "INVENTORY",
|
| 117 |
+
"desc": "produit yi ak ñaata lañu",
|
| 118 |
+
"weight": 5
|
| 119 |
+
}
|
| 120 |
+
],
|
| 121 |
+
"threshold": {
|
| 122 |
+
"minScore": 5,
|
| 123 |
+
"minMustPass": 1
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
},
|
| 127 |
+
"videoUrl": "https://r2.xamle.sn/videos/v5_3.mp4",
|
| 128 |
+
"videoCaption": "📦 Stock : Bul bàyyi sa marchandise di gaañu !"
|
| 129 |
+
},
|
| 130 |
+
{
|
| 131 |
+
"dayNumber": 6,
|
| 132 |
+
"title": "Cahier de Cash",
|
| 133 |
+
"lessonText": "Bindal lépp li duggu ak li génn. Bul jaxasse sa xaalissu bopp ak xaalissu business bi.",
|
| 134 |
+
"exercisePrompt": "Su nga bëggoon a séparer sa deux comptes suba, lan mooy jafe jafe bi ?",
|
| 135 |
+
"exerciseType": "TEXT",
|
| 136 |
+
"exerciseCriteria": {
|
| 137 |
+
"version": "1.0",
|
| 138 |
+
"type": "TEXT",
|
| 139 |
+
"goal": "Séparation des finances perso/pro (WOLOF)",
|
| 140 |
+
"success": {
|
| 141 |
+
"mustInclude": [
|
| 142 |
+
{
|
| 143 |
+
"id": "DIFFICULTY",
|
| 144 |
+
"desc": "jafe-jafe ci jaxasse xaalis",
|
| 145 |
+
"weight": 5
|
| 146 |
+
}
|
| 147 |
+
],
|
| 148 |
+
"threshold": {
|
| 149 |
+
"minScore": 5,
|
| 150 |
+
"minMustPass": 1
|
| 151 |
+
}
|
| 152 |
+
}
|
| 153 |
+
},
|
| 154 |
+
"videoUrl": "https://r2.xamle.sn/videos/v9_3.mp4",
|
| 155 |
+
"videoCaption": "💸 Wave Business : Gérer son argent comme un pro !"
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"dayNumber": 7,
|
| 159 |
+
"title": "Plan Action bi",
|
| 160 |
+
"lessonText": "Félicitations ! Nga xam njariñu structuration. Lan mooy première action bi ngay tàmbalee def ngir formaliser ?",
|
| 161 |
+
"exercisePrompt": "Yónnee ma audio ngir wax ma action bi ngay def ci 30 bis yii di ñëw :",
|
| 162 |
+
"exerciseType": "AUDIO",
|
| 163 |
+
"exerciseCriteria": {
|
| 164 |
+
"version": "1.0",
|
| 165 |
+
"type": "AUDIO",
|
| 166 |
+
"goal": "Plan d'action de formalisation (WOLOF)",
|
| 167 |
+
"success": {
|
| 168 |
+
"mustInclude": [
|
| 169 |
+
{
|
| 170 |
+
"id": "ACTION",
|
| 171 |
+
"desc": "action bu leer (ex: dem ci mairie)",
|
| 172 |
+
"weight": 5
|
| 173 |
},
|
| 174 |
+
{
|
| 175 |
+
"id": "DEADLINE",
|
| 176 |
+
"desc": "jamono mu leer",
|
| 177 |
+
"weight": 5
|
| 178 |
+
}
|
| 179 |
+
],
|
| 180 |
+
"threshold": {
|
| 181 |
+
"minScore": 7,
|
| 182 |
+
"minMustPass": 1
|
| 183 |
+
}
|
| 184 |
+
},
|
| 185 |
+
"evaluation": {
|
| 186 |
+
"tone": "coach_enthusiastic",
|
| 187 |
+
"format": "3_lines"
|
| 188 |
}
|
| 189 |
+
},
|
| 190 |
+
"badges": [
|
| 191 |
+
"B_MODULE_4_OK"
|
| 192 |
+
],
|
| 193 |
+
"videoUrl": "https://r2.xamle.sn/videos/v10_1.mp4",
|
| 194 |
+
"videoCaption": "🛡️ Sécurité : Épargne bi ngay muccé."
|
| 195 |
+
}
|
| 196 |
+
]
|
| 197 |
}
|
|
@@ -1,176 +1,180 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
"lessonText": "La banque regarde ton CARACTÈRE, ta CAPACITÉ de remboursement, ton CAPITAL, tes CONDITIONS et ta COUVERTURE (garantie).",
|
| 40 |
-
"exercisePrompt": "Lequel de ces 5 points te semble être ta plus grande force ?",
|
| 41 |
-
"exerciseType": "BUTTON",
|
| 42 |
-
"buttonsJson": [
|
| 43 |
-
{
|
| 44 |
-
"id": "capacite",
|
| 45 |
-
"title": "Capacité de remboursement"
|
| 46 |
-
},
|
| 47 |
-
{
|
| 48 |
-
"id": "caractere",
|
| 49 |
-
"title": "Caractère / Profil"
|
| 50 |
-
},
|
| 51 |
-
{
|
| 52 |
-
"id": "capital",
|
| 53 |
-
"title": "Capital propre"
|
| 54 |
-
}
|
| 55 |
-
]
|
| 56 |
},
|
| 57 |
{
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
"lessonText": "Le financeur veut voir ton Chiffre d'Affaire, ta Marge et ton Bénéfice net. Il veut savoir en combien de temps il récupère son argent.",
|
| 61 |
-
"exercisePrompt": "Si on te prête 1 million, en combien de mois pourrais-tu le rembourser ?",
|
| 62 |
-
"exerciseType": "TEXT",
|
| 63 |
-
"exerciseCriteria": {
|
| 64 |
-
"version": "1.0",
|
| 65 |
-
"type": "TEXT",
|
| 66 |
-
"goal": "Estimation de la capacité de remboursement",
|
| 67 |
-
"success": {
|
| 68 |
-
"mustInclude": [
|
| 69 |
-
{
|
| 70 |
-
"id": "PERIOD",
|
| 71 |
-
"desc": "un délai de remboursement cohérent",
|
| 72 |
-
"weight": 5
|
| 73 |
-
}
|
| 74 |
-
],
|
| 75 |
-
"threshold": {
|
| 76 |
-
"minScore": 5,
|
| 77 |
-
"minMustPass": 1
|
| 78 |
-
}
|
| 79 |
-
}
|
| 80 |
-
}
|
| 81 |
},
|
| 82 |
{
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
}
|
| 105 |
}
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
"
|
| 109 |
-
"
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
"weight": 3
|
| 133 |
-
}
|
| 134 |
-
],
|
| 135 |
-
"threshold": {
|
| 136 |
-
"minScore": 7,
|
| 137 |
-
"minMustPass": 2
|
| 138 |
-
}
|
| 139 |
-
},
|
| 140 |
-
"evaluation": {
|
| 141 |
-
"tone": "coach_enthusiastic",
|
| 142 |
-
"format": "3_lines"
|
| 143 |
-
}
|
| 144 |
}
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
"
|
| 148 |
-
"
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
},
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 174 |
}
|
| 175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T5-FR",
|
| 3 |
+
"title": "Financement & Investissement (FR)",
|
| 4 |
+
"language": "FR",
|
| 5 |
+
"description": "Préparez votre dossier de financement et apprenez à convaincre les banques et les investisseurs.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Banque vs Microfinance",
|
| 10 |
+
"lessonText": "Bienvenue au Niveau final ! Aujourd'hui, on regarde où chercher l'argent. Banque, Microfinance, ou Investisseurs ? Chaque source a ses propres règles.",
|
| 11 |
+
"exercisePrompt": "Quel montant as-tu besoin pour passer à l'étape suivante de ton business ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Évaluer le besoin de financement",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "AMOUNT",
|
| 21 |
+
"desc": "un montant réaliste",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"videoUrl": "https://r2.xamle.sn/videos/v8_1.mp4",
|
| 36 |
+
"videoCaption": "🚀 Croissance : Bul gawu dax !"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"dayNumber": 2,
|
| 40 |
+
"title": "Les 5C du Crédit",
|
| 41 |
+
"lessonText": "La banque regarde ton CARACTÈRE, ta CAPACITÉ de remboursement, ton CAPITAL, tes CONDITIONS et ta COUVERTURE (garantie).",
|
| 42 |
+
"exercisePrompt": "Lequel de ces 5 points te semble être ta plus grande force ?",
|
| 43 |
+
"exerciseType": "BUTTON",
|
| 44 |
+
"buttonsJson": [
|
| 45 |
{
|
| 46 |
+
"id": "capacite",
|
| 47 |
+
"title": "Capacité de remboursement"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
},
|
| 49 |
{
|
| 50 |
+
"id": "caractere",
|
| 51 |
+
"title": "Caractère / Profil"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
},
|
| 53 |
{
|
| 54 |
+
"id": "capital",
|
| 55 |
+
"title": "Capital propre"
|
| 56 |
+
}
|
| 57 |
+
]
|
| 58 |
+
},
|
| 59 |
+
{
|
| 60 |
+
"dayNumber": 3,
|
| 61 |
+
"title": "Chiffres Clés",
|
| 62 |
+
"lessonText": "Le financeur veut voir ton Chiffre d'Affaire, ta Marge et ton Bénéfice net. Il veut savoir en combien de temps il récupère son argent.",
|
| 63 |
+
"exercisePrompt": "Si on te prête 1 million, en combien de mois pourrais-tu le rembourser ?",
|
| 64 |
+
"exerciseType": "TEXT",
|
| 65 |
+
"exerciseCriteria": {
|
| 66 |
+
"version": "1.0",
|
| 67 |
+
"type": "TEXT",
|
| 68 |
+
"goal": "Estimation de la capacité de remboursement",
|
| 69 |
+
"success": {
|
| 70 |
+
"mustInclude": [
|
| 71 |
+
{
|
| 72 |
+
"id": "PERIOD",
|
| 73 |
+
"desc": "un délai de remboursement cohérent",
|
| 74 |
+
"weight": 5
|
|
|
|
| 75 |
}
|
| 76 |
+
],
|
| 77 |
+
"threshold": {
|
| 78 |
+
"minScore": 5,
|
| 79 |
+
"minMustPass": 1
|
| 80 |
+
}
|
| 81 |
+
}
|
| 82 |
+
},
|
| 83 |
+
"videoUrl": "https://r2.xamle.sn/videos/v8_2.mp4",
|
| 84 |
+
"videoCaption": "🏁 Indicateurs : Xoolal sa tableau de bord."
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"dayNumber": 4,
|
| 88 |
+
"title": "Garanties Alternatives",
|
| 89 |
+
"lessonText": "Pas de titre foncier ? Utilise la caution solidaire, le nantissement de matériel, ou les fonds de garantie.",
|
| 90 |
+
"exercisePrompt": "Quelle garantie pourrais-tu proposer à une banque ?",
|
| 91 |
+
"exerciseType": "TEXT",
|
| 92 |
+
"exerciseCriteria": {
|
| 93 |
+
"version": "1.0",
|
| 94 |
+
"type": "TEXT",
|
| 95 |
+
"goal": "Identifier des garanties réelles",
|
| 96 |
+
"success": {
|
| 97 |
+
"mustInclude": [
|
| 98 |
+
{
|
| 99 |
+
"id": "GUARANTEE",
|
| 100 |
+
"desc": "stock, matériel, caution humaine ou solidaire",
|
| 101 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
}
|
| 103 |
+
],
|
| 104 |
+
"threshold": {
|
| 105 |
+
"minScore": 5,
|
| 106 |
+
"minMustPass": 1
|
| 107 |
+
}
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
},
|
| 111 |
+
{
|
| 112 |
+
"dayNumber": 5,
|
| 113 |
+
"title": "Le Pitch Financeur",
|
| 114 |
+
"lessonText": "Au banquier, on vend une certitude de remboursement. Montre-lui que tu maîtrises tes chiffres et ton risque.",
|
| 115 |
+
"exercisePrompt": "Envoie un audio pour me convaincre de te prêter de l'argent :",
|
| 116 |
+
"exerciseType": "AUDIO",
|
| 117 |
+
"exerciseCriteria": {
|
| 118 |
+
"version": "1.0",
|
| 119 |
+
"type": "AUDIO",
|
| 120 |
+
"goal": "Pitch de demande de financement",
|
| 121 |
+
"success": {
|
| 122 |
+
"mustInclude": [
|
| 123 |
+
{
|
| 124 |
+
"id": "NEED",
|
| 125 |
+
"desc": "besoin précis",
|
| 126 |
+
"weight": 3
|
| 127 |
},
|
| 128 |
+
{
|
| 129 |
+
"id": "REPAY",
|
| 130 |
+
"desc": "preuve de capacité de remboursement",
|
| 131 |
+
"weight": 4
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"id": "GUARANTEE",
|
| 135 |
+
"desc": "garantie citée",
|
| 136 |
+
"weight": 3
|
| 137 |
+
}
|
| 138 |
+
],
|
| 139 |
+
"threshold": {
|
| 140 |
+
"minScore": 7,
|
| 141 |
+
"minMustPass": 2
|
| 142 |
+
}
|
| 143 |
+
},
|
| 144 |
+
"evaluation": {
|
| 145 |
+
"tone": "coach_enthusiastic",
|
| 146 |
+
"format": "3_lines"
|
| 147 |
+
}
|
| 148 |
+
}
|
| 149 |
+
},
|
| 150 |
+
{
|
| 151 |
+
"dayNumber": 6,
|
| 152 |
+
"title": "Certification Finale",
|
| 153 |
+
"lessonText": "Félicitations ! Tu es un entrepreneur XAMLÉ. Tu as la vision, le modèle, la vente, la structure et le financement.",
|
| 154 |
+
"exercisePrompt": "Résume ton parcours en une phrase de fierté :",
|
| 155 |
+
"exerciseType": "TEXT",
|
| 156 |
+
"exerciseCriteria": {
|
| 157 |
+
"version": "1.0",
|
| 158 |
+
"type": "TEXT",
|
| 159 |
+
"goal": "Célébration finale",
|
| 160 |
+
"success": {
|
| 161 |
+
"mustInclude": [
|
| 162 |
+
{
|
| 163 |
+
"id": "PRIDE",
|
| 164 |
+
"desc": "expression de fierté ou réussite",
|
| 165 |
+
"weight": 5
|
| 166 |
+
}
|
| 167 |
+
],
|
| 168 |
+
"threshold": {
|
| 169 |
+
"minScore": 5,
|
| 170 |
+
"minMustPass": 1
|
| 171 |
+
}
|
| 172 |
}
|
| 173 |
+
},
|
| 174 |
+
"badges": [
|
| 175 |
+
"B_MODULE_5_OK",
|
| 176 |
+
"B_GRADUATED_XAMLE"
|
| 177 |
+
]
|
| 178 |
+
}
|
| 179 |
+
]
|
| 180 |
}
|
|
@@ -1,176 +1,180 @@
|
|
| 1 |
{
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
}
|
| 24 |
-
],
|
| 25 |
-
"threshold": {
|
| 26 |
-
"minScore": 5,
|
| 27 |
-
"minMustPass": 1
|
| 28 |
-
}
|
| 29 |
-
},
|
| 30 |
-
"evaluation": {
|
| 31 |
-
"tone": "coach_enthusiastic",
|
| 32 |
-
"format": "3_lines"
|
| 33 |
-
}
|
| 34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
{
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
"lessonText": "Banque bi dafay seet sa CARACTÈRE, sa CAPACITÉ ngir fay, sa CAPITAL, sa CONDITIONS, ak sa COUVERTURE (garantie).",
|
| 40 |
-
"exercisePrompt": "Ci ñetti point yii, yan nga ci gën a dëgër tey ?",
|
| 41 |
-
"exerciseType": "BUTTON",
|
| 42 |
-
"buttonsJson": [
|
| 43 |
-
{
|
| 44 |
-
"id": "capacite",
|
| 45 |
-
"title": "Mën naa fay / Capacité"
|
| 46 |
-
},
|
| 47 |
-
{
|
| 48 |
-
"id": "caractere",
|
| 49 |
-
"title": "Sama profil baax na"
|
| 50 |
-
},
|
| 51 |
-
{
|
| 52 |
-
"id": "capital",
|
| 53 |
-
"title": "Am naa capital"
|
| 54 |
-
}
|
| 55 |
-
]
|
| 56 |
},
|
| 57 |
{
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
"lessonText": "Financeur bi dafa bëgg a guiss sa CA (li ngay jaay), sa Marge, ak sa Bénéfice net. Dafa bëgg a xam kañ lay jotat xaalisam.",
|
| 61 |
-
"exercisePrompt": "Su ñu la abaloon 1 million, ci ñata wéer nga ko mën a faye ?",
|
| 62 |
-
"exerciseType": "TEXT",
|
| 63 |
-
"exerciseCriteria": {
|
| 64 |
-
"version": "1.0",
|
| 65 |
-
"type": "TEXT",
|
| 66 |
-
"goal": "Estimation de la capacité de remboursement (WOLOF)",
|
| 67 |
-
"success": {
|
| 68 |
-
"mustInclude": [
|
| 69 |
-
{
|
| 70 |
-
"id": "PERIOD",
|
| 71 |
-
"desc": "jamono mu dëggu",
|
| 72 |
-
"weight": 5
|
| 73 |
-
}
|
| 74 |
-
],
|
| 75 |
-
"threshold": {
|
| 76 |
-
"minScore": 5,
|
| 77 |
-
"minMustPass": 1
|
| 78 |
-
}
|
| 79 |
-
}
|
| 80 |
-
}
|
| 81 |
},
|
| 82 |
{
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
}
|
| 105 |
}
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
"
|
| 109 |
-
"
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
"weight": 3
|
| 133 |
-
}
|
| 134 |
-
],
|
| 135 |
-
"threshold": {
|
| 136 |
-
"minScore": 7,
|
| 137 |
-
"minMustPass": 2
|
| 138 |
-
}
|
| 139 |
-
},
|
| 140 |
-
"evaluation": {
|
| 141 |
-
"tone": "coach_enthusiastic",
|
| 142 |
-
"format": "3_lines"
|
| 143 |
-
}
|
| 144 |
}
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
"
|
| 148 |
-
"
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
},
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 174 |
}
|
| 175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"trackId": "T5-WO",
|
| 3 |
+
"title": "Financement & Investissement (WOLOF)",
|
| 4 |
+
"language": "WOLOF",
|
| 5 |
+
"description": "Préparez votre dossier de financement et apprenez à convaincre les banques et les investisseurs.",
|
| 6 |
+
"days": [
|
| 7 |
+
{
|
| 8 |
+
"dayNumber": 1,
|
| 9 |
+
"title": "Banque vs Microfinance",
|
| 10 |
+
"lessonText": "Dalal jàmm ci Niveau bi gën a mag ! Tey dañuy seet fan ngay utée xaalis. Banque, Microfinance, walla Investisseurs ? Ñépp am nañu sen règle yu fële.",
|
| 11 |
+
"exercisePrompt": "Ñata xaalis nga soxla ngir yokk sa business tey ?",
|
| 12 |
+
"exerciseType": "TEXT",
|
| 13 |
+
"exerciseCriteria": {
|
| 14 |
+
"version": "1.0",
|
| 15 |
+
"type": "TEXT",
|
| 16 |
+
"goal": "Évaluer le besoin de financement (WOLOF)",
|
| 17 |
+
"success": {
|
| 18 |
+
"mustInclude": [
|
| 19 |
+
{
|
| 20 |
+
"id": "AMOUNT",
|
| 21 |
+
"desc": "montant bu leer",
|
| 22 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
+
],
|
| 25 |
+
"threshold": {
|
| 26 |
+
"minScore": 5,
|
| 27 |
+
"minMustPass": 1
|
| 28 |
+
}
|
| 29 |
},
|
| 30 |
+
"evaluation": {
|
| 31 |
+
"tone": "coach_enthusiastic",
|
| 32 |
+
"format": "3_lines"
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"videoUrl": "https://r2.xamle.sn/videos/v8_1.mp4",
|
| 36 |
+
"videoCaption": "🚀 Croissance : Bul gawu dax !"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"dayNumber": 2,
|
| 40 |
+
"title": "Li Banque di laaj",
|
| 41 |
+
"lessonText": "Banque bi dafay seet sa CARACTÈRE, sa CAPACITÉ ngir fay, sa CAPITAL, sa CONDITIONS, ak sa COUVERTURE (garantie).",
|
| 42 |
+
"exercisePrompt": "Ci ñetti point yii, yan nga ci gën a dëgër tey ?",
|
| 43 |
+
"exerciseType": "BUTTON",
|
| 44 |
+
"buttonsJson": [
|
| 45 |
{
|
| 46 |
+
"id": "capacite",
|
| 47 |
+
"title": "Mën naa fay / Capacité"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
},
|
| 49 |
{
|
| 50 |
+
"id": "caractere",
|
| 51 |
+
"title": "Sama profil baax na"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
},
|
| 53 |
{
|
| 54 |
+
"id": "capital",
|
| 55 |
+
"title": "Am naa capital"
|
| 56 |
+
}
|
| 57 |
+
]
|
| 58 |
+
},
|
| 59 |
+
{
|
| 60 |
+
"dayNumber": 3,
|
| 61 |
+
"title": "Chiffre yi",
|
| 62 |
+
"lessonText": "Financeur bi dafa bëgg a guiss sa CA (li ngay jaay), sa Marge, ak sa Bénéfice net. Dafa bëgg a xam kañ lay jotat xaalisam.",
|
| 63 |
+
"exercisePrompt": "Su ñu la abaloon 1 million, ci ñata wéer nga ko mën a faye ?",
|
| 64 |
+
"exerciseType": "TEXT",
|
| 65 |
+
"exerciseCriteria": {
|
| 66 |
+
"version": "1.0",
|
| 67 |
+
"type": "TEXT",
|
| 68 |
+
"goal": "Estimation de la capacité de remboursement (WOLOF)",
|
| 69 |
+
"success": {
|
| 70 |
+
"mustInclude": [
|
| 71 |
+
{
|
| 72 |
+
"id": "PERIOD",
|
| 73 |
+
"desc": "jamono mu dëggu",
|
| 74 |
+
"weight": 5
|
|
|
|
| 75 |
}
|
| 76 |
+
],
|
| 77 |
+
"threshold": {
|
| 78 |
+
"minScore": 5,
|
| 79 |
+
"minMustPass": 1
|
| 80 |
+
}
|
| 81 |
+
}
|
| 82 |
+
},
|
| 83 |
+
"videoUrl": "https://r2.xamle.sn/videos/v8_2.mp4",
|
| 84 |
+
"videoCaption": "🏁 Indicateurs : Xoolal sa tableau de bord."
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"dayNumber": 4,
|
| 88 |
+
"title": "Garantie yi",
|
| 89 |
+
"lessonText": "Amul titre foncier ? Am na yeneen garantie : caution solidaire, denc sa matériel, walla fonds de garantie.",
|
| 90 |
+
"exercisePrompt": "Yan garantie nga mën a propose banque bi ?",
|
| 91 |
+
"exerciseType": "TEXT",
|
| 92 |
+
"exerciseCriteria": {
|
| 93 |
+
"version": "1.0",
|
| 94 |
+
"type": "TEXT",
|
| 95 |
+
"goal": "Identifier des garanties réelles (WOLOF)",
|
| 96 |
+
"success": {
|
| 97 |
+
"mustInclude": [
|
| 98 |
+
{
|
| 99 |
+
"id": "GUARANTEE",
|
| 100 |
+
"desc": "matériel, caution walla dëkkëndo",
|
| 101 |
+
"weight": 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
}
|
| 103 |
+
],
|
| 104 |
+
"threshold": {
|
| 105 |
+
"minScore": 5,
|
| 106 |
+
"minMustPass": 1
|
| 107 |
+
}
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
},
|
| 111 |
+
{
|
| 112 |
+
"dayNumber": 5,
|
| 113 |
+
"title": "Pitch Financeur",
|
| 114 |
+
"lessonText": "Doo jaay banquier bi sa produit, dangay jaay woolu ne mën nga fay sa bor. Wone ko ne nga xam sa chiffre yi.",
|
| 115 |
+
"exercisePrompt": "Yónnee ma audio ngir wóoral ma ma abal la xaalis :",
|
| 116 |
+
"exerciseType": "AUDIO",
|
| 117 |
+
"exerciseCriteria": {
|
| 118 |
+
"version": "1.0",
|
| 119 |
+
"type": "AUDIO",
|
| 120 |
+
"goal": "Pitch de demande de financement (WOLOF)",
|
| 121 |
+
"success": {
|
| 122 |
+
"mustInclude": [
|
| 123 |
+
{
|
| 124 |
+
"id": "NEED",
|
| 125 |
+
"desc": "li nga soxla",
|
| 126 |
+
"weight": 3
|
| 127 |
},
|
| 128 |
+
{
|
| 129 |
+
"id": "REPAY",
|
| 130 |
+
"desc": "naka ngay faye",
|
| 131 |
+
"weight": 4
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"id": "GUARANTEE",
|
| 135 |
+
"desc": "garantie bi",
|
| 136 |
+
"weight": 3
|
| 137 |
+
}
|
| 138 |
+
],
|
| 139 |
+
"threshold": {
|
| 140 |
+
"minScore": 7,
|
| 141 |
+
"minMustPass": 2
|
| 142 |
+
}
|
| 143 |
+
},
|
| 144 |
+
"evaluation": {
|
| 145 |
+
"tone": "coach_enthusiastic",
|
| 146 |
+
"format": "3_lines"
|
| 147 |
+
}
|
| 148 |
+
}
|
| 149 |
+
},
|
| 150 |
+
{
|
| 151 |
+
"dayNumber": 6,
|
| 152 |
+
"title": "Certification Finale",
|
| 153 |
+
"lessonText": "Félicitations ! Nga pare lépp. Am nga gis-gis bi, pexe bi, jaay bi, organisation bi, ak financement bi. Entrepreneur XAMLÉ nga !",
|
| 154 |
+
"exercisePrompt": "Bindal ma benn phrase ngir wone sa mbégte ci parcours bi :",
|
| 155 |
+
"exerciseType": "TEXT",
|
| 156 |
+
"exerciseCriteria": {
|
| 157 |
+
"version": "1.0",
|
| 158 |
+
"type": "TEXT",
|
| 159 |
+
"goal": "Célébration finale (WOLOF)",
|
| 160 |
+
"success": {
|
| 161 |
+
"mustInclude": [
|
| 162 |
+
{
|
| 163 |
+
"id": "PRIDE",
|
| 164 |
+
"desc": "mbégte walla roussi",
|
| 165 |
+
"weight": 5
|
| 166 |
+
}
|
| 167 |
+
],
|
| 168 |
+
"threshold": {
|
| 169 |
+
"minScore": 5,
|
| 170 |
+
"minMustPass": 1
|
| 171 |
+
}
|
| 172 |
}
|
| 173 |
+
},
|
| 174 |
+
"badges": [
|
| 175 |
+
"B_MODULE_5_OK",
|
| 176 |
+
"B_GRADUATED_XAMLE"
|
| 177 |
+
]
|
| 178 |
+
}
|
| 179 |
+
]
|
| 180 |
}
|
|
@@ -75,6 +75,8 @@ model TrackDay {
|
|
| 75 |
dayNumber Float
|
| 76 |
title String?
|
| 77 |
audioUrl String?
|
|
|
|
|
|
|
| 78 |
lessonText String?
|
| 79 |
exerciseType ExerciseType @default(TEXT)
|
| 80 |
exercisePrompt String?
|
|
|
|
| 75 |
dayNumber Float
|
| 76 |
title String?
|
| 77 |
audioUrl String?
|
| 78 |
+
videoUrl String?
|
| 79 |
+
videoCaption String?
|
| 80 |
lessonText String?
|
| 81 |
exerciseType ExerciseType @default(TEXT)
|
| 82 |
exercisePrompt String?
|
|
@@ -65,6 +65,8 @@ async function syncTrackFile(prisma: PrismaClient, filePath: string) {
|
|
| 65 |
exerciseCriteria: day.exerciseCriteria || null,
|
| 66 |
badges: day.badges || null,
|
| 67 |
audioUrl: day.audioUrl || null,
|
|
|
|
|
|
|
| 68 |
buttonsJson: day.buttonsJson || null,
|
| 69 |
});
|
| 70 |
}
|
|
@@ -144,11 +146,21 @@ async function upsertTrackDay(prisma: PrismaClient, trackId: string, dayNumber:
|
|
| 144 |
if (existing) {
|
| 145 |
await prisma.trackDay.update({
|
| 146 |
where: { id: existing.id },
|
| 147 |
-
data
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
});
|
| 149 |
} else {
|
| 150 |
await prisma.trackDay.create({
|
| 151 |
-
data: {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
});
|
| 153 |
}
|
| 154 |
}
|
|
|
|
| 65 |
exerciseCriteria: day.exerciseCriteria || null,
|
| 66 |
badges: day.badges || null,
|
| 67 |
audioUrl: day.audioUrl || null,
|
| 68 |
+
videoUrl: day.videoUrl || null,
|
| 69 |
+
videoCaption: day.videoCaption || null,
|
| 70 |
buttonsJson: day.buttonsJson || null,
|
| 71 |
});
|
| 72 |
}
|
|
|
|
| 146 |
if (existing) {
|
| 147 |
await prisma.trackDay.update({
|
| 148 |
where: { id: existing.id },
|
| 149 |
+
data: {
|
| 150 |
+
...data,
|
| 151 |
+
videoUrl: data.videoUrl || null,
|
| 152 |
+
videoCaption: data.videoCaption || null,
|
| 153 |
+
}
|
| 154 |
});
|
| 155 |
} else {
|
| 156 |
await prisma.trackDay.create({
|
| 157 |
+
data: {
|
| 158 |
+
...data,
|
| 159 |
+
trackId,
|
| 160 |
+
dayNumber,
|
| 161 |
+
videoUrl: data.videoUrl || null,
|
| 162 |
+
videoCaption: data.videoCaption || null,
|
| 163 |
+
}
|
| 164 |
});
|
| 165 |
}
|
| 166 |
}
|
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import dotenv from 'dotenv';
|
| 2 |
+
// Load root .env first
|
| 3 |
+
dotenv.config({ path: '/Volumes/sms/edtech/.env' });
|
| 4 |
+
|
| 5 |
+
const { R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_PUBLIC_URL } = process.env;
|
| 6 |
+
|
| 7 |
+
// ── Fast fail: show config status first ──────────────────────────────────────
|
| 8 |
+
console.log('\n📋 R2 Config Check:');
|
| 9 |
+
console.log(` R2_ACCOUNT_ID: ${R2_ACCOUNT_ID ? '✅ ' + R2_ACCOUNT_ID : '❌ MISSING'}`);
|
| 10 |
+
console.log(` R2_BUCKET: ${R2_BUCKET ? '✅ ' + R2_BUCKET : '❌ MISSING'}`);
|
| 11 |
+
console.log(` R2_ACCESS_KEY_ID: ${R2_ACCESS_KEY_ID ? '✅ SET' : '❌ MISSING'}`);
|
| 12 |
+
console.log(` R2_SECRET_ACCESS_KEY:${R2_SECRET_ACCESS_KEY ? '✅ SET' : '❌ MISSING'}`);
|
| 13 |
+
console.log(` R2_PUBLIC_URL: ${R2_PUBLIC_URL ? '✅ ' + R2_PUBLIC_URL : '❌ MISSING'}`);
|
| 14 |
+
|
| 15 |
+
if (!R2_ACCOUNT_ID || !R2_BUCKET || !R2_ACCESS_KEY_ID || !R2_SECRET_ACCESS_KEY || !R2_PUBLIC_URL) {
|
| 16 |
+
console.error('\n❌ Missing R2 credentials. Add these to /Volumes/sms/edtech/.env:');
|
| 17 |
+
console.error('\n R2_ACCOUNT_ID=<your_cloudflare_account_id>');
|
| 18 |
+
console.error(' R2_BUCKET=<your_bucket_name>');
|
| 19 |
+
console.error(' R2_ACCESS_KEY_ID=<your_r2_api_token_key_id>');
|
| 20 |
+
console.error(' R2_SECRET_ACCESS_KEY=<your_r2_api_token_secret>');
|
| 21 |
+
console.error(' R2_PUBLIC_URL=https://r2.xamle.sn');
|
| 22 |
+
console.error('\n Find them on: dash.cloudflare.com → R2 → Manage R2 API Tokens');
|
| 23 |
+
process.exit(1);
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
|
| 27 |
+
import fs from 'fs';
|
| 28 |
+
import path from 'path';
|
| 29 |
+
|
| 30 |
+
const ARTIFACTS_DIR = '/Users/macbookair/.gemini/antigravity/brain/ea618d02-1ee0-47c1-a2b7-aed00a3604bc';
|
| 31 |
+
|
| 32 |
+
const IMAGE_MAP = [
|
| 33 |
+
{ src: 'xaml_t1_j1_activity_1772065123770.png', dest: 'images/t1/bes1_activity.png' },
|
| 34 |
+
{ src: 'xaml_t1_j1_5_remediation_1772065225648.png', dest: 'images/t1/bes1_5_remediation.png' },
|
| 35 |
+
{ src: 'xaml_t1_j2_customer_1772065290030.png', dest: 'images/t1/bes2_customer.png' },
|
| 36 |
+
{ src: 'xaml_t1_j3_problem_1772065392345.png', dest: 'images/t1/bes3_problem.png' },
|
| 37 |
+
{ src: 'xaml_t1_j4_solution_1772065519438.png', dest: 'images/t1/bes4_solution.png' },
|
| 38 |
+
{ src: 'xaml_t1_j5_differentiation_v2_1772065582075.png', dest: 'images/t1/bes5_differentiation.png' },
|
| 39 |
+
{ src: 'xaml_t1_j6_pricing_v2_1772065655264.png', dest: 'images/t1/bes6_pricing.png' },
|
| 40 |
+
{ src: 'xaml_t1_j7_channel_sales_v2_1772065752541.png', dest: 'images/t1/bes7_channel.png' },
|
| 41 |
+
{ src: 'xaml_t1_j8_trust_1772065782385.png', dest: 'images/t1/bes8_trust.png' },
|
| 42 |
+
{ src: 'xaml_t1_j9_pitch_1772065807317.png', dest: 'images/t1/bes9_pitch.png' },
|
| 43 |
+
{ src: 'xaml_t1_j10_objections_1772065830459.png', dest: 'images/t1/bes10_objections.png' },
|
| 44 |
+
{ src: 'xaml_t1_j11_plan_1772065894417.png', dest: 'images/t1/bes11_plan.png' },
|
| 45 |
+
{ src: 'xaml_t1_j12_success_1772065982976.png', dest: 'images/t1/bes12_success.png' },
|
| 46 |
+
];
|
| 47 |
+
|
| 48 |
+
async function main() {
|
| 49 |
+
const { R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_PUBLIC_URL } = process.env;
|
| 50 |
+
|
| 51 |
+
console.log('📋 R2 Config Check:');
|
| 52 |
+
console.log(' R2_ACCOUNT_ID:', R2_ACCOUNT_ID ? '✅ SET' : '❌ MISSING');
|
| 53 |
+
console.log(' R2_BUCKET:', R2_BUCKET ? `✅ ${R2_BUCKET}` : '❌ MISSING');
|
| 54 |
+
console.log(' R2_ACCESS_KEY_ID:', R2_ACCESS_KEY_ID ? '✅ SET' : '❌ MISSING');
|
| 55 |
+
console.log(' R2_SECRET_ACCESS_KEY:', R2_SECRET_ACCESS_KEY ? '✅ SET' : '❌ MISSING');
|
| 56 |
+
console.log(' R2_PUBLIC_URL:', R2_PUBLIC_URL || '❌ MISSING');
|
| 57 |
+
|
| 58 |
+
if (!R2_ACCOUNT_ID || !R2_BUCKET || !R2_ACCESS_KEY_ID || !R2_SECRET_ACCESS_KEY) {
|
| 59 |
+
console.error('\n❌ Missing R2 environment variables. Stopping.');
|
| 60 |
+
process.exit(1);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
const client = new S3Client({
|
| 64 |
+
region: 'auto',
|
| 65 |
+
endpoint: `https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
|
| 66 |
+
credentials: { accessKeyId: R2_ACCESS_KEY_ID, secretAccessKey: R2_SECRET_ACCESS_KEY },
|
| 67 |
+
});
|
| 68 |
+
|
| 69 |
+
console.log('\n🚀 Uploading 13 T1 images to R2...\n');
|
| 70 |
+
let ok = 0, failed = 0;
|
| 71 |
+
|
| 72 |
+
for (const { src, dest } of IMAGE_MAP) {
|
| 73 |
+
const srcPath = path.join(ARTIFACTS_DIR, src);
|
| 74 |
+
|
| 75 |
+
if (!fs.existsSync(srcPath)) {
|
| 76 |
+
console.warn(`⚠️ Not found: ${src}`);
|
| 77 |
+
failed++;
|
| 78 |
+
continue;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
try {
|
| 82 |
+
const buf = fs.readFileSync(srcPath);
|
| 83 |
+
await client.send(new PutObjectCommand({
|
| 84 |
+
Bucket: R2_BUCKET,
|
| 85 |
+
Key: dest,
|
| 86 |
+
Body: buf,
|
| 87 |
+
ContentType: 'image/png',
|
| 88 |
+
CacheControl: 'public, max-age=31536000',
|
| 89 |
+
}));
|
| 90 |
+
const publicUrl = `${(R2_PUBLIC_URL || '').replace(/\/$/, '')}/${dest}`;
|
| 91 |
+
console.log(`✅ ${dest}`);
|
| 92 |
+
console.log(` URL: ${publicUrl}`);
|
| 93 |
+
ok++;
|
| 94 |
+
} catch (e: any) {
|
| 95 |
+
console.error(`❌ ${dest}: ${e.message}`);
|
| 96 |
+
failed++;
|
| 97 |
+
}
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
console.log(`\n── RÉSULTAT ────────────────────`);
|
| 101 |
+
console.log(`✅ Uploaded: ${ok}/${IMAGE_MAP.length}`);
|
| 102 |
+
if (failed > 0) {
|
| 103 |
+
console.log(`❌ Failed: ${failed}`);
|
| 104 |
+
process.exit(1);
|
| 105 |
+
} else {
|
| 106 |
+
console.log(`\n🎉 Toutes les images T1 sont maintenant sur R2 !`);
|
| 107 |
+
console.log(` Les leçons WhatsApp du module T1 afficheront bien les images.`);
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
main().catch(e => { console.error(e); process.exit(1); });
|