Eigenes Projekt · Case Study

LithoCanvas Case Study Eine Sammler-App von der Idee bis zum Backend

LithoCanvas ist unsere eigene Android-App für Mineralien- und Kunstsammlungen. Diese Case Study zeigt, wie wir sie gebaut haben: App-Architektur, Backend, Abrechnung und Datenschutz, so wie wir es auch für Kundenprojekte planen.

  • React Native 0.88
  • React 19
  • Expo SDK 58
  • Cloudflare Workers
2 Sprachen Deutsch und Englisch ab dem ersten Build
EU Datenhaltung D1-Datenbank und private R2-Speicher in der EU
0 Anbieter-Schlüssel in der App Die Bilderkennung läuft über den eigenen Server
3 Abo-Stufen Käufe über Google Play, Status serverseitig geprüft

Die App

Vier Ansichten

LithoCanvas-Startseite mit einer Schaltfläche zum Erkennen von Mineralien und Kunst und einer Vorschau der Sammlung.
Scan-Ansicht mit der Frage, was du entdeckt hast, und Tipps für gleichmäßiges Licht.
Gespeicherter Pyrit mit Foto, Härte, Kristallsystem und der Sicherheit der Bestimmung.
Mineraliensammlung mit Fotos von Rosenquarz und Wulfenit, Suche und Filtern.

Was wir gebaut haben

Die App legt Sammlungen an, erkennt Fotos auf Wunsch und synchronisiert alles mit einem eigenen Backend. Vier Entscheidungen prägen die Architektur.

  • Sammlung zuerst auf dem Gerät

    Einträge, Fotos und Notizen liegen pro Konto in einer lokalen SQLite-Datenbank. Änderungen warten in einer dauerhaften Warteschlange auf die Synchronisierung, daher geht ohne Netz nichts verloren.

  • Erkennung über den eigenen Server

    Ein Foto verlässt das Gerät erst nach Zustimmung. Ein Worker prüft die Anfrage, zählt Kontingente und spricht den Erkennungsanbieter an. Dessen Schlüssel stecken nie im App-Paket.

  • Abrechnung mit Serverprüfung

    Gekauft wird über Google Play. Welcher Plan gilt, entscheidet das Backend nach der Prüfung des Kaufs und nicht die App.

  • Konto, Export und Löschung

    Registrierung, Passwort-Wiederherstellung per E-Mail, Datenexport und Kontolöschung gehörten von Anfang an zum Umfang.

Tech Stack

im Detail

  • React Native 0.88

    Bare React Native mit React 19 und TypeScript 6. Die Android-Builds laufen lokal über Gradle, ohne Cloud-Build-Dienst.

    Framework
  • Expo SDK 58 Module

    Kamera, Bildauswahl, Dateisystem und Benachrichtigungen kommen als einzelne Module in die App.

    Native Module
  • expo-sqlite + Zustand

    Konto-gebundene Datenbank auf dem Gerät, dazu eine Warteschlange für ausstehende Änderungen und Löschungen.

    Lokale Daten
  • Cloudflare Workers

    Anmeldung, Zugriffsprüfung, Erkennungs-Proxy, Kontingente, Kaufprüfung, Medien, Export und Kontolöschung.

    Backend
  • D1 + R2

    Versionierte D1-Migrationen für das Schema, private R2-Buckets für die Fotos, beides in der EU.

    Daten
  • react-native-iap

    Google-Play-Käufe in der App, Verifizierung und Plan-Status im Worker.

    Abrechnung
  • Cloudflare Email Service

    Wiederherstellungs-Mails über das send_email-Binding des Workers.

    E-Mail

Entscheidungen, die auch bei Kundenprojekten zählen

Migration

Das Backend ist von Supabase auf Cloudflare Workers, D1 und R2 gewechselt. Wir haben die Migration geprüft und danach die alten Ressourcen abgeschaltet.

Ehrliche Ergebnisse

Die App trennt eigene Beobachtungen von maschinellen Schätzungen. Sicherheit, Herkunft und Wert eines Stücks erfindet sie nicht.

Klare Abo-Regeln

Wiederkehrende Kosten, Scan-Limits und der Stand nach einer Kündigung stehen offen in der App. Ein Probeabo, das später abbucht, gibt es nicht.