LOVABLE · BOLT · BASE44 → NATIVE FUNKTIONEN

Native App-Funktionen für Lovable, Bolt und Base44: Prompts zum Einfügen

Ihre SaasToStore-App zeigt Ihre Live-Website. In der App kann Ihre Website außerdem das Teilen-Menü des Telefons öffnen, es vibrieren lassen, einen QR-Code scannen und Erinnerungen planen, auf Android und iOS. Diesen Code schreiben Sie nicht selbst: Kopieren Sie einen der Prompts unten, fügen Sie ihn in den Chat von Lovable, Bolt oder Base44 ein, und die KI baut die Funktion in Ihre Website ein. In einem normalen Browser funktioniert Ihre Website weiter wie heute.

Aktualisiert am 3. November 2026

Bevor Sie einen Prompt einfügen

Jede Funktion ist ein Plugin Ihres SaasToStore-Projekts. Der Prompt ändert Ihre Website; das Plugin bringt die Funktion in die App.

  • Plugin hinzufügen, dann neu bauen

    Öffnen Sie die Plugin-Bibliothek Ihres Projekts, fügen Sie das Plugin hinzu und starten Sie dann einen neuen Build: Eine App, die vor dem Hinzufügen gebaut wurde, hat die Funktion nicht. Plugins funktionieren in den nativen Android-Builds (Android Build (Native), Android TV) und in iOS-Apps. Sie fehlen im Android Build (Web) (TWA) und im kostenlosen Test-Build, der Ihre Website als App zeigt, ohne Plugins.

  • In der App testen, nicht in der Vorschau des Editors

    Die Vorschau von Lovable, Bolt und Base44 zeigt Ihre Website in einem Rahmen des Editors, und die Plugins laufen nur in Ihrer App, nie in einem Rahmen. Dort passiert also nichts, und das ist gewollt: Die Prompts halten Ihre Website ohne sie funktionsfähig. Veröffentlichen Sie Ihre Website und öffnen Sie dann Ihre App auf einem Telefon.

  • Ihre Website ändert sich, die App folgt

    Die App lädt Ihre veröffentlichte Website. Sobald das Plugin in der App ist, kommt eine in Lovable, Bolt oder Base44 veröffentlichte Änderung ohne neuen Build in der App an.

Wo Sie den Prompt einfügen

Jeder Prompt steht für sich: Fügen Sie einen nach dem anderen ein, prüfen Sie das Ergebnis und nehmen Sie dann den nächsten. Die KI passt die Dateinamen an Ihr Projekt an.

  • Lovable

    Fügen Sie ihn in den Chat Ihres Projekts ein. Ist die Änderung fertig, klicken Sie auf Publish: Die App lädt Ihre veröffentlichte Website, nicht die Vorschau.

  • Bolt

    Fügen Sie ihn in den Bolt-Chat ein und deployen Sie dann erneut, mit dem Deploy-Button von Bolt oder bei Ihrem eigenen Hoster. Die App lädt die deployte Adresse.

  • Base44

    Fügen Sie ihn in den KI-Chat Ihrer App ein und veröffentlichen Sie dann. Die App lädt die öffentliche Adresse Ihrer App.

Natives Teilen

Ein Teilen-Button, der das Teilen-Menü des Telefons öffnet: Nachrichten, E-Mail, soziale Netzwerke. Nur Text und Links, keine Dateien. Keine Berechtigung und kein Dialog für die Person.

Prompt · natives Teilen

Füge meinem Projekt einen nativen Teilen-Button hinzu, über die SaasToStore-App-Bridge.

Kontext: Meine Website läuft auch in einer nativen Mobile-App, die mit SaasToStore gebaut wurde. In dieser App öffnet die Funktion `window.saastostore.share` das Teilen-Menü des Telefons. In einem normalen Browser und in der Vorschau des Editors existiert es nicht, und die Website muss genau wie heute weiter funktionieren. Ändere sonst nichts.

