ALLE PROJEKTESK
LIVE

CBD-SUPERMARKT

Verzeichnis-Plattform, die regionale Anbieter auffindbar macht – in einem Markt, in dem bezahlte Werbung praktisch ausfällt.

1.317Seiten in der Sitemap
35RLS-Policies in der DB
84Lexikon-Einträge
12Tabellen im Schema

Konzept, Datenmodell, Entwicklung, Datenpipeline und Betrieb – als Ein-Personen-Projekt

Eigenentwicklung – Konzept, Umsetzung und Betrieb in Eigenregie.

Das Problem

In diesem Marktsegment sind die bezahlten Kanäle weitgehend geschlossen: Suchmaschinenwerbung ist für die Branche gesperrt, und die üblichen Keyword-Werkzeuge liefern zu den relevanten Begriffen schlicht keine Daten. Reichweite gibt es hier nur organisch – und die muss in die Seite hineingebaut werden, statt später als Marketing obendrauf zu kommen. Dazu kommt ein rechtlich enges Umfeld: Ein eigener Shop hätte Produkt- und Werbeaussagen bedeutet, die streng reguliert sind. Und die Anbieterseite ist zersplittert – viele kleine, regionale Betriebe, die nirgends vergleichbar gelistet sind.

Der Ansatz

Statt eines Shops eine Verzeichnis-Plattform, die selbst nichts verkauft, sondern Anbieter auffindbar und vergleichbar macht. Die öffentlichen Seiten entstehen programmatisch aus dem Bestand – je Stadt, je Kategorie und als Kombination aus beidem –, aber ausschließlich dort, wo tatsächlich Anbieter hinterlegt sind; leere Kombinationen werden gar nicht erst erzeugt. Anbieter beanspruchen ihren bereits vorhandenen Eintrag, pflegen ihn im eigenen Dashboard und sehen dort, wie oft er aufgerufen und angeklickt wurde. Abos und bezahlte Top-Platzierungen laufen über Stripe; Zahlungsstatus und Platzierung fließen über Webhooks zurück in die Datenbank. Die Zugriffsregeln liegen bewusst nicht in der Anwendungsschicht, sondern in Postgres selbst: 35 Row-Level-Security-Policies plus PL/pgSQL-Trigger, die unter anderem verhindern, dass sich ein Nutzer beim Bearbeiten des eigenen Profils selbst zum Administrator macht.

Was dabei herauskam

Die Plattform ist live: 12 Tabellen über 11 Migrationen, rund 1.300 Seiten in der Sitemap und ein redaktionelles Lexikon mit 84 Begriffen als inhaltliches Fundament. Der Kern ist branchenunabhängig gebaut – Marke, Theme, Kategorien und Texte stecken in zwei Konfigurationsdateien, der restliche Code kennt die Branche nicht. Das CBD-Verzeichnis ist damit der Pilot, nicht das Endprodukt. Ein anschließendes systematisches SEO-Audit über acht Prüfbereiche hat die verbliebenen Schwachstellen – Caching-Strategie, strukturierte Daten, Security-Header – in einen priorisierten Maßnahmenplan überführt, statt sie im Bauchgefühl zu lassen.

Was drin steckt

01

Landingpages nur mit echter Datenbasis

Stadt-, Kategorie- und Kombiseiten werden aus dem Bestand erzeugt – aber nur, wenn dahinter tatsächlich Anbieter stehen; Vergleichsseiten erst ab drei. Das volle Kreuzprodukt aus Städten und Kategorien wäre einfacher zu bauen und würde die Seite mit tausenden leeren Seiten fluten.

02

Rechte liegen in der Datenbank

35 Row-Level-Security-Policies regeln, wer welche Zeile lesen und schreiben darf: öffentlich nur veröffentlichte Einträge, Bearbeiten nur der eigene. Ein vergessener Filter in einer Abfrage kann so keine fremden Daten freilegen.

03

