[{"data":1,"prerenderedAt":922},["ShallowReactive",2],{"blog-de-what-is-supabase":3,"blog-index-de":395},{"id":4,"title":5,"body":6,"category":353,"cover":354,"coverAlt":355,"description":356,"draft":357,"extension":358,"faq":359,"image":374,"keywords":375,"meta":383,"navigation":384,"ogTitle":385,"path":386,"published":387,"seo":388,"stem":389,"tldr":390,"updated":387,"__hash__":394},"blog_de\u002Fblog\u002Fwhat-is-supabase.md","Was ist Supabase? Die Datenbank, die dein Builder ausgesucht hat",{"type":7,"value":8,"toc":341},"minimark",[9,13,21,24,29,32,35,38,41,45,48,76,79,85,89,92,95,147,150,155,159,162,165,173,187,195,199,202,221,233,237,243,252,270,280,297,304,308,328],[10,11,12],"p",{},"Deine App läuft. Irgendwo in ihren Einstellungen, in einer Mail über eine\nRechnung oder mitten in einer Nachricht von Lovable steht das Wort Supabase.\nIrgendwann musst du herausfinden, was das ist, und der Anlass ist selten\nNeugier: ein Scan hat dein Supabase-Projekt erwähnt, ein Entwickler hat gefragt,\nwelchen Plan du hast, oder deine App speichert nichts mehr und die Antwort liegt\nirgendwo da drin.",[10,14,15,16,20],{},"Also: was ist Supabase. Jede andere Erklärung beantwortet das als Wahl zwischen\nWerkzeugen, und das ist die Frage, die ein Entwickler sich vor dem Projektstart\nstellt. ",[17,18,19],"strong",{},"Du hast diese Wahl nie getroffen."," Dein Builder hat sie in den\nSekunden getroffen, die das Anlegen des Projekts gedauert hat, und deshalb hat\ndich nie jemand durch das Ding geführt, in dem jetzt alle Daten deiner Nutzer\nliegen.",[10,22,23],{},"Das hier ist die Fassung für jemanden, der schon eins hat.",[25,26,28],"h2",{"id":27},"was-ist-supabase-in-einem-satz","Was ist Supabase, in einem Satz?",[10,30,31],{},"Dort liegt alles, was deine App sich merken muss.",[10,33,34],{},"Deine Nutzer und ihre Passwörter. Die Zeilen hinter jeder Liste, die deine App\nanzeigt. Die Bilder und Dokumente, die Leute hochladen. Wenn sich jemand um zwei\nUhr nachts anmeldet, landet dieser Eintrag in deinem Supabase-Projekt und ist\nnach dem Schließen des Browser-Tabs immer noch da.",[10,36,37],{},"Darunter liegt Postgres, eine Datenbank, die seit den Neunzigern produktiv im\nEinsatz ist und dich nicht überraschen wird. Was Supabase ergänzt, ist alles\ndrumherum: ein Login-System, ein Platz für Dateien und ein Weg, wie deine App\nDaten direkt aus dem Browser abfragen kann, ohne dass du einen Server schreibst.",[10,39,40],{},"Beim letzten Punkt fangen deine eigenen Entscheidungen an.",[25,42,44],{"id":43},"die-vier-teile-die-du-tatsächlich-hast","Die vier Teile, die du tatsächlich hast",[10,46,47],{},"Vier, und deine App nutzt wahrscheinlich mindestens zwei davon.",[49,50,51,58,64,70],"ul",{},[52,53,54,57],"li",{},[17,55,56],{},"Die Datenbank."," Tabellen voller Zeilen: deine Nutzer, deine Bestellungen, deine Beiträge. Der Teil, den Leute meinen, wenn sie \"Supabase\" sagen.",[52,59,60,63],{},[17,61,62],{},"Auth."," Registrieren, anmelden, Passwort zurücksetzen. Wenn deine App Konten hat, liegen sie hier.",[52,65,66,69],{},[17,67,68],{},"Storage."," Hochgeladene Dateien, in benannten Buckets. Profilbilder, Anhänge, Exporte.",[52,71,72,75],{},[17,73,74],{},"Edge Functions."," Kleine Codestücke, die auf den Servern von Supabase laufen statt im Browser deiner Besucher. Deine App hat davon vielleicht keine, und es gibt trotzdem einen guten Grund, sich dafür zu interessieren, weiter unten.",[10,77,78],{},"Dein Dashboard listet mehr als diese vier auf. Lass den Rest liegen, bis du beim\nBauen etwas davon brauchst.",[80,81],"diagram",{"alt":82,"caption":83,"src":84},"Eine gestrichelte Projektgrenze, darin vier verschieden geformte Objekte: ein Datenbankzylinder, eine Personenkontur, ein Dokument und ein Paar Code-Klammern. Eine Linie verlässt links die App und verzweigt sich zu allen vieren.","Vier Dienste unter einem Projekt. Deine App erreicht alle vier über dieselbe Projektadresse, und genau deshalb steht diese Adresse in der Seite.","\u002Fblog\u002Fwhat-is-supabase\u002Ffour-pieces-1600x660.png",[25,86,88],{"id":87},"worum-kümmert-sich-supabase-und-was-gehört-mir","Worum kümmert sich Supabase, und was gehört mir?",[10,90,91],{},"Supabase kümmert sich um die Maschinen. Du kümmerst dich um die Regeln.",[10,93,94],{},"Die Trennlinie liegt höher, als die meisten annehmen. Stell dir das Projekt als\ngemietete Räume vor. Der Vermieter hält das Gebäude, den Strom und die Haustür\ninstand. Was du drinnen aufbewahrst und wen du hereinlässt, war nie seine\nEntscheidung.",[96,97,98,111],"table",{},[99,100,101],"thead",{},[102,103,104,108],"tr",{},[105,106,107],"th",{},"Was Supabase betreibt",[105,109,110],{},"Was dir gehört",[112,113,114,123,131,139],"tbody",{},[102,115,116,120],{},[117,118,119],"td",{},"Die Server, die Postgres-Version und die Updates",[117,121,122],{},"Welche Zeilen ein Besucher lesen darf",[102,124,125,128],{},[117,126,127],{},"Tägliche Backups deiner Datenbank in den bezahlten Plänen, eine Woche lang",[117,129,130],{},"Ob irgendwo eine Kopie liegt, an die dein eigenes Projekt nicht herankommt",[102,132,133,136],{},[117,134,135],{},"Die Verschlüsselung auf ihren Platten und auf dem Weg zu deiner App",[117,137,138],{},"Wer deine Schlüssel hat und welcher Schlüssel in deiner App steckt",[102,140,141,144],{},[117,142,143],{},"Dass das Login-System funktioniert",[117,145,146],{},"Welche Dateien in einem Bucket jeder auflisten kann",[10,148,149],{},"Nichts in der linken Spalte fällt leise aus: wenn Supabase eine Störung hat,\nhörst du das innerhalb von Minuten von deinen Nutzern. Die rechte Spalte ist\ndie, in der Dinge völlig geräuschlos schiefgehen, weil nichts kaputtgeht. Deine\nApp läuft genau weiter wie gestern.",[80,151],{"alt":152,"caption":153,"src":154},"Ein Stapel aus sechs Schichten, durchschnitten von einer gestrichelten Linie. Die drei darunter sind in Türkis versiegelt und tragen je einen Knopf, daneben steht die Supabase-Marke. Die drei darüber sind gestrichelt umrandet und hält nichts zu, daneben steht eine Person.","Alles oberhalb der gestrichelten Linie legst du fest, und nichts davon macht deine App kaputt, wenn es falsch ist.","\u002Fblog\u002Fwhat-is-supabase\u002Fwhere-the-line-sits-1600x680.png",[25,156,158],{"id":157},"sind-meine-supabase-daten-standardmäßig-privat","Sind meine Supabase-Daten standardmäßig privat?",[10,160,161],{},"Das hängt davon ab, wie die jeweilige Tabelle angelegt wurde, und die Art, wie\nein Builder sie anlegt, ist die Art, die sie offen lässt.",[10,163,164],{},"Die Dokumentation von Supabase ist da deutlich. Dort steht, dass der Table\nEditor Row Level Security für dich aktiviert, wenn du eine Tabelle im Dashboard\nanlegst, und dass du sie selbst aktivieren musst, wenn du eine Tabelle per SQL\nanlegst. Row Level Security ist die Einstellung pro Tabelle, die entscheidet,\nwelche Zeilen ein Besucher lesen darf. Dein Builder schreibt SQL, also kommt\neine Tabelle, die er angelegt hat, mit ausgeschalteter Einstellung.",[10,166,167,168,172],{},"Der nächste Satz derselben Seite sagt, was das hinterlässt: eine Tabelle im\nSchema ",[169,170,171],"code",{},"public"," ist über die Data API erreichbar, und solange Row Level Security\nnicht an ist und keine Policy geschrieben wurde, kann jeder mit dem Publishable\nKey deines Projekts jede Zeile darin lesen und schreiben. Dieser Schlüssel\nsteckt in deiner App, wo er hingehört, und jeder kann ihn aus der Seite\nherauslesen.",[10,174,175,176,181,182,186],{},"Also ist das Schloss an jeder einzelnen Tabelle das, was du dir ansehen musst,\nund es sitzt pro Tabelle statt pro Projekt.\n",[177,178,180],"a",{"href":179},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Wie du es anmachst und was eine Policy ist","\nist die Anleitung dazu. Wir haben auch gezählt, wie oft es fehlt:\n",[177,183,185],{"href":184},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","2.096 der 3.680 Apps, deren Supabase-Datenbank uns geantwortet hat",",\nhatten mindestens eine Tabelle, die ihre Zeilen an Fremde herausgab.",[10,188,189,190,194],{},"Wenn du es dir lieber von außen ansiehst, statt eine Tabellenliste\ndurchzugehen: unser kostenloser Scan stellt deinem Projekt die Frage, die auch\nder Browser eines Fremden stellen würde, und zeigt dir, was zurückkam. Das\ndauert etwa 20 Sekunden und braucht kein Konto:\n",[177,191,193],{"href":192},"\u002Fsecurity-scanner","App kostenlos scannen",".",[25,196,198],{"id":197},"wo-deine-schlüssel-liegen-und-welcher-öffentlich-ist","Wo deine Schlüssel liegen und welcher öffentlich ist",[10,200,201],{},"Auf deiner API-Einstellungsseite stehen Werte von zwei Sorten, und nur eine\nSorte gehört in deine App.",[10,203,204,205,208,209,212,213,216,217,220],{},"Ein Schlüssel, der mit ",[169,206,207],{},"sb_publishable_"," anfängt und in einem älteren Projekt\n",[169,210,211],{},"anon"," heißt, ist für die Öffentlichkeit gedacht und sagt für sich genommen nur,\nzu welchem Projekt eine Anfrage gehört. Ein Schlüssel, der mit ",[169,214,215],{},"sb_secret_","\nanfängt und in einem älteren Projekt ",[169,218,219],{},"service_role"," heißt, geht an jeder Regel\nvorbei, die du aufgestellt hast. Supabase schreibt das klar hin: ein Secret Key\numgeht Row Level Security und gehört deshalb auf den Server. Das ist auch der\neine gute Grund, sich für Edge Functions zu interessieren, denn in einer\nFunction kann Arbeit passieren, die einen Secret Key braucht, ohne dass der\nSchlüssel in die Nähe eines Browsers kommt.",[10,222,223,227,228,232],{},[177,224,226],{"href":225},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Wo diese Seite ist und was jeder Wert darauf tut","\nbehandelt die Fundorte, und\n",[177,229,231],{"href":230},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","welche Schlüssel im Frontend sicher sind","\nbehandelt, wie du zwei fast identische Schlüssel auseinanderhältst.",[25,234,236],{"id":235},"so-bleibt-es-deins-auch-nach-der-veröffentlichung","So bleibt es deins, auch nach der Veröffentlichung",[10,238,239,242],{},[17,240,241],{},"Was du heute findest, beschreibt die App von heute."," Die nächste Tabelle, die\ndein Builder anlegt, kommt mit derselben Voreinstellung wie die letzte, und\nniemand schickt dir dazu eine Nachricht.",[10,244,245],{},[17,246,247,251],{},[177,248,250],{"href":249},"\u002Fwebsite-monitoring","Reeve Monitor"," stellt die Fragen aus diesem Beitrag wieder, nach\nPlan:",[49,253,254,257,260,267],{},[52,255,256],{},"alle neun Prüfungen jede Stunde, für bis zu drei Apps",[52,258,259],{},"ob die App erreichbar ist, alle 60 Sekunden",[52,261,262,263,266],{},"eine Nachricht, wenn sich ein Ergebnis ",[17,264,265],{},"ändert",", damit eine Tabelle, die heute Nacht aufgegangen ist, dich vor einem Fremden erreicht",[52,268,269],{},"ein monatlicher Bericht darüber, was gesehen wurde",[10,271,272,279],{},[17,273,274,278],{},[177,275,277],{"href":276},"\u002Fsupabase-backups","Reeve Care"," hält außerdem eine Kopie deiner\nSupabase-Datenbank."," Das ist die zweite Zeile der rechten Spalte oben, für dich\nerledigt.",[49,281,282,285,288,291,294],{},[52,283,284],{},"eine verschlüsselte Kopie deiner Supabase-Datenbank jede Nacht, dort abgelegt, wo dein Projekt nicht herankommt",[52,286,287],{},"jede Kopie wird geprüft, bevor sie zählt, indem die Zeilen jeder Tabelle gezählt werden",[52,289,290],{},"eine Wiederherstellung auf einen Klick, wenn du sie brauchst",[52,292,293],{},"deine hochgeladenen Dateien ebenso, sobald du eine Storage-Zugangsberechtigung verbindest",[52,295,296],{},"alles, was Monitor macht",[10,298,299,300,194],{},"Eine Tabelle, die ein Fremder lesen kann, ist etwas, das eine Prüfung findet.\nEine Migration, die falsch herum lief, oder ein Agent mit Zugriff auf deine\nDatenbank leert die Tabelle stattdessen, und\n",[177,301,303],{"href":302},"\u002Fblog\u002Fai-agent-deleted-my-database","so sieht das von innen aus",[25,305,307],{"id":306},"was-du-heute-einmal-prüfen-solltest","Was du heute einmal prüfen solltest",[309,310,311],"key-takeaways",{},[49,312,313,316,319,322,325],{},[52,314,315],{},"Melde dich bei Supabase an und öffne dein eigenes Projekt. Der Zugang gehört dir, auch wenn dein Builder ihn angelegt hat, und im Dashboard liegt jede Antwort von unten.",[52,317,318],{},"Lies das Schloss an jeder Tabelle unter Authentication → Policies. Eine Tabelle mit abgeschalteter Row Level Security gibt ihre Zeilen an jeden heraus, der den Schlüssel hat, der ohnehin in deiner App steckt, und eine Policy, die allen alles erlaubt, zählt als abgeschaltet.",[52,320,321],{},"Öffne Settings → API Keys und finde heraus, welche deiner Werte publishable und welche secret sind. Wenn ein Secret Key je in deiner App war, tausche ihn bei Supabase aus, bevor du ihn aus dem Code nimmst.",[52,323,324],{},"Sieh dir deine Storage-Buckets an. Ein Bucket, der als public markiert ist, listet jedem, der fragt, jede Datei darin auf, auch die, die deine App nie zeigt.",[52,326,327],{},"Halte eine Kopie der Datenbank an einem Ort, an den dein Projekt nicht herankommt, denn nichts aus der Liste oben holt eine gelöschte Tabelle zurück.",[10,329,330,331,335,336,340],{},"Fang bei den Tabellenschlössern an, denn das ist der Punkt auf dieser Liste, den\nein Fremder gerade schon nutzen kann. Wenn du das Ganze lieber als Liste\ndurchgehst, deckt die\n",[177,332,334],{"href":333},"\u002Fchecklist","Sicherheits-Checkliste in 10 Minuten"," das und die anderen\nEinstellungen ab, die bei einer frisch veröffentlichten App einen Blick wert\nsind. ",[177,337,339],{"href":338},"\u002Fblog\u002Fis-supabase-secure","Ist Supabase sicher"," nimmt sich die andere\nFrage vor, mit der Leute hier ankommen, nämlich ob das alles eine gute Idee war.",{"title":342,"searchDepth":343,"depth":343,"links":344},"",3,[345,347,348,349,350,351,352],{"id":27,"depth":346,"text":28},2,{"id":43,"depth":346,"text":44},{"id":87,"depth":346,"text":88},{"id":157,"depth":346,"text":158},{"id":197,"depth":346,"text":198},{"id":235,"depth":346,"text":236},{"id":306,"depth":346,"text":307},"Sicherheitsgrundlagen","\u002Fblog\u002Fwhat-is-supabase\u002Fcover-1200x630.png","Ein Transportkoffer mit abgenommenem Deckel, darin vier verschieden geformte Fächer: drei verschlossen, eines offen in Bernstein.","Was ist Supabase: die Datenbank, der Login und der Dateispeicher hinter deiner App. Supabase betreibt die Server, die Regeln zu deinen Zeilen gehören dir.",false,"md",[360,363,366,369,372],{"q":361,"a":362},"Was ist Supabase einfach erklärt?","Dort liegt alles, was deine App sich merken muss, auf Servern, um die sich jemand anderes kümmert. Deine Nutzer und ihre Passwörter, die Zeilen hinter jeder Liste, die deine App anzeigt, und die Dateien, die Leute hochladen, liegen alle in deinem Supabase-Projekt. Die Basis ist Postgres, eine Datenbank, die seit den Neunzigern produktiv im Einsatz ist, und drumherum kommen ein Login-System, ein Dateispeicher und ein Weg, wie deine App Daten direkt aus dem Browser abfragen kann.",{"q":364,"a":365},"Ist Supabase eine Datenbank?","Es enthält eine, und es ist mehr als eine. Die Datenbank ist Postgres, und das ist der Teil, den Leute meinen, wenn sie Supabase sagen. Daneben stehen drei weitere Dienste, die deine App vielleicht nutzt: Auth für die Anmeldung, Storage für hochgeladene Dateien und Edge Functions für Code, der auf Supabase-Servern läuft statt im Browser deiner Besucher. Dein Dashboard listet mehr als diese vier auf, und den Rest kannst du liegen lassen, bis du etwas davon brauchst.",{"q":367,"a":368},"Hat mein App-Builder Supabase für mich ausgesucht?","Ziemlich sicher ja. Lovable, Bolt, v0, Cursor, Replit und Windsurf greifen alle zu einem gehosteten Postgres, sobald deine App sich etwas merken soll, und Supabase ist die übliche Antwort. Vielleicht hast du einen Knopf mit der Aufschrift Datenbank verbinden gedrückt, vielleicht hat dein Builder das Projekt auch ohne Nachfrage angelegt. So oder so gehört der Zugang dir und du kannst dich anmelden, und genau das ist der erste sinnvolle Schritt.",{"q":370,"a":371},"Welche Teile der Supabase-Sicherheit sind meine Aufgabe?","Supabase betreibt die Server, die Postgres-Version, die Updates, die Verschlüsselung auf ihren Platten und das Login-System selbst. Dir gehören die Regeln: welche Zeilen ein Besucher lesen darf, welche Dateien in einem Bucket öffentlich sind, wer deine Schlüssel hat und welcher Schlüssel in deiner App steckt, und ob irgendwo eine Kopie deiner Daten liegt, an die dein Projekt nicht herankommt. Nichts aus der ersten Liste fällt leise aus. Alles aus der zweiten kann monatelang falsch sein, während deine App einwandfrei läuft.",{"q":158,"a":373},"Das hängt davon ab, wie die jeweilige Tabelle angelegt wurde. In der Supabase-Dokumentation steht, dass der Table Editor Row Level Security für dich aktiviert, wenn du eine Tabelle im Dashboard anlegst, und dass du sie selbst aktivieren musst, wenn du eine Tabelle per SQL anlegst. Ein Builder schreibt SQL, also kommen die Tabellen, die er für dich angelegt hat, mit ausgeschalteter Einstellung. Solange sie aus ist und keine Policy existiert, kann laut Supabase jeder mit deinem Publishable Key jede Zeile dieser Tabelle lesen und schreiben, und dieser Schlüssel steckt in deiner App, wo ihn jeder lesen kann.","\u002Fblog\u002Fwhat-is-supabase\u002Fcard-800x500.png",[376,377,378,379,380,381,382],"was ist supabase","supabase erklärt","wofür wird supabase benutzt","ist supabase eine datenbank","was macht supabase","supabase für einsteiger","brauche ich supabase",{},true,"Was ist Supabase? Die Datenbank hinter deiner App","\u002Fblog\u002Fwhat-is-supabase","2026-10-13",{"title":5,"description":356},"blog\u002Fwhat-is-supabase",[391,392,393],"Was ist Supabase? Dort liegt alles, was deine App sich merken muss: deine Nutzer und ihre Passwörter, die Zeilen hinter jeder Liste und die Dateien, die Leute hochladen.","Dein Builder hat es ziemlich sicher beim Anlegen des Projekts für dich ausgesucht, und deshalb hat dir nie jemand gezeigt, was da eigentlich steht.","Supabase betreibt die Maschinen. Die Regeln dazu, wer welche Zeilen lesen darf, gehören dir, und bei einer per SQL angelegten Tabelle sind sie anfangs aus.","9poVjCHZIVVA8UyyagnMgiHadkgpIsgF80xe8N1y68g",[396,402,408,414,420,426,432,438,444,450,456,463,469,475,481,487,493,499,505,511,517,523,529,535,541,547,553,559,560,566,572,578,584,590,596,602,608,614,620,626,632,638,644,650,656,662,667,673,679,685,691,697,703,709,715,721,727,733,739,745,751,757,762,768,774,780,786,792,798,804,810,816,822,828,833,838,844,850,856,862,868,874,879,884,889,895,901,907,912,918],{"path":397,"title":398,"description":399,"published":400,"category":353,"image":401,"draft":357},"\u002Fblog\u002Fmax-client-connections-reached","Supabase \"max client connections reached\" erklärt","Supabase \"max client connections reached\": Der Pooler hat keinen Platz für noch einen Client. Der Port in deinem Connection String setzt das Limit.","2026-11-09","\u002Fblog\u002Fmax-client-connections-reached\u002Fcard-800x500.png",{"path":403,"title":404,"description":405,"published":406,"category":353,"image":407,"draft":357},"\u002Fblog\u002Funsupported-provider-provider-is-not-enabled","Supabase-Fehler: \"Unsupported provider: provider is not enabled\"","\"Unsupported provider: provider is not enabled\" heißt: Google-Login ist in deinem Supabase-Projekt aus. Die Lösung, und was bei redirect_uri_mismatch hilft.","2026-11-08","\u002Fblog\u002Funsupported-provider-provider-is-not-enabled\u002Fcard-800x500.png",{"path":409,"title":410,"description":411,"published":412,"category":353,"image":413,"draft":357},"\u002Fblog\u002Fviolates-foreign-key-constraint","Supabase-Fehler \"violates foreign key constraint\" beim Einfügen","Supabase \"insert or update on table violates foreign key constraint\": Deine Zeile zeigt auf eine, die es nicht gibt. Welche, warum, und die Lösung.","2026-11-07","\u002Fblog\u002Fviolates-foreign-key-constraint\u002Fcard-800x500.png",{"path":415,"title":416,"description":417,"published":418,"category":353,"image":419,"draft":357},"\u002Fblog\u002Fnull-value-violates-not-null-constraint","Supabase-Fehler \"null value in column violates not-null constraint\"","Supabase \"null value in column violates not-null constraint\": Eine Pflichtspalte kam leer an. Woher die Null kommt, und die Lösung.","2026-11-06","\u002Fblog\u002Fnull-value-violates-not-null-constraint\u002Fcard-800x500.png",{"path":421,"title":422,"description":423,"published":424,"category":353,"image":425,"draft":357},"\u002Fblog\u002Fauth-session-missing","Supabase \"Auth session missing!\": wo die Sitzung geblieben ist","\"Auth session missing!\" heißt: supabase-js fand keine angemeldete Sitzung und fragte Supabase gar nicht erst. Wo die Sitzung blieb, und die Lösung je Fall.","2026-11-05","\u002Fblog\u002Fauth-session-missing\u002Fcard-800x500.png",{"path":427,"title":428,"description":429,"published":430,"category":353,"image":431,"draft":357},"\u002Fblog\u002Finvalid-claim-missing-sub-claim","Supabase \"invalid claim: missing sub claim\": niemand ist angemeldet","\"invalid claim: missing sub claim\" heißt: Supabase Auth bekam ein echtes Token ohne Nutzer darin, deinen Projektschlüssel statt einer Sitzung.","2026-11-04","\u002Fblog\u002Finvalid-claim-missing-sub-claim\u002Fcard-800x500.png",{"path":433,"title":434,"description":435,"published":436,"category":353,"image":437,"draft":357},"\u002Fblog\u002Ffailed-to-send-a-request-to-the-edge-function","\"Failed to send a request to the Edge Function\": der echte Grund","\"Failed to send a request to the Edge Function\" heißt: Der Browser hat keine lesbare Antwort bekommen. Seine Konsole sagt, warum, und ob deine Funktion lief.","2026-11-03","\u002Fblog\u002Ffailed-to-send-a-request-to-the-edge-function\u002Fcard-800x500.png",{"path":439,"title":440,"description":441,"published":442,"category":353,"image":443,"draft":357},"\u002Fblog\u002Fsupabase-auth-redirects-to-localhost","Warum Supabase-E-Mail-Links auf localhost:3000 weiterleiten","Leitet Supabase auf localhost:3000 um, ist die Site URL unverändert, oder deine Adresse fehlt in Redirect URLs. Die Lösung und der Platzhalter, den du meidest.","2026-11-02","\u002Fblog\u002Fsupabase-auth-redirects-to-localhost\u002Fcard-800x500.png",{"path":445,"title":446,"description":447,"published":448,"category":353,"image":449,"draft":357},"\u002Fblog\u002Femail-link-is-invalid-or-has-expired","Supabase \"Email link is invalid or has expired\" bei einem neuen Link","Bei einem Link von vor einer Minute heißt Supabases \"Email link is invalid or has expired\" meist: Ein Mailfilter hat ihn zuerst benutzt. Prüfen und beheben.","2026-11-01","\u002Fblog\u002Femail-link-is-invalid-or-has-expired\u002Fcard-800x500.png",{"path":451,"title":452,"description":453,"published":454,"category":353,"image":455,"draft":357},"\u002Fblog\u002Fcanceling-statement-due-to-statement-timeout","Supabase \"canceling statement due to statement timeout\" erklärt","Supabase \"canceling statement due to statement timeout\": Eine Abfrage lief länger als ihre Rolle darf, 3 Sekunden für Besucher. Prüf zuerst die RLS-Regel.","2026-10-31","\u002Fblog\u002Fcanceling-statement-due-to-statement-timeout\u002Fcard-800x500.png",{"path":457,"title":458,"description":459,"published":460,"category":461,"image":462,"draft":357},"\u002Fblog\u002Fdatabase-error-deleting-user","\"Database error deleting user\" in Supabase und was mitgelöscht wird","\"Database error deleting user\" in Supabase heißt: Deine Datenbank hat das Löschen abgelehnt. Der Grund steht im Log, die Lösung entscheidet, was mitgeht.","2026-10-30","Backups","\u002Fblog\u002Fdatabase-error-deleting-user\u002Fcard-800x500.png",{"path":464,"title":465,"description":466,"published":467,"category":353,"image":468,"draft":357},"\u002Fblog\u002Fstripe-webhook-no-signatures-found","\"No signatures found matching the expected signature\" bei Supabase","Ein Stripe-Webhook in einer Supabase Edge Function meldet \"No signatures found matching the expected signature\"? Zwei Ursachen. Prüfe weiter.","2026-10-29","\u002Fblog\u002Fstripe-webhook-no-signatures-found\u002Fcard-800x500.png",{"path":470,"title":471,"description":472,"published":473,"category":353,"image":474,"draft":357},"\u002Fblog\u002Fsupabase-invalid-login","\"Invalid login credentials\" in Supabase: die drei Ursachen","Supabase sagt \"Invalid login credentials\" bei falschem Passwort, unbekannter E-Mail und Google-Konto. So erkennst du, welcher Fall es ist.","2026-10-28","\u002Fblog\u002Fsupabase-invalid-login\u002Fcard-800x500.png",{"path":476,"title":477,"description":478,"published":479,"category":353,"image":480,"draft":357},"\u002Fblog\u002Fedge-function-returned-a-non-2xx-status-code","\"Edge Function returned a non-2xx status code\": der echte Fehler","\"Edge Function returned a non-2xx status code\" heißt: Deine Supabase-Funktion hat mit einem Fehler geantwortet. So liest du den echten.","2026-10-27","\u002Fblog\u002Fedge-function-returned-a-non-2xx-status-code\u002Fcard-800x500.png",{"path":482,"title":483,"description":484,"published":485,"category":353,"image":486,"draft":357},"\u002Fblog\u002Fcertificate-not-trusted","Zertifikat nicht vertrauenswürdig: drei Ursachen außer Ablauf","Zertifikat nicht vertrauenswürdig, obwohl das Datum stimmt? Es nennt eine andere Adresse, hat sich selbst signiert oder seiner Kette fehlt ein Glied.","2026-10-26","\u002Fblog\u002Fcertificate-not-trusted\u002Fcard-800x500.png",{"path":488,"title":489,"description":490,"published":491,"category":353,"image":492,"draft":357},"\u002Fblog\u002Finvalid-input-syntax-for-type-uuid","Supabase \"invalid input syntax for type uuid\": was im Zitat steht","Supabase \"invalid input syntax for type uuid\" heißt: Deine App hat etwas geschickt, das keine ID ist. Zitat lesen, Abfrage zurückhalten, Spalte behalten.","2026-10-25","\u002Fblog\u002Finvalid-input-syntax-for-type-uuid\u002Fcard-800x500.png",{"path":494,"title":495,"description":496,"published":497,"category":353,"image":498,"draft":357},"\u002Fblog\u002Fduplicate-key-value-violates-unique-constraint","Supabase \"duplicate key value violates unique constraint\" erklärt","Supabase \"duplicate key value violates unique constraint\" heißt: Der Wert ist schon vergeben. Spalte finden, Lösung wählen, Wert vom Bildschirm fernhalten.","2026-10-24","\u002Fblog\u002Fduplicate-key-value-violates-unique-constraint\u002Fcard-800x500.png",{"path":500,"title":501,"description":502,"published":503,"category":353,"image":504,"draft":357},"\u002Fblog\u002Fsupabase-relation-does-not-exist","Supabase \"relation does not exist\", obwohl die Tabelle da ist","Supabase \"relation does not exist\" oder PGRST205: Keine Tabelle passt zu Name und Schema deiner Abfrage. Vier Prüfungen, und was eine Freigabe öffnet.","2026-10-23","\u002Fblog\u002Fsupabase-relation-does-not-exist\u002Fcard-800x500.png",{"path":506,"title":507,"description":508,"published":509,"category":353,"image":510,"draft":357},"\u002Fblog\u002Fsupabase-function-not-found","Supabase PGRST202: \"Could not find the function in the schema cache\"","Supabase \"Could not find the function in the schema cache\" nennt die Argumente, die deine App geschickt hat. Vergleich sie mit der Funktion.","2026-10-22","\u002Fblog\u002Fsupabase-function-not-found\u002Fcard-800x500.png",{"path":512,"title":513,"description":514,"published":515,"category":353,"image":516,"draft":357},"\u002Fblog\u002Fsupabase-schema-cache-column-error","Supabase PGRST204: \"Could not find the column in the schema cache\"","Supabase \"Could not find the column in the schema cache\" heißt meist: Der Name passt nicht. Vier Prüfungen und der Einzeiler zum Neuladen.","2026-10-21","\u002Fblog\u002Fsupabase-schema-cache-column-error\u002Fcard-800x500.png",{"path":518,"title":519,"description":520,"published":521,"category":353,"image":522,"draft":357},"\u002Fblog\u002Fsupabase-email-rate-limit-exceeded","Supabase \"Email Rate Limit Exceeded\": zwei Limits, ein Fehlercode","Supabase \"Email Rate Limit Exceeded\" begrenzt jede E-Mail deines Projekts: 2 pro Stunde beim eingebauten Absender. Was zählt und wie du es anhebst.","2026-10-20","\u002Fblog\u002Fsupabase-email-rate-limit-exceeded\u002Fcard-800x500.png",{"path":524,"title":525,"description":526,"published":527,"category":353,"image":528,"draft":357},"\u002Fblog\u002Fsupabase-users-logged-out","Supabase \"Invalid Refresh Token: Refresh Token Not Found\": 3 Ursachen","Supabase \"Invalid Refresh Token: Refresh Token Not Found\" meldet deine Nutzer ab. Drei Ursachen, und wie das Auth-Log sie trennt.","2026-10-19","\u002Fblog\u002Fsupabase-users-logged-out\u002Fcard-800x500.png",{"path":530,"title":531,"description":532,"published":533,"category":353,"image":534,"draft":357},"\u002Fblog\u002Fpermission-denied-for-schema-public","Supabase \"permission denied for schema public\": drei Ursachen","Supabase \"permission denied for schema public\" heißt: Ein Grant auf das Schema fehlt. Was ihn entfernt hat und welche Zeile ihn zurückbringt.","2026-10-18","\u002Fblog\u002Fpermission-denied-for-schema-public\u002Fcard-800x500.png",{"path":536,"title":537,"description":538,"published":539,"category":353,"image":540,"draft":357},"\u002Fblog\u002Fsupabase-bucket-not-found","Supabase \"Bucket not found\": die drei Dinge, die es bedeutet","Supabase \"Bucket not found\" ist eins von drei Dingen: ein öffentlicher Link zu einem privaten Bucket, ein ungenauer Name oder das falsche Projekt.","2026-10-17","\u002Fblog\u002Fsupabase-bucket-not-found\u002Fcard-800x500.png",{"path":542,"title":543,"description":544,"published":545,"category":353,"image":546,"draft":357},"\u002Fblog\u002Fsupabase-invalid-jwt","Supabase invalid JWT: Welcher Schlüssel streikt hier?","Ein Supabase invalid JWT ist PGRST301: ein signiertes Token hat die Prüfung nicht bestanden. In neueren Projekten ist das die Sitzung, nicht der API-Schlüssel.","2026-10-16","\u002Fblog\u002Fsupabase-invalid-jwt\u002Fcard-800x500.png",{"path":548,"title":549,"description":550,"published":551,"category":353,"image":552,"draft":357},"\u002Fblog\u002Fsupabase-single-row-error","Supabase \"multiple (or no) rows returned\" heißt meist: keine Zeilen","Supabase gibt PGRST116 zurück, \"JSON object requested, multiple (or no) rows returned\", wenn die Abfrage nichts fand. Versteckte Zeilen wirken fehlend.","2026-10-15","\u002Fblog\u002Fsupabase-single-row-error\u002Fcard-800x500.png",{"path":554,"title":555,"description":556,"published":557,"category":353,"image":558,"draft":357},"\u002Fblog\u002Fdatabase-error-saving-new-user","\"Database error saving new user\" in Supabase: wo du nachsiehst","\"Database error saving new user\" heißt: etwas an deiner Supabase-Registrierung ist fehlgeschlagen. Der echte Fehler steht in deinen Logs.","2026-10-14","\u002Fblog\u002Fdatabase-error-saving-new-user\u002Fcard-800x500.png",{"path":386,"title":5,"description":356,"published":387,"category":353,"image":374,"draft":357},{"path":561,"title":562,"description":563,"published":564,"category":353,"image":565,"draft":357},"\u002Fblog\u002Faws-access-key-exposed-in-frontend","Ein offengelegter AWS-Schlüssel im Frontend ist kein OpenAI-Key","Ein im Frontend offengelegter AWS-Zugriffsschlüssel liest und schreibt deinen Speicher. Die Lösung ist meist eine presigned URL, kein neuer Schlüssel.","2026-10-12","\u002Fblog\u002Faws-access-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":567,"title":568,"description":569,"published":570,"category":353,"image":571,"draft":357},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" beim Upload","\"New row violates row-level security policy for table objects\" heißt: Deinem Upload fehlt eine insert-Regel. Ein öffentlicher Bucket fügt keine hinzu.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":573,"title":574,"description":575,"published":576,"category":353,"image":577,"draft":357},"\u002Fblog\u002Fbase44-security-scan","Base44 Security Scan: das, was nur er sehen kann","Der Base44 Security Scan prüft sieben Arten von Problemen von innen. Hier ist die Hälfte, die er liest und sonst niemand, und die Hälfte, die er nie ansieht.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":579,"title":580,"description":581,"published":582,"category":353,"image":583,"draft":357},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Dein API-Key wurde geleakt. Die richtige Reihenfolge","Ein API-Key wurde geleakt und du weißt nicht, was zuerst zu tun ist. Nicht jeder Key im Frontend ist ein Leck, und die Reihenfolge zählt mehr als das Tempo.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":585,"title":586,"description":587,"published":588,"category":353,"image":589,"draft":357},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" ohne RLS abzuschalten","\"Infinite recursion detected in policy for relation\" heißt: Deine Policy hat die Tabelle gefragt, die sie schützt. So brichst du den Kreis.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":591,"title":592,"description":593,"published":594,"category":353,"image":595,"draft":357},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" in Supabase, und die falsche Lösung","\"No API key found in request\" heißt, deine Supabase-Anfrage kam ohne Schlüssel an. Die meisten Antworten zeigen stattdessen auf deine Datenbankregeln.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":597,"title":598,"description":599,"published":600,"category":353,"image":601,"draft":357},"\u002Fblog\u002Fis-base44-safe","Ist Base44 sicher? Was 5.442 echte Base44-Apps zeigten","Ist Base44 sicher? Wir haben 5.442 laufende Base44-Apps mit neun Checks geprüft. Fast alle bekamen ein B, aus Gründen, die der Inhaber nie gewählt hat.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":603,"title":604,"description":605,"published":606,"category":353,"image":607,"draft":357},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","API-Schlüssel verstecken: ab in eine Supabase Edge Function","Einen API-Schlüssel verstecken heißt, ihn aus dem Browser zu nehmen. Eine Supabase Edge Function ist der kleinste Ort dafür, und zwei Schritte zählen mehr.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":609,"title":610,"description":611,"published":612,"category":353,"image":613,"draft":357},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Ist deine .env-Datei öffentlich? Zwölf Pfade zum Prüfen","Ist deine .env-Datei auf deinem eigenen Webserver öffentlich? Zwölf Adressen sagen es dir, und ein Treffer heißt: alles darin ist längst öffentlich.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":615,"title":616,"description":617,"published":618,"category":353,"image":619,"draft":357},"\u002Fblog\u002Fis-v0-safe","v0-Sicherheit: alle 1.790 gescannten v0-Apps bekamen ein A","v0-Sicherheit, gemessen an 1.790 laufenden v0-Apps: Jede bekam ein A. Nur 17 nannten eine Datenbank, und genau das misst das A vor allem.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":621,"title":622,"description":623,"published":624,"category":353,"image":625,"draft":357},"\u002Fblog\u002Fis-bolt-safe","Ist Bolt sicher? Was 1.123 echte Bolt-Apps zeigten","Ist Bolt sicher? Wir haben 1.123 laufende Bolt-Apps mit neun Checks geprüft. Das Hosting war sauber. Die Funde waren Schlüssel und offene Tabellen in den Apps.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":627,"title":628,"description":629,"published":630,"category":353,"image":631,"draft":357},"\u002Fblog\u002Fis-supabase-down-or-your-app","Ist Supabase down oder liegt es an deiner App? So erkennst du es","Ist Supabase down oder liegt es an deiner App? Ein pausiertes Projekt, eine volle Datenbank und ein eigener Fehler sehen gleich aus. Vier Prüfungen helfen.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":633,"title":634,"description":635,"published":636,"category":353,"image":637,"draft":357},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","Verschlüsselt Supabase meine Daten? Ja. Wovor das schützt","Verschlüsselt Supabase Daten? Ja: AES-256 im Ruhezustand, TLS bei der Übertragung, SOC 2 und ISO 27001. Was jedes abdeckt und welches Leck keines stoppt.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":639,"title":640,"description":641,"published":642,"category":353,"image":643,"draft":357},"\u002Fblog\u002Fsupabase-free-plan-limits","Supabase Gratis-Tarif: die Limits und was an jedem passiert","Die Limits des Supabase-Gratis-Tarifs: 500 MB Datenbank, 5 GB Egress und keine Backups. Was an jeder Grenze passiert und was $25 für Pro ändern.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":645,"title":646,"description":647,"published":648,"category":461,"image":649,"draft":357},"\u002Fblog\u002Ftest-your-supabase-backup","Teste dein Supabase-Backup, bevor du es brauchst","So testest du dein Supabase-Backup: in ein Übungsprojekt einspielen, Zeilen zählen, anmelden und die Zeile suchen, die einer abgeschnittenen Datei fehlt.","2026-09-28","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":651,"title":652,"description":653,"published":654,"category":461,"image":655,"draft":357},"\u002Fblog\u002Fsupabase-backup-github-action","Kostenloses Supabase-Backup per GitHub Action, mit Haken","Eine Supabase-Backup-GitHub-Action kostet nichts und passt für viele Apps. Der Workflow, der richtige Connection String und das Egress pro Lauf.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":657,"title":658,"description":659,"published":660,"category":461,"image":661,"draft":357},"\u002Fblog\u002Fdownload-your-supabase-backup","Warum du dein Supabase-Backup nicht herunterladen kannst","Dein Supabase-Backup kannst du auf aktuellen Projekten nicht herunterladen, weil die Tageskopie physisch ist. Wie du es prüfst und selbst eine Kopie hältst.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":663,"title":664,"description":665,"published":660,"category":353,"image":666,"draft":357},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": der fehlende Grant","Ab 30. Oktober antwortet eine neue Supabase-Tabelle mit \"permission denied for table\", bis du Zugriff erteilst. Der Grant aus der E-Mail ist die halbe Lösung.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":668,"title":669,"description":670,"published":671,"category":353,"image":672,"draft":357},"\u002Fblog\u002Fopen-api-endpoint-exposed","Ist ein offener API-Endpunkt ein Sicherheitsproblem? Sieh ins JSON","Dein Scan hat einen offenen API-Endpunkt gemeldet. Ob das zählt, hängt davon ab, was zurückkam, und die meisten hier gehörten der Plattform.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":674,"title":675,"description":676,"published":677,"category":353,"image":678,"draft":357},"\u002Fblog\u002Flovable-security-scan","Lovable Security Scan: das Eine, was er nicht beweist","Lovable Security Scan: was Quick Scan und Deep Scan prüfen, wann welcher läuft, und das Eine, was kein Scan von innen beweisen kann.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":680,"title":681,"description":682,"published":683,"category":461,"image":684,"draft":357},"\u002Fblog\u002Fsupabase-backup-auth-users","Warum in deinem Supabase-Dump keine Nutzer stehen","Führe supabase db dump allein aus und du bekommst die Form deiner Datenbank und keine einzige Zeile, und das auth-Schema mit deinen Nutzern fehlt ganz.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":686,"title":687,"description":688,"published":689,"category":353,"image":690,"draft":357},"\u002Fblog\u002Fdomain-and-certificate-expiry","Domain abgelaufen, Website offline: was jetzt passiert","Deine Domain ist abgelaufen und deine Website ist offline. Welche Frist jetzt läuft, warum das Zertifikat das kleinere Problem ist, und wie du beides prüfst.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":692,"title":693,"description":694,"published":695,"category":353,"image":696,"draft":357},"\u002Fblog\u002Fis-lovable-safe","Ist Lovable sicher? Was 18.554 echte Lovable-Apps zeigten","Ist Lovable sicher? Wir haben 18.554 laufende Lovable-Apps mit neun Checks geprüft. Die Plattform war die sauberste von fünf. Die Funde saßen in den Apps.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":698,"title":699,"description":700,"published":701,"category":353,"image":702,"draft":357},"\u002Fblog\u002Fvibe-coded-app-security-checklist","Die Sicherheits-Checkliste für Vibe-Coding, in neun Prüfungen","Eine Sicherheits-Checkliste für Vibe-Coding mit neun Punkten, die jeder von außen an deiner Live-App nachprüfen kann, jeder mit einem Test in einer Zeile.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":704,"title":705,"description":706,"published":707,"category":353,"image":708,"draft":357},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Ein geheimer Stripe-Schlüssel im Frontend kann Geld bewegen","Ein geheimer Stripe-Schlüssel im Frontend kann erstatten, abbuchen und jeden Kundendatensatz lesen, den du hast. Dein pk_live_-Schlüssel gehört dorthin.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":710,"title":711,"description":712,"published":713,"category":353,"image":714,"draft":357},"\u002Fblog\u002Fvite-and-next-public-env-vars","Vite-Env-Variablen offengelegt: der Präfix heißt veröffentlichen","Vite-Env-Variablen offengelegt: Deine App hat getan, was der Präfix verlangt. VITE_ und NEXT_PUBLIC_ heißen veröffentlichen, und die KI kannte den Preis nie.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":716,"title":717,"description":718,"published":719,"category":353,"image":720,"draft":357},"\u002Fblog\u002Fbase44-source-maps","Base44-Sicherheit: was ein Scan meldet und was du ändern kannst","Base44-Sicherheit auf 5.438 gescannten Apps: Drei Befunde auf fast jeder gehören der Plattform, die Source Map ist das Base44-Badge, und deine Liste ist kurz.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":722,"title":723,"description":724,"published":725,"category":353,"image":726,"draft":357},"\u002Fblog\u002Fis-cursor-ai-safe","Ist Cursor AI sicher? Editor, Code und die App, die du veröffentlichst","Ist Cursor AI sicher? Drei Fragen in einer Suche: was Cursor behält, was sein Code falsch macht und ob deine veröffentlichte App offen steht.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":728,"title":729,"description":730,"published":731,"category":353,"image":732,"draft":357},"\u002Fblog\u002Fis-replit-safe","Ist Replit sicher? Was wir in 3.042 Replit-Apps gefunden haben","Ist Replit sicher? Wir haben 3.042 laufende Replit-Apps mit neun externen Checks geprüft. Die Funde saßen in der veröffentlichten App, nicht im Hosting.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":734,"title":735,"description":736,"published":737,"category":461,"image":738,"draft":357},"\u002Fblog\u002Fsupabase-storage-backup","Supabase Storage Backup: deine Datenbankkopie hat keine Dateien","Ein Supabase Storage Backup ist eine eigene Aufgabe. Datenbank-Backups enthalten die Liste deiner Dateien und keine davon, also bleibt jeder Upload kaputt.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":740,"title":741,"description":742,"published":743,"category":461,"image":744,"draft":357},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Supabase Point-in-Time Recovery: Kosten und Grenzen","Supabase Point-in-Time Recovery spult deine Datenbank auf jede Sekunde der letzten Woche zurück. $100 im Monat zusätzlich zu Pro, und nur die Datenbank.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":746,"title":747,"description":748,"published":749,"category":461,"image":750,"draft":357},"\u002Fblog\u002Fsupabase-project-paused-recover","Supabase-Projekt pausiert? Deine Daten sind noch da","Supabase hat dein Projekt nach einer Woche ohne Aktivität pausiert. Gelöscht ist nichts, Wiederherstellen steht neben dem Namen, und du hast ein Jahr.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":752,"title":753,"description":754,"published":755,"category":353,"image":756,"draft":357},"\u002Fblog\u002Fsafest-ai-app-builder","Welcher KI-App-Builder ist am sichersten? 30.998 Apps im Test","Welcher KI-App-Builder ist am sichersten? Wir haben 30.998 aktive Apps von Lovable, Base44, Replit, v0 und Bolt gescannt. Der Builder entscheidet das nicht.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":179,"title":758,"description":759,"published":760,"category":353,"image":761,"draft":357},"Row Level Security für jede Supabase-Tabelle aktivieren und prüfen","Row Level Security in Supabase ohne Policy sperrt eine Tabelle komplett. Eine Policy ohne den Schalter bringt gar nichts. Hier ist das SQL, und der Test.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":763,"title":764,"description":765,"published":766,"category":353,"image":767,"draft":357},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": was die Warnung übersieht","Supabase meldet \"RLS disabled in public\" als Fehler. Zur Lese-Policy, die deine Tabelle genauso offen lässt, sagt der Advisor gar nichts.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":769,"title":770,"description":771,"published":772,"category":353,"image":773,"draft":357},"\u002Fblog\u002Frotate-supabase-service-role-key","Geleakten Supabase-service_role-Schlüssel richtig tauschen","Supabase sagt: erst das Leck schließen. Andere Anleitungen: sofort tauschen. Was richtig ist, hängt davon ab, wohin dein service_role-Schlüssel gelangt ist.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":775,"title":776,"description":777,"published":778,"category":353,"image":779,"draft":357},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Vibe-Coding-Security-Scanner im Vergleich, unserer eingeschlossen","Der beste Vibe-Coding-Security-Scanner hängt an drei Fragen, die keine Funktionsliste beantwortet. Acht Tools im Vergleich, mit Preisen und unseren Lücken.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":781,"title":782,"description":783,"published":784,"category":353,"image":785,"draft":357},"\u002Fblog\u002Fsupabase-security-checker","Supabase Security Checker: die fünf Prüfungen selbst machen","Ein Supabase Security Checker liest deine veröffentlichte App statt deiner Projekteinstellungen. Hier sind die fünf Prüfungen und wie du jede selbst ausführst.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":787,"title":788,"description":789,"published":790,"category":353,"image":791,"draft":357},"\u002Fblog\u002Fvibe-coding-security-scanner","Vibe-Coding-Security-Scanner: was ein URL-Scan übersieht","Ein Vibe-Coding-Security-Scanner liest deine laufende App von außen. Was das abdeckt, die vier Dinge, die er nicht sehen kann, und wie du das Ergebnis liest.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":793,"title":794,"description":795,"published":796,"category":353,"image":797,"draft":357},"\u002Fblog\u002Fmissing-security-headers","Fehlende Sicherheitsheader: wann sie wirklich zählen","Fehlende Sicherheitsheader ist unser häufigster Befund. Wogegen sie schützen, und wann sie die unwichtigste Zeile in deinem Bericht sind.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":799,"title":800,"description":801,"published":802,"category":353,"image":803,"draft":357},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Dein OpenAI-API-Schlüssel liegt im Frontend. Tausch ihn aus.","Ein OpenAI-API-Schlüssel im Frontend lässt sich an keine Domain binden. Tausch ihn heute, leg den Aufruf hinter deinen Server und begrenze das Budget.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":805,"title":806,"description":807,"published":808,"category":353,"image":809,"draft":357},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","API-Schlüssel im Frontend: was 30.998 Apps wirklich ausliefern","Ein API-Schlüssel im Frontend ist meistens ein Google-Maps-Schlüssel. Wir haben 30.998 aktive Vibe-Coding-Apps gescannt und gezählt, was wirklich austritt.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":811,"title":812,"description":813,"published":814,"category":461,"image":815,"draft":357},"\u002Fblog\u002Fsupabase-backup-tools-compared","Supabase-Backup-Tools im Vergleich, unseres eingeschlossen","Vier Arten von Supabase-Backup-Tool, was jedes wirklich kopiert und wann eine kostenlose GitHub Action jeden Anbieter schlägt, uns eingeschlossen.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":817,"title":818,"description":819,"published":820,"category":353,"image":821,"draft":357},"\u002Fblog\u002Freplit-secrets-explained","Secrets in Replit nutzen, und was trotzdem veröffentlicht wird","Secrets in Replit nutzen: anlegen, auslesen und die zwei Gründe beheben, warum undefined zurückkommt. Dazu die Schlüssel, die das Werkzeug nicht schützt.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":823,"title":824,"description":825,"published":826,"category":461,"image":827,"draft":357},"\u002Fblog\u002Fback-up-supabase-free-tier","Supabase Gratis-Tarif: Backup ohne Terminal selbst machen","Im Supabase Gratis-Tarif gibt es keine Backups, die Kopie musst du selbst machen. Wie das im Dashboard geht und was der CSV-Weg auslässt.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":338,"title":829,"description":830,"published":831,"category":353,"image":832,"draft":357},"Ist Supabase sicher? Ja. Dein Projekt ist eine eigene Frage","Ist Supabase sicher? Die Plattform ist auditiert, verschlüsselt und pentestet. Supabase schreibt selbst auf, wo das aufhört und deine Einstellungen anfangen.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":225,"title":834,"description":835,"published":836,"category":353,"image":837,"draft":357},"Wo du deine Supabase API-Keys findest: anon, service_role, URL","Projekt-URL, anon-Schlüssel und service_role-Schlüssel liegen auf einer Seite im Dashboard. Wo sie ist, und welcher der vier Werte in deine App gehört.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":839,"title":840,"description":841,"published":842,"category":353,"image":843,"draft":357},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy in Supabase: was jetzt?","\"New row violates row-level security policy\" heißt, Supabase hat einen Schreibvorgang abgelehnt. Die schnelle Lösung öffnet die Tabelle wieder für alle.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":845,"title":846,"description":847,"published":848,"category":353,"image":849,"draft":357},"\u002Fblog\u002Fcors-wildcard-security-risk","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist nicht.","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist ist sie die Voreinstellung deines Builders und gibt nichts preis, was dein Server nicht ohnehin herausgab.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":851,"title":852,"description":853,"published":854,"category":461,"image":855,"draft":357},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Supabase Branching ist kein Backup. Es geht nur vorwärts.","Warum Supabase Branching kein Backup ist: Ein Branch startet ohne deine Daten, und ein Merge bringt nur das Schema. Wofür es gut ist und was stattdessen hilft.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":857,"title":858,"description":859,"published":860,"category":461,"image":861,"draft":357},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Supabase-Backup wiederherstellen, und was danach kaputt ist","Wie du ein Supabase-Backup aus dem Dashboard oder aus einer Dump-Datei wiederherstellst, was ersetzt wird und warum die App danach kaputt sein kann.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":863,"title":864,"description":865,"published":866,"category":353,"image":867,"draft":357},"\u002Fblog\u002Fsupabase-storage-bucket-public","Dein Supabase-Storage-Bucket ist öffentlich. Ist das ein Problem?","Ein öffentlicher Supabase-Storage-Bucket heißt: Wer die URL einer Datei hat, kann sie öffnen. Er heißt nicht, dass jemand den Inhalt auflisten darf.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":869,"title":870,"description":871,"published":872,"category":353,"image":873,"draft":357},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Ist ein Google-API-Schlüssel im Frontend ein Problem?","Ein Google-API-Schlüssel im Frontend ist der Fund unseres Scanners Nummer eins, und meistens unbedenklich. Eine kostenlose Einstellung entscheidet darüber.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":302,"title":875,"description":876,"published":877,"category":461,"image":878,"draft":357},"Ein KI-Agent hat meine Supabase-Daten gelöscht. Was hole ich zurück?","Ein KI-Agent hat Daten aus deiner Datenbank gelöscht. Was du zurückholst, stand schon vorher fest, und die nächsten Minuten entscheiden über den Rest.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":184,"title":880,"description":881,"published":882,"category":353,"image":883,"draft":357},"Kann jeder deine Supabase-Datenbank lesen? 3.680 Apps im Test","Kann jeder deine Supabase-Datenbank ohne Login lesen? Wir haben 30.998 aktive Apps aus KI-Buildern gescannt und gemessen, wie oft die Antwort ja lautet.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":885,"title":886,"description":887,"published":882,"category":353,"image":888,"draft":357},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source-Maps öffentlich: deine App veröffentlicht ihren Quellcode","Eine öffentliche Source-Map lässt jeden den Originalcode deiner App lesen, Kommentare inklusive. Der 30-Sekunden-Check, und was wirklich zählt.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":890,"title":891,"description":892,"published":893,"category":353,"image":894,"draft":357},"\u002Fblog\u002Fsupabase-new-api-keys","Supabase publishable key: ist er derselbe wie der anon key?","Supabase hat anon und service_role durch öffentliche und geheime Schlüssel ersetzt. Welcher gehört in deine App, und welcher nie?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":896,"title":897,"description":898,"published":899,"category":461,"image":900,"draft":357},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Sichert Supabase meine Datenbank? Das hängt von deinem Tarif ab.","Sichert Supabase deine Datenbank? Auf bezahlten Tarifen täglich, im Gratis-Tarif gar nicht. So findest du heraus, was du hast und was es nicht abdeckt.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":902,"title":903,"description":904,"published":905,"category":353,"image":906,"draft":357},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security ist an. Die Tabelle ist trotzdem offen.","Supabase Row Level Security anzuschalten schützt keine Tabelle. Erst deine Policies tun das, und die, die deine App repariert hat, lässt oft alle herein.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":908,"title":909,"description":910,"published":905,"category":461,"image":911,"draft":357},"\u002Fblog\u002Fversion-history-is-not-a-backup","Der Versionsverlauf ist kein Backup. Er holt keine Tabelle zurück.","Lovable und Bolt führen einen Versionsverlauf für deinen Code. Deine Datenbank ist ein eigener Dienst, und ein Rücksprung holt deine Daten nicht zurück.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":913,"title":914,"description":915,"published":916,"category":461,"image":917,"draft":357},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Drei Wege, eine Supabase-Datenbank zu sichern, und was fehlt","Das Dashboard, pg_dump und ein verwalteter Dienst. Was jeder Weg wirklich sichert, was er stillschweigend auslässt und welcher den Kontoverlust übersteht.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":230,"title":919,"description":920,"published":916,"category":353,"image":921,"draft":357},"Welche API-Schlüssel im Frontend sicher sind, und welche nicht","Dein Supabase-anon-Schlüssel darf öffentlich sein. Der service_role-Schlüssel nicht. Er ignoriert jede Regel, die du setzt. So erkennst du den Unterschied.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1794213638791]