1. Wenn mein Projekt noch keine `src/lib/saastostore.ts` hat, lege sie an (`.js`, wenn mein Projekt kein TypeScript nutzt); wenn sie existiert, ergänze nur, was fehlt:
   - `isInApp()`: gibt `typeof window !== "undefined" && navigator.userAgent.includes("SaasToStoreApp")` zurück.
   - `bridge()`: gibt `typeof window !== "undefined" ? window.saastostore : undefined` zurück. Lies `window.saastostore` nie beim Server-Rendering.
   - den TypeScript-Typ von `window.saastostore` (optional), mit diesem optionalen Mitglied:
     `share?: (o?: { title?: string; text?: string; url?: string }) => Promise<{ shared: boolean; error?: string } | null>`

2. Füge auf [DER SEITE ODER DEM ELEMENT ZUM TEILEN] einen Button „Teilen“ hinzu. Beim Tippen:
   - wenn `bridge()?.share` existiert, rufe `bridge().share({ title: [TITEL], text: [KURZER TEXT], url: [VOLLSTÄNDIGER LINK ZUR SEITE] })` auf. `share` ist eine Funktion, kein Objekt. `url` muss mit `https://` oder `http://` beginnen. Das Promise lehnt nie ab: Enthält das Ergebnis einen `error`, zeige eine kurze Meldung.
   - sonst, wenn `navigator.share` existiert, rufe `navigator.share({ title, text, url })` auf und ignoriere den Fehler, der kommt, wenn die Person das Menü schließt.
   - sonst kopiere den Link in die Zwischenablage und zeige „Link kopiert“.

3. `shared: true` heißt nur, dass sich das Teilen-Menü geöffnet hat, nicht, dass etwas gesendet wurde: Zeige keine Bestätigung „Geteilt“.

Ersetzen Sie vor dem Einfügen die Werte in [KLAMMERN]. Fügen Sie das Plugin in Ihrem Projekt hinzu und starten Sie dann einen neuen Build.

Haptisches Feedback

Kurze Vibrationen, die ein Tippen, einen Erfolg oder einen Fehler bestätigen. Kein Berechtigungsdialog. Was die Person spürt, hängt von ihrem Telefon und dessen Vibrationseinstellung ab; auf Android spielt ein Gerät, das nicht vibrieren kann (die meisten Tablets und Fernseher), nichts ab.

Prompt · haptisches Feedback

Füge meinem Projekt haptisches Feedback hinzu, über die SaasToStore-App-Bridge.

Kontext: Meine Website läuft auch in einer nativen Mobile-App, die mit SaasToStore gebaut wurde. In dieser App lässt `window.saastostore.haptics` das Telefon kurz vibrieren. In einem normalen Browser und in der Vorschau des Editors existiert es nicht, und die Website muss genau wie heute weiter funktionieren. Ändere sonst nichts.

1. Wenn mein Projekt noch keine `src/lib/saastostore.ts` hat, lege sie an (`.js`, wenn mein Projekt kein TypeScript nutzt); wenn sie existiert, ergänze nur, was fehlt:
   - `isInApp()`: gibt `typeof window !== "undefined" && navigator.userAgent.includes("SaasToStoreApp")` zurück.
   - `bridge()`: gibt `typeof window !== "undefined" ? window.saastostore : undefined` zurück. Lies `window.saastostore` nie beim Server-Rendering.
   - den TypeScript-Typ von `window.saastostore` (optional), mit diesem optionalen Mitglied:
     `haptics?: { impact(o?: { style?: "light" | "medium" | "heavy" }): Promise<{ ok: boolean; error?: string } | null>; notification(o?: { type?: "success" | "warning" | "error" }): Promise<{ ok: boolean; error?: string } | null>; selection(): Promise<{ ok: boolean; error?: string } | null> }`

2. Füge in derselben Datei drei Funktionen hinzu, die außerhalb der App nichts tun und nie auf das Ergebnis warten:
   - `tapFeedback()`: ruft `bridge()?.haptics?.impact({ style: "light" })` auf.
   - `successFeedback()`: ruft `bridge()?.haptics?.notification({ type: "success" })` auf.
   - `errorFeedback()`: ruft `bridge()?.haptics?.notification({ type: "error" })` auf.
   Ihre Promises lehnen nie ab. Ignoriere ein Ergebnis mit `ok: false` (zum Beispiel `not_available` auf einem Telefon, das nicht vibrieren kann): Zeige es der Person nie.

