Spaces:
Sleeping
Sleeping
Download frontend/src/lib/data.ts from luli331/letudiant_admin: direct link, hf CLI and curl.
- Browser
- Download file 12 kB
-
https://huggingface.co/spaces/luli331/letudiant_admin/resolve/main/frontend/src/lib/data.ts
- Command line
-
hf download hf://spaces/luli331/letudiant_admin/frontend/src/lib/data.ts
-
curl -L -o data.ts https://huggingface.co/spaces/luli331/letudiant_admin/resolve/main/frontend/src/lib/data.ts
12 kB
| // Mock data for L'Étudiant Admin Console | |
| export interface Lead { | |
| id: string | |
| name: string | |
| academic_level: string | |
| total_score: number | |
| intent_score: number | |
| engagement_score: number | |
| monetisable_score: number | |
| tier_label: "BASE" | "SILVER" | "GOLD" | "PLATINUM" | |
| tier_eur: number | |
| resell_factor: number | |
| monetisable_value_eur: number | |
| why_driver: string | |
| action: string | |
| is_minor_under15: boolean | |
| consent_partner: boolean | |
| consent_call: boolean | |
| timeline_events: { time: string; label: string; icon: string; detail?: string }[] | |
| } | |
| export interface Stand { | |
| rank: number | |
| name: string | |
| sector: "Tech" | "Business" | "Art" | "Santé" | |
| hall: "A" | "B" | "C" | |
| zone: string | |
| stand_scans: number | |
| brochure_downloads: number | |
| mini_game_engagement: number | |
| conversion_rate: number | |
| trend_delta: number | |
| high_intent_scans: number | |
| avg_score: number | |
| dwell_time: string | |
| intent_level: "ÉLEVÉ" | "MOYEN" | "FAIBLE" | |
| } | |
| export interface Conference { | |
| id: string | |
| title: string | |
| tags: string[] | |
| scans: number | |
| slide_downloads: number | |
| engagement_rate: number | |
| trend_delta: number | |
| location: string | |
| time: string | |
| } | |
| export interface HourlyEngagement { | |
| hour: string | |
| scans_stand: number | |
| scans_conference: number | |
| } | |
| // Generate leads | |
| const firstNames = ["Julien", "Léa", "Thomas", "Sarah", "Marc", "Camille", "Hugo", "Chloé", "Enzo", "Manon", "Lucas", "Inès", "Nathan", "Jade", "Léo", "Emma", "Louis", "Alice", "Raphaël", "Louise", "Gabriel", "Zoé", "Arthur", "Charlotte", "Jules", "Amandine", "Paul", "Sophie", "Maxime", "Clara"] | |
| const lastNames = ["Depardieu", "Martinez", "Claire", "Vallee", "Antoine", "Petit", "Bernard", "Dubois", "Simon", "Leroy", "Roux", "Morel", "Garcia", "Robert", "Richard", "Durand", "Moreau", "Laurent", "Michel", "Fournier", "Lefebvre", "Mercier", "Bonnet", "Dupont", "Girard", "Andre", "Lefevre", "Rousseau", "Vincent", "Muller"] | |
| const levels = ["Terminale", "Bac+1", "Bac+2", "Bac+3", "Licence", "Master 1", "Master 2", "Première"] | |
| const actions = ["Exhibitor Scan", "Quiz Completion", "Newsletter Opt-in", "Webinar Attendee", "Direct Appointment", "Brochure Download", "Organic Search", "Social Ad Click", "Campus Visit", "Email Engagement", "Portal Inquiry", "Form Submission", "Reference", "Event Sign-up", "App Download"] | |
| function getTierFromScore(score: number): { label: "BASE" | "SILVER" | "GOLD" | "PLATINUM"; eur: number } { | |
| if (score >= 90) return { label: "PLATINUM", eur: 23 } | |
| if (score >= 75) return { label: "GOLD", eur: 15 } | |
| if (score >= 50) return { label: "SILVER", eur: 3 } | |
| return { label: "BASE", eur: 0 } | |
| } | |
| export const leads: Lead[] = Array.from({ length: 60 }, (_, i) => { | |
| const intent = Math.floor(Math.random() * 40) + 60 | |
| const engagement = Math.floor(Math.random() * 40) + 60 | |
| const monetisable = Math.floor(Math.random() * 40) + 60 | |
| const total = Math.floor((intent * 0.4 + engagement * 0.35 + monetisable * 0.25)) | |
| const tier = getTierFromScore(total) | |
| const factor = [1, 1, 2, 2, 2, 3][Math.floor(Math.random() * 6)] | |
| const isMinor = Math.random() < 0.08 | |
| return { | |
| id: `ETD-${92841 + i}`, | |
| name: `${firstNames[i % firstNames.length]} ${lastNames[i % lastNames.length]}`, | |
| academic_level: levels[Math.floor(Math.random() * levels.length)], | |
| total_score: total, | |
| intent_score: intent, | |
| engagement_score: engagement, | |
| monetisable_score: monetisable, | |
| tier_label: tier.label, | |
| tier_eur: tier.eur, | |
| resell_factor: factor, | |
| monetisable_value_eur: parseFloat((tier.eur * factor * (1 + Math.random() * 0.5)).toFixed(2)), | |
| why_driver: actions[Math.floor(Math.random() * actions.length)], | |
| action: ["Export", "Nurture ORI", "Consent", "Anonymised export"][Math.floor(Math.random() * 4)], | |
| is_minor_under15: isMinor, | |
| consent_partner: Math.random() > 0.3, | |
| consent_call: Math.random() > 0.5, | |
| timeline_events: [ | |
| { time: "AUJOURD'HUI, 14:20", label: "Scan Hall de Conférence", icon: "scan", detail: "Le Salon de l'Étudiant - Paris" }, | |
| { time: "AUJOURD'HUI, 11:45", label: "Visite Stand: HEC Paris", icon: "visit", detail: "Contact établi avec le responsable de recrutement" }, | |
| { time: "HIER, 09:12", label: "Enregistrement Portail", icon: "register", detail: "Activation badge numérique et synchro profil" }, | |
| { time: "IL Y A 3 JOURS", label: "Inscription Newsletter", icon: "newsletter", detail: "Opt-in pour les communications partenaires" }, | |
| ] | |
| } | |
| }) | |
| // Generate stands | |
| const standNames = [ | |
| "Epitech Technology", "HEC Paris", "Sorbonne Université", "Engineering Lyon", "Business School", "Tech Academy", | |
| "ESSEC Business School", "École Polytechnique", "Sciences Po", "ESCP Europe", "EDHEC", "EM Lyon", | |
| "Centrale Paris", "ENSAE", "Mines ParisTech", "Arts et Métiers", "KEDGE Business School", "Audencia", | |
| "Grenoble École de Management", "TBS Education", "IESEG", "SKEMA", "NEOMA", "ICN Business School", | |
| "Montpellier Business School", "ISC Paris", "EDC Paris", "ESSCA", "PSB Paris School of Business", "IPAG" | |
| ] | |
| export const stands: Stand[] = standNames.map((name, i) => { | |
| const sectors: ("Tech" | "Business" | "Art" | "Santé")[] = ["Tech", "Business", "Art", "Santé"] | |
| const halls: ("A" | "B" | "C")[] = ["A", "B", "C"] | |
| const scans = Math.floor(Math.random() * 2000) + 300 | |
| const downloads = Math.floor(scans * (0.4 + Math.random() * 0.4)) | |
| const conversion = parseFloat((10 + Math.random() * 15).toFixed(1)) | |
| const avgScore = Math.floor(70 + Math.random() * 25) | |
| return { | |
| rank: i + 1, | |
| name, | |
| sector: sectors[i % 4], | |
| hall: halls[i % 3], | |
| zone: `ZONE ${String(Math.floor(Math.random() * 15) + 1).padStart(2, "0")}`, | |
| stand_scans: scans, | |
| brochure_downloads: downloads, | |
| mini_game_engagement: Math.floor(Math.random() * 100), | |
| conversion_rate: conversion, | |
| trend_delta: parseFloat((-20 + Math.random() * 50).toFixed(1)), | |
| high_intent_scans: Math.floor(scans * 0.15), | |
| avg_score: avgScore, | |
| dwell_time: `${Math.floor(5 + Math.random() * 10)}:${String(Math.floor(Math.random() * 60)).padStart(2, "0")}`, | |
| intent_level: avgScore > 85 ? "ÉLEVÉ" : avgScore > 70 ? "MOYEN" : "FAIBLE" | |
| } | |
| }) | |
| // Sort stands by scans | |
| stands.sort((a, b) => b.stand_scans - a.stand_scans) | |
| stands.forEach((s, i) => s.rank = i + 1) | |
| // Generate conferences | |
| export const conferences: Conference[] = [ | |
| { id: "C1", title: "Se réorienter après une Licence", tags: ["ORIENTATION", "POST-LICENCE"], scans: 1248, slide_downloads: 432, engagement_rate: 85, trend_delta: 12, location: "Amphi 1", time: "14:30 - 15:30" }, | |
| { id: "C2", title: "Les métiers de la Tech en 2024", tags: ["TECH", "EMPLOI"], scans: 982, slide_downloads: 356, engagement_rate: 78, trend_delta: 8, location: "Salle A", time: "10:00 - 11:00" }, | |
| { id: "C3", title: "Comment financer ses études ?", tags: ["FINANCEMENT", "BOURSES"], scans: 876, slide_downloads: 421, engagement_rate: 82, trend_delta: 15, location: "Amphi 2", time: "11:30 - 12:30" }, | |
| { id: "C4", title: "L'alternance : mode d'emploi", tags: ["ALTERNANCE", "EMPLOI"], scans: 754, slide_downloads: 289, engagement_rate: 71, trend_delta: -3, location: "Salle B", time: "14:00 - 15:00" }, | |
| { id: "C5", title: "Études à l'étranger", tags: ["INTERNATIONAL", "MOBILITÉ"], scans: 698, slide_downloads: 234, engagement_rate: 68, trend_delta: 22, location: "Salle C", time: "15:30 - 16:30" }, | |
| { id: "C6", title: "Parcoursup : les clés du succès", tags: ["PARCOURSUP", "ORIENTATION"], scans: 1456, slide_downloads: 567, engagement_rate: 91, trend_delta: 5, location: "Grand Amphi", time: "09:00 - 10:00" }, | |
| { id: "C7", title: "Les écoles de commerce", tags: ["BUSINESS", "GRANDES ÉCOLES"], scans: 623, slide_downloads: 198, engagement_rate: 65, trend_delta: -8, location: "Salle D", time: "16:00 - 17:00" }, | |
| { id: "C8", title: "Médecine et santé", tags: ["SANTÉ", "MÉDECINE"], scans: 589, slide_downloads: 267, engagement_rate: 74, trend_delta: 11, location: "Amphi 3", time: "13:00 - 14:00" }, | |
| { id: "C9", title: "Arts et création", tags: ["ART", "DESIGN"], scans: 412, slide_downloads: 156, engagement_rate: 62, trend_delta: -2, location: "Espace Créatif", time: "15:00 - 16:00" }, | |
| { id: "C10", title: "Ingénierie et Sciences", tags: ["INGÉNIEUR", "SCIENCES"], scans: 834, slide_downloads: 312, engagement_rate: 76, trend_delta: 18, location: "Amphi 1", time: "11:00 - 12:00" }, | |
| { id: "C11", title: "Droit et Sciences Politiques", tags: ["DROIT", "SCIENCES PO"], scans: 567, slide_downloads: 234, engagement_rate: 69, trend_delta: 4, location: "Salle E", time: "14:30 - 15:30" }, | |
| { id: "C12", title: "Entrepreneuriat étudiant", tags: ["STARTUP", "ENTREPRENEURIAT"], scans: 445, slide_downloads: 178, engagement_rate: 72, trend_delta: 25, location: "Espace Innovation", time: "16:30 - 17:30" }, | |
| { id: "C13", title: "Les métiers du numérique", tags: ["DIGITAL", "TECH"], scans: 723, slide_downloads: 289, engagement_rate: 77, trend_delta: 14, location: "Salle F", time: "10:30 - 11:30" }, | |
| { id: "C14", title: "Communication et Marketing", tags: ["MARKETING", "COMMUNICATION"], scans: 534, slide_downloads: 201, engagement_rate: 66, trend_delta: -5, location: "Salle G", time: "13:30 - 14:30" }, | |
| { id: "C15", title: "Développement durable et RSE", tags: ["RSE", "ENVIRONNEMENT"], scans: 489, slide_downloads: 187, engagement_rate: 73, trend_delta: 31, location: "Espace Vert", time: "15:30 - 16:30" }, | |
| ] | |
| // Generate hourly engagement data | |
| export const hourlyEngagement: HourlyEngagement[] = [ | |
| { hour: "08:00", scans_stand: 45, scans_conference: 20 }, | |
| { hour: "09:00", scans_stand: 120, scans_conference: 85 }, | |
| { hour: "10:00", scans_stand: 234, scans_conference: 156 }, | |
| { hour: "11:00", scans_stand: 312, scans_conference: 198 }, | |
| { hour: "12:00", scans_stand: 287, scans_conference: 134 }, | |
| { hour: "13:00", scans_stand: 198, scans_conference: 167 }, | |
| { hour: "14:00", scans_stand: 356, scans_conference: 245 }, | |
| { hour: "15:00", scans_stand: 423, scans_conference: 289 }, | |
| { hour: "16:00", scans_stand: 389, scans_conference: 312 }, | |
| { hour: "17:00", scans_stand: 298, scans_conference: 234 }, | |
| { hour: "18:00", scans_stand: 187, scans_conference: 145 }, | |
| { hour: "19:00", scans_stand: 89, scans_conference: 67 }, | |
| { hour: "20:00", scans_stand: 34, scans_conference: 23 }, | |
| ] | |
| // Dashboard KPIs | |
| export const dashboardKPIs = { | |
| revenue_velocity: 428500, | |
| revenue_growth: 12.4, | |
| confidence: 94, | |
| total_leads: 12400, | |
| opt_in_partner: 64, | |
| opt_in_partner_delta: 3, | |
| opt_in_call: 42, | |
| opt_in_call_delta: -1, | |
| tier_distribution: { | |
| tier1_vip: 1240, | |
| tier2_high: 4820, | |
| tier3_medium: 6340, | |
| }, | |
| timeline_stages: [ | |
| { stage: "INSCRIPTION", score: 20, value: 5 }, | |
| { stage: "AVANT L'ÉVÉNEMENT", score: 45, value: 18 }, | |
| { stage: "PENDANT L'ÉVÉNEMENT", score: 85, value: 55 }, | |
| { stage: "APRÈS L'ÉVÉNEMENT", score: 92, value: 72 }, | |
| ], | |
| measurement_plan: [ | |
| { indicator: "Qualité des Données", method: "API de Validation", frequency: "TEMPS RÉEL", threshold: "< 98.5%", action: "Bloquer Export" }, | |
| { indicator: "Intention Partenaire", method: "Analyse NLP", frequency: "HORAIRE", threshold: "< 15.0%", action: "Alerte Ops" }, | |
| { indicator: "Vélocité des Leads", method: "Flux d'Événements", frequency: "QUOTIDIEN", threshold: "> 500/h", action: "Mise à l'échelle" }, | |
| ], | |
| high_intensity_signals: [ | |
| { name: "Amandine V.", tier: 1, interaction: "Séminaire Master", value: 185, timeAgo: "2 MINS" }, | |
| { name: "Thomas G.", tier: 2, interaction: "Stand Salon Ingénieurs", value: 95, timeAgo: "14 MINS" }, | |
| { name: "Inès M.", tier: 1, interaction: "Portail Études Internationales", value: 210, timeAgo: "32 MINS" }, | |
| ] | |
| } | |
| // Stands KPIs | |
| export const standsKPIs = { | |
| stand_scans: { value: 1248, delta: 12 }, | |
| brochure_dl: { value: 842, delta: 5 }, | |
| mini_jeux: { value: 315, delta: -2 }, | |
| conf_scans: { value: 2104, delta: 24 }, | |
| high_intent: { value: 156, delta: 8 }, | |
| capture_rate: { value: 68, delta: 3 }, | |
| } | |