Meine zweite App - Kalorienzähler ohne Abo

Inhaltsverzeichnis
  1. Kapitel 1: Technik
  2. Kapitel 2: Kosten, Preisgestaltung und aktuelle Zahlen der App (coming soon)
  3. Kapitel 3: Community-getriebene Entwicklung (coming soon)
  4. Kaptiel 4: Marketing und „Media attention“ (coming soon)

Vielleicht haben manche meinen ersten Blog gelesen über meine nebenberufliche Reise als Indie App Entwickler gelesen. Falls nicht, ich bin Tobi, 33, hauptberuflich Softwareentwickler und entwickle in meiner Freizeit Apps. Meine erste App, eine App für Paare war so ein mäßiger Erfolg und läuft aktuell so ein bisschen nebenbei, macht aber dennoch so ungefähr 70€ im Monat. Das reicht zumindest für die AppStore Gebühren und um die Serverkosten zu decken. Dieser Blog soll sich aber um meine zweite App drehen, Intake. Ein Kalorienzähler ohne Abo, ohne Gamification Quatsch und mit 100% Privatsphäre und Datenschutz. Wie ich auf die Idee kam, wie ich das ganze entwickelt habe und wie daraus in nur 3 Monaten ein ( für mich) riesiger Erfolg wurde, erzähle ich euch jetzt.

Ich habe letztes Jahr im Sommer wieder angefangen aktiv Fußball zu spielen im Verein und hatte so ca. 20kg zu viel auf den Rippen. Ich war noch nie der schnellste auf dem Platz, aber mit 20kg zu viel und über 10 Jahren Fußball-Pause musste ich dringend etwas ändern wenn ich auf dem Platz überhaupt eine Chance haben wollte. Ich hab mich also ein bisschen umgeschaut, und für mich das Kalorienzählen entdeckt. Bin dann relativ schnell beim Marktführer Yazio gelandet und war erstmal ganz zufrieden mit der App. Den Preis fand ich ein bisschen happig, aber wiederwillig hab ich das Jahresabo abgeschlossen und hab erstmal losgelegt. Irgendwann gingen mir dann aber doch mit der Zeit die ganzen Streaks, Maskottchen, Ernährungstipps und der ganze andere Quatsch auf die Eier, der eigentlich nur dazu ausgelegt ist, dich als Nutzer bei der Stange (und vor allem im Abo) zu halten. Als dann kurz vor Weihnachten mal wieder ein Update mit noch mehr Animationen und Maskottchen kam, hatte ich irgendwann genug und dachte mir das kann doch nicht so schwer sein einen ordentlichen Tracker zu bauen.

In Zeiten von KI eine App zu bauen ist grundsätzlich nicht so schwierig, vor allem wenn man auf eine lange Erfahrung im Softwarebereich zugreifen kann und so kam dann auch kurz nach Neujahr der erste Prototyp zustande. Damals noch quick and dirty mit React + Capacitor, weil ich darin einfach schon Erfahrung hatte und wusste was mich erwartet. Ich hab dann auch relativ schnell mit Marketing auf Threads begonnen und bewusst nach Leuten gesucht, die genervt von Yazio waren, und das waren zum Glück nicht wenige. Januar ist sowieso eine super Zeit, um den Leuten etwas von Kalorien zu erzählen und das Projekt fand dort großen Anklang.

Als Datenbank für das Essen habe ich mich von Anfang an für Open Food Facts entschieden. Die Vorteile lagen auf der Hand:

  • Kostenfrei nutzbar
  • große Datenbank mit Millionen von Einträgen und Barcodes
  • Daten können frei heruntergeladen werden

Leider ist die API sehr langsam und man erreicht relativ schnell die Limits, daher habe ich mich dazu entschieden die Daten einmal komplett runterzuladen und in eine eigene PostgreSQL Datenbank (supabase) einzupflegen. Somit hatte ich eine gute Datenbasis um loszulegen. Basics (Produkte ohne Barcode wie Gemüse, Obst etc) habe ich mir am Anfang von ChatGPT generieren lassen und ebenfalls in meine Datenbank eingepflegt.

Ich gehe hier bewusst nur sehr oberflächlich auf den Techstack ein, da ich nicht weiß wie sehr euch das interessiert. Gerne zu den Daten, das Updaten der Daten und die Qualität der Daten in späteren Beiträgen mehr.