3. Rufe `tapFeedback()` beim Tippen auf [MEINE HAUPT-BUTTONS] auf, `successFeedback()`, wenn [EIN FORMULAR, ZUM BEISPIEL DER CHECKOUT] gelingt, und `errorFeedback()`, wenn es scheitert.

4. Lass nicht beim Scrollen, bei jeder getippten Taste oder mehrmals hintereinander vibrieren.

Ersetzen Sie vor dem Einfügen die Werte in [KLAMMERN]. Fügen Sie das Plugin in Ihrem Projekt hinzu und starten Sie dann einen neuen Build.

QR-Code-Scanner

Ein Scannen-Button, der einen QR-Code oder Barcode mit der Kamera liest: ein Ticket, ein Produkt, einen Link. Auf Android ist der Leser der von Google (Google-Play-Dienste), und Ihre App fragt nach keiner Kameraberechtigung; Telefone ohne Google-Play-Dienste, etwa Amazon Fire und Huawei, haben ihn nicht. Auf iOS öffnet die App ihren eigenen Leser und fragt beim ersten Mal nach der Kamera. Testen Sie ihn vor der Veröffentlichung mit einem echten Code auf einem echten Telefon.

Prompt · QR-Code-Scanner

Füge meinem Projekt einen QR-Code-Scanner hinzu, über die SaasToStore-App-Bridge.

Kontext: Meine Website läuft auch in einer nativen Mobile-App, die mit SaasToStore gebaut wurde. In dieser App öffnet `window.saastostore.barcode` den Code-Leser des Telefons. In einem normalen Browser und in der Vorschau des Editors existiert es nicht, und die Website muss genau wie heute weiter funktionieren. Ändere sonst nichts.

1. Wenn mein Projekt noch keine `src/lib/saastostore.ts` hat, lege sie an (`.js`, wenn mein Projekt kein TypeScript nutzt); wenn sie existiert, ergänze nur, was fehlt:
   - `isInApp()`: gibt `typeof window !== "undefined" && navigator.userAgent.includes("SaasToStoreApp")` zurück.
   - `bridge()`: gibt `typeof window !== "undefined" ? window.saastostore : undefined` zurück. Lies `window.saastostore` nie beim Server-Rendering.
   - den TypeScript-Typ von `window.saastostore` (optional), mit diesem optionalen Mitglied:
     `barcode?: { isAvailable(): Promise<{ available: boolean; reason?: string } | null>; scan(o?: { formats?: string[]; prompt?: string }): Promise<{ scanned: true; value: string; format: string } | { scanned: false; error: string } | null> }`

2. Zeige auf [DER SEITE, AUF DER GESCANNT WIRD] einen Button „Code scannen“ nur, wenn `isInApp()` true ist und `bridge()?.barcode?.isAvailable()` `available: true` liefert. Sonst bleibt die Seite wie heute (zum Beispiel ein Feld zum Eintippen des Codes).

3. Beim Tippen auf den Button rufe `bridge().barcode.scan({ formats: ["qr"], prompt: "[TEXT ÜBER DEM SUCHER, HÖCHSTENS 200 ZEICHEN]" })` auf. Das Promise lehnt nie ab:
   - `scanned: true`: nutze `value`, um [WAS MIT DEM CODE GESCHEHEN SOLL, ZUM BEISPIEL DAS TICKET ÖFFNEN].
   - `error: "cancelled"`: tu nichts, die Person hat den Leser geschlossen.
   - `error: "not_allowed"` (iOS, Kamera verweigert): erkläre, dass die Kamera in den Einstellungen des Telefons erlaubt werden kann.
   - jeder andere Fehler: zeige eine kurze Meldung.

4. `value` ist Text aus unbekannter Quelle: Prüfe ihn vor der Verwendung, füge ihn nie als HTML in die Seite ein und öffne ihn nie als Link, ohne zu prüfen, dass er auf [MEINE DOMAIN] zeigt.

