Flok

Production

Réseau social hyperlocal — feed vidéo vertical, radar cartographique et messagerie chiffrée de bout en bout.

Depuis déc. 2023

Mon rôle
Conception & développement — application Flutter et API Laravel
Durée
Depuis déc. 2023
Équipe
Développeur principal, appuis design et produit
Plateformes
IOS · ANDROID · API · WEB

01

Le problème

Les réseaux sociaux sont mondiaux. Personne ne vous dit ce qui se passe à trois cents mètres de chez vous.

Un commerçant d'Abidjan qui ouvre une boutique, un artisan qui cherche des clients dans son quartier, quelqu'un qui veut savoir quel événement se tient ce soir dans sa commune — aucun n'est servi par un fil optimisé pour l'audience planétaire.

Et la contrainte structurante n'était pas fonctionnelle mais matérielle : le parc visé est majoritairement composé de téléphones d'entrée et de milieu de gamme, sur des forfaits comptés. Une application qui vide le forfait ou fait chauffer l'appareil se fait désinstaller la première semaine.

02

Ce que j'ai construit

Une application Flutter et son API Laravel. Les publications sont géolocalisées et vivent douze mois. Le fil est classé par un moteur combinant les lieux de l'utilisateur, la proximité, la récence et une part de hasard contrôlée, servi par Meilisearch avec repli automatique sur MySQL si l'index tombe.

Trois modules structurent l'application : le feed vidéo vertical, le radar cartographique qui affiche personnes et vitrines commerciales autour de soi avec regroupement en grappes et filtres, et une messagerie chiffrée de bout en bout avec sauvegarde chiffrée et phrase de récupération de douze mots.

Projet flok

03

Les difficultés

Saturer le décodeur vidéo au bout de trente clips

Les premières versions créaient un lecteur par élément du fil sans jamais le détruire. Au bout d'une trentaine de swipes, le décodeur matériel était saturé et l'application se figeait. La solution : un pool borné à trois lecteurs en fenêtre glissante, avec libération systématique au recyclage.

Afficher des milliers de points sans faire ramer la carte

Chaque marqueur personnalisé est une image à rasteriser. Au-delà de quelques centaines, la carte tombait sous les trente images par seconde. J'ai mis en place un cache d'icônes de marqueurs et un regroupement en grappes côté client, avec éclatement progressif au zoom.

Chiffrer les médias sans rendre l'ouverture insupportable

Le chiffrement AES-256-GCM en Dart pur rendait l'ouverture d'une vidéo chiffrée trop lente pour être acceptable. Le passage à une implémentation native iOS et Android, au format binaire identique pour rester compatible avec les médias déjà chiffrés, a rendu le déchiffrement quasi instantané.

Les notifications iOS en double, ou pas du tout

La combinaison des notifications système et de la bibliothèque de notifications enrichies produisait des doublons sur iOS et des silences sur Android. Il a fallu reprendre entièrement le routage des messages entrants et documenter le comportement attendu par plateforme.

04

Les résultats

4
Paliers de transcodage

240p à 1080p

3
Lecteurs max en mémoire

contre un par élément avant

12
Mois de durée de vie

par publication

E2EE
Messagerie

AES-256-GCM natif

05

La stack

  • Flutter
  • Dart
  • Riverpod
  • Drift / SQLite
  • libsignal
  • video_player
  • Laravel 12
  • PHP 8.2
  • Sanctum
  • Meilisearch
  • Redis
  • Pusher
  • FCM
  • Agora
  • Bunny Stream
  • Sentry
  • Docker

Code Mes Rêves

Alexis Kouakou