Da ich natürlich unter der Prämisse gestartet habe, dass ich eine App ohne Abomodell machen wollte, habe ich mich für den Start für einen Einmalkauf im AppStore entschieden und die App Ende Januar für 6,99€ angeboten.

Was dann in den ersten 10 Tagen passiert ist habe ich persönlich so nicht erwartet. Die App wurde direkt super angenommen und alleine im Januar kamen 145 neue Nutzer dazu.

Ich habe mich dann entschieden, die App nativ für iOS neuzubauen, da ich ja anfangs sowieso nur für iOS geplant hatte und das volle native Feeling haben wollte für die Nutzer.

Im Februar kamen nochmal 160 neue Nutzer dazu, und ich bekam auch viele Anfragen, wie es denn mit einer Android Version aussehen würde. Kurzerhand habe ich diese Aufgabe dann an Claude Code ausgelagert und innerhalb von 2,5 Wochen eine erste Beta für Android entwickelt.

Im März habe ich dann endlich mal die wichtigen Dinge in Angriff genommen, nämlich Marketing und Vertrieb. Die App war zwar in der Threads Fitness Bubble recht bekannt, aber durch einen Tip eines anderen Entwicklers, kam ich dann auf die Idee iPhone Blogs und Magazine anzuschreiben. Der iPhone Ticker von ifun.de hat als eine der wenigen Seiten auf meine Anfrage geantwortet und einen Artikel über die App rausgebracht. Was dann passiert ist kann ich immer noch nicht so ganz begreifen, aber im März haben sich sage und schreibe 1600 Menschen die App heruntergeladen. Dazu kamen noch 150 neue Android Nutzer. Ich saß glaube ich jeden Abend vor dem PC und konnte es kaum erwarten, die Daten für den vergangenen Tag anzuschauen.

Ich dachte ich teile das ganze einfach mal hier, da mich dieses Forum schon fast 15 Jahre immer wieder begleitet hat, und vielleicht habt ihr ja Bock etwas mehr über das Thema zu lesen oder habt konkrete Themen, die euch brennend interessieren über das Thema Indie Development, Entwicklung mit KI Tools, Marketing (wobei ich da absolut kein Profi bin und vermutlich einfach nur Glück hatte) oder sonstige Themen.

Schreibt mir gerne mal rein, was euch interessiert und womit ich weitermachen soll (hier im Blog).

Bevor ich es vergesse, hier der Link zur Webseite, dort findet ihr alle Infos, News Artikel von Magazinen, die über die App berichtet haben und vieles mehr.

Bis dahin,
Tobi

12 Like

Finde das Thema sehr interessant und gerade den Punkt, dass du etwas entwickelt hast, wo es anscheinend schon relativ viel Konkurrenz gibt und trotzdem schon Erfolg hast. Glückwunsch! :slight_smile:

Mal ne Frage (weil es mich interessiert): Hast du dafür ein Gewerbe angemeldet? Und wie hast du das ganze servertechnisch aufgesetzt?

Tldr

1 Like

er hat ne app entwickelt zum kalorien zählen ohne abo. Jetzt geh und lad die auf dMs handy damit die fette bisschen abnimmt.

6 Like

Servus, ja ich denke der Grund warum das erfolgreich ist, ist die Tatsache dass alle anderen auf Abomodelle setzen und die meisten Leute keinen Bock mehr auf das fünfzigste Monatsabo haben.

Ja musste ein Gewerbe anmelden und mir mittlerweile auch einen Steuerberater suchen. Gewerbeanmeldung war aber relativ unkompliziert.

Zur Technik würde ich später mal einen gesonderten Beitrag schreiben. Kurzfassung: supabase als backend, daten aus mehreren Quellen laufen dort zusammen und werden täglich per Cronjob aktualisiert.

1 Like

Kümmer doch doch mal selbst um dM

1 Like

Wie bist du denn auf den Preis gekommen? Hast du das gegen laufende Kosten gegengerechnet oder einfach mal gemacht? Denke auch, dass ein fixer Preis für viele wieder attraktiv ist, da SaaS einfach komplett überreizt wird.

Kapitel 1: Technik

Ich starte einfach mal mit der Technik rein, da ich da vermutlich am ausführlichsten erzählen kann und das bestimmt auch einige Interessiert.

