Type Hackathon
Format En ligne
Début 2026-10-19T00:37:00Z
Fin 2026-10-30T22:59:00Z
Mondje : le carnet qui ne doit jamais perdre un franc. Une coopérative de trois agences (Douala, Yaoundé, Bafoussam) quitte son ancien logiciel de comptes. Il ne reste que des exports de fichiers, envoyés à la main, parfois en double, parfois abîmés. Ton travail : construire Mondje, le carnet qui absorbe tout ça sans rien perdre ni compter deux fois. Chaque transaction a un UUID, un type (CREDIT ou DEBIT), un montant entier en FCFA sans décimales (15000 = 15 000 FCFA) et une description de 255 caractères maximum. La date de création est fixée par le serveur. Chaque défi est mesuré par un script fourni, sur la machine de référence (2 cœurs, 4 Go de RAM), avec le même jeu de données pour toutes les équipes. Export express. Exporter 100 000 transactions en .json en moins de 30 secondes. Le script compte les lignes et vérifie qu’aucune ne manque ni n’est en double. Import au chrono. Importer 100 000 lignes en moins de 60 secondes. Le rapport final affiche la durée réelle. Recherche sous 200 ms. Sur 1 000 000 de transactions en base, 500 requêtes aléatoires (type, plage de montants, mot de la description) répondent en moins de 200 ms au 95e percentile. Import qui ne s’arrête jamais. Un fichier de 50 000 lignes, dont 2 % sont cassées (montant négatif, type inconnu, UUID mal formé, ligne coupée en deux, accent mal encodé). L’import va jusqu’au bout et affiche la liste des erreurs avec numéro de ligne, contenu et raison. Clic sur l’erreur. Dans la liste d’erreurs, un clic sur une ligne rejetée montre la ligne d’origine dans le fichier, à l’endroit exact où elle a été coupée ou mal formée. Trois agences, trois fichiers. Trois fichiers envoyés en même temps, avec des doublons entre eux. Le traitement est parallèle, chaque progression est visible, et au final aucun UUID n’est en double. Qui a envoyé quoi ? Le rapport indique, pour chaque transaction insérée, le fichier et le numéro de ligne d’origine. Le script choisit une transaction au hasard et retrouve sa source en moins de 5 secondes. Double clic, un seul résultat. Le même fichier est envoyé deux fois en même temps depuis deux onglets. Le total final est identique à un seul envoi, et les deux rapports sont cohérents. Annulation chirurgicale. Un import de 10 000 lignes est annulé après que certaines transactions ont été modifiées à la main. Seules les lignes encore issues de cet import disparaissent. Les modifications manuelles restent, et le compte est exact. Curseur qui ne ment pas. Pendant qu’un utilisateur parcourt la liste page par page, un import de 5 000 lignes tourne en parallèle. La liste parcourue ne doit ni dupliquer, ni sauter une transaction. Le solde en un instant. Le solde (CREDIT moins DEBIT) à une date passée s’affiche en moins de 100 ms sur 1 000 000 de transactions, sans recalcul complet de la table. Import coupé en plein milieu. Le serveur est arrêté brutalement pendant un import de 200 000 lignes. Au redémarrage, l’import reprend là où il s’était arrêté, sans relire le fichier depuis le début et sans doublon. Fichier sans fin. Un fichier de 1 000 000 de lignes est importé sous 256 Mo de RAM. Le script surveille la mémoire pendant tout le traitement et trace son évolution. Export après correction. Après les trois imports et une série de corrections manuelles, l’export complet est prêt en moins de 30 secondes, et son total correspond exactement au solde affiché à l’écran. Tableau de bord des résultats. Une page présente, pour chaque défi, le temps mesuré, le nombre de lignes correctement traitées et le nombre d’erreurs bien rapportées. Ce sont les défis pour dépasser le cadre. Une équipe qui les réussit marque plus de points que celle qui a seulement les 15 de base. Export géant. Exporter 1 000 000 de transactions en moins de 60 secondes. Import géant. Importer 1 000 000 de lignes en moins de 5 minutes, avec la progression mise à jour toutes les 5 secondes. Recherche dans les descriptions. Recherche par mot dans la description, sur 1 000 000 de transactions, en moins de 100 ms au 95e percentile. Dix fichiers en même temps. Dix fichiers de 100 000 lignes chacun, envoyés simultanément. Tous sont traités, sans doublon, et le rapport global est exact. Solde par agence. Le solde de chacune des trois agences, calculé en moins de 200 ms sur 1 000 000 de transactions. Reprise après coupure navigateur. Pendant l’upload d’un fichier de 200 Mo, la connexion est coupée. La reprise continue à partir de l’octet atteint, sans tout renvoyer. Temps réel à 100 écrans. Une transaction insérée apparaît sur 100 navigateurs ouverts en moins d’une seconde, sans rechargement. Détection des quasi-doublons. Repérer les transactions qui ont le même montant, la même description et une date à moins d’une minute d’écart, sans les supprimer. Le rapport les liste, et l’utilisateur tranche. Rapport d’erreurs téléchargeable. Le rapport des lignes rejetées se télécharge en CSV, avec les mêmes colonnes que le fichier d’origine plus la raison du rejet. Double export. L’export est disponible en .json et en .csv, et les deux fichiers contiennent exactement les mêmes transactions. Un UUID n’existe qu’une seule fois en base, quelle que soit la source : formulaire, API, import, requêtes simultanées. Les UUID en majuscules et en minuscules désignent la même transaction. Le type est strictement CREDIT ou DEBIT. Le montant est un entier strictement positif, sans flottant. Une donnée invalide renvoie une erreur 422 avec la raison. Une erreur serveur ne montre jamais de trace technique au client. Aucune réponse ne renvoie une liste non paginée. Chaque requête porte un identifiant dans les logs. Aucune authentification : n’importe qui peut tout modifier. C’est assumé, et ça doit être écrit dans le README. Créer, lister, modifier et supprimer une transaction. Modifier ne change que le montant et la description. Supprimer se fait par UUID, et la suppression reste réversible pendant 24 heures. Texte (.txt) : une transaction par ligne, champs séparés par un point-virgule, dans l’ordre id;type;montant;description. La description peut contenir des espaces, mais pas de point-virgule. JSON (.json) : une transaction par ligne, chaque ligne étant un objet JSON complet (NDJSON). Un tableau JSON unique est refusé avec un message explicite. Libre. Le vibe coding est autorisé et les outils d’IA aussi. La seule exigence : tu dois pouvoir expliquer chaque partie du code que tu rends, et justifier tes choix de performance. La participation est ouverte à tous, quel que soit le pays ou le profil. L’inscription sur la plateforme LesCracks est obligatoire pour être considéré comme participant. Créer mon compte LesCracks Un dépôt Git avec le frontend, le backend et un README qui couvre : comment lancer le projet ; les choix faits pour la scalabilité et la performance ; la règle retenue pour les conflits entre fichiers ; les limites connues ; les résultats des défis. Soumettre mon projet Les 5 meilleurs projets retenus seront jugés publiquement dans une vidéo YouTube. Le meilleur, à l’issue de ce jugement, reçoit la récompense. 2 000 FCFA pour le meilleur projet. 3 ressources premium et best-seller dans un sujet tech au choix du gagnant. Ces récompenses restent symboliques pour l’instant. Soumission : avant le vendredi 30 octobre 2026 à 23h59, heure du Cameroun (GMT+1). Sélection des 5 meilleurs projets et vidéo YouTube : date annoncée plus tard. Webinaire technique : date annoncée plus tard, pour revenir sur les défis qui auront posé le plus de problèmes.