Eine Haftnotiz-App, die sich in Echtzeit zwischen Windows, Android und Browser synchronisiert. Am PC ist jede Notiz ein Fenster auf dem Desktop oder ein Symbol im Infobereich, am Handy ein Widget auf dem Startbildschirm, das sich auch bei geschlossener App aktualisiert. Checklisten, Farben, Erinnerungen und Teilen, Ende-zu-Ende-verschlüsselt: Der Server speichert Notizen, die er nicht lesen kann.
Stickly ist eine Haftnotiz-App, die ich allein konzipiert und gebaut habe, vom Server bis zu den Apps. Eine einzige Vue-App läuft im Browser, in einer Tauri-Hülle unter Windows und in einer Capacitor-Hülle unter Android, und alle synchronisieren sich mit meinem Server, auf den man vorerst nur mit Einladung kommt. Die Bilder zeigen Beispielnotizen auf einer Testkopie: Die echten sind verschlüsselt, und nicht einmal der Server kann sie lesen.
**Was sie kann**
- **Am PC** hat jede Notiz ihr eigenes Fenster, im Vordergrund oder auf dem Desktop, wo sie auch nach Win+D bleibt. Bis zu sechs liegen im Infobereich als Symbole in ihrer Farbe; eine an eine App geheftete Notiz erscheint nur, wenn diese App vorne ist, und „Invia a Claude“ (an Claude senden) schickt ihren Text in den Chat der Claude-App. - **Am Handy** aktualisieren sich die Widgets auf dem Startbildschirm auch bei geschlossener App, und Einträge der Checkliste lassen sich direkt im Widget abhaken. Dazu kommen Notizen über anderen Apps, die Kachel „Nuova nota“ (neue Notiz) in den Schnelleinstellungen und Teilen → Stickly. - **Überall**: Checklisten, Farben und Emojis, Formatierung mit Tastenkürzeln, Suche, Zurückstellen mit einer Benachrichtigung, wenn die Notiz zurückkommt, ein Papierkorb für 30 Tage, Versionsverlauf, helles und dunkles Design. Im Browser lässt sie sich als App installieren und öffnet sich auch offline. - **Gemeinsam**: Eine Notiz wird per E-Mail geteilt, mit Personen, die bearbeiten oder nur lesen dürfen, und ihre Änderungen erscheinen, während sie tippen. - **Anmeldung** mit Passwort oder Passkey, App-Sperre mit Fingerabdruck oder Windows Hello und E-Mails von der eigenen Domain für Einladungen, Bestätigungen und vergessene Passwörter.
**Das Schwierige: verschlüsseln, ohne die Echtzeit zu verlieren**
Jede Notiz ist ein Yjs-Dokument. Eine Änderung wird zu einem Update, das das Gerät mit dem Schlüssel der Notiz verschlüsselt (AES-256-GCM) und aus einer lokalen Warteschlange, die auch offline hält, über den WebSocket-Kanal schickt. Der Server speichert und leitet Blobs weiter, die er nicht öffnen kann, nummeriert: Ein Gerät, das zurückliegt, fragt nur nach den fehlenden. Der Schlüssel einer Notiz ist für jede Person mit ihrem öffentlichen X25519-Schlüssel versiegelt: Teilen heißt, ihn für eine Person mehr zu versiegeln, und wer geht, sorgt für einen neuen Schlüssel.
Im Android-Widget lässt sich ein Eintrag abhaken, ohne die App zu öffnen: Ein Hintergrundjob lädt das verschlüsselte Dokument, lässt es von derselben Sync-Engine ändern, die dort im V8 einer WebView ohne Seite läuft, und schickt das Update. Und die Widgets bleiben aktuell dank einer Verbindung, die die App selbst mit dem Server hält, ohne Firebase oder andere Dienste.
Vue 3 und TypeScript, Tiptap auf Yjs, Fastify und PostgreSQL in Docker auf meinem Server, Tauri 2 mit Rust, Capacitor 8 mit Kotlin; 244 automatisierte Tests in JavaScript, Rust und Kotlin.
Konzeption, Full-Stack-Entwicklung und Veröffentlichung · 2026
Vue.js, Fastify, Tauri, Capacitor, Yjs