Ich habe mich bei den beiden Apps (Android und iOS) bewusst gegen ein Hybrid Framework, wie z.B. React Native oder Flutter entschieden, da ich von Anfang an sehr hohen Wert auf den Look and Feel der App gelegt habe. Ich habe mit meiner ersten App die Erfahrung gemacht, dass man mit solchen Hybrid Frameworks immer Abstriche bei der Optik und der Performance machen muss, und das wollte ich definitiv nicht mehr haben. Wenn eine App in diesem umkämpften Markt herausstechen kann, dann ist es in meinen Augen durch eine herausragende User Experience und das bekommt man meiner Meinung nach nur durch eine native Swift und Jetpack Compose App hin.

Techstack Frontend

Android: Kotlin und Jetpack Compose
iOS: Swift und SwiftUi

Backend

Das Backend besteht zu 99% aus einem supabase Projekt mit einer mittlerweile riesigen PostgreSQL Datenbank, die in mehreren Tabellen alle Produkte enthält inkl. aller Übersetzungen für die Produkte, die man in der App suchen kann. Lebensmittel sind dort mit Barcode und allen Informationen zu Portionsgrößen, Nährstoffen usw. hinterlegt.

Die Daten habe ich per Script von der Open Food Facts DB runtergeladen. Das sind ca. 3 Millionen Lebensmittel (die mit sinnvollen Daten) und die komprimierte Datei mit allen Daten ist ca. 8GB groß. Diese habe ich dann mithilfe von Python scripts (Danke Claude Code) in das richtige Format gebracht und per supabase API in meine eigene Datenbank repliziert. Das bringt enorme Geschwindigkeitsvorteile beim Suchen von Lebensmitteln und beim Barcode Scan mit sich, da ich auf Supabase mit RPCs arbeiten kann, die gewichtete Suchen nach Region zulassen. Somit komme ich teilweise auf Suchzeiten in der App von unter einer Sekunde für die meisten Suchbegriffe. Das wurde mir auch schon von vielen Nutzern bestätigt, dass das eine der schnellsten Suchen ist, die sie jemals in einer Tracking App gesehen haben. Damit meine Daten und die aus der Open Food Facts DB nicht auseinander laufen, nutze ich die Delta Files von OFF, welche per Cronjob jede Nacht in meine Daten eingepflegt werden.

Zu den Daten aus Open Food Facts kommen noch alle Daten aus dem Bundeslebensmittelschlüssel. Dieser enthält vor Allem Basic Foods, also z.B. Obst, Gemüse, Fleisch, Getränke wie Kaffee oder Tee und deutsche Hausmannskost.

Wie stelle ich die Datenqualität sicher und wie können Nutzer die Daten beinflussen

Open Food Facts ist eine Open Source Datenbank, das bedeutet auch, dass viele Einträge unvollständig und/oder auch mal falsch sein können. Ich hab mir darüber lange den Kopf zerbrochen wie man das lösen kann. Ich habe mich am Ende für ein zweistufiges Modell entschieden:

  1. Beim Import der Daten gibt es ein Quality Gate, was jedes Lebensmittel bestehen muss. Dazu gehört ein gewisser Grundsatz an Nährwertinformationen, der gegeben sein muss, sonst landet der Datensatz nicht in meiner Datenbank. Außerdem wird immer auf duplikate geprüft, damit kein Datensatz doppelt auftauchen kann

  2. Nutzer können jedes Lebensmittel in ihrer eigenen Datenbank editieren. Ich habe lange überlegt, ob ich etwas einbaue, mit dem Nutzer selbst Lebensmittel in der öffentlichen Datenbank verändern können, habe mich dann aber aufgrund des zu hohen Moderationsaufwands dagegen entschieden. Die Apps bauen deshalb direkt beim ersten Start eine lokale Datenbank auf dem Gerät des Nutzers auf. Jedes geloggte Lebensmittel fließt dort ein und jeder Datenpunkt in dem Lebensmittel kann verändert werden (Name, Hersteller, Kalorien, Nährwerte, eigene Portionsgrößen)

Damit können Nutzer einfach selbst entscheiden, welche Lebensmittel sie für sich verändern wollen und können „Fehler“ direkt lokal beheben.

Datenschutz

