← Alle Artikel
Gesundheit Next.js 16 SwiftUI

Basaltemperatur-App: Zyklustracking mit Next.js 16 und SwiftUI

17. März 2026 · 9 Min. Lesezeit

Basaltemperatur.online ist eine Cross-Platform-App für natürliches Zyklustracking. Sie kombiniert Temperatur-Erfassung, Periodenmarkierung, Zervixschleim-Dokumentation und KI-gestützte Prognosen – als Web-App (Next.js 16) und als native iOS-App (SwiftUI). Das Monetarisierungsmodell: eine einmalige Zahlung über Stripe für lebenslangen Zugang.

Funktionsumfang

Die App deckt den kompletten NFP-Workflow (Natürliche Familienplanung) ab:

  • Temperatur eintragen – Tägliche Basaltemperatur auf 0,01 °C genau erfassen
  • Periodentage markieren – Start- und Endtage der Menstruation dokumentieren
  • Zervixschleim dokumentieren – Konsistenz und Menge als sekundären Fruchtbarkeitsindikator tracken
  • Kalender – Monatsübersicht mit farbcodierten Tagen (Periode, fruchtbar, unfruchtbar)
  • Temperaturkurve – Interaktiver Chart mit automatischer Coverline-Berechnung
  • Zyklusstatistiken – Durchschnittliche Zykluslänge, Lutealphase, Temperaturdifferenz (Premium)
  • Zyklusvergleich – Mehrere Zyklen übereinanderlegen und vergleichen (Premium)
  • Prognosen – Prognostizierte Periodentage und fruchtbare Fenster basierend auf Historiedaten (Premium)
  • PDF-Export – Temperaturkurve als druckbaren Report exportieren (Premium)

Architektur: Hybrid-App

Die Web-App läuft als Next.js 16 mit App Router, die iOS-App als native SwiftUI-App. Beide teilen sich dasselbe Supabase-Backend (Auth + PostgreSQL). Durch das Hybrid-Modell können Web-Updates sofort live gehen, während die iOS-App native Performance bietet.

Datenbankmodell

Vier Kerntabellen bilden das System ab:

supabase/migrations
-- 1. Benutzerprofile mit Lifetime-Flag
CREATE TABLE profiles (
  id uuid PRIMARY KEY,
  has_lifetime_access boolean DEFAULT false,
  created_at timestamptz
);

-- 2. Temperatureinträge (auf 0,01 °C genau)
CREATE TABLE temperature_entries (
  id uuid PRIMARY KEY,
  user_id uuid REFERENCES profiles,
  date date NOT NULL,
  temperature numeric(4,2),
  note text
);

-- 3. Periodeneinträge
CREATE TABLE period_entries (
  user_id uuid, date date,
  PRIMARY KEY (user_id, date)
);

-- 4. Berechnete Zyklen
CREATE TABLE cycles (
  id uuid PRIMARY KEY,
  user_id uuid,
  start_date date,
  end_date date,
  length integer
);

-- 5. Zervixschleim (Migration 006)
ALTER TABLE temperature_entries
  ADD COLUMN cervical_mucus text;

iOS-App: 5 Tabs

Die native SwiftUI-App bietet dieselben Features wie die Web-App, organisiert in fünf Tabs:

  • Dashboard – Aktueller Zyklustag, nächste Periode, Quick-Actions
  • Kalender – Monatsansicht mit prognostizierten Periodentagen (bei Lifetime)
  • Anleitung – Anleitung zur korrekten Basaltemperatur-Messung
  • Eintrag – Temperatur, Periode und Zervixschleim schnell erfassen
  • Mehr – Profil mit „Lifetime"-Badge, Einstellungen, rechtliche Seiten

Die iOS-App zeigt keinen externen Kauf-Link in der Paywall (ALLOW_WEB_UPGRADE_LINK=NO) – App-Store-konform, um Apples Richtlinien für In-App-Käufe zu respektieren.

Monetarisierung: Stripe Lifetime-Zugang

Das Geschäftsmodell ist bewusst einfach: Die Grundfunktionen (Temperatur eintragen, Periodentage markieren, Kalender) sind kostenlos. Premium-Features kosten einmalig 9,99 € – kein Abo, kein Recurring.

Technisch läuft das über Stripe Checkout. Nach erfolgreicher Zahlung setzt der Webhook profiles.has_lifetime_access = true. Die Premium-Features werden sofort freigeschaltet – auf Web und iOS gleichzeitig, weil beide das gleiche Supabase-Profil abfragen.

Zyklusberechnung

Die App erkennt Zyklen automatisch anhand der Periodeneinträge. Ein neuer Zyklus beginnt am ersten Tag der Periode. Aus den historischen Zykluslängen berechnet die App:

  • Durchschnittliche Zykluslänge (Median der letzten 6 Zyklen)
  • Prognostizierter Periodenbeginn (basierend auf dem Median)
  • Fruchtbares Fenster (Eisprung ca. 14 Tage vor der erwarteten Periode, ±2 Tage)
  • Coverline (automatisch berechnet aus den tiefsten 6 Temperaturwerten der Follikelphase)

Tech Stack

  • Web: Next.js 16 (App Router), React 19, TypeScript
  • iOS: SwiftUI, Swift 5.10
  • Backend: Supabase (PostgreSQL + Auth + RLS)
  • Payments: Stripe Checkout + Webhook
  • Deployment: Strato VPS / Plesk (Next.js Standalone)

Datenschutz: DSGVO-konform

Zyklusdaten sind hochsensible Gesundheitsdaten. Die App speichert alles in Supabase (Frankfurt/EU) mit Row Level Security (RLS). Jeder User sieht ausschließlich seine eigenen Daten. Es gibt kein Tracking, keine Analytics, keine Weitergabe an Dritte. Die rechtlichen Seiten (Impressum, Datenschutz, AGB, Widerruf) werden dynamisch aus Umgebungsvariablen generiert.

→ Projekt ansehen: Basaltemperatur – Projektdetails

→ Live: basaltemperatur.online