Spaces:
Running
Running
Add 2 files
Browse files- index.html +262 -13
- prompts.txt +2 -1
index.html
CHANGED
|
@@ -14,10 +14,19 @@
|
|
| 14 |
.modal {
|
| 15 |
transition: all 0.3s ease;
|
| 16 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
.dark { background-color: #111827; color: #f3f4f6; }
|
| 18 |
.dark .bg-white { background-color: #1f2937 !important; }
|
| 19 |
.dark .text-gray-800 { color: #f3f4f6 !important; }
|
| 20 |
.dark .bg-gray-50 { background-color: #374151 !important; }
|
|
|
|
| 21 |
</style>
|
| 22 |
</head>
|
| 23 |
<body class="bg-gray-50">
|
|
@@ -93,9 +102,9 @@
|
|
| 93 |
</div>
|
| 94 |
|
| 95 |
<!-- Active Workflows -->
|
| 96 |
-
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
| 97 |
<!-- Workflow 1 -->
|
| 98 |
-
<div class="bg-white rounded-xl shadow-md overflow-hidden
|
| 99 |
<div class="bg-indigo-600 text-white px-4 py-3 flex justify-between items-center">
|
| 100 |
<h3 class="font-bold">Datenbereinigung</h3>
|
| 101 |
<span class="bg-white text-indigo-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
@@ -115,7 +124,7 @@
|
|
| 115 |
data-webhook="https://your-n8n-webhook.com/data-cleanup">
|
| 116 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 117 |
</button>
|
| 118 |
-
<button class="flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 119 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 120 |
</button>
|
| 121 |
</div>
|
|
@@ -123,7 +132,7 @@
|
|
| 123 |
</div>
|
| 124 |
|
| 125 |
<!-- Workflow 2 -->
|
| 126 |
-
<div class="bg-white rounded-xl shadow-md overflow-hidden
|
| 127 |
<div class="bg-purple-600 text-white px-4 py-3 flex justify-between items-center">
|
| 128 |
<h3 class="font-bold">Kundenanalyse</h3>
|
| 129 |
<span class="bg-white text-purple-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
@@ -143,7 +152,7 @@
|
|
| 143 |
data-webhook="https://your-n8n-webhook.com/customer-analysis">
|
| 144 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 145 |
</button>
|
| 146 |
-
<button class="flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 147 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 148 |
</button>
|
| 149 |
</div>
|
|
@@ -151,7 +160,7 @@
|
|
| 151 |
</div>
|
| 152 |
|
| 153 |
<!-- Workflow 3 -->
|
| 154 |
-
<div class="bg-white rounded-xl shadow-md overflow-hidden
|
| 155 |
<div class="bg-green-600 text-white px-4 py-3 flex justify-between items-center">
|
| 156 |
<h3 class="font-bold">Dokumentenverarbeitung</h3>
|
| 157 |
<span class="bg-white text-green-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
@@ -171,7 +180,7 @@
|
|
| 171 |
data-webhook="https://your-n8n-webhook.com/doc-processing">
|
| 172 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 173 |
</button>
|
| 174 |
-
<button class="flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 175 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 176 |
</button>
|
| 177 |
</div>
|
|
@@ -179,7 +188,7 @@
|
|
| 179 |
</div>
|
| 180 |
|
| 181 |
<!-- Workflow 4 -->
|
| 182 |
-
<div class="bg-white rounded-xl shadow-md overflow-hidden
|
| 183 |
<div class="bg-yellow-600 text-white px-4 py-3 flex justify-between items-center">
|
| 184 |
<h3 class="font-bold">E-Mail Klassifizierung</h3>
|
| 185 |
<span class="bg-white text-yellow-600 text-xs px-2 py-1 rounded-full">Pausiert</span>
|
|
@@ -199,7 +208,7 @@
|
|
| 199 |
data-webhook="https://your-n8n-webhook.com/email-classification">
|
| 200 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 201 |
</button>
|
| 202 |
-
<button class="flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 203 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 204 |
</button>
|
| 205 |
</div>
|
|
@@ -207,7 +216,7 @@
|
|
| 207 |
</div>
|
| 208 |
|
| 209 |
<!-- Workflow 5 -->
|
| 210 |
-
<div class="bg-white rounded-xl shadow-md overflow-hidden
|
| 211 |
<div class="bg-red-600 text-white px-4 py-3 flex justify-between items-center">
|
| 212 |
<h3 class="font-bold">Betrugserkennung</h3>
|
| 213 |
<span class="bg-white text-red-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
@@ -227,7 +236,7 @@
|
|
| 227 |
data-webhook="https://your-n8n-webhook.com/fraud-detection">
|
| 228 |
<i class="fas fa-play mr-2"></i> Testen
|
| 229 |
</button>
|
| 230 |
-
<button class="flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 231 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 232 |
</button>
|
| 233 |
</div>
|
|
@@ -479,6 +488,66 @@
|
|
| 479 |
</div>
|
| 480 |
</div>
|
| 481 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 482 |
<script>
|
| 483 |
// Webhook-Funktion
|
| 484 |
async function triggerWebhook(url, data = {}) {
|
|
@@ -565,6 +634,96 @@
|
|
| 565 |
}, 2000);
|
| 566 |
});
|
| 567 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 568 |
// Webhook Buttons
|
| 569 |
const webhookButtons = document.querySelectorAll('.webhook-btn');
|
| 570 |
webhookButtons.forEach(btn => {
|
|
@@ -606,10 +765,100 @@
|
|
| 606 |
return;
|
| 607 |
}
|
| 608 |
|
| 609 |
-
//
|
| 610 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 611 |
|
| 612 |
closeCreateWorkflowModal();
|
|
|
|
| 613 |
});
|
| 614 |
});
|
| 615 |
</script>
|
|
|
|
| 14 |
.modal {
|
| 15 |
transition: all 0.3s ease;
|
| 16 |
}
|
| 17 |
+
.settings-popup {
|
| 18 |
+
position: absolute;
|
| 19 |
+
z-index: 40;
|
| 20 |
+
width: 320px;
|
| 21 |
+
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
| 22 |
+
transform-origin: top right;
|
| 23 |
+
transition: all 0.2s ease;
|
| 24 |
+
}
|
| 25 |
.dark { background-color: #111827; color: #f3f4f6; }
|
| 26 |
.dark .bg-white { background-color: #1f2937 !important; }
|
| 27 |
.dark .text-gray-800 { color: #f3f4f6 !important; }
|
| 28 |
.dark .bg-gray-50 { background-color: #374151 !important; }
|
| 29 |
+
.dark .settings-popup { background-color: #1f2937; border: 1px solid #374151; }
|
| 30 |
</style>
|
| 31 |
</head>
|
| 32 |
<body class="bg-gray-50">
|
|
|
|
| 102 |
</div>
|
| 103 |
|
| 104 |
<!-- Active Workflows -->
|
| 105 |
+
<div id="workflow-container" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
| 106 |
<!-- Workflow 1 -->
|
| 107 |
+
<div class="workflow-card bg-white rounded-xl shadow-md overflow-hidden transition duration-300" data-id="1">
|
| 108 |
<div class="bg-indigo-600 text-white px-4 py-3 flex justify-between items-center">
|
| 109 |
<h3 class="font-bold">Datenbereinigung</h3>
|
| 110 |
<span class="bg-white text-indigo-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
|
|
| 124 |
data-webhook="https://your-n8n-webhook.com/data-cleanup">
|
| 125 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 126 |
</button>
|
| 127 |
+
<button class="settings-btn flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 128 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 129 |
</button>
|
| 130 |
</div>
|
|
|
|
| 132 |
</div>
|
| 133 |
|
| 134 |
<!-- Workflow 2 -->
|
| 135 |
+
<div class="workflow-card bg-white rounded-xl shadow-md overflow-hidden transition duration-300" data-id="2">
|
| 136 |
<div class="bg-purple-600 text-white px-4 py-3 flex justify-between items-center">
|
| 137 |
<h3 class="font-bold">Kundenanalyse</h3>
|
| 138 |
<span class="bg-white text-purple-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
|
|
| 152 |
data-webhook="https://your-n8n-webhook.com/customer-analysis">
|
| 153 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 154 |
</button>
|
| 155 |
+
<button class="settings-btn flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 156 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 157 |
</button>
|
| 158 |
</div>
|
|
|
|
| 160 |
</div>
|
| 161 |
|
| 162 |
<!-- Workflow 3 -->
|
| 163 |
+
<div class="workflow-card bg-white rounded-xl shadow-md overflow-hidden transition duration-300" data-id="3">
|
| 164 |
<div class="bg-green-600 text-white px-4 py-3 flex justify-between items-center">
|
| 165 |
<h3 class="font-bold">Dokumentenverarbeitung</h3>
|
| 166 |
<span class="bg-white text-green-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
|
|
| 180 |
data-webhook="https://your-n8n-webhook.com/doc-processing">
|
| 181 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 182 |
</button>
|
| 183 |
+
<button class="settings-btn flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 184 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 185 |
</button>
|
| 186 |
</div>
|
|
|
|
| 188 |
</div>
|
| 189 |
|
| 190 |
<!-- Workflow 4 -->
|
| 191 |
+
<div class="workflow-card bg-white rounded-xl shadow-md overflow-hidden transition duration-300" data-id="4">
|
| 192 |
<div class="bg-yellow-600 text-white px-4 py-3 flex justify-between items-center">
|
| 193 |
<h3 class="font-bold">E-Mail Klassifizierung</h3>
|
| 194 |
<span class="bg-white text-yellow-600 text-xs px-2 py-1 rounded-full">Pausiert</span>
|
|
|
|
| 208 |
data-webhook="https://your-n8n-webhook.com/email-classification">
|
| 209 |
<i class="fas fa-play mr-2"></i> Ausführen
|
| 210 |
</button>
|
| 211 |
+
<button class="settings-btn flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 212 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 213 |
</button>
|
| 214 |
</div>
|
|
|
|
| 216 |
</div>
|
| 217 |
|
| 218 |
<!-- Workflow 5 -->
|
| 219 |
+
<div class="workflow-card bg-white rounded-xl shadow-md overflow-hidden transition duration-300" data-id="5">
|
| 220 |
<div class="bg-red-600 text-white px-4 py-3 flex justify-between items-center">
|
| 221 |
<h3 class="font-bold">Betrugserkennung</h3>
|
| 222 |
<span class="bg-white text-red-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
|
|
|
| 236 |
data-webhook="https://your-n8n-webhook.com/fraud-detection">
|
| 237 |
<i class="fas fa-play mr-2"></i> Testen
|
| 238 |
</button>
|
| 239 |
+
<button class="settings-btn flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 240 |
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 241 |
</button>
|
| 242 |
</div>
|
|
|
|
| 488 |
</div>
|
| 489 |
</div>
|
| 490 |
|
| 491 |
+
<!-- Settings Popup -->
|
| 492 |
+
<div id="settings-popup" class="settings-popup hidden bg-white rounded-lg p-4">
|
| 493 |
+
<div class="flex justify-between items-center mb-4">
|
| 494 |
+
<h3 class="font-bold text-lg">Workflow Einstellungen</h3>
|
| 495 |
+
<button id="close-settings" class="text-gray-500 hover:text-gray-700">
|
| 496 |
+
<i class="fas fa-times"></i>
|
| 497 |
+
</button>
|
| 498 |
+
</div>
|
| 499 |
+
|
| 500 |
+
<div class="space-y-4">
|
| 501 |
+
<div>
|
| 502 |
+
<label class="block text-sm font-medium text-gray-700 mb-1">Name</label>
|
| 503 |
+
<input type="text" id="settings-name" class="w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
|
| 504 |
+
</div>
|
| 505 |
+
|
| 506 |
+
<div>
|
| 507 |
+
<label class="block text-sm font-medium text-gray-700 mb-1">Beschreibung</label>
|
| 508 |
+
<textarea id="settings-description" rows="2" class="w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"></textarea>
|
| 509 |
+
</div>
|
| 510 |
+
|
| 511 |
+
<div>
|
| 512 |
+
<label class="block text-sm font-medium text-gray-700 mb-1">Webhook URL</label>
|
| 513 |
+
<div class="flex">
|
| 514 |
+
<input type="text" id="settings-webhook" class="flex-1 border border-gray-300 rounded-l-md px-3 py-2 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
|
| 515 |
+
<button id="copy-settings-webhook" class="bg-indigo-600 text-white px-3 py-2 rounded-r-md hover:bg-indigo-700 transition">
|
| 516 |
+
<i class="fas fa-copy"></i>
|
| 517 |
+
</button>
|
| 518 |
+
</div>
|
| 519 |
+
</div>
|
| 520 |
+
|
| 521 |
+
<div>
|
| 522 |
+
<label class="block text-sm font-medium text-gray-700 mb-1">HTTP Methode</label>
|
| 523 |
+
<select id="settings-method" class="w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
|
| 524 |
+
<option>POST</option>
|
| 525 |
+
<option>GET</option>
|
| 526 |
+
<option>PUT</option>
|
| 527 |
+
<option>DELETE</option>
|
| 528 |
+
</select>
|
| 529 |
+
</div>
|
| 530 |
+
|
| 531 |
+
<div>
|
| 532 |
+
<label class="block text-sm font-medium text-gray-700 mb-1">Status</label>
|
| 533 |
+
<select id="settings-status" class="w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
|
| 534 |
+
<option>Aktiv</option>
|
| 535 |
+
<option>Pausiert</option>
|
| 536 |
+
<option>Deaktiviert</option>
|
| 537 |
+
</select>
|
| 538 |
+
</div>
|
| 539 |
+
</div>
|
| 540 |
+
|
| 541 |
+
<div class="mt-6 flex justify-between">
|
| 542 |
+
<button id="delete-workflow" class="text-red-600 hover:text-red-800 flex items-center">
|
| 543 |
+
<i class="fas fa-trash mr-2"></i> Löschen
|
| 544 |
+
</button>
|
| 545 |
+
<button id="save-settings" class="bg-indigo-600 text-white px-4 py-2 rounded-md hover:bg-indigo-700 transition">
|
| 546 |
+
Speichern
|
| 547 |
+
</button>
|
| 548 |
+
</div>
|
| 549 |
+
</div>
|
| 550 |
+
|
| 551 |
<script>
|
| 552 |
// Webhook-Funktion
|
| 553 |
async function triggerWebhook(url, data = {}) {
|
|
|
|
| 634 |
}, 2000);
|
| 635 |
});
|
| 636 |
|
| 637 |
+
// Settings Popup
|
| 638 |
+
const settingsPopup = document.getElementById('settings-popup');
|
| 639 |
+
const closeSettings = document.getElementById('close-settings');
|
| 640 |
+
const saveSettings = document.getElementById('save-settings');
|
| 641 |
+
const deleteWorkflow = document.getElementById('delete-workflow');
|
| 642 |
+
const settingsButtons = document.querySelectorAll('.settings-btn');
|
| 643 |
+
|
| 644 |
+
let currentWorkflowCard = null;
|
| 645 |
+
|
| 646 |
+
settingsButtons.forEach(btn => {
|
| 647 |
+
btn.addEventListener('click', function(e) {
|
| 648 |
+
const workflowCard = this.closest('.workflow-card');
|
| 649 |
+
currentWorkflowCard = workflowCard;
|
| 650 |
+
|
| 651 |
+
// Get current workflow data
|
| 652 |
+
const title = workflowCard.querySelector('h3').textContent;
|
| 653 |
+
const description = workflowCard.querySelector('p').textContent;
|
| 654 |
+
const webhook = workflowCard.querySelector('.webhook-btn').getAttribute('data-webhook');
|
| 655 |
+
const status = workflowCard.querySelector('span').textContent;
|
| 656 |
+
|
| 657 |
+
// Fill settings form
|
| 658 |
+
document.getElementById('settings-name').value = title;
|
| 659 |
+
document.getElementById('settings-description').value = description;
|
| 660 |
+
document.getElementById('settings-webhook').value = webhook;
|
| 661 |
+
document.getElementById('settings-status').value = status === 'Aktiv' ? 'Aktiv' : status === 'Pausiert' ? 'Pausiert' : 'Deaktiviert';
|
| 662 |
+
|
| 663 |
+
// Position and show popup
|
| 664 |
+
const rect = this.getBoundingClientRect();
|
| 665 |
+
settingsPopup.style.top = `${rect.bottom + window.scrollY + 5}px`;
|
| 666 |
+
settingsPopup.style.left = `${rect.left + window.scrollX}px`;
|
| 667 |
+
settingsPopup.classList.remove('hidden');
|
| 668 |
+
});
|
| 669 |
+
});
|
| 670 |
+
|
| 671 |
+
closeSettings.addEventListener('click', function() {
|
| 672 |
+
settingsPopup.classList.add('hidden');
|
| 673 |
+
});
|
| 674 |
+
|
| 675 |
+
saveSettings.addEventListener('click', function() {
|
| 676 |
+
if (!currentWorkflowCard) return;
|
| 677 |
+
|
| 678 |
+
// Update workflow card with new settings
|
| 679 |
+
const name = document.getElementById('settings-name').value;
|
| 680 |
+
const description = document.getElementById('settings-description').value;
|
| 681 |
+
const webhook = document.getElementById('settings-webhook').value;
|
| 682 |
+
const status = document.getElementById('settings-status').value;
|
| 683 |
+
|
| 684 |
+
currentWorkflowCard.querySelector('h3').textContent = name;
|
| 685 |
+
currentWorkflowCard.querySelector('p').textContent = description;
|
| 686 |
+
currentWorkflowCard.querySelector('.webhook-btn').setAttribute('data-webhook', webhook);
|
| 687 |
+
|
| 688 |
+
const statusElement = currentWorkflowCard.querySelector('span');
|
| 689 |
+
statusElement.textContent = status;
|
| 690 |
+
|
| 691 |
+
if (status === 'Aktiv') {
|
| 692 |
+
statusElement.className = 'bg-white text-indigo-600 text-xs px-2 py-1 rounded-full';
|
| 693 |
+
} else if (status === 'Pausiert') {
|
| 694 |
+
statusElement.className = 'bg-white text-yellow-600 text-xs px-2 py-1 rounded-full';
|
| 695 |
+
} else {
|
| 696 |
+
statusElement.className = 'bg-white text-gray-600 text-xs px-2 py-1 rounded-full';
|
| 697 |
+
}
|
| 698 |
+
|
| 699 |
+
settingsPopup.classList.add('hidden');
|
| 700 |
+
alert('Einstellungen wurden gespeichert!');
|
| 701 |
+
});
|
| 702 |
+
|
| 703 |
+
deleteWorkflow.addEventListener('click', function() {
|
| 704 |
+
if (!currentWorkflowCard) return;
|
| 705 |
+
|
| 706 |
+
if (confirm('Möchten Sie diesen Workflow wirklich löschen?')) {
|
| 707 |
+
currentWorkflowCard.remove();
|
| 708 |
+
settingsPopup.classList.add('hidden');
|
| 709 |
+
alert('Workflow wurde gelöscht!');
|
| 710 |
+
}
|
| 711 |
+
});
|
| 712 |
+
|
| 713 |
+
// Copy Settings Webhook
|
| 714 |
+
document.getElementById('copy-settings-webhook').addEventListener('click', function() {
|
| 715 |
+
const webhookUrl = document.getElementById('settings-webhook');
|
| 716 |
+
webhookUrl.select();
|
| 717 |
+
document.execCommand('copy');
|
| 718 |
+
|
| 719 |
+
const originalText = this.innerHTML;
|
| 720 |
+
this.innerHTML = '<i class="fas fa-check"></i>';
|
| 721 |
+
|
| 722 |
+
setTimeout(() => {
|
| 723 |
+
this.innerHTML = originalText;
|
| 724 |
+
}, 2000);
|
| 725 |
+
});
|
| 726 |
+
|
| 727 |
// Webhook Buttons
|
| 728 |
const webhookButtons = document.querySelectorAll('.webhook-btn');
|
| 729 |
webhookButtons.forEach(btn => {
|
|
|
|
| 765 |
return;
|
| 766 |
}
|
| 767 |
|
| 768 |
+
// Generate random color for the new workflow
|
| 769 |
+
const colors = ['indigo', 'purple', 'green', 'yellow', 'red', 'blue', 'pink'];
|
| 770 |
+
const randomColor = colors[Math.floor(Math.random() * colors.length)];
|
| 771 |
+
|
| 772 |
+
// Create new workflow card
|
| 773 |
+
const workflowContainer = document.getElementById('workflow-container');
|
| 774 |
+
const newWorkflowId = Date.now(); // Use timestamp as unique ID
|
| 775 |
+
|
| 776 |
+
const newWorkflowCard = document.createElement('div');
|
| 777 |
+
newWorkflowCard.className = 'workflow-card bg-white rounded-xl shadow-md overflow-hidden transition duration-300';
|
| 778 |
+
newWorkflowCard.setAttribute('data-id', newWorkflowId);
|
| 779 |
+
|
| 780 |
+
newWorkflowCard.innerHTML = `
|
| 781 |
+
<div class="bg-${randomColor}-600 text-white px-4 py-3 flex justify-between items-center">
|
| 782 |
+
<h3 class="font-bold">${workflowName}</h3>
|
| 783 |
+
<span class="bg-white text-${randomColor}-600 text-xs px-2 py-1 rounded-full">Aktiv</span>
|
| 784 |
+
</div>
|
| 785 |
+
<div class="p-4">
|
| 786 |
+
<p class="text-gray-600 mb-4">Neuer ${workflowType} Workflow</p>
|
| 787 |
+
<div class="flex justify-between items-center mb-3">
|
| 788 |
+
<span class="text-sm text-gray-500">Letzte Ausführung:</span>
|
| 789 |
+
<span class="text-sm font-medium">Noch nicht ausgeführt</span>
|
| 790 |
+
</div>
|
| 791 |
+
<div class="flex justify-between items-center mb-4">
|
| 792 |
+
<span class="text-sm text-gray-500">Trigger:</span>
|
| 793 |
+
<span class="text-sm font-medium">${triggerType}</span>
|
| 794 |
+
</div>
|
| 795 |
+
<div class="flex space-x-2">
|
| 796 |
+
<button class="webhook-btn flex-1 bg-${randomColor}-600 text-white px-3 py-2 rounded-lg text-sm hover:bg-${randomColor}-700 transition"
|
| 797 |
+
data-webhook="https://your-n8n-webhook.com/${workflowName.toLowerCase().replace(/\s+/g, '-')}">
|
| 798 |
+
<i class="fas fa-play mr-2"></i> Ausführen
|
| 799 |
+
</button>
|
| 800 |
+
<button class="settings-btn flex-1 border border-gray-300 px-3 py-2 rounded-lg text-sm hover:bg-gray-50 transition">
|
| 801 |
+
<i class="fas fa-cog mr-2"></i> Einstellungen
|
| 802 |
+
</button>
|
| 803 |
+
</div>
|
| 804 |
+
</div>
|
| 805 |
+
`;
|
| 806 |
+
|
| 807 |
+
// Insert before the "Add New Workflow" card
|
| 808 |
+
workflowContainer.insertBefore(newWorkflowCard, workflowContainer.lastElementChild);
|
| 809 |
+
|
| 810 |
+
// Add event listeners to the new buttons
|
| 811 |
+
newWorkflowCard.querySelector('.webhook-btn').addEventListener('click', async function() {
|
| 812 |
+
const webhookUrl = this.getAttribute('data-webhook');
|
| 813 |
+
|
| 814 |
+
this.disabled = true;
|
| 815 |
+
const originalText = this.innerHTML;
|
| 816 |
+
this.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Wird ausgeführt...';
|
| 817 |
+
|
| 818 |
+
try {
|
| 819 |
+
const result = await triggerWebhook(webhookUrl, {
|
| 820 |
+
workflow: this.closest('.workflow-card').querySelector('h3').textContent,
|
| 821 |
+
time: new Date().toISOString()
|
| 822 |
+
});
|
| 823 |
+
|
| 824 |
+
if (result.success) {
|
| 825 |
+
alert(`Workflow erfolgreich ausgelöst!\nAntwort: ${JSON.stringify(result)}`);
|
| 826 |
+
} else {
|
| 827 |
+
alert(`Fehler: ${result.error || 'Workflow konnte nicht ausgeführt werden'}`);
|
| 828 |
+
}
|
| 829 |
+
} catch (error) {
|
| 830 |
+
alert(`Webhook-Fehler: ${error.message}`);
|
| 831 |
+
} finally {
|
| 832 |
+
this.disabled = false;
|
| 833 |
+
this.innerHTML = originalText;
|
| 834 |
+
}
|
| 835 |
+
});
|
| 836 |
+
|
| 837 |
+
newWorkflowCard.querySelector('.settings-btn').addEventListener('click', function(e) {
|
| 838 |
+
const workflowCard = this.closest('.workflow-card');
|
| 839 |
+
currentWorkflowCard = workflowCard;
|
| 840 |
+
|
| 841 |
+
// Get current workflow data
|
| 842 |
+
const title = workflowCard.querySelector('h3').textContent;
|
| 843 |
+
const description = workflowCard.querySelector('p').textContent;
|
| 844 |
+
const webhook = workflowCard.querySelector('.webhook-btn').getAttribute('data-webhook');
|
| 845 |
+
const status = workflowCard.querySelector('span').textContent;
|
| 846 |
+
|
| 847 |
+
// Fill settings form
|
| 848 |
+
document.getElementById('settings-name').value = title;
|
| 849 |
+
document.getElementById('settings-description').value = description;
|
| 850 |
+
document.getElementById('settings-webhook').value = webhook;
|
| 851 |
+
document.getElementById('settings-status').value = status === 'Aktiv' ? 'Aktiv' : status === 'Pausiert' ? 'Pausiert' : 'Deaktiviert';
|
| 852 |
+
|
| 853 |
+
// Position and show popup
|
| 854 |
+
const rect = this.getBoundingClientRect();
|
| 855 |
+
settingsPopup.style.top = `${rect.bottom + window.scrollY + 5}px`;
|
| 856 |
+
settingsPopup.style.left = `${rect.left + window.scrollX}px`;
|
| 857 |
+
settingsPopup.classList.remove('hidden');
|
| 858 |
+
});
|
| 859 |
|
| 860 |
closeCreateWorkflowModal();
|
| 861 |
+
alert(`Neuer Workflow "${workflowName}" wurde erstellt!`);
|
| 862 |
});
|
| 863 |
});
|
| 864 |
</script>
|
prompts.txt
CHANGED
|
@@ -1,3 +1,4 @@
|
|
| 1 |
Based on your background (AI Automation, n8n, Notion systems, Supabase), here’s an improved and translated version of your prompt, perfectly suited for tools like Lovable.dev, Vercel AI SDK, or any fullstack AI builder (Next.js, Astro, FlutterFlow, etc.). ⸻ 🧠 German Prompt – für eine WebApp mit Supabase, Google Auth und AI-Funktionalität ⸻ 🔧 Projektziel Erstelle eine moderne, performante WebApp mit Login über Google (via Supabase Auth). Nach dem Login soll der Nutzer Zugriff auf ein zentrales Dashboard erhalten, das verschiedene KI-Module bedient. Die Anwendung dient als zentrale Steuerzentrale für KI-Workflows (z. B. n8n), Prompts und Wissensdokumente – mit einem Fokus auf gute UX, klarer Struktur und erweiterbarer AI-Architektur. ⸻ 🛠 Funktionale Anforderungen 🔐 Authentifizierung • Google OAuth-Login via Supabase Auth • Nutzerverwaltung & Session-Handling via Supabase • Redirect nach Login zu /dashboard • Wenn bereits eingeloggt → automatische Weiterleitung 📊 Dashboard Nach dem Login soll ein übersichtliches Dashboard erscheinen mit folgenden Komponenten: 1. ✅ Agenten-Buttons • Button-Karten für verschiedene Automationen (z. B. „Social Caption generieren“, „Bild erstellen“, „Daten analysieren“) • Jeder Button triggert einen vordefinierten Webhook (n8n) 2. 🧠 Prompt-Galerie • Datenbankähnliches UI wie Notion (Cards, Tabellen oder Listen) • Prompts sind kategorisiert (z. B. Rolle, Ziel, Stil, Tonfall) • Einzelansicht mit Bearbeitungsmöglichkeit + „Prompt testen“-Button • Verknüpfung zu Systemen wie OpenAI oder Gemini 3. 📚 Knowledge-Base • Markdown-kompatibles Dokumentenarchiv • Kategorien und Tags • Suche und Volltextfilter • Optional: semantische KI-Suche mit Vektor-Datenbank 4. 🤖 AI-Chatbot • Wählbare AI-Engines: OpenAI, Gemini, DeepSeek, OpenRouter • Konfiguration über API-Key (Nutzer kann Key eingeben oder hinterlegen) • Chatverlauf speichern • Unterstützung für Text, JSON, Bilder (z. B. Markdown oder DALL·E-Vorschau) ⸻ 🌙 UI / UX Anforderungen • Dunkel-/Hellmodus-Schalter • Responsive Design (Desktop & Tablet) • Modernes Design mit Tailwind, Framer Motion oder ShadCN • Klar strukturierte Navigation: Sidebar + Main Panel • Fokus auf reduzierte Klickpfade und kontextbewusstes Arbeiten ⸻ 🧩 Technologie-Stack • Frontend: Next.js (App Router), Tailwind CSS, shadcn/ui • Backend/Auth: Supabase (Auth + DB) • AI APIs (optional via toggle): • OpenAI • Google Gemini • DeepSeek • OpenRouter • Webhook-Unterstützung: Trigger-Buttons → n8n Flows • Prompt- und Output-Management: Datenbankbasiert (Supabase Tables) ⸻ 🔐 Beispiel für .env Konfiguration NEXT_PUBLIC_SUPABASE_URL=https://xlfboxorogcafgkokjeg.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJI... ⸻ ✅ Zielgruppe KI-Interessierte Power-User, Freelancer, Content-Teams oder Entwickler, die skalierbare Prompt-Systeme, personalisierte KI-Experimente und Automationen über ein zentrales Interface steuern wollen. ⸻ „Don’t Travel. Explore.“ – Nur diesmal in deinem Workflow. Mach deine KI-Systeme benutzbar. Ohne Umwege. ⸻ 📦 Möchtest du dieses Prompt direkt als Lovable-ready JSON, oder soll ich dir ein deploybares Next.js Starter-Template mit Supabase + Auth + UI liefern?
|
| 2 |
now make it in german and with buttons that trigger a webhook
|
| 3 |
-
nicht über pflanzen sondern über KI workflows.
|
|
|
|
|
|
| 1 |
Based on your background (AI Automation, n8n, Notion systems, Supabase), here’s an improved and translated version of your prompt, perfectly suited for tools like Lovable.dev, Vercel AI SDK, or any fullstack AI builder (Next.js, Astro, FlutterFlow, etc.). ⸻ 🧠 German Prompt – für eine WebApp mit Supabase, Google Auth und AI-Funktionalität ⸻ 🔧 Projektziel Erstelle eine moderne, performante WebApp mit Login über Google (via Supabase Auth). Nach dem Login soll der Nutzer Zugriff auf ein zentrales Dashboard erhalten, das verschiedene KI-Module bedient. Die Anwendung dient als zentrale Steuerzentrale für KI-Workflows (z. B. n8n), Prompts und Wissensdokumente – mit einem Fokus auf gute UX, klarer Struktur und erweiterbarer AI-Architektur. ⸻ 🛠 Funktionale Anforderungen 🔐 Authentifizierung • Google OAuth-Login via Supabase Auth • Nutzerverwaltung & Session-Handling via Supabase • Redirect nach Login zu /dashboard • Wenn bereits eingeloggt → automatische Weiterleitung 📊 Dashboard Nach dem Login soll ein übersichtliches Dashboard erscheinen mit folgenden Komponenten: 1. ✅ Agenten-Buttons • Button-Karten für verschiedene Automationen (z. B. „Social Caption generieren“, „Bild erstellen“, „Daten analysieren“) • Jeder Button triggert einen vordefinierten Webhook (n8n) 2. 🧠 Prompt-Galerie • Datenbankähnliches UI wie Notion (Cards, Tabellen oder Listen) • Prompts sind kategorisiert (z. B. Rolle, Ziel, Stil, Tonfall) • Einzelansicht mit Bearbeitungsmöglichkeit + „Prompt testen“-Button • Verknüpfung zu Systemen wie OpenAI oder Gemini 3. 📚 Knowledge-Base • Markdown-kompatibles Dokumentenarchiv • Kategorien und Tags • Suche und Volltextfilter • Optional: semantische KI-Suche mit Vektor-Datenbank 4. 🤖 AI-Chatbot • Wählbare AI-Engines: OpenAI, Gemini, DeepSeek, OpenRouter • Konfiguration über API-Key (Nutzer kann Key eingeben oder hinterlegen) • Chatverlauf speichern • Unterstützung für Text, JSON, Bilder (z. B. Markdown oder DALL·E-Vorschau) ⸻ 🌙 UI / UX Anforderungen • Dunkel-/Hellmodus-Schalter • Responsive Design (Desktop & Tablet) • Modernes Design mit Tailwind, Framer Motion oder ShadCN • Klar strukturierte Navigation: Sidebar + Main Panel • Fokus auf reduzierte Klickpfade und kontextbewusstes Arbeiten ⸻ 🧩 Technologie-Stack • Frontend: Next.js (App Router), Tailwind CSS, shadcn/ui • Backend/Auth: Supabase (Auth + DB) • AI APIs (optional via toggle): • OpenAI • Google Gemini • DeepSeek • OpenRouter • Webhook-Unterstützung: Trigger-Buttons → n8n Flows • Prompt- und Output-Management: Datenbankbasiert (Supabase Tables) ⸻ 🔐 Beispiel für .env Konfiguration NEXT_PUBLIC_SUPABASE_URL=https://xlfboxorogcafgkokjeg.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJI... ⸻ ✅ Zielgruppe KI-Interessierte Power-User, Freelancer, Content-Teams oder Entwickler, die skalierbare Prompt-Systeme, personalisierte KI-Experimente und Automationen über ein zentrales Interface steuern wollen. ⸻ „Don’t Travel. Explore.“ – Nur diesmal in deinem Workflow. Mach deine KI-Systeme benutzbar. Ohne Umwege. ⸻ 📦 Möchtest du dieses Prompt direkt als Lovable-ready JSON, oder soll ich dir ein deploybares Next.js Starter-Template mit Supabase + Auth + UI liefern?
|
| 2 |
now make it in german and with buttons that trigger a webhook
|
| 3 |
+
nicht über pflanzen sondern über KI workflows.
|
| 4 |
+
wenn ich auf einstellungen klicke, öffnet sich floating popup wo man den Webhook URL, die Webhook Methode und Name sowie Beschreibung anpassen kann. ergänze einen Add Workflow button,welcher dann eine neue Karte anlegt
|