Tous les articles

Pistochia

Bientôt disponible

Une application iPhone pour les personnes avec un TDAH. Vous dites ou tapez ce que vous avez en tête, et cela revient sous forme d'étapes assez petites pour pouvoir commencer, triées selon l'énergie que vous avez ce jour-là.

Mon rôle
Design et développement, en solo
Année
2026
Développé avec
Expo · React Native · SQLite · Supabase Edge Functions · Claude · Whisper · RevenueCat
EXPO CLIENT: OFFLINE-FIRSTSQLITESUPABASE ANONYMOUS AUTHEDGE PROXY: OPERATIONALLOWLIST, QUOTASREVENUECAT: PAYWALLCLAUDE: TASK BREAKDOWNWHISPER: VOICE INTAKEFIRST OPENOPERATION IDWORKS IN AIRPLANE MODEFAIL-CLOSED LIMITS, AI_PAUSED KILL SWITCHPROMPTS LIVE SERVER-SIDE (ops.ts)

Faites défiler horizontalement pour voir tout le schéma.

ArchitectureOFFLINE-FIRST CLIENT → OPERATION ALLOWLIST PROXY → CLAUDE / WHISPER

Le problème

Pour les personnes avec un TDAH, le plus dur est souvent de commencer, pas de se souvenir. Une application de to-do list qui stocke toute la montagne devient une liste de choses qui font culpabiliser. L'unité de travail doit rétrécir jusqu'à ce que commencer paraisse facile, et l'application doit fonctionner dès la seconde où elle s'ouvre.

Comment c'est construit

Une application Expo offline-first sur SQLite en local, avec des migrations versionnées. L'identité repose sur l'auth anonyme de Supabase, donc le premier brain dump a lieu avant tout écran d'inscription. Chaque appel à l'IA passe par une Edge Function qui fonctionne par opération : l'application envoie un nom d'opération et ses paramètres, jamais un prompt, jamais une clé. La fonction vérifie que l'opération figure dans une liste d'opérations autorisées, applique des rate limits par IP et des quotas quotidiens par installation, et dispose d'un kill switch. Claude découpe les tâches, et Whisper, derrière le même proxy, s'occupe de la voix. RevenueCat gère le paywall, et la mesure d'audience reste désactivée tant que l'utilisateur n'a pas donné son accord.

Les décisions qui ont compté

  • L'application ne contient aucune clé d'API

    Des noms d'opérations entrent, des résultats structurés sortent. La clé d'API se trouve dans l'Edge Function, derrière un kill switch, des quotas et des limites qui bloquent en cas d'échec.

  • L'application fonctionne d'abord hors ligne

    Les tâches sont stockées dans SQLite sur le téléphone, avec de vraies migrations. Un outil pour le TDAH qui a besoin du réseau pour afficher votre prochaine étape laisserait tomber les personnes à qui il est destiné.

  • Pas d'inscription avant la première utilisation

    L'authentification anonyme crée une identité en silence. L'écran de compte arrive plus tard, une fois que l'application a été utile.

Code tiré du dépôt

functions/anthropic-proxy/index.tsLe proxy edge : une liste d'opérations autorisées et un kill switch
// The legacy free-relay surface: any request still carrying these is either
// an outdated client or an abuse probe — reject outright.
const FORBIDDEN_KEYS = ['system', 'model', 'messages', 'maxTokens'] as const;1
 
// …
const paused = Deno.env.get('AI_PAUSED');2
if (paused === 'true' || paused === '1') {
  return jsonResponse({ error: 'ai_paused' }, 503);
}
 
// …
for (const key of FORBIDDEN_KEYS) {
  if (key in body) {
    return jsonResponse({ error: 'invalid_request' }, 400);
  }
}
 
const op = body.op;
if (typeof op !== 'string' || !(op in OPS)) {3
  return jsonResponse({ error: 'invalid_op' }, 400);
}
const config = OPS[op]!;
  1. Ligne 3. L'application ne peut envoyer ni prompt, ni modèle, ni limite de tokens. Ces réglages restent sur le serveur, et l'application peut seulement nommer une opération de la liste autorisée.

  2. Ligne 6. AI_PAUSED est un kill switch : une seule variable d'environnement coupe toutes les dépenses d'IA sans redéploiement.

  3. Ligne 19. Une opération inconnue est rejetée. La clé d'API n'existe nulle part dans le bundle de l'application.

Où en est le projet

Les éléments pour l'App Store, la checklist de lancement, les builds EAS, une vidéo promo et pistochia.com avec une liste d'attente sont prêts. D'abord sur iPhone. Prochaine étape : la sortie sur l'App Store.

Article suivantMémoire de master : détection explicable du phishing écrit par IA