{"contributions":[{"description":{"en":"Hive Community Edition, the local NoSQL database this portfolio itself runs on.","fr":"Hive Community Edition, la base de données NoSQL locale sur laquelle repose ce portfolio."},"name":"hive_ce","tag":"Fork · Dart","url":"https://github.com/flrnsbt/hive_ce"},{"description":{"en":"Flutter plugin wrapping the native ONNX Runtime to run models on-device.","fr":"Plugin Flutter qui encapsule ONNX Runtime pour exécuter des modèles directement sur l’appareil."},"name":"flutter_onnxruntime","tag":"Fork · C++ / Dart","url":"https://github.com/flrnsbt/flutter_onnxruntime"},{"description":{"en":"On-device Whisper speech-to-text for iOS and macOS, powered by whisper.cpp.","fr":"Reconnaissance vocale Whisper sur l’appareil pour iOS et macOS, basée sur whisper.cpp."},"name":"flutter_whisper_kit","tag":"Fork · Dart","url":"https://github.com/flrnsbt/flutter_whisper_kit"},{"description":{"en":"Image compression for Flutter, maintained by the fluttercandies team.","fr":"Compression d’images pour Flutter, maintenue par l’équipe fluttercandies."},"name":"flutter_image_compress","tag":"Fork · Dart","url":"https://github.com/flrnsbt/flutter_image_compress"},{"description":{"en":"Flutter plugin that spotlights app features to walk new users through them.","fr":"Plugin Flutter qui met en avant les fonctionnalités d’une application pour guider les nouveaux utilisateurs pas à pas."},"name":"showcaseview","tag":"Fork · Dart","url":"https://github.com/flrnsbt/flutter_showcaseview"},{"description":{"en":"In-app find bar for Flutter — migrated to the new material_ui package from the deprecated Flutter SDK material library.","fr":"Barre de recherche intégrée pour Flutter — migrée vers le nouveau package material_ui depuis la bibliothèque material obsolète du SDK Flutter."},"name":"find_in_page","tag":"Fork · Dart","url":"https://github.com/flrnsbt/find_in_page"}],"headline":{"en":"A bit of everything: open-source tools you can clone, products that only exist online, and client work I can only show as screenshots, since the code was never mine to publish.","fr":"Un peu de tout : des outils open source à cloner, des produits en ligne, et des travaux de clients que je ne peux montrer qu’en captures d’écran, puisque le code ne m’appartient pas."},"projects":[{"category":{"en":"AI Product","fr":"Produit IA"},"description":{"en":"Frontware’s private RAG product for businesses. Teams can query documents, SQL databases and Odoo ERP through private or public LLMs, with fine-grained access control. I built the cross-platform client and most of the AI that runs client-side.","fr":"Le produit de RAG privé de Frontware pour les entreprises : il permet d’interroger documents, bases SQL et ERP Odoo via des LLM privés ou publics, avec un contrôle d’accès fin. J’ai développé le client cross-platform et l’essentiel de l’IA exécutée côté client."},"github_url":null,"gradient":["#00B4D8","#7B61FF"],"hide_no_source_code_warning":false,"highlights":["Cross-platform Flutter frontend for mobile, web, Linux and Windows","Local LLM inference in the browser with WebGPU and Web ONNX","Force-directed graph of the links between RAG documents","Email-scanning daemon that feeds the RAG automatically"],"highlights_fr":["Interface Flutter multiplateforme : mobile, web, Linux et Windows","Inférence de LLM en local dans le navigateur avec WebGPU et Web ONNX","Graphe à simulation de forces des liens entre documents du RAG","Démon d'analyse des e-mails qui alimente le RAG automatiquement"],"icon":"forum_rounded","id":"querymate","is_professional":true,"long_description":{"en":"QueryMate.ai is Frontware International’s private RAG solution for businesses. Documents, emails, SQL databases and Odoo ERP data are indexed and can be queried in a single prompt, using either private on-premise LLM servers or public LLMs. Retrieval is tuned with QFS, iRAG, HyDE and Text-to-SQL optimizations, and access is controlled document by document. I designed and built the Flutter frontend (mobile, web, Linux and Windows) and the Angular backoffice. On the client side, I ran local LLMs with WebGPU and Web ONNX in the browser, on mobile and on desktop, and moved the embedding pipeline onto the device whenever the hardware allowed it, which took load off the backend. I also wrote Flutter bridge packages so that Hugging Face, ONNX, XHR and Hive dependencies work on every platform, built a force-directed graph showing how documents link together in the RAG, and worked on the backend daemon that scans emails to feed the RAG. Authentication is handled in-house with passkeys; there is no Firebase on this project.","fr":"QueryMate.ai est la solution de RAG privé de Frontware International destinée aux entreprises. Documents, e-mails, bases SQL et ERP Odoo sont vectorisés et interrogeables en une seule requête, avec des serveurs LLM privés hébergés sur site ou des LLM publics. La recherche s’appuie sur les optimisations QFS, iRAG, HyDE et Text-to-SQL, et les accès se gèrent document par document. J’ai conçu et développé l’interface Flutter (mobile, web, Linux et Windows) ainsi que le backoffice Angular. Côté client, j’ai fait tourner des LLM en local avec WebGPU et Web ONNX (navigateur, mobile et ordinateur), et déplacé le calcul des embeddings sur l’appareil quand le matériel le permettait, ce qui allège le backend. J’ai aussi écrit des packages Flutter qui assurent la compatibilité de Hugging Face, ONNX, XHR et Hive sur toutes les plateformes, créé un graphe interactif à simulation de forces qui montre les liens entre les documents du RAG, et travaillé sur le démon qui analyse les e-mails pour alimenter le RAG. L’authentification est interne, par clés d’accès (passkeys) : pas de Firebase sur ce projet."},"media":[{"caption":{"en":"QueryMate — chatting with business data.","fr":"QueryMate — interroger les données de l’entreprise."},"source":"/assets/assets/images/projects/querymate_app_screenshot.webp"},{"caption":{"en":"QueryMate logo.","fr":"Logo de QueryMate."},"source":"/assets/assets/images/projects/querymate_logo_dark.webp"}],"role":{"en":"Designed and built the cross-platform Flutter client (mobile, web, Linux, Windows) and Angular backoffice. Implemented on-device LLM inference (WebGPU, ONNX), client-side embedding computation, custom Flutter bridge packages, force-directed knowledge graph, and backend email scanning daemon.","fr":"Conception et développement de l’application Flutter multiplateforme (mobile, web, Linux, Windows) et du backoffice Angular. Implémentation de l’inférence LLM locale (WebGPU, ONNX), calcul des embeddings côté client, packages de ponts Flutter, graphe de connaissances et démon d’analyse des e-mails."},"source_note":{"en":"Built at Frontware International. The code is private, so this entry links to the live product.","fr":"Développé chez Frontware International : le code est privé, la fiche renvoie donc vers le produit en ligne."},"tagline":{"en":"Private RAG for chatting with your business data","fr":"RAG privé pour interroger les données de l’entreprise"},"tech":["Flutter","Angular","Golang","ONNX","RAG","Web Push","WebAuthn"],"title":"QueryMate","year":"2025 – 2026"},{"category":{"en":"Web App","fr":"Application Web"},"description":{"en":"A React website for a client's anthropology podcast with AI-powered transcription: a dark editorial design with an episode list, a listening page, an admin panel with real-time transcript editing, and a contact form.","fr":"Un site React pour le podcast d'anthropologie d'une cliente avec transcription IA : design éditorial sombre, liste des épisodes, page d'écoute, panneau d'administration avec édition de transcription en temps réel, et formulaire de contact."},"github_url":null,"gradient":["#C96F2B","#4A2C14"],"hide_no_source_code_warning":true,"highlights":["React 19 SPA with Vite 8 and React Router DOM 7 for client-side routing","AI-powered transcription system using Gladia SDK with speaker diarization and real-time transcript highlighting","Cloudflare Workers backend for serverless functions (contact form, transcription API)","Firebase Firestore for real-time database with local caching and TTL expiration","Comprehensive admin panel with episode management, guest profiles, and analytics dashboard","Cloudflare Turnstile for bot protection and Firebase App Check for admin operations","Domain name infrastructure management: DNS zone delegation, NS record configuration, and nameserver routing via OHVCloud for reliable .fr resolution"],"highlights_fr":["SPA React 19 avec Vite 8 et React Router DOM 7 pour le routage côté client","Système de transcription IA utilisant Gladia SDK avec diarisation des intervenants et mise en évidence en temps réel des transcripts","Backend Cloudflare Workers pour les fonctions serverless (formulaire de contact, API de transcription)","Firebase Firestore pour la base de données en temps réel avec cache local et expiration TTL","Panneau d'administration complet avec gestion des épisodes, profils d'invités et tableau de bord analytique","Cloudflare Turnstile pour la protection contre les bots et Firebase App Check pour les opérations d'administration","Gestion de l'infrastructure du nom de domaine : délégation de zone DNS, configuration des enregistrements NS et routage des nameservers via OHVCloud pour une résolution .fr fiable"],"icon":"mic_rounded","id":"alter-ethno","is_professional":true,"live_url":"https://alter-ethno.fr/","long_description":{"en":"Alter Ethno is a French-language anthropology podcast (\"De l'altérité à l'identité\"). I designed and built its full-stack web platform for the host, featuring a React 19 SPA with Vite 8 for the frontend and Cloudflare Workers for the serverless backend. The site has a dark, warm editorial look with a hero section, episode catalog, listening platforms, podcast themes (ritual and belief, transmission and memory, craft, otherness and identity), a support section, and a contact form. The platform includes an AI-powered transcription system using Gladia SDK for speech-to-text with speaker diarization, custom vocabulary, and enhanced accuracy options. Transcripts synchronize with the audio player in real-time, with auto-scroll to active sentences and timestamp-based seeking. A comprehensive admin panel allows the host to manage episodes, guest profiles, listening platforms, donation options, and view analytics (views, plays, listening time, completions). The architecture uses Firebase Firestore for real-time data with local caching (60min TTL for episodes, 1hr for CMS data), Cloudflare Turnstile for bot protection on sensitive endpoints, and Firebase App Check for admin write operations. The backend includes serverless functions for contact form email delivery and AI transcription with advanced accuracy optimizations (vocabulary merging, speaker hints, custom spelling, language configuration). I also managed the domain name infrastructure — DNS zone delegation, NS record configuration, and nameserver routing via OHVCloud to ensure reliable resolution and low-latency edge delivery for the .fr domain).","fr":"Alter Ethno est un podcast d'anthropologie française (« De l'altérité à l'identité »). J'ai conçu et développé la plateforme web full-stack pour l'animatrice, avec un SPA React 19 et Vite 8 pour le frontend et Cloudflare Workers pour le backend serverless. Le site présente une esthétique éditoriale sombre et chaleureuse avec un bandeau d'accueil, le catalogue d'épisodes, les plateformes d'écoute, les grandes thématiques de l'émission (rituel et croyance, transmission et mémoire, artisanat, altérité et identité), un espace de soutien et un formulaire de contact. La plateforme intègre un système de transcription IA utilisant Gladia SDK pour la reconnaissance vocale avec diarisation des intervenants, vocabulaire personnalisé et options de précision avancées. Les transcripts se synchronisent avec le lecteur audio en temps réel, avec défilement automatique vers la phrase active et recherche basée sur les horodatages. Un panneau d'administration complet permet à l'animatrice de gérer les épisodes, les profils d'invités, les plateformes d'écoute, les options de don et de consulter les statistiques (vues, écoutes, temps d'écoute, complétions). L'architecture utilise Firebase Firestore pour les données en temps réel avec cache local (60min TTL pour les épisodes, 1h pour les données CMS), Cloudflare Turnstile pour la protection contre les bots sur les endpoints sensibles, et Firebase App Check pour les opérations d'écriture d'administration. Le backend inclut des fonctions serverless pour la livraison d'e-mails de formulaire de contact et la transcription IA avec optimisations de précision avancées (fusion de vocabulaire, hints d'intervenants, orthographe personnalisée, configuration de langue). J'ai également géré l'infrastructure du nom de domaine — délégation de zone DNS, configuration des enregistrements NS et routage des nameservers via OHVCloud pour garantir une résolution fiable et une livraison edge à faible latence pour le domaine .fr.\""},"media":[{"caption":{"en":"Alter Ethno — home page with the latest episodes.","fr":"Alter Ethno — accueil et derniers épisodes."},"source":"/assets/assets/images/projects/alterethno-home-page.webp"},{"caption":{"en":"Alter Ethno — episode list.","fr":"Alter Ethno — liste des épisodes."},"source":"/assets/assets/images/projects/alterethno-ecouter-page.webp"},{"caption":{"en":"Alter Ethno — mobile home page.","fr":"Alter Ethno — accueil sur mobile."},"source":"/assets/assets/images/projects/alterethno-home-mobile-page.webp"}],"role":{"en":"Designed and developed the complete full-stack platform: React 19 SPA frontend with Vite 8, Cloudflare Workers backend with TypeScript, Firebase Firestore integration, AI transcription system with Gladia SDK, comprehensive admin panel with real-time analytics, and serverless functions for contact email delivery, plus domain name infrastructure management (DNS zone delegation, NS records, and nameserver routing via OHVCloud for reliable .fr resolution).\"","fr":"Conception et développement complet de la plateforme full-stack : frontend SPA React 19 avec Vite 8, backend Cloudflare Workers avec TypeScript, intégration Firebase Firestore, système de transcription IA avec Gladia SDK, panneau d'administration complet avec statistiques en temps réel, et fonctions serverless pour la livraison d'e-mails de contact, ainsi que la gestion de l'infrastructure du nom de domaine (délégation de zone DNS, enregistrements NS et routage des nameservers via OHVCloud pour une résolution .fr fiable).\""},"source_note":null,"tagline":{"en":"Anthropology podcast platform with AI transcription","fr":"Plateforme de podcast d'anthropologie avec transcription IA"},"tech":["React","Vite","Cloudflare Workers","TypeScript","Firebase","Firestore","Cloudflare Turnstile","OHVCloud"],"title":"Alter Ethno","year":"2026"},{"category":{"en":"Cross-Platform App","fr":"Application Multiplateforme"},"description":{"en":"Weladee is a Time Attendance HRMS for businesses in Thailand. Employees clock in/out with location verification, manage timesheets, request leave and overtime, and view payroll. I worked as a senior Flutter developer on the new client that unified the separate Android and iOS codebases into a single cross-platform app, drastically reducing maintenance time and cost.","fr":"Weladee est un système de gestion de présence et RH pour les entreprises thaïlandaises. Les employés marquent leurs entrées/sorties avec vérification de localisation, gèrent leurs feuilles de temps, demandent des congés et heures supplémentaires et consultent leurs bulletins de paie. J'ai travaillé en tant que développeur Flutter senior sur le nouveau client qui a unifié les bases de code Android et iOS séparées en une seule application multiplateforme, réduisant drastiquement le temps et le coût de maintenance."},"github_url":null,"gradient":["#E63946","#F4A261"],"hide_no_source_code_warning":false,"highlights":["Unified separate Android and iOS native codebases into a single Flutter cross-platform app","Multi-method check-in: GPS location, QR codes, NFC tags, Bluetooth beacons, and selfie verification","Comprehensive HR features: timesheets, leave, overtime, WFH requests, expense claims, and payroll","Offline-first architecture with SQLite, Hive, and queued sync actions","Security: fake location detection, jailbreak/root detection, PDPA compliance, and secure token storage","Firebase Auth for authentication and Firebase Messaging for push notifications"],"highlights_fr":["Unification des bases de code Android et iOS natives séparées en une seule application Flutter multiplateforme","Marquage multi-méthodes : localisation GPS, codes QR, tags NFC, balises Bluetooth et vérification par selfie","Fonctionnalités RH complètes : feuilles de temps, congés, heures supplémentaires, télétravail, dépenses et paie","Architecture hors ligne en priorité avec SQLite, Hive et actions de synchronisation en file d'attente","Sécurité : détection de localisation falsifiée, détection de jailbreak/root, conformité PDPA et stockage sécurisé des jetons","Firebase Auth pour l'authentification et Firebase Messaging pour les notifications push"],"icon":"badge_rounded","id":"weladee","is_professional":true,"live_url":"https://www.weladee.com/","long_description":{"en":"Weladee is the employee-facing mobile application for the Weladee Time Attendance HRMS system by Frontware International. The original Android and iOS apps were maintained as separate native codebases, leading to platform-specific limitations, bugs, and high maintenance costs. I worked as a senior Flutter developer on the new client that unified the source code into a single cross-platform codebase, eliminating platform-specific issues and drastically reducing maintenance time and cost. The app serves employees in Thailand with comprehensive time-tracking and HR features: clock in/out with location verification (GPS, QR codes, NFC tags, Bluetooth beacons, selfie capture), timesheet and attendance history, leave requests (sick, holiday) with medical certificate upload, overtime and work-from-home requests with approval workflows, expense claims with receipt attachment, company announcements with push notifications, payroll information, and team management features for managers. The architecture follows a strict layered pattern (data → services → tools → UI) with Provider state management and go_router navigation. All backend communication flows through a gRPC singleton with interceptors for logging, token injection, and server reachability detection. Data persistence uses SQLite for complex relational data (history, gates, shifts), Hive for simple key-value data (employee, company, preferences), and Flutter Secure Storage for sensitive tokens. The app supports offline mode with cached data and queued actions that sync when back online, fake location detection, jailbreak/root detection, and PDPA compliance. Firebase provides authentication and push notifications. Multiple environments (dev, prod, beta, testflight) are supported with auto-detection from git branch. The app runs on Android (primary), iOS, web and Linux.","fr":"Weladee est l'application mobile employé du système de gestion de présence et RH Weladee par Frontware International. Les applications Android et iOS d'origine étaient maintenues comme des bases de code natives séparées, entraînant des limitations spécifiques à chaque plateforme, des bugs et des coûts de maintenance élevés. J'ai travaillé en tant que développeur Flutter senior sur le nouveau client dont l'objectif était d'unifier le code source en une seule base de code multiplateforme, éliminant les problèmes spécifiques à chaque plateforme et réduisant drastiquement le temps et le coût de maintenance. L'application sert les employés en Thaïlande avec des fonctionnalités complètes de suivi du temps et de gestion RH : marquage des entrées/sorties avec vérification de localisation (GPS, codes QR, tags NFC, balises Bluetooth, capture de selfie), historique des feuilles de temps et de présence, demandes de congés (maladie, vacances) avec téléchargement de certificat médical, demandes d'heures supplémentaires et de télétravail avec flux d'approbation, réclamations de dépenses avec pièce jointe de reçu, annonces d'entreprise avec notifications push, informations de paie et fonctionnalités de gestion d'équipe pour les managers. L'architecture suit un modèle en couches strict (données → services → outils → interface) avec la gestion d'état Provider et la navigation go_router. Toute la communication backend passe par un singleton gRPC avec des intercepteurs pour la journalisation, l'injection de jetons et la détection de disponibilité du serveur. La persistance des données utilise SQLite pour les données relationnelles complexes (historique, portes, horaires), Hive pour les données simples clé-valeur (employé, entreprise, préférences) et Flutter Secure Storage pour les jetons sensibles. L'application prend en charge le mode hors ligne avec des données mises en cache et des actions en file d'attente qui se synchronisent lors du retour en ligne, la détection de localisation falsifiée, la détection de jailbreak/root et la conformité PDPA. Firebase fournit l'authentification et les notifications push. Plusieurs environnements (dev, prod, beta, testflight) sont supportés avec détection automatique depuis la branche git. L'application fonctionne sur Android (principal), iOS, web et Linux."},"media":[],"role":{"en":"Worked as a senior Flutter developer on the new Flutter client that unified the separate Android and iOS codebases into a single cross-platform app. Implemented features including check-in/out with multiple verification methods, timesheet management, leave and overtime requests, and team management for managers, using Provider state management and gRPC backend communication.","fr":"Développeur Flutter senior sur le nouveau client Flutter qui a unifié les bases de code Android et iOS séparées en une seule application multiplateforme. Implémentation de fonctionnalités incluant le marquage d'entrées/sorties avec plusieurs méthodes de vérification, la gestion des feuilles de temps, les demandes de congés et heures supplémentaires et la gestion d'équipe pour les managers, en utilisant la gestion d'état Provider et la communication backend gRPC."},"source_note":{"en":"Built at Frontware International for Weladee. The code is private, so this entry links to the product website and app stores.","fr":"Développé chez Frontware International pour Weladee : le code est privé, la fiche renvoie donc vers le site du produit et les stores d'applications."},"tagline":{"en":"Employee time attendance HRMS — unified Flutter client","fr":"Système de gestion de présence employé — client Flutter unifié"},"tech":["Flutter","Dart","gRPC","Protocol Buffers","Provider","SQLite","Hive","Firebase Auth","Firebase Messaging","BLE Beacons","NFC"],"title":"Weladee","year":"2026"},{"category":{"en":"Web App","fr":"Application Web"},"description":{"en":"The web console of the FluxEdge GPU marketplace, part of the RunOnFlux decentralized cloud. Users browse and rent enterprise GPUs, deploy Kubernetes workloads and track their usage.","fr":"La console web de la place de marché GPU FluxEdge, au sein du cloud décentralisé RunOnFlux. On y parcourt et on y loue des GPU professionnels, on déploie des charges de travail Kubernetes et on suit sa consommation."},"github_url":null,"gradient":["#2B6CB0","#00B5D8"],"hide_no_source_code_warning":false,"highlights":["Marketplace UI for renting machines and deploying Kubernetes apps","Rancher YAML editor and validator for container workloads","WalletConnect and Web3 multi-network token payments","Access control for cloud compute and hardware usage telemetry"],"highlights_fr":["Interface de place de marché : location de machines et déploiement d’applications Kubernetes","Éditeur et validateur YAML Rancher pour les charges de travail conteneurisées","WalletConnect et paiements en jetons Web3 sur plusieurs réseaux","Contrôle d’accès au calcul cloud et télémétrie d’utilisation du matériel"],"icon":"cloud_queue_rounded","id":"fluxedge","is_professional":true,"live_url":"https://console.fluxedge.ai/","long_description":{"en":"FluxEdge is a decentralized marketplace for GPU compute on the Flux Web3 infrastructure, where H100/A100-class hardware can be rented pay-as-you-go for AI, rendering and scientific workloads. I worked on the web app at console.fluxedge.ai: the marketplace interface (top apps, newly listed apps, most rented machines), the project and machine flows, the account and billing screens, and the deployment experience on top of Kubernetes, Docker and Firebase. I also worked on the Rancher YAML editor and validator used to ship containerized workloads. On the Web3 side, I implemented WalletConnect flows and multi-network token payments: reading payment smart contracts, sending transactions and fetching on-chain data for billing and to control access to rentals.","fr":"FluxEdge est une place de marché décentralisée de calcul GPU, bâtie sur l’infrastructure Web3 de Flux : on y loue à la consommation du matériel de classe H100/A100 pour l’IA, le rendu et le calcul scientifique. J’ai travaillé sur l’application web console.fluxedge.ai : l’interface de la place de marché (applications les plus populaires, nouveautés, machines les plus louées), les parcours de projet et de machine, les écrans de compte et de facturation, et le déploiement au-dessus de Kubernetes, Docker et Firebase. J’ai aussi travaillé sur l’éditeur et validateur YAML Rancher qui sert à mettre en production les conteneurs. Côté Web3, j’ai intégré WalletConnect et les paiements en jetons sur plusieurs réseaux : lecture des smart contracts de paiement, envoi de transactions et récupération de données on-chain pour la facturation et le contrôle d’accès aux locations."},"media":[{"caption":{"en":"FluxEdge console — renting a machine.","fr":"Console FluxEdge — location d’une machine."},"source":"/assets/assets/images/projects/fluxedge-rent-machine-page.webp"},{"caption":{"en":"FluxEdge console — deploying an app.","fr":"Console FluxEdge — déploiement d’une application."},"source":"/assets/assets/images/projects/fluxedge-deploy-app-page.webp"},{"caption":{"en":"FluxEdge console — deployment builder.","fr":"Console FluxEdge — configurateur de déploiement."},"source":"/assets/assets/images/projects/fluxedge-deployment-builder-page.webp"},{"caption":{"en":"FluxEdge console — Rancher YAML editor and validator.","fr":"Console FluxEdge — éditeur et validateur YAML Rancher."},"source":"/assets/assets/images/projects/fluxedge-deployment-yaml-editor-page.webp"},{"caption":{"en":"FluxEdge console — account overview.","fr":"Console FluxEdge — vue d’ensemble du compte."},"source":"/assets/assets/images/projects/fluxegde-account-overview-page.webp"}],"role":{"en":"Frontend architecture and UI development for enterprise GPU rental, Kubernetes cluster provisioning, and Web3 wallet authentication.","fr":"Architecture frontend et développement de l’interface pour la location de GPU d’entreprise, le provisionnement Kubernetes et l’authentification Web3."},"source_note":{"en":"Built for RunOnFlux via Frontware International. The code is private, so this entry links to the live product.","fr":"Développé pour RunOnFlux via Frontware International : le code est privé, la fiche renvoie donc vers le produit en ligne."},"tagline":{"en":"Decentralized GPU marketplace console","fr":"Console d’une place de marché GPU décentralisée"},"tech":["Flutter","Javascript","Golang","Firebase Auth","Kubernetes","Rancher","Web3","WalletConnect"],"title":"FluxEdge","year":"2023 – 2025"},{"category":{"en":"Desktop + Web","fr":"Ordinateur + Web"},"description":{"en":"Tools for the people who supply the FluxEdge network: a desktop app to rent out idle GPUs or mine FLUX, plus a web companion to manage machines, mining and availability.","fr":"Les outils des fournisseurs du réseau FluxEdge : une application de bureau pour louer ses GPU inactifs ou miner du FLUX, et un compagnon web pour gérer ses machines, le minage et la disponibilité."},"github_url":null,"gradient":["#6B46C1","#ED64A6"],"hide_no_source_code_warning":false,"highlights":["Desktop client for GPU providers to rent out compute or mine FLUX","Web companion to monitor machines, wallets and earnings remotely","Workloads run in Docker, in isolated compute environments","Web3 wallet sign-in and reward payouts"],"highlights_fr":["Application de bureau pour louer sa puissance de calcul ou miner du FLUX","Compagnon web pour suivre à distance machines, portefeuilles et gains","Charges de travail exécutées dans Docker, dans des environnements de calcul isolés","Connexion par portefeuille Web3 et versement des récompenses"],"icon":"memory_rounded","id":"fluxcore","is_professional":true,"live_url":"https://docs.runonflux.com/fluxcore/overview","long_description":{"en":"FluxCore lets anyone contribute idle GPU or CPU capacity to the FluxEdge marketplace and get paid for it: GPU rentals, native FLUX mining, scheduling, performance monitoring and isolated workloads. I worked on the provider experience from end to end: the interface, the desktop flows and the FluxCore Web companion (machines, mining, services, account), connecting the frontend to backend services and keeping setup, earnings and availability simple for non-technical providers. I also built the Web3 layer: WalletConnect sign-in, reading cross-network token payment contracts, sending transactions and fetching on-chain data for earnings and provider payouts.","fr":"FluxCore permet à n’importe qui de mettre à disposition ses capacités GPU ou CPU inutilisées sur la place de marché FluxEdge, et d’être rémunéré en échange : location de GPU, minage natif de FLUX, planification, suivi des performances et charges de travail isolées. J’ai travaillé sur toute l’expérience fournisseur : l’interface, les parcours de l’application de bureau et le compagnon FluxCore Web (machines, minage, services, compte), en reliant le frontend aux services backend et en gardant la configuration, les gains et la disponibilité simples pour des fournisseurs non techniques. J’ai aussi développé la couche Web3 : connexion par WalletConnect, lecture des contrats de paiement en jetons sur plusieurs réseaux, envoi de transactions et récupération des données on-chain pour les gains et les versements aux fournisseurs."},"media":[{"caption":{"en":"FluxCore Web — machine overview.","fr":"FluxCore Web — vue d’ensemble des machines."},"source":"/assets/assets/images/projects/fluxcore-machine-overview-page.webp"},{"caption":{"en":"FluxCore Web — machine detail.","fr":"FluxCore Web — détail d’une machine."},"source":"/assets/assets/images/projects/fluxcore-machine-page.webp"},{"caption":{"en":"FluxCore Web — machine detail (continued).","fr":"FluxCore Web — détail d’une machine (suite)."},"source":"/assets/assets/images/projects/fluxcore-machine-page-2.webp"},{"caption":{"en":"FluxCore Web — service view.","fr":"FluxCore Web — vue des services."},"source":"/assets/assets/images/projects/fluxcore-service-page.webp"},{"caption":{"en":"FluxCore Web — connecting a machine.","fr":"FluxCore Web — connexion d’une machine."},"source":"/assets/assets/images/projects/fluxcore-web-connect-machine-page.webp"}],"role":{"en":"Built the desktop and web companion applications enabling GPU providers to monitor hardware metrics, mining jobs, and network availability.","fr":"Développement des applications compagnon desktop et web permettant aux fournisseurs de GPU de suivre les métriques matérielles, le minage et la disponibilité réseau."},"source_note":{"en":"Built for RunOnFlux via Frontware International. The code is private, so this entry links to the public docs.","fr":"Développé pour RunOnFlux via Frontware International : le code est privé, la fiche renvoie donc vers la documentation publique."},"tagline":{"en":"Desktop + web companion for GPU providers","fr":"Application de bureau et compagnon web pour fournisseurs de GPU"},"tech":["Flutter","Javascript","Golang","Firebase Auth","Docker","Web3","WalletConnect"],"title":"FluxCore","year":"2023 – 2024"},{"category":{"en":"Open Source","fr":"Open Source"},"description":{"en":"A free, fully self-hosted Signal bot for small teams. It handles on-call rotation, forwards DMs to whoever is on duty, and transcribes voice notes locally with an AI summary.","fr":"Un bot Signal gratuit et entièrement auto-hébergé pour les petites équipes : il gère la rotation d’astreinte, transmet les messages privés à la personne de garde et transcrit les messages vocaux en local, avec un résumé généré par IA."},"github_url":"https://github.com/flrnsbt/signal-duty-bot","gradient":["#3A76F0","#00C48C"],"hide_no_source_code_warning":false,"highlights":["End-to-end encrypted notifications through Signal","Local voice transcription with faster-whisper and LLM summaries","Free to run, no external API keys"],"highlights_fr":["Notifications chiffrées de bout en bout via Signal","Transcription vocale locale avec faster-whisper et résumés par un LLM","Gratuit : aucune clé d’API externe"],"icon":"support_agent_rounded","id":"signal-duty-bot","is_professional":false,"live_url":null,"long_description":{"en":"signal-duty-bot runs entirely on your own machine with Docker Compose: a Python service connected to signal-cli-rest-api and a local Ollama model. Members go on call with !onduty and off with !offduty, and direct messages are forwarded to whoever is on duty. Voice notes are transcribed locally with faster-whisper and summarized by a small local LLM, then forwarded with the transcript, the summary and the original audio. It needs no OpenAI or Anthropic account and no API keys, costs nothing to run, and no data ever leaves the host.","fr":"signal-duty-bot tourne entièrement sur votre propre machine avec Docker Compose : un service Python relié à signal-cli-rest-api et à un modèle Ollama local. On prend l’astreinte avec !onduty et on la quitte avec !offduty ; les messages privés sont transmis à la personne de garde. Les messages vocaux sont transcrits en local avec faster-whisper et résumés par un petit LLM local, puis transmis avec la transcription, le résumé et l’audio d’origine. Pas besoin de compte OpenAI ni Anthropic, ni de clé d’API : ça ne coûte rien et aucune donnée ne quitte votre serveur."},"media":[],"role":null,"source_note":null,"tagline":{"en":"Self-hosted Signal on-call bot","fr":"Bot Signal d’astreinte, auto-hébergé"},"tech":["Python","Docker","Ollama","faster-whisper"],"title":"signal-duty-bot","year":"2026"},{"category":{"en":"Open Source","fr":"Open Source"},"description":{"en":"Embed the JsonCrack JSON viewer as a Flutter widget. Visualize JSON data as an interactive, zoomable graph directly inside your app.","fr":"Intégrez le visualiseur JsonCrack en tant que widget Flutter : visualisez des données JSON sous forme de graphe interactif et zoomable, directement dans votre application."},"github_url":"https://github.com/flrnsbt/jsoncrack","gradient":["#40C4FF","#00E676"],"hide_no_source_code_warning":false,"highlights":["Interactive graph visualization of JSON structures","WebView-based embedding of the JsonCrack editor","Published on pub.dev"],"highlights_fr":["Visualisation interactive des structures JSON sous forme de graphe","Intégration via WebView de l'éditeur JsonCrack","Publié sur pub.dev"],"icon":"hub_rounded","id":"jsoncrack","is_professional":false,"live_url":"https://jsoncrack-bdf.pages.dev/","long_description":{"en":"jsoncrack wraps the open-source JsonCrack editor in a Flutter widget, so you can embed a full-featured JSON graph viewer inside any app. It uses a WebView to load the JsonCrack HTML editor bundled as an asset, supporting zoom, pan, and real-time structure exploration. Useful for debugging APIs, inspecting payloads, or building developer tools.","fr":"jsoncrack encapsule l'éditeur open-source JsonCrack dans un widget Flutter, permettant d'intégrer un visualiseur de graphes JSON complet dans n'importe quelle application. Il utilise un WebView pour charger l'éditeur JsonCrack sous forme d'asset, avec zoom, navigation et exploration en temps réel de la structure. Pratique pour déboguer des API, inspecter des payloads ou construire des outils pour développeurs."},"media":[],"role":null,"source_note":null,"tagline":{"en":"JSON graph viewer widget for Flutter","fr":"Widget de visualisation de graphes JSON pour Flutter"},"tech":["Dart","Flutter","WebView"],"title":"jsoncrack","year":"2026"},{"category":{"en":"Open Source","fr":"Open Source"},"description":{"en":"Detect when a Flutter Scaffold drawer opens or closes, even when you cannot modify the Scaffold or Drawer implementation.","fr":"Détectez l'ouverture et la fermeture du tiroir (drawer) d'un Scaffold Flutter, même quand vous ne pouvez pas modifier l'implémentation du Scaffold ou du Drawer."},"github_url":"https://github.com/flrnsbt/drawer_listener","gradient":["#FFB74D","#7B61FF"],"hide_no_source_code_warning":false,"highlights":["Observes drawer state without requiring Scaffold customization","Lightweight notification-based API","Published on pub.dev"],"highlights_fr":["Observe l'état du tiroir sans nécessiter de personnalisation du Scaffold","API légère basée sur les notifications","Publié sur pub.dev"],"icon":"workspace_premium_rounded","id":"drawer-state-observer","is_professional":false,"live_url":"https://pub.dev/packages/drawer_state_observer","long_description":{"en":"drawer_state_observer solves a common Flutter pain point: knowing when the Scaffold drawer opens or closes when you don't control the Scaffold code. It listens to framework notifications to report state changes, so you can react to drawer events from anywhere in your widget tree. A pragmatic workaround for third-party or legacy scaffolds.","fr":"drawer_state_observer résout un problème courant de Flutter : savoir quand le tiroir d'un Scaffold s'ouvre ou se ferme quand vous ne contrôlez pas le code du Scaffold. Il écoute les notifications du framework pour signaler les changements d'état, permettant de réagir aux événements du tiroir depuis n'importe où dans l'arbre de widgets. Une solution pragmatique pour les Scaffolds tiers ou hérités."},"media":[],"role":null,"source_note":null,"tagline":{"en":"Drawer state detection for Flutter","fr":"Détection de l'état du tiroir pour Flutter"},"tech":["Dart","Flutter","Widgets"],"title":"drawer_state_observer","year":"2026"},{"category":{"en":"Open Source","fr":"Open Source"},"description":{"en":"An interactive graph renderer driven by physics: nodes push each other apart, links pull them together, and the layout settles in real time.","fr":"Un moteur de rendu de graphes interactif, piloté par une simulation physique : les nœuds se repoussent, les liens les rapprochent et la disposition se stabilise en temps réel."},"github_url":"https://pub.dev/packages/force_graph","gradient":["#40C4FF","#7B61FF"],"hide_no_source_code_warning":false,"highlights":["Interactive physics simulation with real-time dragging and repulsion","Cross-platform Flutter canvas rendering (WASM, mobile, desktop)","Published on pub.dev"],"highlights_fr":["Simulation physique interactive avec glisser-déposer et répulsion en temps réel","Rendu canvas Flutter multiplateforme (WASM, mobile, ordinateur)","Publié sur pub.dev"],"icon":"hub_rounded","id":"force-graph","is_professional":true,"live_url":"https://force-graph.pages.dev","long_description":{"en":"force_graph is a playground for layout physics: a canvas-based force-directed simulation that draws and manipulates graphs in real time, with repulsion, spring-like links and drag interactions. Useful for exploring any relational dataset visually.","fr":"force_graph est un terrain de jeu pour la physique de disposition des graphes : une simulation à forces fondée sur canvas, qui dessine et manipule des graphes en temps réel, avec répulsion, liens élastiques et glisser-déposer. Pratique pour explorer visuellement n’importe quel jeu de données relationnelles."},"media":[],"role":null,"source_note":null,"tagline":{"en":"Force-directed graph visualization","fr":"Visualisation de graphes par simulation de forces"},"tech":["Flutter","Dart","Forge2D","Physics simulation"],"title":"force_graph","year":"2025"},{"category":{"en":"Cross-Platform App","fr":"Application Multiplateforme"},"description":{"en":"Alvoria specializes in BYOD (Bring Your Own Device) platforms that bring all the services of an establishment onto the client's personal device. I developed the CommUnity Admin back-office — a Flutter Android app and PWA letting administrators manage photo albums and send alerts to community members.","fr":"Alvoria est spécialisé dans les plateformes BYOD (Bring Your Own Device) qui apportent tous les services d'un établissement sur l'équipement personnel du client. J'ai développé le back-office CommUnity Admin — une application Android et PWA Flutter permettant aux administrateurs de gérer des albums photo et d'envoyer des alertes aux membres de la communauté."},"github_url":null,"gradient":["#4CAF50","#00B4D8"],"hide_no_source_code_warning":false,"highlights":["BLoC architecture with flutter_bloc for state management and auto_route for type-safe navigation","Album management: browse, view and batch-upload up to 10 images to photo albums","Alert system: create, view and resend targeted alerts to client types with optional email delivery","Android image-sharing integration: receive and publish images from other apps directly to albums","Responsive UI adapting to mobile, tablet and desktop via responsive_framework"],"highlights_fr":["Architecture BLoC avec flutter_bloc pour la gestion d'état et auto_route pour la navigation typée","Gestion des albums : navigation, visualisation et téléchargement par lots de jusqu'à 10 images","Système d'alertes : création, consultation et renvoi d'alertes ciblées avec livraison par e-mail","Intégration du partage d'images Android : réception et publication d'images depuis d'autres apps","Interface réactive s'adaptant au mobile, à la tablette et à l'ordinateur"],"icon":"admin_panel_settings_rounded","id":"alvoria-community","is_professional":true,"live_url":"https://community.alvoria.com","long_description":{"en":"Alvoria builds BYOD platforms that deliver establishment services directly to clients' personal devices, with goals to engage, retain and sell. I developed the CommUnity Admin back-office as a cross-platform Flutter app (Android native + PWA web) for Alvoria/Frontware International. Administrators sign in with username/password, then access a dashboard with quick links to all management modules and a language switcher. I built the album management flow: browsing, viewing and uploading images (up to 10 at a time) to photo albums. I implemented the alert management system: creating, viewing and resending alerts to specific client types with optional email delivery. The app supports receiving images shared from other apps and publishing them directly to an album via Android sharing intents. The architecture follows the BLoC pattern powered by flutter_bloc for state management, with auto_route for declarative navigation. Backend communication uses gRPC with Protocol Buffers, with service stubs for admin auth, community albums and alerts, plus forum and restaurant service stubs. Localization is JSON-based, loaded at runtime. The UI adapts to mobile, tablet and desktop via responsive_framework. Image handling uses image_picker with flutter_image_compress for efficient uploads.","fr":"Alvoria développe des plateformes BYOD qui livrent les services d'un établissement directement sur les appareils personnels des clients, avec pour objectifs d'animer, fidéliser et vendre. J'ai développé le back-office CommUnity Admin comme application Flutter multiplateforme (Android natif + PWA web) pour Alvoria/Frontware International. Les administrateurs se connectent avec un identifiant et un mot de passe, puis accèdent à un tableau de bord avec des raccourcis vers tous les modules de gestion et un sélecteur de langue. J'ai développé le flux de gestion des albums : navigation, visualisation et téléchargement d'images (jusqu'à 10 à la fois) dans des albums photo. J'ai implémenté le système de gestion des alertes : création, consultation et renvoi d'alertes à des types de clients spécifiques avec livraison par e-mail optionnelle. L'application prend en charge la réception d'images partagées depuis d'autres applications et leur publication directe dans un album via les intents de partage Android. L'architecture suit le pattern BLoC avec flutter_bloc pour la gestion d'état et auto_route pour la navigation déclarative. La communication backend utilise gRPC avec Protocol Buffers, avec des stubs de service pour l'authentification admin, les albums et alertes de la communauté, ainsi que des stubs pour les services forum et restaurant. La localisation est basée sur du JSON, chargée à l'exécution. L'interface s'adapte au mobile, à la tablette et à l'ordinateur via responsive_framework. La gestion des images utilise image_picker avec flutter_image_compress pour des téléchargements efficaces."},"media":[],"role":{"en":"Developed the complete CommUnity Admin back-office as a Flutter Android app and PWA. Implemented BLoC-based state management, gRPC backend communication, album and alert management flows, Android image-sharing integration, and responsive UI across mobile, tablet and desktop.","fr":"Développement complet du back-office CommUnity Admin en application Android et PWA Flutter. Implémentation de la gestion d'état BLoC, de la communication backend gRPC, des flux de gestion d'albums et d'alertes, de l'intégration du partage d'images Android et de l'interface réactive sur mobile, tablette et ordinateur."},"source_note":{"en":"Built at Frontware International for Alvoria. The code is private, so this entry links to the live product.","fr":"Développé chez Frontware International pour Alvoria : le code est privé, la fiche renvoie donc vers le produit en ligne."},"tagline":{"en":"BYOD back-office for community management","fr":"Back-office BYOD pour la gestion de communautés"},"tech":["Flutter","Dart","gRPC","Protocol Buffers","flutter_bloc","auto_route"],"title":"Alvoria CommUnity","year":"2023"},{"category":{"en":"Cross-Platform App","fr":"Application Multiplateforme"},"description":{"en":"A mobile-first PWA for managing industrial machine service reports, contracts, and technician workflows. Technicians scan QR codes on machines to view details, create service reports, and sync data with an Odoo backend via a Go gRPC proxy.","fr":"Une PWA mobile-first pour gérer les rapports de service, les contrats et les flux de travail des techniciens d'équipements industriels. Les techniciens scannent les codes QR des machines pour voir les détails, créer des rapports de service et synchroniser les données avec un backend Odoo via un proxy gRPC Go."},"github_url":null,"gradient":["#FF6B35","#F7C948"],"hide_no_source_code_warning":false,"highlights":["Three-tier architecture: Flutter PWA → Go gRPC proxy → Odoo ERP via XML-RPC","QR code scanning to look up machines across 10 industrial machine types","Service reports with photos, customer signatures, GPS location and PDF export","Per-machine-type service report schemas defined in Protocol Buffers","Multi-language support (EN/TH) with customer portal for service requests"],"highlights_fr":["Architecture en trois niveaux : PWA Flutter → proxy Go gRPC → ERP Odoo via XML-RPC","Scan de codes QR pour rechercher des machines parmi 10 types d'équipements industriels","Rapports de service avec photos, signatures clients, localisation GPS et export PDF","Schémas de rapport de service par type de machine définis dans Protocol Buffers","Support multilingue (EN/TH) avec portail client pour les demandes de service"],"icon":"qr_code_scanner_rounded","id":"protech-qrcode","is_professional":true,"live_url":"https://protech-transfer.com/","long_description":{"en":"Protech QR Code connects field technicians with an Odoo (OpenERP 7) ERP through a three-tier architecture: a Flutter PWA client, a Go gRPC/gRPC-Web proxy server, and the Odoo backend. Technicians scan QR codes on machines to retrieve serial numbers, types, and customer info across 10 machine categories (Laser, Casting, Granulating, OTEC, MC, Embedding, Ultrasonic Atomiser, EPAG Smart, Vacuum Mixer, Other). I worked on the Flutter PWA using Cubit-based state management (flutter_bloc) and go_router for navigation. The app supports QR code scanning via mobile_scanner, service report creation with photos and customer signatures (image_picker, hand_signature), GPS location tracking (geolocator), and PDF export. Each machine type has its own service report schema defined in Protocol Buffers. The Go proxy handles authentication with Redis session storage (24-hour expiry), translates gRPC calls to Odoo XML-RPC, and supports CORS for PWA access. The app supports English and Thai (EN/TH), with a customer portal allowing machine info viewing and service requests via phone, email, or LINE. Multiple environments are supported via config files (local, dev, test, prod).","fr":"Protech QR Code relie les techniciens de terrain à un ERP Odoo (OpenERP 7) via une architecture en trois niveaux : un client PWA Flutter, un serveur proxy Go gRPC/gRPC-Web et le backend Odoo. Les techniciens scannent les codes QR des machines pour obtenir les numéros de série, les types et les informations clients parmi 10 catégories de machines (Laser, Fonderie, Granulation, OTEC, MC, Incrustation, Atomiseur à ultrasons, EPAG Smart, Mélangeur sous vide, Autre). J'ai travaillé sur la PWA Flutter en utilisant la gestion d'état basée sur Cubit (flutter_bloc) et go_router pour la navigation. L'application prend en charge le scan de codes QR via mobile_scanner, la création de rapports de service avec photos et signatures clients (image_picker, hand_signature), le suivi GPS (geolocator) et l'export PDF. Chaque type de machine a son propre schéma de rapport de service défini dans Protocol Buffers. Le proxy Go gère l'authentification avec stockage de session Redis (expiration 24 heures), traduit les appels gRPC en XML-RPC Odoo et prend en charge CORS pour l'accès PWA. L'application supporte l'anglais et le thaï (EN/TH), avec un portail client permettant de voir les informations machines et de demander du service par téléphone, e-mail ou LINE. Plusieurs environnements sont supportés via des fichiers de configuration (local, dev, test, prod)."},"media":[],"role":{"en":"Worked as a junior developer on the Flutter PWA. Implemented features using Cubit-based state management, gRPC-Web communication with the Go proxy, QR code scanning, service report creation with photos and signatures, GPS tracking, and multi-language support. Coordinated with the IT manager on new functionality requirements.","fr":"Développeur junior sur la PWA Flutter. Implémentation de fonctionnalités avec gestion d'état Cubit, communication gRPC-Web avec le proxy Go, scan de codes QR, création de rapports de service avec photos et signatures, suivi GPS et support multilingue. Coordination avec le responsable IT sur les nouvelles fonctionnalités."},"source_note":{"en":"Built at Frontware International for Protech. The code is private, so this entry links to the company website.","fr":"Développé chez Frontware International pour Protech : le code est privé, la fiche renvoie donc vers le site de l'entreprise."},"tagline":{"en":"PWA for industrial machine service reports via QR codes","fr":"PWA pour les rapports de service d'équipements industriels via codes QR"},"tech":["Flutter","Dart","Golang","gRPC","Protocol Buffers","flutter_bloc","Odoo"],"title":"Protech QR Code","year":"2023"},{"category":{"en":"Cross-Platform App","fr":"Application Multiplateforme"},"description":{"en":"A Flutter music app for mobile, desktop and web. Browse, search and play music, build playlists, keep a personal library and sign in to an account. One shared playback engine keeps audio running in the background.","fr":"Une application musicale Flutter pour mobile, ordinateur et web : parcourir et rechercher des morceaux, créer des playlists, gérer sa bibliothèque personnelle et se connecter à son compte. Un moteur de lecture commun assure la lecture en arrière-plan."},"github_url":null,"gradient":["#7B61FF","#00C48C"],"hide_no_source_code_warning":false,"highlights":["Shared audio playback engine with background playback and Linux MPRIS media-key support","Personal library with local offline caching","Adaptive UI for phones, tablets, desktop and web","Private streaming backend reachable over Tailscale"],"highlights_fr":["Moteur de lecture audio partagé, avec lecture en arrière-plan et prise en charge des touches multimédias Linux (MPRIS)","Bibliothèque personnelle avec cache local hors ligne","Interface adaptative : smartphone, tablette, ordinateur et web","Backend de streaming privé accessible via Tailscale"],"icon":"graphic_eq_rounded","id":"musica","is_professional":false,"live_url":null,"long_description":{"en":"Musica is a music client built with Flutter for mobile, desktop and web. You can discover music, search for tracks, artists, albums, genres and playlists, manage a personal library and listening history, and sign in to an account. A shared playback service handles audio streaming, queues, progress, background playback, media controls and audio effects, including Linux MPRIS integration. The code is organized by feature, with screens, controllers, repositories and services for each, and the server address is set at compile time. Audio is streamed from a dedicated backend service.","fr":"Musica est un client musical construit avec Flutter pour mobile, ordinateur et web. On peut y découvrir de la musique, rechercher des morceaux, artistes, albums, genres et playlists, gérer sa bibliothèque personnelle et son historique d’écoute, et se connecter à un compte. Un service de lecture commun gère le streaming audio, les files d’attente, la progression, la lecture en arrière-plan, les commandes multimédias et les effets audio, avec une intégration Linux/MPRIS. Le code est organisé par fonctionnalité (écrans, contrôleurs, repositories et services), l’adresse du serveur est définie à la compilation et le streaming passe par un service backend dédié."},"media":[{"caption":{"en":"Musica — home screen and featured music.","fr":"Musica — accueil et sélection à la une."},"source":"/assets/assets/images/projects/musica-home.webp"},{"caption":{"en":"Musica — search across tracks, artists, albums and genres.","fr":"Musica — recherche de morceaux, artistes, albums et genres."},"source":"/assets/assets/images/projects/musica-search.webp"},{"caption":{"en":"Musica — personal library.","fr":"Musica — bibliothèque personnelle."},"source":"/assets/assets/images/projects/musica-library.webp"},{"caption":{"en":"Musica — listening history.","fr":"Musica — historique d’écoute."},"source":"/assets/assets/images/projects/musica-library-history.webp"},{"caption":{"en":"Musica — tablet layout.","fr":"Musica — affichage sur tablette."},"source":"/assets/assets/images/projects/musica-home(iPad Pro 13).webp"},{"caption":{"en":"Musica — mobile layout.","fr":"Musica — affichage sur mobile."},"source":"/assets/assets/images/projects/musica-home(iPhone 16).webp"}],"role":{"en":"Architected and built the full client application from scratch, including custom audio engine background service, Linux MPRIS integration, and local caching.","fr":"Architecture et développement complet de l’application client à partir de zéro, y compris le service d’arrière-plan du moteur audio, l’intégration Linux MPRIS et le cache local."},"source_note":null,"tagline":{"en":"Cross-platform music client","fr":"Lecteur de musique multiplateforme"},"tech":["Flutter","Dart","Docker","NodeJS","SQLite","Tailscale"],"title":"Musica","year":"2026"},{"category":{"en":"Cross-Platform App","fr":"Application Multiplateforme"},"description":{"en":"A Flutter app that generates SRT and WebVTT subtitles with a locally running Whisper model. No audio or video ever leaves your device, whether you’re on macOS, Windows, Linux, mobile or the web.","fr":"Une application Flutter qui génère des sous-titres SRT et WebVTT avec Whisper, exécuté en local. Aucun fichier audio ou vidéo ne quitte l’appareil, que ce soit sur macOS, Windows, Linux, mobile ou le web."},"github_url":null,"gradient":["#00B8D9","#6C63FF"],"hide_no_source_code_warning":false,"highlights":["On-device Whisper transcription: no data leaves your device","Batch processing with per-file progress tracking","Live-caption mode that transcribes five minutes ahead of the playhead","Models from the 39 MB tiny to the 2.9 GB large-v3, with automatic mirror failover"],"highlights_fr":["Transcription Whisper sur l’appareil : aucune donnée n’en sort","Traitement par lots avec progression fichier par fichier","Sous-titrage en direct avec transcription cinq minutes à l’avance","Modèles de 39 Mo (tiny) à 2,9 Go (large-v3), avec bascule automatique entre miroirs"],"icon":"subtitles_rounded","id":"ai-caption","is_professional":false,"live_url":null,"long_description":{"en":"AI Caption is a private, offline-first captioning app built with Flutter for macOS, Windows, Linux, iOS, Android and the web. It processes files in batches with per-file progress, and lets you pick the audio track, detect the language or set it yourself, translate to English if you want, and configure audio cleanup. FFmpeg extracts each track and converts it to 16 kHz mono audio, then a local Whisper model transcribes it: on Apple platforms, on Android through GGML, or in the browser through WebAssembly. Models are downloaded on demand, from the 39 MB tiny preset up to the 2.9 GB large-v3, with progress reporting and automatic mirror failover. Captions can be exported as SRT or WebVTT. In live-caption mode, the app transcribes a rolling five-minute window ahead of the playhead, so subtitles are ready before playback reaches them.","fr":"AI Caption est une application de sous-titrage privée, conçue pour fonctionner hors ligne, développée avec Flutter pour macOS, Windows, Linux, iOS, Android et le web. Elle traite les fichiers par lots, avec la progression de chacun, et permet de choisir la piste audio, de détecter la langue ou de l’imposer, de traduire vers l’anglais si on le souhaite et de régler le nettoyage audio. FFmpeg extrait chaque piste et la convertit en audio mono 16 kHz, puis un modèle Whisper local la transcrit : sur les plateformes Apple, sur Android via GGML ou dans le navigateur via WebAssembly. Les modèles se téléchargent à la demande, du modèle tiny (39 Mo) au large-v3 (2,9 Go), avec suivi de la progression et bascule automatique entre miroirs. Les sous-titres s’exportent en SRT ou en WebVTT. En mode sous-titrage en direct, l’application transcrit à l’avance une fenêtre glissante de cinq minutes devant la tête de lecture, pour que les sous-titres soient prêts quand la lecture les atteint."},"media":[{"caption":{"en":"AI Caption — home screen.","fr":"AI Caption — écran d’accueil."},"source":"/assets/assets/images/projects/ai_caption_home.webp"},{"caption":{"en":"AI Caption — batch file selection.","fr":"AI Caption — sélection des fichiers à traiter par lots."},"source":"/assets/assets/images/projects/ai_caption_select_files.webp"},{"caption":{"en":"AI Caption — on-device caption generation.","fr":"AI Caption — génération des sous-titres sur l’appareil."},"source":"/assets/assets/images/projects/ai_caption_generate_captions.webp"},{"caption":{"en":"AI Caption — choosing a video for live captions.","fr":"AI Caption — choix d’une vidéo pour le sous-titrage en direct."},"source":"/assets/assets/images/projects/ai_caption_live_captions_pick_files.webp"},{"caption":{"en":"AI Caption — app settings.","fr":"AI Caption — paramètres de l’application."},"source":"/assets/assets/images/projects/ai_caption_settings.webp"},{"caption":{"en":"AI Caption — Whisper model settings.","fr":"AI Caption — paramètres du modèle Whisper."},"source":"/assets/assets/images/projects/ai_caption_settings_2.webp"},{"caption":{"en":"AI Caption — audio and language settings.","fr":"AI Caption — paramètres audio et langue."},"source":"/assets/assets/images/projects/ai_caption_settings_3.webp"}],"role":{"en":"Implemented the Flutter UI, WebAssembly & whisper.cpp bridges, offline audio extraction pipeline with FFmpeg, and SRT/WebVTT export utilities.","fr":"Développement de l’interface Flutter, des liaisons WebAssembly & whisper.cpp, du pipeline d’extraction audio hors ligne avec FFmpeg et de l’export SRT/WebVTT."},"source_note":{"en":"Private project: the source code isn’t public.","fr":"Projet privé : le code source n’est pas public."},"tagline":{"en":"Private, on-device subtitles for audio and video","fr":"Sous-titres privés pour audio et vidéo, générés sur l’appareil"},"tech":["Flutter","Whisper","whisper.cpp","GGML","FFmpeg","WebAssembly"],"title":"AI Caption","year":"2026"},{"category":{"en":"Open Source","fr":"Open Source"},"description":{"en":"A drop-in Flutter stepper that gives more control over appearance, behavior and flow than the stock Material Stepper.","fr":"Un stepper Flutter prêt à l’emploi, qui laisse plus de liberté sur l’apparence, le comportement et le déroulement que le Stepper Material de base."},"github_url":"https://github.com/flrnsbt/better_stepper","gradient":["#00F5C4","#7B61FF"],"hide_no_source_code_warning":false,"highlights":["Custom step indicators, icons and progress animation","Horizontal and vertical layouts, with validation of each step’s state","Open-source Flutter widget published on pub.dev"],"highlights_fr":["Indicateurs d’étapes, icônes et animation de progression personnalisables","Dispositions horizontale et verticale, avec validation de l’état de chaque étape","Widget Flutter open source publié sur pub.dev"],"icon":"linear_scale_rounded","id":"better-stepper","is_professional":false,"live_url":"https://github.com/flrnsbt/better_stepper","long_description":{"en":"better_stepper started as a frustration with the default Material Stepper and grew into a reusable widget: custom step indicators, horizontal and vertical layouts, and full control over transitions. It’s a small package, but it makes working with steppers much less painful.","fr":"better_stepper est né de l’agacement que provoquait le Stepper Material par défaut, avant de devenir un widget réutilisable : indicateurs d’étapes personnalisables, dispositions horizontale et verticale, contrôle complet des transitions. Un petit package, mais qui rend l’usage bien plus agréable."},"media":[],"role":null,"source_note":null,"tagline":{"en":"A more flexible Flutter stepper","fr":"Un stepper Flutter plus flexible"},"tech":["Dart","Flutter","Widgets"],"title":"better_stepper","year":"2023"},{"category":{"en":"Cross-Platform App","fr":"Application Multiplateforme"},"description":{"en":"A multi-country supermarket price comparator for Belgium, France and the Netherlands. Users scan barcodes, track deal histories and manage shopping baskets. I took ownership of the Flutter mobile project, turning an early-stage prototype into a structured, production-ready app.","fr":"Un comparateur de prix supermarchés pour la Belgique, la France et les Pays-Bas. On y scanne des codes-barres, suit l'historique des promotions et gère des paniers. J'ai pris en charge le projet mobile Flutter, transformant un prototype en application de production structurée."},"github_url":null,"gradient":["#00B4D8","#00F5C4"],"hide_no_source_code_warning":false,"highlights":["UI/UX screen design: translated client feature requests into clean, intuitive mobile interfaces","Prototype refactoring: restructured early code into a modular Flutter architecture with clean UI/state separation","Defensive data mapping: built resilient client-side mappers to normalize fragmented, multi-language backend payloads","Core features: live barcode scanning, dynamic basket totals, price history charts, regional promotional alerts","Firebase Auth: user authentication and session management across platforms","Firebase Dynamic Links: deep linking for product pages and promotional campaigns","Firebase Messaging: push notifications for price drops and promotional alerts","Cross-platform performance: responsive layouts, smooth scrolling, local state caching across Android and iOS"],"highlights_fr":["Conception UI/UX : traduction des demandes fonctionnelles du client en interfaces mobiles propres et intuitives","refactoring du prototype : restructuration du code initial en architecture Flutter modulaire avec séparation UI/état","Mapping de données défensif : mappers côté client pour normaliser les payloads fragmentés et multilingues du backend","Fonctionnalités principales : scan de codes-barres en direct, calculs de panier dynamiques, graphiques d'historique des prix, alertes promotionnelles régionales","Firebase Auth : authentification des utilisateurs et gestion des sessions sur toutes les plateformes","Firebase Dynamic Links : liens profonds pour les pages produits et campagnes promotionnelles","Firebase Messaging : notifications push pour les baisses de prix et alertes promotionnelles","Performance multiplateforme : interfaces réactives, défilement fluide, cache d'état local sur Android et iOS"],"icon":"terrain_rounded","id":"pingprice","is_professional":true,"live_url":"https://pingprice.be/","long_description":{"en":"PingPrice lets shoppers across Belgium, France and the Netherlands compare product prices across online supermarkets. Users scan EAN barcodes with their camera, view price history charts, manage shopping baskets with dynamic totals, and receive regional promotional alerts. I took ownership of the Flutter mobile project during my internship and continued as a junior developer, transforming an early-stage prototype into a structured, production-ready codebase. I designed new mobile user flows and screen layouts, translating client feature requests into clean UI interfaces. I restructured the prototype into a modular Flutter architecture with clean separation between UI widgets and state management. I built resilient client-side data mappers to normalize fragmented, multi-language backend database payloads into predictable domain entities. I developed core interactions including live camera barcode scanning, dynamic basket calculations, price history charts and promotional alerts. The app uses Firebase Auth for user authentication and session management, Firebase Dynamic Links for deep linking to product pages and promotional campaigns, and Firebase Messaging for push notifications on price drops and deals. The app communicates with a gRPC backend via Protocol Buffers, supports three countries with localized branding, and runs on Android, iOS and web (PWA).","fr":"PingPrice permet aux consommateurs en Belgique, en France et aux Pays-Bas de comparer les prix des produits dans les supermarchés en ligne. On scanne les codes-barres EAN avec la caméra, consulte les graphiques d'historique des prix, gère des paniers avec calculs dynamiques et reçoit des alertes promotionnelles régionales. J'ai pris en charge le projet mobile Flutter pendant mon stage et en tant que développeur junior, transformant un prototype en codebase de production structurée. J'ai conçu de nouveaux parcours utilisateurs et maquettes d'écrans mobiles, traduisant les demandes fonctionnelles du client en interfaces propres. J'ai restructuré le prototype en architecture Flutter modulaire avec séparation claire entre widgets UI et gestion d'état. J'ai développé des mappers de données côté client pour normaliser les payloads fragmentés et multilingues du backend en entités de domaine cohérentes. J'ai implémenté les fonctionnalités principales : scan de codes-barres en direct, calculs de panier dynamiques, graphiques d'historique des prix et alertes promotionnelles. L'application utilise Firebase Auth pour l'authentification et la gestion des sessions, Firebase Dynamic Links pour les liens profonds vers les pages produits et campagnes promotionnelles, et Firebase Messaging pour les notifications push sur les baisses de prix et offres. L'application communique avec un backend gRPC via Protocol Buffers, prend en charge trois pays avec un branding localisé et fonctionne sur Android, iOS et web (PWA)."},"media":[{"caption":{"en":"PingPrice — price comparison screen.","fr":"PingPrice — écran de comparaison des prix."},"source":"/assets/assets/images/projects/pingprice_app_screenshot.webp"},{"caption":{"en":"PingPrice — product detail view.","fr":"PingPrice — vue détaillée du produit."},"source":"/assets/assets/images/projects/pingprice_app_screenshot_2.webp"}],"role":{"en":"Took ownership of the Flutter mobile project during internship and continued as junior developer. Designed mobile UI/UX screens, refactored the prototype into a modular architecture, built client-side data mappers for multi-language backend normalization, and implemented barcode scanning, basket comparison, price history and promotional alerts across Belgium, France and the Netherlands.","fr":"Prise en charge du projet mobile Flutter pendant le stage et poursuite en tant que développeur junior. Conception des écrans UI/UX mobiles, refactoring du prototype en architecture modulaire, développement de mappers de données côté client pour la normalisation multilingue du backend, et implémentation du scan de codes-barres, de la comparaison de paniers, de l'historique des prix et des alertes promotionnelles en Belgique, France et Pays-Bas."},"source_note":{"en":"Built at Frontware International. The code is private, so this entry links to the live product and app stores.","fr":"Développé chez Frontware International : le code est privé, la fiche renvoie donc vers le produit en ligne et les stores."},"tagline":{"en":"Multi-country supermarket price comparator","fr":"Comparateur de prix supermarchés multi-pays"},"tech":["Flutter","Dart","gRPC","Protocol Buffers","Firebase Auth","Firebase Dynamic Links","Firebase Messaging"],"title":"PingPrice","year":"2022 – 2023"},{"category":{"en":"Cross-Platform App","fr":"Application Multiplateforme"},"description":{"en":"A streaming app for web, desktop, Android and iOS to browse a local movie database enriched with TMDB data. Movies stream over SFTP, and a wishlist keeps track of the ones you don’t own yet.","fr":"Une application de streaming pour le web, l’ordinateur, Android et iOS, qui permet de parcourir une base de films locale enrichie par TMDB. Les films sont diffusés via SFTP, et une liste de souhaits garde la trace de ceux qu’on ne possède pas encore."},"github_url":"https://github.com/flrnsbt/netflox","gradient":["#FF5252","#7B61FF"],"hide_no_source_code_warning":true,"highlights":["Direct SSH/SFTP streaming with on-the-fly video decoding","TMDB metadata for posters, synopses and cast","Local wishlist and library management"],"highlights_fr":["Streaming direct par SSH/SFTP, avec décodage vidéo à la volée","Métadonnées TMDB pour les affiches, synopsis et distributions","Liste de souhaits et gestion de la vidéothèque en local"],"icon":"movie_filter_rounded","id":"netflox","is_professional":false,"live_url":null,"long_description":{"en":"netflox is a video streaming app for web, desktop and mobile (Android and iOS), built around my own movie collection. It combines the local database with the TMDB API to offer a clean browse, detail and search experience: the movies I own stream directly over SFTP, while TMDB lets me search for titles I don’t have yet and add them to a wishlist.","fr":"netflox est une application de streaming vidéo pour le web, l’ordinateur et le mobile (Android et iOS), construite autour de ma propre collection de films. Elle croise la base de données locale avec l’API TMDB pour proposer une navigation, des fiches détaillées et une recherche soignées : les films que je possède sont diffusés directement via SFTP, et TMDB me permet de chercher ceux que je n’ai pas encore pour les ajouter à ma liste de souhaits."},"media":[],"role":null,"source_note":null,"tagline":{"en":"Personal movie library, streamed over SFTP","fr":"Ma vidéothèque de films, lue en streaming via SFTP"},"tech":["Flutter","Dart","TMDB API","SFTP"],"title":"netflox","year":"2022"},{"category":{"en":"IoT","fr":"IoT"},"description":{"en":"LED strips driven by a NodeMCU and controlled over MQTT from a Flutter app I wrote myself. The room pulses in time with whatever is playing.","fr":"Des rubans LED pilotés par un NodeMCU et commandés en MQTT depuis une application Flutter que j’ai écrite moi-même : la pièce pulse au rythme de la musique."},"github_url":"https://github.com/flrnsbt/music_reactive_led_strips","gradient":["#E15196","#7B61FF"],"hide_no_source_code_warning":true,"highlights":["Real-time audio-reactive animations based on FFT frequency analysis","Low-latency MQTT link to the ESP8266 NodeMCU","Flutter app for custom color presets and animation modes"],"highlights_fr":["Animations réagissant au son en temps réel, par analyse fréquentielle FFT","Communication MQTT à faible latence avec le NodeMCU ESP8266","Application Flutter avec préréglages de couleurs personnalisés et modes d’animation"],"icon":"lightbulb_rounded","id":"music-reactive-led-strips","is_professional":false,"live_url":null,"long_description":{"en":"A hardware and software project: an ESP8266 (NodeMCU) drives the LED strips, listens for MQTT messages and reacts to the music in real time, while a Flutter app I made acts as the remote: color, intensity and modes. Embedded C++ meets Flutter.","fr":"Un projet à la fois matériel et logiciel : un ESP8266 (NodeMCU) pilote les rubans LED, reçoit les messages MQTT et réagit à la musique en temps réel, pendant qu’une application Flutter faite maison sert de télécommande (couleur, intensité, modes). Du C++ embarqué et du Flutter, dans le même projet."},"media":[],"role":null,"source_note":null,"tagline":{"en":"IoT lights that dance to music","fr":"Rubans LED connectés qui réagissent à la musique"},"tech":["Flutter","MQTT","NodeMCU","C++"],"title":"Music Reactive LED Strips","year":"2022"},{"category":{"en":"Open Source","fr":"Open Source"},"description":{"en":"A Flutter video player that browses a remote machine over SSH/SFTP and streams its videos directly. No cloud upload, no third-party service.","fr":"Un lecteur vidéo Flutter qui parcourt une machine distante en SSH/SFTP et lit ses vidéos en streaming, directement : pas de téléversement dans le cloud, pas de service tiers."},"github_url":"https://pub.dev/packages/sftp_video_player","gradient":["#FFB74D","#F4511E"],"hide_no_source_code_warning":false,"highlights":["Streams video straight from remote servers over SFTP","Built-in navigation of remote directories","No dependency on third-party cloud services"],"highlights_fr":["Lecture directe de vidéos depuis des serveurs distants via SFTP","Navigation intégrée dans l’arborescence des fichiers distants","Aucune dépendance à un service cloud tiers"],"icon":"smart_display_rounded","id":"sftp-video-player","is_professional":false,"live_url":"https://pub.dev/packages/sftp_video_player","long_description":{"en":"sftp_video_player turns any SSH-accessible machine into a personal streaming server. It lists remote directories, streams video straight from the SFTP channel and keeps playback smooth on a local network. It’s made for anyone who wants their media to stay on their own machines.","fr":"sftp_video_player transforme n’importe quelle machine accessible en SSH en serveur de streaming personnel. Il liste les dossiers distants, lit la vidéo directement depuis le canal SFTP et reste fluide sur un réseau local. Il est conçu pour ceux qui veulent que leurs médias ne quittent jamais leurs propres machines."},"media":[],"role":null,"source_note":null,"tagline":{"en":"Video streaming over SFTP","fr":"Lecteur vidéo en streaming via SFTP"},"tech":["Flutter","Dart","SSH / SFTP"],"title":"sftp_video_player","year":"2022"}],"stats":[{"icon":"rocket_launch_outlined","label":{"en":"Projects","fr":"Projets"},"value":"16+"},{"icon":"code_rounded","label":{"en":"Public GitHub repos","fr":"Dépôts GitHub publics"},"value":"17"},{"icon":"merge_rounded","label":{"en":"Open-source forks & fixes","fr":"Forks et correctifs open source"},"value":"9+"}],"total":18}