尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Application web progressive (PWA) d'orientation par IA. 15 pages HTML, mobile d'abord, FR/EN, conforme au document maître v3.0. Version 4 : questionnaire en images, deux accueils, parrainage, offres Premium masquées, vrais avis, rétention quotidienne. Version 5 : offres revérifiées avec règles automatiques, test A/B des couleurs mesuré avec PostHog, modes clair et sombre, localisation (pays, drapeaux de la région, FCFA / euro / dollar), 3 niveaux de langue, salutations selon l'heure + pseudo, Paramètres complets, page Contact, « Comment candidater ici » et « Mon dossier », page /admin. Version 6 : couleurs claires et accueillantes (A = blanc chaud, B = crème plus présent ; sombre seulement au choix), sensation au doigt (vibration Android, retour haptique iPhone, effet d'appui et « pop »), sauvegarde avec compte obligatoire, textes des offres revus. Version 7 : logo officiel (ruban orange) partout + écran d'ouverture animé, 43 offres vérifiées, guide « Comprendre les financements », IA branchée (« Est-ce pour moi ? », « Mon projet est-il prêt ? », aide admin), coffre-fort de candidature, connexion Apple prête, « Ce que LERNA sait de toi », barre du bas corrigée.
Version 8 (oct. 2026) — modèle Premium revu : l'information est gratuite, Premium paie l'aide pour décrocher sa place.
Toutes les offres sont visibles par tous (plus d'offre masquée) ; Pack Candidature (paiement unique, 6 mois, prix prix_pack
réglé dans /admin, 25 000 FCFA) ; onglet Budget dans Mon dossier (coût réel de la 1re année + plan B, Premium) ;
alertes ciblées Premium (nouvelle offre du domaine de la personne, étiquettes OneSignal premium, d1–d3) ;
page Premium centrée sur le résultat, bouton « Envoyer à mes parents » et FAQ « Pourquoi payer si les infos sont gratuites ? ».
Explorer → onglet France · Parcoursup : les ~25 800 formations de Parcoursup (année la plus récente), lues en direct dans les données
ouvertes du ministère (fr-esr-cartographie_formations_parcoursup, API Opendatasoft, CORS ouvert ; domaine ajouté à la CSP).
Explorer → onglet Monde : annuaire mondial (≈ 37 000 établissements, ~200 pays) reconstruit chaque mois par GitHub Actions
(.github/workflows/annuaire.yml → scripts/annuaire/build.mjs → assets/annuaire/<PAYS>.json). Sources : DEQAR (Europe, ODC-PDDL),
College Scorecard (États-Unis, frais officiels, domaine public), Office for Students (Angleterre, OGL v3), CRICOS (Australie, coûts déclarés,
CC BY 2.5 AU), Wikidata (autres pays, CC0, affiché « À vérifier »). Si une source échoue, ses anciennes fiches sont gardées ; erreurs dans index.json.
Fiche école → carte Reconnaissance et accréditation (assets/js/accred.js) : marche à suivre et registres officiels
(ANAQ-Sup, CAMES, Parcoursup, RNCP), sans jamais inventer de décision.
index.html Accueil découverte (nouveaux visiteurs) : hero, stats, 3 étapes, vrais avis (dès 3 avis vérifiés)
aujourdhui.html Accueil personnel une fois le questionnaire fait : parcours de X jours, niveau, mission du jour,
bourse du jour, mot du jour, quiz, mes écoles + échéances, invitation, alertes, assistant
questionnaire.html 25 questions en images (stickers), « Autre » + champ libre, niveau par langue,
question ouverte à la fin ; ?update=1 = mise à jour mensuelle en 5 questions
loading.html Analyse IA (5 s minimum), sceau LERNA animé
resultats.html Résumé, 5 écoles : 2 visibles, n°3-4 avec 3 amis invités (ou Premium), n°5 Premium
explorer.html 32 établissements, 6 filtres, pagination, favoris
ecole.html Fiche : Présentation | Filières | Admission | Coûts | Vie étudiante | Avis (vérifiés + lien Google)
opportunites.html Stages | Bourses | Emplois | Investisseurs ; offres Premium sans titre ni organisme ; sauvegarde
espace.html Profil, recommandations, rappels, offres sauvegardées, assistant IA, comparateur, candidatures, compte
premium.html Comparatif : 4 900 FCFA (7.99$)/mois, Pack Candidature 25 000 FCFA (39.99$) pour 6 mois, 39 000 FCFA (59.99$)/an, envoi aux parents
auth.html Inscription (avec pseudo facultatif) / connexion / Google / mot de passe oublié
dossier.html « Mon dossier » par école : étapes (avec dates officielles), documents, atelier lettre de motivation,
entraînement à l'entretien, CV en PDF, demande de recommandation, visa, suivi
parametres.html Compte, apparence (thème, texte, animations), langue, notifications, sons, orientation, accueil,
confidentialité, abonnement et parrainage, aide
contact.html Formulaire (problème, ajout, retrait, question, partenariat, données) — sans téléphone ni WhatsApp
admin.html Réservé à l'équipe (/admin) : offres, signalements, messages, tests A/B, taux de change
404.html Page introuvable
assets/css/lerna.css Design system unique : couleurs par variables (--bg, --surface, --panel…), thèmes clair (A/B) et sombre
assets/js/boot.js Chargé en premier : applique le thème (A/B ou choix de la personne) avant l'affichage, sans clignotement
assets/js/guides.js Guides « Comment candidater ici » (Parcoursup, Études en France, DAP, CAQ…) et liens officiels vérifiés
assets/js/core.js Navigation, FR/EN, compte, favoris, sons, sceau LERNA, stickers,
parcours/points/niveaux, parrainage, avis, installation, notifications
assets/js/questions.js Les 25 questions (+ EN), stickers, « Autre », niveaux de langue, drapeaux des pays
assets/js/daily.js Contenu du jour : missions, 36 mots, 30 quiz, bourse du jour
assets/js/data-schools.js Établissements (frais indicatifs en USD, points forts ET faibles)
assets/js/data-opps.js Offres publiques complètes + APERÇU des offres Premium (sans nom ni titre)
assets/js/engine.js Moteur de correspondance de secours (si l'IA ne répond pas)
assets/stickers/ 115 stickers WebP (questionnaire et accueil) — générés par scripts/build-stickers.py
assets/flags/ 206 drapeaux WebP (choix du pays, écoles)
api/analyze.js Analyse Claude (claude-sonnet-4-6), 5 écoles — 1 analyse/jour/IP en gratuit
api/chat.js Assistant IA — 5 messages/jour en gratuit ; mode « lettre » et « entretien » pour Mon dossier (3/jour en gratuit)
api/profile.js Sauvegarde du questionnaire fait avant la création du compte
api/referral.js Parrainage : code, compteur d'amis, rattachement d'un nouvel inscrit
api/opps.js Fiches complètes des offres Premium (Premium payé, ou tous avant le lancement)
api/review.js Avis sur LERNA (envoi + lecture des avis validés)
api/cron-daily.js Notification quotidienne (OneSignal), lancée chaque jour par Vercel Cron
api/config.js Configuration publique (aucune clé secrète) + pays vu par Vercel + réglages A/B et taux décidés dans /admin
api/message.js « Signaler une offre expirée » et formulaire Contact (transfert privé par email avec Resend)
api/webhook.js Lemon Squeezy → statut Premium (signature HMAC vérifiée)
api/account.js Suppression définitive du compte
supabase/schema.sql Tables + règles RLS + parrainage + avis + limitation de débit
supabase/seed.sql Écoles et opportunités (généré par `npm run seed`)
supabase/opps-premium.cjs Fiches complètes des offres Premium (jamais publié sur le site)
Sans aucune clé, l'app fonctionne en « mode aperçu » : comptes dans le navigateur, recommandations calculées par le moteur local, offres Premium en aperçu flouté.
python3 -m http.server 8000 # puis ouvre http://localhost:8000
Crée un dépôt privé, puis pousse ce dossier. Le .gitignore empêche d'envoyer un fichier .env.
Le fichier .vercelignore empêche de publier sur le site supabase/, scripts/ et la documentation
(sinon les fiches des offres Premium seraient lisibles à l'adresse du fichier).
supabase/schema.sql → Run. Puis supabase/seed.sql → Run. (Les deux peuvent être relancés sans risque.)https://ton-domaine, Redirect URLs : https://ton-domaine/**.anon et la clé service_role.sw.js), qui charge OneSignal tout seul..env.example./api/config répond, l'app passe du mode aperçu au mode réel.vercel.json (9 h UTC, livrée à 18 h heure locale de chaque personne). Elle n'envoie rien tant que CRON_SECRET et OneSignal ne sont pas configurés.LEMON_SQUEEZY_CHECKOUT_MONTHLY / _YEARLY.https://ton-domaine/premium.html?payment=success.https://ton-domaine/api/webhook, événements subscription_*, « signing secret » dans LEMON_SQUEEZY_WEBHOOK_SECRET.Crée la clé sur console.anthropic.com, mets-la dans ANTHROPIC_API_KEY sur Vercel et fixe une limite de dépense mensuelle.
Rien d'autre à changer : tout est déjà branché. Sans clé, chaque bouton IA affiche « disponible dès la mise en ligne ».
Tout passe par deux fonctions : /api/analyze (analyse du questionnaire) et /api/chat, avec un « mode » :
| Mode | Où | Gratuit / jour | Premium |
|---|---|---|---|
chat | Assistant de Mon espace | 5 | illimité (garde-fou 300) |
lettre, entretien | Mon dossier | 3 chacun | illimité |
offre | « Est-ce pour moi ? » sur chaque offre | 3 | illimité |
projet | « Mon projet est-il prêt ? » (onglet Investisseurs) | 2 | illimité |
admin_offre | /admin → Nouvelle offre → « Préparer avec l'IA » (lit la page officielle et prépare la fiche, à relire) | admins seulement (100) | — |
Avant le lancement du Premium (PREMIUM_ENABLED=false), tout est ouvert (garde-fou anti-abus seulement).
Le bouton « Continuer avec Apple » est codé mais caché tant que APPLE_LOGIN_ENABLED n'est pas à true (aperçu : auth.html?apple=1).
world.lerna.web).
Dans le Services ID : domaine lerna.world et adresse de retour https://<projet>.supabase.co/auth/v1/callback..p8 (une seule fois !) et note le Key ID et le Team ID..p8
(Supabase indique comment). Cette clé expire tous les 6 mois : note la date et refais l'étape 4 avant.APPLE_LOGIN_ENABLED=true, puis Redeploy.
Apple peut cacher l'email de la personne (adresse relais) et n'envoie son nom qu'à la première connexion : LERNA lui demande alors
son avatar et sa date de naissance une seule fois (2 appuis).Mets le lien « Laisser un avis » de ta fiche Google Business dans GOOGLE_REVIEW_URL. Il apparaît alors après chaque avis donné dans l'app et sur l'accueil.
PREMIUM_ENABLED=false, les n°3, 4 et 5 se débloquent toutes par parrainage.valide. Les avis d'écoles se valident pareil dans la table avis.Lerna.mark() dans core.js) et utilisé partout ; icônes de l'app, favicon et image de
partage dans assets/icons/. L'original est dans _brand/. Écran d'ouverture : une fois par session (?splash=1 pour le revoir).dossier.html?coffre=1, code dans assets/js/coffre.js) : fiche remplie une fois, rangée dans l'ordre
d'Études en France / Parcoursup, bouton « Copier » sur chaque champ ; documents réduits au bon poids (photo < 50 Ko, fichiers < 500 Ko,
règles de Campus France Sénégal) et renommés NOM_Prenom_Document. Fichiers dans Supabase Storage, compartiment privé coffre
(créé par schema.sql, chaque compte ne voit que son dossier). LERNA n'est pas un agent : rien n'est déposé à la place de l'étudiant.ageMin / ageMax) ou réservées aux femmes (pourQui: 'f') s'adaptent. Jamais : religion, origine, santé, revenus.genre, equity (true = prend des parts, false = sans prise de parts) et stade (idee, produit, clients).seed.sql désactive les anciennes offres retirées.POSTHOG_KEY) avec la propriété ab_couleurs. Règle : au moins 2 semaines et
≈ 300 personnes par version. Dans /admin : arrêter le test, donner la gagnante à tout le monde ou le relancer. Chacun peut changer de thème
dans Paramètres (le changement est mesuré : theme_change).update public.users set role = 'admin' where email = 'ton-adresse'; puis ouvre /admin.x-vercel-ip-country (aucune autorisation, aucun GPS), sinon du fuseau horaire.
La personne confirme (« Tu es au Sénégal ? ») ou change. Montants convertis depuis le dollar (taux modifiables dans /admin).CONTACT_PUBLIC_EMAIL est vide (mets [email protected] une fois le domaine acheté).
Les messages arrivent dans /admin et, si Resend est configuré, dans ta boîte perso (CONTACT_FORWARD_TO, jamais affichée).
Réseaux sociaux : SOCIAL_* + SHOW_SOCIALS=true./api/config ne renvoie que des valeurs publiques.role = 'admin' (fonction is_admin(), testé)./api/opps.CRON_SECRET.vercel.json.assets/js/data-opps.js. Offres Premium : supabase/opps-premium.cjs (et leur aperçu dans data-opps.js, avec masked: true).assets/js/data-schools.js.npm run seed pour régénérer supabase/seed.sql, et relance-le dans Supabase.python3 scripts/build-stickers.py (police Noto Color Emoji). Quand les stickers officiels du léopard existeront, remplace les fichiers de assets/stickers/ en gardant les mêmes noms.Stickers et drapeaux dessinés à partir de Noto Color Emoji (Google, licence SIL Open Font License 1.1 / Apache 2.0).
PREMIUM_ENABLED=false ouvre les fonctions Premium (phase de lancement), sauf les écoles n°3 à 5 qui se débloquent par parrainage.