Wissenschaftliche Aufklärungsplattform für psychoaktive Substanzen
Eine moderne, evidenzbasierte Wissensdatenbank mit Fokus auf Pharmakologie, Risiken, Interaktionen und Research Chemicals.
⚠️ Hinweis: Synapedia dient ausschließlich der wissenschaftlichen Aufklärung. Diese Plattform bietet keine Konsumanleitungen, keine Dosierungsempfehlungen und keine Beschaffungshinweise.
- Framework: Next.js (App Router)
- Sprache: TypeScript
- Styling: TailwindCSS v4
- UI-Komponenten: shadcn/ui (Custom)
- Datenbank: Supabase (Postgres + Auth + Storage)
- MDX: next-mdx-remote
- Icons: lucide-react
- Theming: next-themes (Dark/Light Mode)
- 🔍 Startseite mit Suchfunktion
- 📂 Kategorien-Übersicht
- 🏷️ Tag-System
- 📄 Artikel-Seiten mit:
- Sticky Inhaltsverzeichnis
- Quellenbox mit DOI-Links
- Risiko-Badges (niedrig/moderat/hoch)
- Evidenzstärke-Badges
- Warnbanner je nach Risikolevel
- 🌙 Dark/Light Mode
- ⚗️ Interaktions-Checker (
/interactions) – Zwei Substanzen auswählen, um kuratierte Wechselwirkungen mit Risikobewertung, Mechanismus-Erklärung und Quellen anzuzeigen. Symmetrische Normalisierung (A+B = B+A). - 🧠 Rezeptor-Explorer / Digitales Gehirn (
/brain) – Interaktive SVG-Hirnkarte mit klickbaren Regionen und Rezeptor-Netzwerk-Graph. Side-Panel zeigt Rezeptordetails und verknüpfte Substanzen. - 📖 Glossar (
/glossary) – Alphabetische A–Z-Navigation, Client-seitige Suche, Detail-Seiten pro Begriff mit Quellenangaben. Route:/glossary/[slug]. - ⚖️ Substanz-Vergleich (
/compare) – Side-by-side-Vergleich zweier Substanzen (Klasse, Mechanismen, Rezeptoren, Risiko). Teilbar per URL-Parameter (?a=ketamin&b=lsd). - 🔍 SEO-Optimierung – Automatisch generierte
/sitemap.xmlund/robots.txt, JSON-LD Schema (WebSite, BreadcrumbList), OpenGraph + Twitter Card Meta-Tags.
Datenmodelle (/data/):
substances.json– 20 Substanzen mit Rezeptoren, Mechanismen und Risikostufeninteractions.json– 20 kuratierte Interaktionspaarereceptors.json– 15 Rezeptoren/Transporter mit Beschreibungglossary.json– 10 wissenschaftliche Fachbegriffe
- 📊 Dashboard mit Statistiken
- ✍️ Artikel erstellen/bearbeiten (MDX Editor mit Live-Preview)
- 📝 Draft → Review → Publish Workflow
- 📚 Quellenverwaltung
- 🖼️ Medien-Upload (Platzhalter)
- 📋 Audit-Log
- Node.js 18+
- npm oder yarn
- Supabase-Projekt (optional für Demo-Modus)
# Repository klonen
git clone https://github.com/florianlux/synapedia.git
cd synapedia
# Abhängigkeiten installieren
npm install
# Umgebungsvariablen konfigurieren
cp .env.example .env.local
# Entwicklungsserver starten
npm run devDie App läuft unter http://localhost:3000.
Die App funktioniert ohne Supabase-Verbindung mit eingebauten Demo-Daten (3 Artikel: Psilocybin, MDMA, Ketamin).
- Erstelle ein neues Projekt auf supabase.com
- Trage die Credentials in
.env.localein - Führe die Migration aus:
# Schema erstellen
psql -h your-project.supabase.co -U postgres -d postgres -f supabase/migrations/00001_initial_schema.sql
# Demo-Daten einfügen
psql -h your-project.supabase.co -U postgres -d postgres -f supabase/seed/demo_articles.sqlAlternativ über das Supabase Dashboard → SQL Editor.
| Tabelle | Beschreibung |
|---|---|
articles |
Haupttabelle für Artikel (Slug, Titel, MDX-Inhalt, Status, Risiko) |
tags |
Tags/Schlagwörter |
article_tags |
Verknüpfung Artikel ↔ Tags |
sources |
Wissenschaftliche Quellen (Autor, Journal, DOI) |
article_sources |
Verknüpfung Artikel ↔ Quellen |
article_versions |
Versionshistorie der Artikel |
audit_log |
Protokoll aller Änderungen |
Alle Tabellen haben Row Level Security (RLS) aktiviert.
Jeder Artikel folgt einer standardisierten Struktur:
- Kurzfazit – Zusammenfassung in 2-3 Sätzen
- Was ist die Substanz? – Grundlegende Einordnung
- Chemische Struktur / Klasse – Chemische Klassifikation
- Wirkmechanismus – Pharmakologische Wirkweise
- Rezeptorprofil – Rezeptorbindung und Affinitäten
- Wirkprofil – Subjektive Effekte (qualitativ)
- Risiken & Nebenwirkungen – Bekannte Risiken
- Interaktionen – Wechselwirkungen mit anderen Substanzen
- Kreuztoleranz – Toleranzmechanismen (konzeptionell)
- Rechtsstatus – Rechtliche Einordnung (Disclaimer)
- Quellenlage – Bewertung der Evidenz + Quellenliste
synapedia/
├── data/
│ ├── substances.json # Substanz-Datenmodell (20 Einträge)
│ ├── interactions.json # Interaktions-Paare (20 Einträge)
│ ├── receptors.json # Rezeptoren/Transporter (15 Einträge)
│ ├── glossary.json # Glossarbegriffe (10 Einträge)
│ └── categories.json # Kategorien
├── src/
│ ├── app/
│ │ ├── admin/ # Admin-Bereich
│ │ │ ├── articles/ # Artikelverwaltung
│ │ │ ├── sources/ # Quellenverwaltung
│ │ │ ├── media/ # Medienverwaltung
│ │ │ ├── audit/ # Audit-Log
│ │ │ ├── layout.tsx # Admin-Layout mit Sidebar
│ │ │ └── page.tsx # Dashboard
│ │ ├── articles/
│ │ │ └── [slug]/ # Artikel-Detailseite
│ │ ├── brain/ # Rezeptor-Explorer
│ │ ├── categories/ # Kategorien-Übersicht
│ │ ├── compare/ # Substanz-Vergleich
│ │ ├── glossary/ # Glossar + [slug]-Seiten
│ │ ├── interactions/ # Interaktions-Checker
│ │ ├── api/
│ │ │ └── search/ # Such-API
│ │ ├── layout.tsx # Root-Layout
│ │ ├── page.tsx # Startseite
│ │ ├── sitemap.ts # Auto-generierte Sitemap
│ │ ├── robots.ts # Robots.txt
│ │ └── globals.css # Globale Styles
│ ├── components/
│ │ ├── ui/ # shadcn/ui Basiskomponenten
│ │ ├── brain-explorer.tsx # Gehirn-/Rezeptor-Explorer
│ │ ├── compare-tool.tsx # Vergleichstool
│ │ ├── glossary-list.tsx # Glossar-Interaktive Liste
│ │ ├── interaction-checker.tsx # Interaktions-Checker
│ │ ├── json-ld.tsx # JSON-LD Schema-Komponente
│ │ ├── header.tsx # Seitenheader
│ │ ├── footer.tsx # Seitenfooter
│ │ ├── search-bar.tsx # Suchleiste
│ │ ├── risk-banner.tsx # Risiko-Warnbanner
│ │ ├── source-box.tsx # Quellenbox
│ │ ├── table-of-contents.tsx # Inhaltsverzeichnis
│ │ ├── theme-provider.tsx # Theme-Provider
│ │ └── theme-toggle.tsx # Dark/Light Toggle
│ └── lib/
│ ├── demo-data.ts # Demo-Daten
│ ├── types.ts # TypeScript-Typen
│ ├── utils.ts # Utility-Funktionen
│ └── supabase/ # Supabase-Client
│ ├── client.ts # Browser-Client
│ └── server.ts # Server-Client
├── supabase/
│ ├── migrations/
│ │ └── 00001_initial_schema.sql # Datenbankschema
│ └── seed/
│ └── demo_articles.sql # Demo-Daten
├── .env.example
└── README.md
npm run dev # Entwicklungsserver starten
npm run build # Production Build erstellen
npm run start # Production Server starten
npm run lint # ESLint ausführenDie Konfiguration in netlify.toml setzt GIT_LFS_ENABLED = "false", da das Repo kein Git LFS nutzt.
Ohne dieses Flag kann Netlify beim Klonen versuchen, nicht vorhandene LFS-Objekte abzurufen, was den
Build in der Phase „preparing repo" abbricht.
Lokale Validierung vor dem Deploy:
# Sicherstellen, dass keine LFS-Dateien getrackt werden
git lfs ls-files # Erwartung: leere Ausgabe
# Build testen
npm install && npm run buildFalls der Netlify-Build weiterhin fehlschlägt, zusätzlich in den Netlify Site Settings → Build & Deploy → Environment Variables prüfen, dass GIT_LFS_ENABLED nicht auf true steht.
Nutzer können sich unter /auth/signup registrieren (E-Mail, Passwort, optionaler Benutzername, Newsletter-Opt-in). Die Registrierung nutzt Supabase Auth. Ein user_profiles-Eintrag wird automatisch per Trigger erstellt.
- Dosing-Logs: Unter
/account/logskönnen authentifizierte Nutzer Substanzeinnahmen protokollieren. - Dosing-Logs API:
GET/POST/DELETE /api/dosing-logs– CRUD-Endpunkte für diedosing_logs-Tabelle (RLS-geschützt). - Risiko-Overlay: Unter
/account/riskwird ein automatisches Harm-Reduction-Overlay berechnet:- Stack Counter (Stimulanzien, Opioide, GABAerg, Cannabis, Nikotin)
- Kreuz-Kategorie-Warnungen (z.B. Opioid + GABAerg → Atemdepression)
- Rebound-Zeitfenster
- Notfall-Hinweise (Red Flags)
- Demo-Modus:
/account/risk?demo=1lädt Beispieldaten zum Testen.
# SQL-Migration anwenden (Supabase CLI)
supabase db push
# oder manuell: supabase/migrations/00017_dosing_logs_and_profile_trigger.sql| Variable | Beschreibung |
|---|---|
NEXT_PUBLIC_SITE_URL |
Site URL für Auth-Redirects (dev: http://localhost:3000, prod: https://synapedia.com) |
NEXT_PUBLIC_SUPABASE_URL |
Supabase Projekt-URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase Anon Key |
SUPABASE_SERVICE_ROLE_KEY |
Supabase Service Role Key (serverseitig) |
In der Supabase Console unter Authentication → URL Configuration:
| Setting | Wert |
|---|---|
| Site URL | https://synapedia.com |
| Redirect URLs | https://synapedia.com/auth/callback, https://synapedia.com/auth/login, http://localhost:3000/auth/callback, http://localhost:3000/auth/login |
Die kanonische Systemarchitektur für Synapedia ist dokumentiert in:
| Dokument | Beschreibung |
|---|---|
docs/system-brain.md |
Canonical architecture reference — Domänen, DB-Schema, Datenflüsse, bekannte Schwachstellen, AI-Agent-Regeln |
docs/system-brain.json |
Machine-readable companion (Tabellen, Workflows, Page→DataSource Map) |
docs/SYNAPEDIA_BRAIN.md |
Brain-Loop Deep-Dive (OBSERVE→PLAN→ACT→VERIFY→APPLY) |
docs/NEUROCODEX_ARCHITECTURE.md |
Neurocodex entity & evidence-scoring system |
docs/pipeline.md |
Enrichment pipeline CLI reference |
docs/tripreports.md |
Trip reports pipeline (Reddit → structured) |
src/lib/system-map/definition.ts |
Maschinenlesbarer System-Graph (Nodes + Edges) für /admin/system |
AI-Agenten und neue Entwickler sollten
docs/system-brain.mdals erste Anlaufstelle für Architektur-, Schema- und Datenflussfragen lesen.
MIT
Users can register via Registrieren button in the header or navigate to /auth/signup. Login is at /auth/login. After registration, email confirmation may be required (configurable in Supabase dashboard).
Auth pages use Supabase Auth (signUp, signInWithPassword). User profiles are stored in user_profiles with an auto-insert trigger on auth.users.
Apply the dosing logs migration:
# Via Supabase CLI (if linked to a project)
supabase db push
# Or manually via Supabase SQL Editor:
# Run the contents of supabase/migrations/00017_dosing_logs_and_profile_trigger.sqlThe migration creates:
dosing_logstable with RLS (user can CRUD only their own rows)- Indexes on
(user_id, taken_at DESC)and(substance) - Auto-insert trigger on
auth.usersto createuser_profilesrows
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
For live mode | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
For live mode | Supabase anonymous key |
SUPABASE_SERVICE_ROLE_KEY |
For server-side | Supabase service role key |
ADMIN_TOKEN |
Optional | Protects /admin panel |
Demo mode (no Supabase) works for public pages. Auth features require Supabase credentials.
- Navigate to
/account/risk?demo=1to see the demo analysis - The demo loads test data: Phenibut (800 mg oral), α-PVP (vaporized), 2-MAP-237 (60 mg), Kratom (5 g oral)
- The overlay shows: overall risk level, stack counters per substance category, cross-category warnings (respiratory depression, masking), rebound timeline, red flags, and disclaimers
For authenticated users: add entries via /account/logs, then visit /account/risk to generate a real analysis from the last 24 hours.
POST /api/dosing-logs— Create a dosing log entry (requires auth)GET /api/dosing-logs?from=...&to=...— List dosing logs with optional date filters (requires auth)
Diese Plattform wurde ausschließlich zu Bildungs- und Forschungszwecken entwickelt. Die bereitgestellten Informationen ersetzen keine professionelle medizinische Beratung. Die Inhalte enthalten keine Konsumanleitungen, Dosierungsempfehlungen oder Beschaffungshinweise.