Trigger gegen Rechte-Eskalation

Nutzer dürfen ihr eigenes Profil bearbeiten – die Spalten für Rolle und Admin-Befugnisse friert ein PL/pgSQL-Trigger für alle außer Administratoren auf den alten Wert ein. Ohne diesen Trigger hätte die Selbstbearbeitung eine Hintertür zum Admin-Konto geöffnet.

04

Eintrag beanspruchen statt neu anlegen

Ein Anbieter findet seinen bereits gelisteten Eintrag vor und beansprucht ihn. Bearbeiten lässt er sich erst nach abgeschlossener Zahlung – die Zahlung dient gleichzeitig als Identitätsnachweis, weil niemand für einen fremden Eintrag zahlt.

05

Bezahlte Platzierungen mit festen Slots

Top-Plätze sind einzeln gebuchte Positionen je Geltungsbereich – global, pro Kategorie oder pro Stadt –, per Datenbank-Constraint eindeutig vergeben. Sie tragen sichtbar den Hinweis „Anzeige"; abgelaufene Plätze räumt ein täglicher Cron-Job selbst wieder frei.

06

Nachvollziehbares Ranking der freien Plätze

Die Reihung nutzt einen bayesianischen Durchschnitt: eine 5,0 aus einer Bewertung schlägt keine 4,9 aus über tausend. Ein reiner Sternedurchschnitt wäre über die kleinste Zahl an Bewertungen manipulierbar.

07

Statistiken für den Anbieter

Aufrufe und Klicks – Website, Shop, Telefon, Karte, einzelne Produkte – werden serverseitig erfasst und im Dashboard als Zeitreihe gezeigt. Geschrieben wird ausschließlich über einen serverseitigen Endpunkt ohne personenbezogene Merkmale; direktes Schreiben aus dem Browser ist unterbunden.

08

Lexikon mit automatischer Verlinkung

Ein redaktionelles Nachschlagewerk aus 84 markdownbasierten Einträgen. Beim Rendern wird die erste Erwähnung jedes anderen Begriffs automatisch verlinkt – ausschließlich in Textknoten außerhalb von Links, Überschriften und Code, mit Obergrenze gegen Überverlinkung.

09

Rechtlicher Rahmen von Anfang an mitgebaut

Altersabfrage mit Fokusfalle nach WCAG, Cookie-Einwilligung als echtes Opt-in (ohne Zustimmung läuft kein Analyse-Tracking), Kennzeichnung bezahlter Platzierungen, Impressum und Rechtstexte. In einem regulierten Umfeld ist das keine Politur am Ende, sondern Voraussetzung für den Betrieb.

10

Branchenunabhängiger Kern

Marke, Farbwelt, Kategorien und Startseitentexte stecken in zwei Konfigurationsdateien; der übrige Code enthält keine Branchenlogik. Für ein Verzeichnis in einer anderen Branche werden diese Dateien ersetzt, nicht die Anwendung umgeschrieben.

11

Eigene Datenpipeline mit Rückfahrkarte

Der Bestand wird über eine Import-Strecke gefüllt und anschließend durch einen Qualitätsfilter geschickt, der branchenfremde Treffer zur Prüfung vorlegt statt sie selbst zu löschen. Aussortierte Einträge wandern nur in den Entwurfsstatus und sind jederzeit zurückholbar.

Eingesetzter Stack

Next.js (App Router)ReactTypeScriptTailwind CSSshadcn/ui
SupabasePostgreSQLRow Level SecurityPL/pgSQLSQL-Migrationen
Stripe CheckoutStripe AbosStripe Webhooks
VercelVercel CronSupabase Storage
Node.jsApifyGoogle Indexing API

Ähnliches Vorhaben? Schreib mir.

Ob SaaS-Plattform, KI-Integration oder ein internes Werkzeug, das jemandem den Tag zurückgibt – ich bringe Ideen schnell und professionell zum Laufen.