Admin-Handbuch
Schritt-für-Schritt Anleitung für neue Board-Admins – von der Registrierung bis zum täglichen Betrieb.
1. Einstieg & Registrierung
Ideenkiste ist eine Multi-Tenant-Plattform. Jedes Unternehmen betreibt ein eigenes, isoliertes Board unter einer eigenen URL (ideenkiste.app/org/dein-name). Als Board-Admin hast du vollen Zugriff auf alle Verwaltungsfunktionen deines Boards.
2. Admin-Panel: Überblick
Das Admin-Panel erreichst du über /org/[slug]/admin. Die linke Navigation enthält folgende Bereiche:
| Bereich | Zweck |
|---|---|
| Dashboard | Kennzahlen auf einen Blick: Vorschläge, Nutzer, Status-Verteilung, Top-Ideen |
| Vorschläge | Alle Vorschläge verwalten, Status setzen, Bulk-Aktionen |
| Moderation | Eingehende Vorschläge prüfen, freigeben oder ablehnen |
| Kategorien | Themengruppen anlegen und umbenennen |
| Audit-Log | Alle Admin-Aktionen nachvollziehen |
| Mitglieder | Team einladen, Rollen vergeben, Nutzer sperren |
| Einstellungen | Board-Name, URL, Farbe, Standardansicht, Pro-Features |
3. Vorschläge verwalten
Unter Vorschläge siehst du alle eingereichten Ideen deines Boards – inklusive Autor, Votes, Status und Datum. Von hier aus steuerst du den gesamten Feedback-Prozess.
Status setzen
Jeder Vorschlag hat einen Status, der deiner Community zeigt, wie es weitergeht:
Du kannst den Status direkt in der Listenansicht per Dropdown ändern oder über die Detailseite eines Vorschlags. Nutzer, die abgestimmt oder kommentiert haben, erhalten bei Statusänderungen automatisch eine E-Mail-Benachrichtigung.
Bulk-Aktionen
Detailseite eines Vorschlags
Klicke auf einen Vorschlag, um die Detailseite zu öffnen. Dort kannst du:
- Titel, Beschreibung, Kategorie und Status bearbeiten (Strg+S zum Speichern)
- Eine interne Admin-Notiz hinterlegen (nur für Admins sichtbar)
- Vorschläge zusammenführen (Merge): Doppelte Ideen in einen Vorschlag zusammenführen; Votes werden addiert
- Vorschlag löschen (nach Bestätigung)
- Kommentare lesen und schreiben
4. Moderations-Queue
Wenn du dein Board auf „Neue Vorschläge prüfen" gestellt hast (oder Spam-Schutz aktiv ist), landen neue Einreichungen zunächst in der Moderations-Queue und sind öffentlich nicht sichtbar.
- Freigeben – Vorschlag wird öffentlich sichtbar
- Spam markieren – Vorschlag wird still abgelehnt
- Nutzer sperren – Nutzer kann keine neuen Inhalte mehr einreichen
5. Kategorien
Kategorien helfen deinen Nutzern, Vorschläge thematisch einzuordnen. Lege sie an, bevor du dein Board öffentlich machst.
6. Mitglieder & Rollen
Lade Teammitglieder ein, damit sie dir bei der Verwaltung helfen können.
Rollen
| Rolle | Berechtigungen |
|---|---|
| Admin | Volles Zugriffsrecht auf alle Admin-Funktionen des Boards |
| Mitglied | Kann Vorschläge einreichen, abstimmen und kommentieren; kein Admin-Zugriff |
Mitglied einladen
Mitglied entfernen oder sperren
Klicke in der Mitglieder-Tabelle auf das Menü rechts neben dem Eintrag:
- Rolle ändern: Dropdown in der Spalte „Rolle" – sofort wirksam
- Entfernen: Entfernt die Mitgliedschaft; die Inhalte der Person bleiben erhalten
- Sperren/Entsperren: Gesperrte Nutzer können sich nicht mehr anmelden (nur Super-Admin)
7. Einstellungen
Unter Einstellungen passt du das Erscheinungsbild und Verhalten deines Boards an.
Allgemein
- Board-Name: Der angezeigte Name deines Boards (z. B. der Firmenname)
- Board-URL (Slug): Die eindeutige URL-Kennung. Nach einer Änderung leitet die alte URL nicht mehr weiter – informiere deine Nutzer.
- Öffentlich / Privat: Öffentliche Boards sind ohne Login sichtbar. Private Boards erfordern eine Mitgliedschaft.
Design
- Primärfarbe: Wähle eine der vordefinierten Farben oder gib einen Hex-Code ein (z. B.
#0ea5e9). Die Farbe gilt für Buttons, Links und Akzente im gesamten Board. - Standardansicht: Lege fest, ob Nutzer beim Öffnen des Boards den Feed (Listenansicht) oder die Roadmap sehen.
Pro-Features Pro
- Custom Domain: Betreibe dein Board unter deiner eigenen Domain (siehe Abschnitt 15 für die DNS-Einrichtung)
- White-Label: Blendet das Ideenkiste-Branding aus
Premium-Features Premium
- API-Token: Externe Anwendungen direkt mit deinem Board verbinden (siehe Abschnitt 11)
- Webhooks: Sendet HTTP-Events bei Statusänderungen an externe Systeme (siehe Abschnitt 12)
8. Roadmap & Status kommunizieren
Die Roadmap ist die öffentliche Ansicht, die deinen Nutzern zeigt, welche Ideen ihr umsetzen wollt. Vorschläge mit dem Status Geplant, In Bearbeitung oder Fertig erscheinen automatisch in den entsprechenden Spalten der Roadmap.
Offizielle Updates posten
Als Admin kannst du auf der Detailseite eines Vorschlags einen Kommentar als Offizielles Update markieren. Dieser wird optisch hervorgehoben und signalisiert Nutzern, dass du persönlich Stellung nimmst.
9. Audit-Log
Der Audit-Log zeichnet alle Admin-Aktionen lückenlos auf. Er ist nur für Admins einsehbar und nicht veränderbar.
Jeder Eintrag enthält: die ausgeführte Aktion, den ausführenden Admin, das betroffene Objekt (Vorschlag oder Nutzer) und den Zeitstempel. Nutze den Log, um nachzuvollziehen:
- Wer einen Vorschlag freigegeben oder abgelehnt hat
- Wer einen Nutzer gesperrt oder entsperrt hat
- Wer eine Rolle geändert hat
- Wann und von wem ein Merge durchgeführt wurde
10. Plan-Limits & Upgrade
Im Free Plan gelten folgende Limits für dein Board. Pro hebt die Limits auf, Premium fügt zusätzlich API-Token und Webhooks hinzu.
| Ressource | Free | Pro | Premium |
|---|---|---|---|
| Vorschläge pro Board | 50 | Unbegrenzt | Unbegrenzt |
| Mitglieder pro Board | 25 | Unbegrenzt | Unbegrenzt |
| Custom Domain | – | ✓ | ✓ |
| White-Label | – | ✓ | ✓ |
| API-Token | – | – | ✓ |
| Webhooks | – | – | ✓ |
Wenn du ein Limit erreichst, erscheint eine entsprechende Meldung. Du kannst jederzeit auf den Pro Plan (29 €/Monat) oder den Premium Plan (59 €/Monat) upgraden – jeweils zzgl. MwSt.
11. API-Token & Automatisierung
Mit API-Token kannst du externe Anwendungen, Skripte oder Integrationen (z. B. Zapier, Make, eigene Tools) mit deinem Board verbinden – ohne dein Passwort zu teilen. Premium
402 Plan limit reached.Token erstellen
Token verwenden
Füge den Token als Authorization-Header in deine API-Anfragen ein:
curl https://ideenkiste.app/org/DEIN-SLUG/api/suggestions \ -H "Authorization: Bearer ikt_deintoken"
Verfügbare Endpunkte
| Methode & Pfad | Beschreibung |
|---|---|
| GET /api/suggestions | Vorschläge auflisten (paginiert, filterbar) |
| POST /api/suggestions | Neuen Vorschlag erstellen |
| GET /api/suggestions/:id | Einzelnen Vorschlag abrufen |
| PATCH /api/suggestions/:id | Vorschlag aktualisieren (inkl. Status) |
| POST /api/suggestions/:id/vote | Abstimmung ein-/ausschalten |
| GET /api/suggestions/:id/comments | Kommentare eines Vorschlags |
| POST /api/suggestions/:id/comments | Kommentar erstellen |
| GET /api/suggestions/roadmap | Roadmap nach Status gruppiert |
| GET /api/widget/:slug/roadmap | Roadmap für iFrame-/Widget-Einbettungen (CORS-fähig) |
| GET /api/categories | Kategorien auflisten |
Pfade immer unter /org/DEIN-SLUG/ einhängen.
12. Webhooks (Premium)
Mit Webhooks schickt Ideenkiste bei bestimmten Events automatisch eine HTTP-Anfrage an eine URL deiner Wahl – z. B. um Slack zu benachrichtigen, eine Datenbank zu aktualisieren oder eine Automatisierung in Make / Zapier auszulösen. Premium
Webhook erstellen
Verfügbare Events
| Event | Wann wird er ausgelöst? |
|---|---|
| suggestion.created | Neuer Vorschlag eingereicht |
| suggestion.updated | Titel, Beschreibung oder Kategorie geändert |
| suggestion.status_changed | Status eines Vorschlags geändert (enthält alten Status als previous) |
| suggestion.deleted | Vorschlag gelöscht |
| vote.created | Jemand hat für einen Vorschlag abgestimmt |
| vote.deleted | Abstimmung zurückgezogen |
| comment.created | Neuer öffentlicher Kommentar (Admin-Notizen werden nicht gefeuert) |
| comment.deleted | Kommentar gelöscht |
| member.invited | Einladung an ein neues Mitglied verschickt |
| member.removed | Mitglied aus dem Board entfernt |
Payload-Struktur
Jede Anfrage ist ein HTTP POST mit Content-Type: application/json. Das JSON-Objekt hat folgende Struktur:
{
"id": "evt_01j...",
"event": "suggestion.status_changed",
"timestamp": "2025-05-03T10:23:00.000Z",
"organization": {
"id": "org_...",
"name": "Meine Firma",
"slug": "meine-firma"
},
"data": { /* Event-spezifische Daten */ },
"previous": { "status": "OPEN" } // nur bei status_changed
}Signatur prüfen
Jede Anfrage enthält den Header X-Webhook-Signature: sha256=.... Er ist ein HMAC-SHA256-Hash über den rohen Request-Body, berechnet mit deinem Secret. Verifiziere ihn serverseitig, um sicherzustellen, dass die Anfrage wirklich von Ideenkiste stammt:
// Node.js / TypeScript
import crypto from 'crypto';
function verifySignature(body: string, secret: string, header: string) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(header)
);
}
// body = req.rawBody als String (NICHT geparst)
// header = req.headers['x-webhook-signature']crypto.timingSafeEqual für den Vergleich – ein normales === ist anfällig für Timing-Angriffe.Delivery-Verlauf & Retry
Unter Admin → Webhooks → Details siehst du den vollständigen Versandverlauf: HTTP-Statuscode, Antwortzeit, Anzahl der Versuche und die Serverantwort. Bei Fehlern versucht Ideenkiste es automatisch noch bis zu dreimal (5 s → 30 s → 5 min). Du kannst fehlgeschlagene Deliveries auch manuell per Retry erneut auslösen.
test: true-Flag im Payload.13. Zapier & Make Integration
Zapier und Make (früher Integromat) sind die zwei populärsten No-Code-Automatisierungsplattformen. In Kombination mit den Premium-Webhooks von Ideenkiste kannst du dein Board ohne eine Zeile Code an mehrere hundert Drittsysteme anbinden – von Slack über Jira bis zu Google Sheets.Premium
13.1 Zapier Integration
Mit Zapier verbindest du Ideenkiste in wenigen Minuten mit über 6.000 anderen Apps. Pro Webhook reicht ein einzelner Zap.
Schritt für Schritt
Screenshot: Zapier-Dashboard mit hervorgehobenem 'Create Zap'-Button oben links.
Screenshot: App-Auswahl im Trigger-Schritt mit eingegebenem Suchbegriff 'Webhooks by Zapier'.
Screenshot: Event-Auswahl 'Catch Hook' in Webhooks by Zapier.
https://hooks.zapier.com/hooks/catch/123456/abcde/). Kopiere sie.Screenshot: Generierte Custom-Webhook-URL mit Copy-Button daneben.
Screenshot: Ideenkiste-Formular 'Neuer Webhook' mit eingefügter Zapier-URL.
Screenshot: Zapier-Trigger-Schritt mit empfangener Testanfrage und Klick auf 'Continue with selected record'.
Beispiel-Workflows
Neuer Vorschlag → Slack-Nachricht
Sobald ein Nutzer einen neuen Vorschlag einreicht, wird automatisch eine Nachricht im Slack-Kanal #produkt-feedback gepostet.
Zapier-Setup
- Trigger: Webhooks by Zapier → Catch Hook
- (Optional) Filter: Only continue if… →
eventexactly matchessuggestion.created - Action: Slack → Send Channel Message
- Channel:
#produkt-feedback - Message text:
*Neuer Vorschlag von {{data__author__name}}* > {{data__title}} {{data__description}} <{{data__url}}|Im Board ansehen>
Erwarteter Payload
{
"id": "evt_01j7...",
"event": "suggestion.created",
"timestamp": "2026-05-12T09:14:22.000Z",
"organization": {
"id": "org_01j...",
"name": "Meine Firma",
"slug": "meine-firma"
},
"data": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap",
"description": "Wäre für lange Sessions am Abend sehr angenehm.",
"status": "OPEN",
"category": "Feature-Wunsch",
"voteCount": 0,
"author": {
"id": "usr_01j...",
"name": "Lara Schmitt",
"email": "lara@example.com"
},
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
}
}Status geändert → Jira-Ticket aktualisieren
Wenn der Status eines Vorschlags auf In Bearbeitung oder Fertig wechselt, wird das verknüpfte Jira-Ticket automatisch aktualisiert. Die Jira-Ticket-Nummer wird aus der internen Admin-Notiz extrahiert.
Zapier-Setup
- Trigger: Webhooks by Zapier → Catch Hook
- Filter:
eventexactly matchessuggestion.status_changed - Filter:
data__statusis one ofIN_PROGRESS,DONE - Action: Jira Software Cloud → Update Issue
Feldmapping
| Ideenkiste-Feld | Jira-Feld | Transformation |
|---|---|---|
| data.adminNote | Issue Key | Regex-Match [A-Z]+-\d+ |
| data.status | Status / Workflow | IN_PROGRESS → „In Progress", DONE → „Done" |
| data.title | Summary | unverändert übernehmen |
| data.url | Description (anfügen) | „Quelle: {url}" |
| data.voteCount | Custom Field „Votes" | als Zahl |
| previous.status | Kommentar | „Wechsel von {previous} zu {data.status}" |
Neuer Kommentar → E-Mail ans Team
Bei neuen Kommentaren auf Vorschlägen mit Status Geplant oder In Bearbeitungwird eine E-Mail an das Produkt-Team verschickt. Kommentare auf Offen- oder Abgelehnt- Vorschlägen werden bewusst gefiltert, um Rauschen zu vermeiden.
Zapier-Setup
- Trigger: Webhooks by Zapier → Catch Hook
- Filter A:
eventexactly matchescomment.created - Filter B (Boolean OR):
data__suggestion__statusexactly matchesPLANNEDdata__suggestion__statusexactly matchesIN_PROGRESS
- Action: Gmail → Send Email (oder Email by Zapier)
- To:
produkt@firma.de - Subject:
Neuer Kommentar: {{data__suggestion__title}} - Body:
{{data__author__name}} hat einen neuen Kommentar geschrieben: "{{data__content}}" Vorschlag: {{data__suggestion__title}} Status: {{data__suggestion__status}} Link: {{data__suggestion__url}}
13.2 Make (Integromat) Integration
Make bietet vergleichbare Funktionen wie Zapier, ist aber häufig günstiger und bietet visuelle Szenarien mit beliebig vielen Routen. Statt Zaps sprichst du hier von Scenarios, statt eines Catch Hook-Triggers nutzt du das Modul Webhooks → Custom Webhook.
Schritt für Schritt
Screenshot: Make-Dashboard mit hervorgehobenem 'Create a new scenario'-Button oben rechts.
Screenshot: Modul-Auswahl im neuen Scenario mit eingegebenem Suchbegriff 'Webhooks'.
Screenshot: Trigger-Auswahl 'Custom Webhook' und Add-Dialog mit Namensfeld.
https://hook.eu2.make.com/abc123…). Klicke auf Copy address to clipboard.Screenshot: Make-Dialog mit der generierten Webhook-Adresse und Copy-Button.
Screenshot: Make-Webhook-Modul nach erfolgreichem Test mit erkanntem JSON-Schema.
Beispiel-Workflows
Neuer Vorschlag → Slack-Nachricht
Postet jeden neuen Vorschlag in den Slack-Kanal #produkt-feedback.
Make-Setup
- Modul 1: Webhooks → Custom Webhook
- Modul 2: Flow Control → Filter mit Bedingung
event = suggestion.created - Modul 3: Slack → Create a Message
- Channel:
#produkt-feedback - Text (mit Make-Mapping-Bubbles):
*Neuer Vorschlag von {{1.data.author.name}}* > {{1.data.title}} {{1.data.description}} <{{1.data.url}}|Im Board ansehen>
Erwarteter Payload
{
"id": "evt_01j7...",
"event": "suggestion.created",
"timestamp": "2026-05-12T09:14:22.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap",
"description": "Wäre für lange Sessions am Abend sehr angenehm.",
"status": "OPEN",
"category": "Feature-Wunsch",
"voteCount": 0,
"author": { "name": "Lara Schmitt", "email": "lara@example.com" },
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
}
}Status geändert → Jira-Ticket aktualisieren
Aktualisiert das verknüpfte Jira-Ticket, sobald ein Vorschlag auf In Bearbeitung oder Fertig wechselt. Der Jira-Issue-Key wird aus der internen Admin-Notiz extrahiert.
Make-Setup
- Modul 1: Webhooks → Custom Webhook
- Filter (Modul 1 → Modul 2):
event = suggestion.status_changedUNDdata.status in [IN_PROGRESS, DONE] - Modul 2: Tools → Set variable für
jiraKeymit{{ match(1.data.adminNote; "[A-Z]+-\d+") }} - Modul 3: Jira Cloud → Update an Issue, Issue Key =
{{2.jiraKey}}
Feldmapping
| Ideenkiste (Webhook) | Jira-Feld | Make-Ausdruck |
|---|---|---|
| data.adminNote | Issue Key | {{ match(1.data.adminNote; "[A-Z]+-\d+") }} |
| data.status | Workflow Transition | {{ if(1.data.status = "DONE"; "Done"; "In Progress") }} |
| data.title | Summary | {{1.data.title}} |
| data.voteCount | Custom Field „Votes" | {{1.data.voteCount}} |
| previous.status | Add Comment | Wechsel von {{1.previous.status}} zu {{1.data.status}} |
Neuer Kommentar → E-Mail ans Team
Sendet eine E-Mail nur dann, wenn der zugehörige Vorschlag im Status Geplant oder In Bearbeitung ist – sonst würde das Team bei jedem Kommentar auf einem alten Vorschlag benachrichtigt.
Make-Setup
- Modul 1: Webhooks → Custom Webhook
- Filter:
event = comment.createdUNDdata.suggestion.status in [PLANNED, IN_PROGRESS] - Modul 2: Email → Send an Email
- To:
produkt@firma.de - Subject:
Neuer Kommentar: {{1.data.suggestion.title}} - Content (HTML):
<p><strong>{{1.data.author.name}}</strong> hat einen neuen Kommentar geschrieben:</p> <blockquote>{{1.data.content}}</blockquote> <p> Vorschlag: <strong>{{1.data.suggestion.title}}</strong><br> Status: <code>{{1.data.suggestion.status}}</code><br> <a href="{{1.data.suggestion.url}}">Im Board ansehen</a> </p>
13.3 Webhook Payload-Referenz
Alle Events folgen derselben Umschlagsstruktur (id, event, timestamp, organization, data) – nur das data-Objekt unterscheidet sich pro Event-Typ. Klappe die jeweiligen Blöcke auf, um den vollständigen JSON-Payload für das Mapping in Zapier oder Make zu sehen.
| Event | Wichtigste Felder im data-Objekt |
|---|---|
| suggestion.created | id, title, description, status, category, voteCount, author, url |
| suggestion.updated | id, title, description, category, url + previous |
| suggestion.status_changed | id, title, status, url + previous.status |
| suggestion.deleted | id, title |
| vote.created | suggestion, voter, voteCount |
| vote.deleted | suggestion, voter, voteCount |
| comment.created | id, content, author, suggestion (id, title, status, url) |
| comment.deleted | id, suggestion |
| member.invited | email, role, invitedBy |
| member.removed | userId, email, removedBy |
suggestion.created
{
"id": "evt_01j7abc...",
"event": "suggestion.created",
"timestamp": "2026-05-12T09:14:22.000Z",
"organization": {
"id": "org_01j...",
"name": "Meine Firma",
"slug": "meine-firma"
},
"data": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap",
"description": "Wäre für lange Sessions am Abend sehr angenehm.",
"status": "OPEN",
"category": "Feature-Wunsch",
"voteCount": 0,
"author": {
"id": "usr_01j...",
"name": "Lara Schmitt",
"email": "lara@example.com"
},
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
}
}suggestion.updated
{
"id": "evt_01j...",
"event": "suggestion.updated",
"timestamp": "2026-05-12T10:02:00.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"id": "sug_01j...",
"title": "Dark Mode für Roadmap und Feed",
"description": "Wäre für lange Sessions sehr angenehm – bitte auch für den Feed.",
"category": "Feature-Wunsch",
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
},
"previous": {
"title": "Dark Mode für die Roadmap",
"description": "Wäre für lange Sessions am Abend sehr angenehm.",
"category": "Feature-Wunsch"
}
}suggestion.status_changed
{
"id": "evt_01j...",
"event": "suggestion.status_changed",
"timestamp": "2026-05-12T11:24:00.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap",
"status": "IN_PROGRESS",
"voteCount": 18,
"adminNote": "FEED-432 angelegt, geplant für Sprint 26.",
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
},
"previous": {
"status": "PLANNED"
}
}suggestion.deleted
{
"id": "evt_01j...",
"event": "suggestion.deleted",
"timestamp": "2026-05-12T12:00:00.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap"
}
}vote.created
{
"id": "evt_01j...",
"event": "vote.created",
"timestamp": "2026-05-12T09:18:11.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"suggestion": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap",
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
},
"voter": {
"id": "usr_01j...",
"name": "Jan Berger",
"email": "jan@example.com"
},
"voteCount": 1
}
}vote.deleted
{
"id": "evt_01j...",
"event": "vote.deleted",
"timestamp": "2026-05-12T09:25:42.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"suggestion": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap",
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
},
"voter": {
"id": "usr_01j...",
"name": "Jan Berger",
"email": "jan@example.com"
},
"voteCount": 0
}
}comment.created
{
"id": "evt_01j...",
"event": "comment.created",
"timestamp": "2026-05-12T11:30:00.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"id": "cmt_01j...",
"content": "Danke für das Update – freue mich!",
"author": {
"id": "usr_01j...",
"name": "Lara Schmitt",
"email": "lara@example.com"
},
"suggestion": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap",
"status": "IN_PROGRESS",
"url": "https://ideenkiste.app/org/meine-firma/suggestions/sug_01j..."
}
}
}comment.deleted
{
"id": "evt_01j...",
"event": "comment.deleted",
"timestamp": "2026-05-12T11:45:00.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"id": "cmt_01j...",
"suggestion": {
"id": "sug_01j...",
"title": "Dark Mode für die Roadmap"
}
}
}member.invited
{
"id": "evt_01j...",
"event": "member.invited",
"timestamp": "2026-05-12T08:00:00.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"email": "neuer-kollege@firma.de",
"role": "ADMIN",
"invitedBy": {
"id": "usr_01j...",
"name": "Max Mustermann",
"email": "max@firma.de"
}
}
}member.removed
{
"id": "evt_01j...",
"event": "member.removed",
"timestamp": "2026-05-12T14:10:00.000Z",
"organization": { "id": "org_01j...", "name": "Meine Firma", "slug": "meine-firma" },
"data": {
"userId": "usr_01j...",
"email": "ehemalig@firma.de",
"removedBy": {
"id": "usr_01j...",
"name": "Max Mustermann",
"email": "max@firma.de"
}
}
}category wenn keine Kategorie gesetzt ist oder adminNote wenn die interne Notiz leer ist). Plane deine Filter und Mappings entsprechend defensiv.14. Widget & iFrame
Du kannst dein Board direkt in deine eigene Website einbetten – entweder per JavaScript-Widget (Floating-Button mit Modal) oder per iFrame. Beide Varianten sind im Free-Plan verfügbar; im Pro-Plan kommen Domain-Whitelist und das Ausblenden des „Powered by"-Badges hinzu.
Den passenden Code generierst du im Admin-Bereich unter Admin → Widget – inklusive Live-Vorschau und Copy-Button.
Variante 1: JavaScript-Widget (empfohlen)
Das Widget ist ein einzelnes, ca. 2 KB großes JS-Bundle, das einen Floating-Button und ein Modal mit deinem Board ins Shadow DOM rendert – die Styles deiner Website können das Widget also nicht beeinflussen.
<script src="https://ideenkiste.app/widget/widget.js" data-board="dein-slug" data-theme="auto" data-lang="de" data-position="bottom-right" data-primary-color="#4f46e5" data-button-text="Idee einreichen" async></script>
Konfigurations-Attribute
| Attribut | Default | Bedeutung |
|---|---|---|
| data-board | — | Slug deiner Organisation (Pflicht). |
| data-theme | auto | light · dark · auto (folgt prefers-color-scheme). |
| data-lang | de | de · en. |
| data-position | bottom-right | bottom-right · bottom-left. |
| data-primary-color | #4f46e5 | Hex-Farbe des Floating-Buttons. |
| data-button-text | Idee einreichen | Beschriftung des Floating-Buttons. |
| data-hide-button | false | true → kein Button, nur per JS-API steuerbar. |
JavaScript-API
Das Widget legt einen einzigen Global window.Ideenkiste an:
Ideenkiste.open(); // Modal öffnen
Ideenkiste.close(); // schließen
Ideenkiste.toggle(); // togglen
Ideenkiste.setTheme('dark'); // 'light' | 'dark'
// Eingeloggten Nutzer vorausfuellen (verhindert Magic-Link-Schritt)
Ideenkiste.identify({
email: 'max@firma.de',
name: 'Max Mustermann',
});
// Events
Ideenkiste.on('open', () => {});
Ideenkiste.on('close', () => {});
Ideenkiste.on('submitted', (data) => {
// data = { id, title, ... }
});identify() kann auch vor dem Oeffnen aufgerufen werden – die Daten werden gepuffert und an das Widget weitergegeben, sobald das Modal geladen ist.Variante 2: iFrame
Falls du keine zusätzliche Skript-Tag-Anbindung möchtest, kannst du das Board auch direkt als iFrame einbetten:
<iframe src="https://ideenkiste.app/embed/dein-slug" width="100%" height="600" frameborder="0" id="ideenkiste-iframe" style="border-radius:12px;border:1px solid #e5e7eb;" ></iframe>
Optionale Query-Parameter:
?theme=dark– erzwingt Dark-Mode?category=Bug– nur Vorschläge dieser Kategorie?lang=en– englische Oberfläche
Roadmap als iFrame einbetten
Statt der Vorschlagsliste kannst du auch deine öffentliche Roadmap einbetten – drei Spalten Geplant · In Arbeit · Fertig nach Status sortiert. Ideal für „Was kommt als nächstes?"-Seiten oder Changelog-Bereiche deiner Website.
<iframe src="https://ideenkiste.app/embed/dein-slug/roadmap" width="100%" height="700" frameborder="0" id="ideenkiste-roadmap" title="Ideenkiste Roadmap" style="border-radius:12px;border:1px solid #e5e7eb;" ></iframe>
Es gelten dieselben Query-Parameter ?theme=dark und ?lang=en sowie der gleiche Auto-Resize-Mechanismus (ideenkiste:resize). Den fertigen Code generierst du im Admin-Bereich unter Admin → Widget → iFrame über die Ansicht-Auswahl.
Auto-Resize-Helper
Das iFrame meldet seine tatsächliche Höhe über postMessage. Mit ein paar Zeilen JavaScript kannst du den iFrame automatisch mitwachsen lassen:
<script>
window.addEventListener('message', function (e) {
if (e.data && e.data.type === 'ideenkiste:resize') {
var f = document.getElementById('ideenkiste-iframe');
if (f) f.style.height = e.data.data.height + 'px';
}
});
</script>postMessage-Kontrakt
| Richtung | Type | Daten |
|---|---|---|
| iFrame → Parent | ideenkiste:ready | Wird einmal nach dem Laden gesendet. |
| iFrame → Parent | ideenkiste:resize | { height: number } – auto-resize. |
| iFrame → Parent | ideenkiste:submitted | Vorschlag wurde eingereicht. |
| Parent → iFrame | ideenkiste:identify | { email, name } – User vorausfüllen. |
| Parent → iFrame | ideenkiste:setTheme | { theme: 'light' | 'dark' }. |
Domain-Whitelist Pro
Im Pro-Plan kannst du unter Admin → Widget → Erweitert eine Liste erlaubter Hosts hinterlegen. Anfragen aus anderen Domains liefern 403. Subdomains sind automatisch eingeschlossen – ein Eintrag firma.de deckt also auch www.firma.de und app.firma.de mit ab.
„Powered by"-Badge
Im Free-Plan erscheint am unteren Rand der Embed-Ansicht ein dezentes „Powered by Ideenkiste"-Badge. Im Pro-Plan kannst du es unter Admin → Einstellungen → White-Label ausblenden.
15. Custom Domain einrichten
Statt deiner Board-URL ideenkiste.app/org/dein-slug kannst du dein Board unter einer eigenen Domain wie feedback.firma.de betreiben. Pro
Dafür legst du beim Anbieter deiner Domain (z. B. IONOS, Strato, Cloudflare, GoDaddy, …) einen CNAME-Eintrag an, der auf unsere Server zeigt. Sobald der Eintrag aktiv ist, klickst du im Admin-Panel auf „Jetzt prüfen" – wir kümmern uns dann automatisch um TLS-Zertifikat (Let's Encrypt) und Routing.
Was du brauchst
- Ein aktives Pro-Abo für dein Board
- Eine eigene Subdomain, z. B.
feedback.firma.deoderideen.firma.de - Zugriff auf die DNS-Verwaltung bei deinem Domain-Anbieter
Schritt 1 – Domain im Admin-Panel hinterlegen
feedback.firma.de) und klicke Speichern.Schritt 2 – CNAME-Eintrag setzen
Logge dich bei deinem Domain-Anbieter ein und öffne die DNS-Verwaltung für deine Domain. Lege einen neuen Eintrag an:
| Feld | Wert |
|---|---|
| Typ | CNAME |
| Name / Host | feedback (nur der Subdomain-Teil ohne .firma.de) |
| Ziel / Wert | boards.ideenkiste.app |
| TTL | 3600 (1 Stunde) – oder Standard belassen |
feedback.firma.de), andere nur den Subdomain-Teil (feedback). Im Zweifel hilft die Hilfe deines Anbieters. Falls dein Anbieter ein Punkt-Anhängen verlangt, schreibe das Ziel als boards.ideenkiste.app. (mit Punkt am Ende).Schritt 3 – Verifizieren
dig CNAME feedback.firma.de +short # erwartet: boards.ideenkiste.app.
Was nicht unterstützt wird
- Apex-Domain (also
firma.deohne Subdomain). RFC-konforme CNAMEs sind auf der Apex-Ebene nicht erlaubt; nutze stattdessen eine Subdomain wiefeedback.firma.de. Manche Anbieter (Cloudflare, Route 53) bieten ALIAS- oder ANAME-Records an, die das umgehen – das wird derzeit jedoch nicht offiziell unterstützt. - A-Record auf eine feste IP: Bitte ausschließlich CNAME verwenden – sonst kann Ideenkiste das TLS-Zertifikat nicht automatisch ausstellen oder verlängern.
Tägliche Re-Verifikation
Wir prüfen jeden Tag, ob dein CNAME-Eintrag noch korrekt auf boards.ideenkiste.app zeigt. Wird er geändert oder gelöscht, markieren wir die Domain als unverifiziert und schicken dir eine E-Mail – dein Board ist dann nur noch unter der Standard-URL erreichbar, bis der DNS-Eintrag wiederhergestellt ist.
Beispiele bei populären Anbietern
| Anbieter | Wo trägst du den CNAME ein? |
|---|---|
| IONOS | Domains & SSL → Domain auswählen → DNS → Eintrag hinzufügen → Typ CNAME |
| Strato | Paket-Verwaltung → Domain → DNS-Verwaltung → Subdomain anlegen → CNAME-Ziel |
| Cloudflare | DNS → Add record → Type CNAME → Proxy-Status auf „DNS only" (graue Wolke) setzen |
| GoDaddy | Mein Konto → DNS verwalten → Hinzufügen → Typ CNAME |
| All-Inkl | KAS → Domains → DNS Settings → Neuer Eintrag → Typ CNAME |
Häufige Fehler
- „CNAME nicht gefunden": DNS-Eintrag noch nicht propagiert – ein paar Minuten warten und erneut prüfen.
- Domain ist bereits einem anderen Board zugeordnet: Eine Domain kann immer nur ein einziges Board bedienen.
- Browser zeigt Zertifikatsfehler: Erste Ausstellung dauert nach erfolgreicher Verifikation einige Minuten – falls nach 30 Minuten noch ein Fehler erscheint, melde dich bei uns.