Aider les copropriétaires à argumenter face à des PDF de 200 pages
Un avis de cotisation spéciale arrive et un copropriétaire a 30 jours pour décider de se battre. Le PDF fait 200 pages de comptabilité et de jargon juridique. CondoShield le lit, fait remonter les leviers et rédige la lettre de contestation, en anglais ou en français.
La plupart des contestations de cotisations spéciales sont perdues parce que le propriétaire abandonne à mi-lecture. Le travail de CondoShield n'est pas d'être plus malin qu'un avocat, c'est de maintenir un propriétaire dans la course assez longtemps pour, soit accepter la cotisation en connaissance de cause, soit rédiger une vraie lettre de contestation.

Pourquoi je l'ai construit
Je suis copropriétaire. J'ai reçu des cotisations spéciales douteuses qui se sont traduites par des paiements mensuels supplémentaires importants, et la paperasse autour était volontairement difficile à lire. Il n'y avait pas de moyen évident de comprendre les frais, de vérifier mes droits, ni de trouver d'autres copropriétaires dans la même situation. CondoShield est l'outil que j'aurais voulu le jour où la première lettre est arrivée.
Ce que ça fait
CondoShield est une application Web qui transforme un PDF de cotisation numérisé en quelque chose sur quoi un copropriétaire peut réellement agir. Elle analyse le document, ventile les frais, répond aux questions juridiques en fonction des lois de la bonne région, rédige des lettres de contestation à partir de gabarits, et suit chaque échéance pour que rien ne tombe en désuétude en silence.
- Analyser les PDF de cotisations et visualiser la ventilation des frais avec recharts.
- Poser des questions juridiques en fonction de la région sélectionnée (Québec, Ontario, autres).
- Générer des lettres de contestation à partir de gabarits propres à la région.
- Suivre chaque cotisation, contestation et échéance depuis un seul tableau de bord.
- Voir des suggestions d'économies générées par IA, liées aux frais analysés.
- Basculer toute l'interface entre l'anglais et le français canadien.

Analyse de document multi-modèles
Les PDF de cotisations volumineux passent d'abord par pdf-parse, puis Tesseract.js pour les pages numérisées, puis se diffusent vers GPT-4o, GPT-4.1 et Llama sur Azure AI Inference. Chaque modèle reçoit une question différente (coûts, échéancier, base juridique, comparables) et les réponses sont réconciliées en un résumé unique étiqueté en confiance. Si deux modèles divergent sur un chiffre, l'UI affiche les deux plutôt que de choisir un gagnant.
Accompagnement juridique conscient de la région
Le générateur de lettres de contestation puise dans des gabarits et des citations spécifiques à la région. Un copropriétaire québécois reçoit des clauses ancrées dans le Code civil ; un copropriétaire ontarien reçoit du libellé rattaché au Condominium Act. Le but n'est pas de rédiger un argument juridique gagnant, c'est de rédiger quelque chose qu'un parajuriste peut affûter en une heure au lieu de partir de zéro.

Comment je l'ai construit
Le frontend est React avec Tailwind sur une base Next.js + TypeScript, mobile d'abord, parce que la plupart des copropriétaires lisent ces lettres sur leur téléphone. Supabase gère l'authentification, la base de données et les mises à jour en temps réel pour que les échéances et l'état des contestations se synchronisent sans interrogation périodique. Les graphiques utilisent recharts, l'export PDF passe par jspdf et html2pdf.js avec html2canvas pour l'aperçu rendu, et l'OCR utilise Tesseract.js. La couche IA parle à GPT-4o, GPT-4.1 et Llama via @azure-rest/ai-inference et @azure/core-auth.
Ce qui a été difficile
Trois problèmes ont accaparé l'essentiel du temps de développement. Premièrement, faire entrer de longs PDF dans la fenêtre de contexte du modèle : je découpe les documents en sections qui se chevauchent par en-tête et je transmets seulement les morceaux pertinents par question au lieu de tout balancer. Deuxièmement, des sorties structurées : je m'appuie sur des prompts façonnés par schéma et je rejette les réponses qui ne se parsent pas, puis je réessaie sur un autre modèle du pool. Troisièmement, la sécurité au niveau ligne de Supabase : chaque table qui touche au fichier d'un copropriétaire est verrouillée à l'UID d'authentification de ce copropriétaire, pour qu'un lien partagé fuité ne révèle pas la cotisation de quelqu'un d'autre.

Ce que j'ai appris
Découper les documents intelligemment compte davantage que choisir le modèle le plus malin. Un modèle de taille moyenne avec les bons 3 000 tokens de contexte bat un modèle de pointe avec les mauvais 100 000. J'ai aussi appris qu'en legal-tech, l'interface doit avoir l'air sobre, sinon les copropriétaires supposent que la sortie est un tour de chatbot ; j'ai donc coupé chaque animation qui ne servait pas la clarté.
Et la suite
- Étendre la couverture au-delà du Québec et de l'Ontario vers le reste du Canada et quelques États américains.
- Ajouter des rappels d'échéance et un flux d'escalade pour les contestations ignorées.
- Brancher les données officielles municipales et de registre pour vérifier les frais de cotisation.
- Applications mobiles natives avec révision de document hors ligne.
- M'associer avec des parajuristes et des avocats en copropriété pour réviser l'accompagnement IA avant qu'il arrive aux copropriétaires.

Pourquoi j'ai transformé une Steam Deck en console d'impression 3D
Lauréat du OpenAI Open Model Hackathon, parmi 8 652 participants : des modèles gpt-oss qui tournent hors ligne sur une Steam Deck, contrôle vocal via Vosk, visualisation STL en OpenGL, et OctoPi pour l'impression. De « imprime-moi un crochet pour mon bureau » à un crochet sur le plateau.

FHIR + CDS Hooks + Gemini : un score de risque qu'un clinicien lira vraiment
Les scores de risque meurent quand ils sont des boîtes noires. L'intégration MeldRx via FHIR/CDS Hooks tire les données patient ; Gemini Flash renvoie du JSON structuré avec explications, confiance et actions recommandées ; l'UI livre aux cliniciens un rapport PDF téléchargeable.
