Ein moderner, stylischer Paste-Service mit Matrix-UI
Code teilen, Wissen verbreiten – schnell, sicher und mit Stil.
| Feature | Beschreibung |
|---|---|
| 🎨 Syntax-Highlighting | Serverseitiges Highlighting mit Shiki für 100+ Sprachen |
| 🔐 Discord OAuth | Login über Discord mit next-auth – inkl. Profilbild-Integration |
| 📝 Paste-Verwaltung | Erstellen, Bearbeiten, Löschen – mit Owner-Schutz für eingeloggte Nutzer |
| 🔢 Zeilennummern | Ein-/ausblendbare Zeilennummern im Code-Viewer |
| 📋 Copy / Download / Share | Code kopieren, als Datei herunterladen oder Link teilen – alles mit einem Klick |
| ⌨️ Keyboard Shortcuts | Ctrl+Enter zum schnellen Erstellen eines Pastes |
| 🔍 Filter & Sortierung | Pastes nach Sprache filtern und nach Datum/Beliebtheit sortieren |
| 🛡️ Report-System | Pastes melden – mit Moderationsstatus und Admin-Modell |
| 🌐 REST API | Versionierte API unter /api/v1 mit Bearer-Token-Auth |
| 🤖 Discord Bot Integration | Shared-Secret Endpoints für Account-Resolution und Uploads im Namen eines Discord-Users |
| 📊 Dashboard | Persönliches Dashboard mit Stats, Paste-Übersicht und API-Token-Verwaltung |
| 🔔 Toast-Benachrichtigungen | Animierte Feedback-Meldungen für alle Aktionen |
| 🌑 Matrix-UI | Dunkles, kompaktes Design mit Glow-Effekten und Glassmorphism |
| Homepage | Dashboard |
|---|---|
| Paste-Erstellung mit Live-Preview | Stats, Profil & Paste-Verwaltung |
| Paste-Ansicht | API-Docs |
|---|---|
| Syntax-Highlighting mit Code-Tools | Interaktive API-Dokumentation |
- Node.js ≥ 18
- MySQL ≥ 8.0
- Discord Application (Developer Portal)
# Repository klonen
git clone https://github.com/dein-user/starpaste.git
cd starpaste
# Abhängigkeiten installieren
npm install
# Umgebungsvariablen einrichten
cp .env.example .env.localBearbeite .env.local mit deinen Zugangsdaten:
# Datenbank
DATABASE_URL=mysql://user:password@localhost:3306/starpaste
# Auth
NEXTAUTH_URL=http://localhost:3000
AUTH_SECRET=dein-geheimer-schluessel
# Discord OAuth
AUTH_DISCORD_ID=deine-discord-app-id
AUTH_DISCORD_SECRET=dein-discord-app-secret
# Admin (kommagetrennte Discord User IDs)
ADMIN_DISCORD_IDS=123456789,987654321
# Discord Bot Integration
DISCORD_INTEGRATION_SECRET=lange-zufaellige-secret-zeichenketteFüge im Discord Developer Portal diese Redirect-URIs hinzu:
http://localhost:3000/api/auth/callback/discord
# Development
npm run dev
# Production
npm run build
npm start💡 Tipp: StarPaste erstellt die Datenbank und alle Tabellen automatisch beim ersten Start. Schema-Änderungen werden automatisch nachgezogen.
StarPaste verwaltet sein Schema vollautomatisch:
- 🏗️ Datenbank wird automatisch angelegt, falls sie nicht existiert
- 📐 Fehlende Tabellen, Spalten, Indizes und Foreign Keys werden beim ersten Zugriff erstellt
- 🔄 Schema-Drift wird regelmäßig geprüft und additive Abweichungen automatisch korrigiert
- ♻️ Der Schema-Sync ist idempotent und darf auf jedem Request laufen (intern gedrosselt)
Optionales Referenzschema: mysql/schema.sql
Die öffentliche StarPaste API liegt unter /api/v1.
| Methode | Endpoint | Beschreibung |
|---|---|---|
GET |
/api/v1/pastes |
Alle öffentlichen Pastes abrufen |
POST |
/api/v1/pastes |
Neuen Paste erstellen |
GET |
/api/v1/pastes/:id |
Einzelnen Paste abrufen |
PATCH |
/api/v1/pastes/:id |
Paste bearbeiten |
POST |
/api/v1/pastes/:id/report |
Paste melden |
POST |
/api/v1/integrations/discord/accounts/resolve |
Discord-User einem StarPaste-Account zuordnen |
POST |
/api/v1/integrations/discord/pastes |
Upload im Namen eines Discord-Users als Paste speichern |
curl -H "Authorization: Bearer DEIN_API_TOKEN" \
http://localhost:3000/api/v1/pastesDiscord-Bot-Integrationen nutzen stattdessen ein Shared Secret:
curl -X POST \
-H "Authorization: Bearer DISCORD_INTEGRATION_SECRET" \
-H "Content-Type: application/json" \
http://localhost:3000/api/v1/integrations/discord/accounts/resolve- 🔑 Bearer Token erforderlich (erstelle Tokens im Dashboard nach Discord-Login)
- 📊 Jeder API-Request wird am Token protokolliert
- 🌍
languageist optional – bei Code wird sie automatisch erkannt - 📄 Bei
logundnotewird intern immer Plain-Text verwendet - 🏷️ API-erstellte Pastes müssen
attribution.nameundattribution.urlenthalten - 🔗 Integrationen müssen
Powered by StarPaste APIsichtbar anzeigen und auf StarPaste verlinken - 🤖 Die Discord-Integration legt Accounts per
discord_idautomatisch an und speichert Uploads direkt im späteren Nutzerkonto
Der Discord-Flow ist für vertrauenswürdige Bots gedacht, die im Auftrag eines Discord-Users hochladen. Wenn sich derselbe User später per Discord-Login anmeldet, sieht er diese Uploads direkt im eigenen Dashboard.
Account auflösen oder anlegen:
curl -X POST http://localhost:3000/api/v1/integrations/discord/accounts/resolve \
-H "Authorization: Bearer DISCORD_INTEGRATION_SECRET" \
-H "Content-Type: application/json" \
-d '{"user":{"id":"123456789012345678","username":"emin","displayName":"emin"}}'Langen Upload oder Log im Namen des Users speichern:
curl -X POST http://localhost:3000/api/v1/integrations/discord/pastes \
-H "Authorization: Bearer DISCORD_INTEGRATION_SECRET" \
-H "Content-Type: application/json" \
-d '{"user":{"id":"123456789012345678","username":"emin"},"message":{"filename":"latest.log","deleteOriginal":true},"paste":{"content":"[INFO] boot ok\n[ERROR] redis timeout"}}'Die Response enthält:
accountmit lokalem User-Mapping und Login-/Dashboard-Linkspastemit dem frisch erstellten PastebotActions.deleteOriginal,botActions.pasteUrlundbotActions.replyTextfür den Discord-Bot-Flow
📖 Vollständige API-Dokumentation:
/api-docs
| Technologie | Verwendung |
|---|---|
| Next.js 16 | React-Framework mit App Router & Turbopack |
| TypeScript 5 | Type-Safety im gesamten Projekt |
| Tailwind CSS 4 | Utility-First Styling |
| MySQL 8 | Relationale Datenbank für Pastes, User & Reports |
| Shiki | Serverseitiges Syntax-Highlighting |
| next-auth | Discord OAuth & Session-Management |
| Lucide | Icon-Library |
| Zod | Schema-Validierung |
starpaste/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/ # API Routes (intern + v1)
│ │ ├── dashboard/ # Dashboard-Seite
│ │ ├── paste/[id]/ # Paste-Detailseite
│ │ ├── login/ # Discord Login-Seite
│ │ ├── admin/ # Admin-Bereich
│ │ ├── api-docs/ # API-Dokumentation
│ │ ├── impressum/ # Impressum
│ │ ├── datenschutz/ # Datenschutz
│ │ ├── kontakt/ # Kontakt
│ │ ├── layout.tsx # Root Layout
│ │ ├── page.tsx # Homepage
│ │ └── globals.css # Globale Styles
│ ├── components/ # React-Komponenten
│ │ ├── code-surface.tsx # Code-Viewer mit Tools
│ │ ├── create-paste-form.tsx
│ │ ├── edit-paste-form.tsx
│ │ ├── select-control.tsx # Custom Dropdown
│ │ ├── custom-select.tsx # Filter Dropdown
│ │ ├── paste-filters.tsx # Filter-Leiste
│ │ ├── toast.tsx # Toast-System
│ │ └── ...
│ ├── lib/ # Utilities & Backend-Logik
│ └── types/ # TypeScript Types
├── mysql/ # SQL Schema
├── public/ # Statische Assets
└── next.config.ts # Next.js Konfiguration
- Anonymous-Pastes sind absichtlich read-only
- Accountgebundene Pastes können über die Detailseite bearbeitet werden
- API-erstellte Pastes werden sichtbar als solche markiert
- Das Moderationsmodell ist vorbereitet für Admin-Views, Locks und Hidden-Flows
- Aktuell gibt es keine Rate Limits für die API
Privates Projekt – alle Rechte vorbehalten.
Built with ❤️ and ☕ using Next.js 16