Ersetzen Sie vor dem Einfügen die Werte in [KLAMMERN]. Fügen Sie das Plugin in Ihrem Projekt hinzu und starten Sie dann einen neuen Build.

Lokale Benachrichtigungen (Erinnerungen)

Ein Erinnern-Button, der auf dem Telefon eine Benachrichtigung plant, die zur gewählten Zeit erscheint, auch wenn die App geschlossen ist: ein Termin, eine Sitzung, die beginnt, ein verlassener Warenkorb. Kein Server ist beteiligt: Das ist kein Push und erreicht nicht alle Ihre Nutzer auf einmal. Android zeigt die Erinnerung mit ein paar Minuten Spielraum; iOS ist pünktlich. Erinnerungen überstehen einen Neustart des Telefons. Grenzen: 64 ausstehende Erinnerungen, bis zu 366 Tage im Voraus.

Prompt · lokale Benachrichtigungen

Füge meinem Projekt Erinnerungen (lokale Benachrichtigungen) hinzu, über die SaasToStore-App-Bridge.

Kontext: Meine Website läuft auch in einer nativen Mobile-App, die mit SaasToStore gebaut wurde. In dieser App plant `window.saastostore.localNotifications` Benachrichtigungen auf dem Telefon selbst, ohne Server. In einem normalen Browser und in der Vorschau des Editors existiert es nicht, und die Website muss genau wie heute weiter funktionieren. Ändere sonst nichts.

1. Wenn mein Projekt noch keine `src/lib/saastostore.ts` hat, lege sie an (`.js`, wenn mein Projekt kein TypeScript nutzt); wenn sie existiert, ergänze nur, was fehlt:
   - `isInApp()`: gibt `typeof window !== "undefined" && navigator.userAgent.includes("SaasToStoreApp")` zurück.
   - `bridge()`: gibt `typeof window !== "undefined" ? window.saastostore : undefined` zurück. Lies `window.saastostore` nie beim Server-Rendering.
   - den TypeScript-Typ von `window.saastostore` (optional), mit diesem optionalen Mitglied:
     `localNotifications?: { requestPermission(): Promise<{ granted: boolean; status: "granted" | "denied" | "prompt"; error?: string } | null>; schedule(o: { id?: number; title: string; body?: string; at?: number | string; in?: number; data?: object }): Promise<{ scheduled: true; id: number; at: number } | { scheduled: false; error: string; status?: string } | null>; cancel(o: { id: number }): Promise<{ ok: boolean; error?: string } | null>; getLastOpened(): Promise<{ notification: { id: number; title: string; body: string; at: number; data: object } | null } | null> }`

2. Zeige bei [DEM ELEMENT, DAS EINE ERINNERUNG VERDIENT, ZUM BEISPIEL EINE BUCHUNG] einen Button „Erinnere mich“ nur, wenn `isInApp()` true ist und `bridge()?.localNotifications` existiert.

3. Beim Tippen auf den Button (nie beim Laden der Seite):
   - rufe zuerst `bridge().localNotifications.requestPermission()` auf. Ist `granted` false, erkläre, dass Benachrichtigungen in den Einstellungen des Telefons erlaubt werden können, und hör auf.
   - rufe dann `bridge().localNotifications.schedule({ id: [EINE ZAHL, DIE NUR ZU DIESEM ELEMENT GEHÖRT], title: [TITEL, HÖCHSTENS 200 ZEICHEN], body: [KURZER TEXT], at: [DER ZEITPUNKT, IN MILLISEKUNDEN ODER date.toISOString()], data: { [DIE ID DES ELEMENTS] } })` auf. Zeige „Erinnerung gesetzt“, wenn `scheduled` true ist, sonst eine kurze Meldung.
   Diese Promises lehnen nie ab.