Datenschutz war von Anfang an ein großes Thema meiner App. Ich wollte aus Kostengründen kein „richtiges“ Backend pflegen mit User Accounts etc. Das bedeutet in Intake legt der Nutzer kein Konto an, sondern alles läuft primär lokal auf dem Gerät. Lebensmitteldaten werden lokal gecached, deine Körperdaten, Einstellungen etc. bleiben erstmal auf deinem Gerät. Optional kann man auf iOS den iCloud Sync anschalten, damit kann man dann die App auf mehreren Apple Geräten gleichzeitig verwenden. Auf Android gibt es „nur“ eine Backup Option über Google Drive. Beide Plattformen bieten auch ein manuelles Backup per Datei an. Aus dem Backend wird dabei immer nur gelesen, nie geschrieben. Das spart mir zum einen Kosten, und zum anderen können Nutzer sich 100% sicher sein, dass keine ihrer Daten ihr Gerät, oder die Cloud ihres Anbieters verlassen.

Apple Health und HealthConnect

Die Bewegungsdaten, Nährstoffinformationen und alles weitere wird auf beiden Plattformen aus Health gelesen und geschrieben. Das heißt man kann Intake auch in Kombination mit anderen Apps wie z.B. Bevel verwenden. Wenn ich ein Workout auf meiner Apple Watch mache, landet es automatisch auch in Intake, und auch meine Schritte, Aktivitätskalorien und alles weitere was mit Bewegung zu tun hat wird auch automatisch synchronisiert.

Ich hoffe das hat euch einen kleinen Einblick gegeben, wie die App technisch funktioniert. Wenn ihr Fragen habt haut die gerne raus.

3 Like

Letzteres :smiley:

Habe einfach mal gemacht und gedacht das ist ein fairer Preis. Ich mache auch noch einen Beitrag über die Preisstruktur und meine Kosten. Grundsätzlich kann ich sagen das ich technisch schon sehr darauf geachtet habe meine eigenen Kosten so gering wie möglich zu halten. Meine reinen Serverkosten liegen aktuell bei ca. 40€ pro Monat. Dazu kommen dann noch so Sachen wie Domains, Tools, Appstore Gebühren. Insgesamt sind das ca. 150€ im Monat für alles. Die App ist also aktuell für mehrere Jahre durchfinanziert.

Ganz grundsätzlich ist mein Ansatz immer das ich erstmal kostendeckend arbeite. Wenn jeder neue Nutzer mich zusätzlich Geld kostet monatlich, dann mache ich ein Abomodell, wenn nicht dann finde ich ist ein Einmalkauf einfach fairer

3 Like

Freut mich, dass die App hier besser läuft als deine Letzte. Als ich deinen Eingangspost gelesen habe (habe mir ebenfalls Yazio (ohne Abo) im Januar geholt), haben mich genau die Sachen genervt. Hab die App nun deswegen auch nicht mehr.

1 Like

ja so gings glaub vielen um den Jahreswechsel rum. Die nutzen jetzt hoffentlich alle meine App ;-)

Fand die technischen Einblicke interessant und freut mich das es läuft

1 Like

BuyFromEU - reddit

BuyFromEU - feddit.org

Hier könntest du es auch mal posten und ein bisschen Hintergrund zu deiner App-Entwicklung geben. Kommt sicher auch gut an und du findest einige neue Subscriber.

1 Like

Hast die nächsten Euros verdient. :heart:
Gefällt mir echt gut die App. Schön sauber und simpel ohne viel Schnick-Schnack wie bei den anderen Apps.

schau ich mir gerne mal an. danke dir für den support @kaba

@dotic wenn du die barcodes in der app meinst, die app kann lebensmittel barcodes scannen, also packung käse → öffnest die app → scan mit der kamera → bekommst das produkt angezeigt und kannst es eintragen

1 Like

Danke schonmal für euer cooles Feedback, scheint ja doch ein paar Leute zu interessieren. Aktuell arbeite ich gerade daran, die Datenqualität deutlich zu steigern. Daher kommt erstmal noch kein nächster Part hier im Blog sondern nur dieses kleine Update.

Gab heute auch nochmal einen schönen Presseartikel, den ich euch natürlich nicht vorenthalten möchte: Beliebte Kalorien-App Intake: Nährstofftracking und Intervallfasten | iphone-ticker.de