Pistochia
Startet baldEine iPhone-App für Menschen mit ADHS. Man sagt oder tippt, was einem durch den Kopf geht, und bekommt es als Schritte zurück, die klein genug sind, um anzufangen, sortiert danach, wie viel Energie man an diesem Tag hat.
- Meine Rolle
- Design und Entwicklung, im Alleingang
- Jahr
- 2026
- Gebaut mit
- Expo · React Native · SQLite · Supabase Edge Functions · Claude · Whisper · RevenueCat
Scroll seitlich, um das ganze Diagramm zu sehen.
Das Problem
Für Menschen mit ADHS ist oft nicht das Erinnern schwer, sondern das Anfangen. Eine To-do-App, die den ganzen Berg speichert, wird zu einer Liste von Dingen, bei denen man ein schlechtes Gewissen hat. Die Arbeitseinheit muss so klein werden, dass das Anfangen leichtfällt, und die App muss in der Sekunde funktionieren, in der man sie öffnet.
Wie es gebaut ist
Eine Offline-first-App in Expo auf lokalem SQLite mit versionierten Migrationen. Für die Identität sorgt die anonyme Auth von Supabase, so passiert der erste Brain-Dump vor jedem Registrierungsbildschirm. Jeder KI-Aufruf geht über eine Edge Function, die mit Operationen arbeitet: Die App schickt einen Operationsnamen und dessen Parameter, nie einen Prompt und nie einen Schlüssel. Die Funktion prüft die Operation gegen eine Allowlist, setzt Rate Limits pro IP und Tageskontingente pro Installation durch und hat einen Kill-Switch. Claude zerlegt die Aufgaben, und Whisper übernimmt hinter demselben Proxy die Spracheingabe. RevenueCat steuert die Paywall, und Analytics bleiben aus, bis der Nutzer zustimmt.
Entscheidungen, auf die es ankam
Die App enthält keine API-Schlüssel
Rein gehen Operationsnamen, raus kommen strukturierte Ergebnisse. Der API-Schlüssel liegt in der Edge Function, hinter einem Kill-Switch, Kontingenten und Limits, die im Fehlerfall blockieren.
Die App ist offline-first
Aufgaben liegen in SQLite auf dem Handy, mit echten Migrationen. Ein Tool für ADHS, das eine Netzverbindung braucht, um den nächsten Schritt anzuzeigen, würde die Menschen im Stich lassen, für die es gedacht ist.
Keine Registrierung vor der ersten Nutzung
Anonyme Authentifizierung legt im Hintergrund eine Identität an. Der Kontobildschirm kommt später, wenn die App schon nützlich war.
Code aus dem Repo
// 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]!;
Zeile 3. Die App kann keinen Prompt, kein Modell und kein Token-Limit schicken. Das liegt auf dem Server, und die App kann nur eine Operation von der Allowlist nennen.
Zeile 6. AI_PAUSED ist ein Kill-Switch: Eine einzige Umgebungsvariable stoppt alle Ausgaben für KI ohne Redeploy.
Zeile 19. Eine unbekannte Operation wird abgelehnt. Der API-Schlüssel existiert nirgends im App-Bundle.
Wo es heute steht
Das Material für den App Store, die Launch-Checkliste, EAS-Builds, ein Promo-Video und pistochia.com mit Warteliste sind fertig. Zuerst das iPhone. Als Nächstes kommt die Veröffentlichung im App Store.