4. Tippt die Person auf die Benachrichtigung, öffne [DIE SEITE DES ELEMENTS] mit der ID aus `data`:
   - höre auf `window.addEventListener("s2s:localNotifications", (e) => …)` und handle, wenn `e.detail.type === "tap"`, mit `e.detail.data`;
   - rufe außerdem beim Start der App einmal `bridge()?.localNotifications?.getLastOpened()` auf: War die App geschlossen, kam das Event, bevor die Seite zuhörte. Es liefert einmal `{ notification }`, danach `{ notification: null }`.

5. Wird das Element storniert oder braucht es die Erinnerung nicht mehr, rufe `bridge()?.localNotifications?.cancel({ id })` auf.

Ersetzen Sie vor dem Einfügen die Werte in [KLAMMERN]. Fügen Sie das Plugin in Ihrem Projekt hinzu und starten Sie dann einen neuen Build.

Ergebnis prüfen

  • In einem normalen Browser: Die Seite sieht aus und funktioniert wie vorher, ohne Button, der nichts tut.
  • In Ihrer App, gebaut nach dem Hinzufügen des Plugins: Der Button erscheint und tut, was er soll.
  • Schließen Sie das Teilen-Menü oder den Scanner, ohne etwas zu wählen: Es erscheint keine Fehlermeldung.
  • Verweigern Sie einmal die Berechtigung (Benachrichtigungen; Kamera auf iOS): Die Seite sagt, was zu tun ist, statt stumm zu scheitern.

Häufige Fragen

Funktioniert derselbe Prompt in Lovable, Bolt und Base44?+

Ja. Jeder Prompt beschreibt die Änderung, nicht ein Werkzeug: Derselbe Text funktioniert im Chat von Lovable, Bolt und Base44 und in anderen KI-Tools, die den Code Ihrer Website bearbeiten. Die KI wählt die passenden Dateinamen für Ihr Projekt.

Warum passiert in der Vorschau des Editors nichts?+

Die Vorschau zeigt Ihre Website in einem Rahmen des Editors. Die Plugins laufen nur im Hauptframe Ihrer App, nie in einem Rahmen oder in einem Browser: window.saastostore gibt es dort nicht. Die Prompts halten Ihre Website ohne es funktionsfähig. Um eine Funktion auszuprobieren, veröffentlichen Sie Ihre Website und öffnen Ihre App auf einem Telefon.

Brauche ich nach dem Einfügen eines Prompts einen neuen Build?+

Nur um das Plugin hinzuzufügen. Plugins werden beim Build in die App geschrieben: Fügen Sie das Plugin in der Plugin-Bibliothek Ihres Projekts hinzu und starten Sie dann einen neuen Build. Danach kommt eine auf Ihrer Website veröffentlichte Änderung ohne neuen Build in der App an, weil die App Ihre veröffentlichte Website lädt.

Sind diese Plugins in meinem Tarif enthalten?+

Standard-Plugins sind in den bezahlten Tarifen enthalten, ohne Lizenz pro Plugin: Fügen Sie so viele hinzu, wie Ihre App braucht. Der kostenlose Test-Build (Android, mit SaasToStore-Logo) zeigt Ihre Website als App, ohne Plugins.

Fragt meine App nach neuen Berechtigungen?+

Natives Teilen und haptisches Feedback fragen nach nichts. Der QR-Code-Scanner fragt auf iOS beim ersten Scannen nach der Kamera; auf Android nutzt er den Leser von Google und fragt nach nichts. Lokale Benachrichtigungen fragen auf Android 13 und neuer und auf iOS nach der Berechtigung, wenn Ihre Website requestPermission() über einen Button aufruft.

Kann ich eine Benachrichtigung an alle meine Nutzer senden?+

Nicht mit diesen Prompts. Eine lokale Benachrichtigung plant Ihre Seite auf einem einzigen Telefon, ohne Server. Eine Nachricht von Ihrem Server an Ihre Nutzer ist Push, ein anderes Plugin.

Verwandte Anleitungen

Bringen Sie die Funktion in Ihre App

Fügen Sie die URL Ihrer Website ein, fügen Sie die Plugins in Ihrem Projekt hinzu und starten Sie den Build. Ihre Website funktioniert im Browser weiter.

Meine App starten