feat: Add complete BotKonzept SaaS platform

- Landing page with registration form (HTML/CSS/JS)
- n8n workflows for customer registration and trial management
- PostgreSQL schema for customer/instance/payment management
- Automated email system (Day 3, 5, 7 with discounts)
- Setup script and deployment checklist
- Comprehensive documentation

Features:
- Automatic LXC instance creation per customer
- 7-day trial with automated upgrade offers
- Discount system: 30% → 15% → regular price
- Supabase integration for customer management
- Email automation via Postfix/SES
- GDPR compliant (data in Germany)
- Stripe/PayPal payment integration ready

Components:
- botkonzept-website/ - Landing page and registration
- BotKonzept-Customer-Registration-Workflow.json - n8n registration workflow
- BotKonzept-Trial-Management-Workflow.json - n8n trial management workflow
- sql/botkonzept_schema.sql - Complete database schema
- setup_botkonzept.sh - Automated setup script
- BOTKONZEPT_README.md - Full documentation
- DEPLOYMENT_CHECKLIST.md - Deployment guide
This commit is contained in:
2026-01-25 19:30:54 +01:00
parent 610a4d9e0e
commit caa38bf72c
11 changed files with 4063 additions and 0 deletions

326
Install-Workflow01.json Normal file
View File

@@ -0,0 +1,326 @@
{
"name": "Install-Workflow",
"nodes": [
{
"parameters": {
"authentication": "privateKey",
"command": "/root/customer-installer/install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90 --apt-proxy http://192.168.45.2:3142",
"cwd": "/root/customer-installer/"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
192,
0
],
"id": "9878a864-651e-4a53-abfc-b0bc2d2f2d15",
"name": "Start Installer 1",
"credentials": {
"sshPrivateKey": {
"id": "bPl4nGXO7Iz4wJPJ",
"name": "PVE20"
}
}
},
{
"parameters": {
"authentication": "privateKey",
"command": "=./n8n_setup.sh --n8n_internal {{ $json.urls.n8n_internal }} --owner_email {{ $json.n8n.owner_email }} --owner_password \"{{ $json.n8n.owner_password }}\" --owner_first_name \"Max\" --owner_last_name \"Mustermann\" --timeout 30",
"cwd": "/root/customer-installer/"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
640,
0
],
"id": "62e1b647-7daa-445e-bf99-873efbe2bc94",
"name": "Setup n8n Owner",
"credentials": {
"sshPrivateKey": {
"id": "bPl4nGXO7Iz4wJPJ",
"name": "PVE20"
}
},
"disabled": true
},
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-32,
0
],
"id": "11aa3e6a-b20a-49b0-b6f9-4cec469c9916",
"name": "When clicking Execute workflow"
},
{
"parameters": {
"authentication": "privateKey",
"command": "=bash setup_nginx_proxy.sh --ctid {{ $('install_JSON').item.json.ctid }} --hostname {{ $('install_JSON').item.json.hostname }} --fqdn {{ $('install_JSON').item.json.fqdn }} --backend-ip {{ $('install_JSON').item.json.ip }}",
"cwd": "/root/customer-installer/"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
1088,
0
],
"id": "176fd78c-9dd6-427b-a566-88dbf504347e",
"name": "setup_nginx_proxy",
"credentials": {
"sshPrivateKey": {
"id": "bPl4nGXO7Iz4wJPJ",
"name": "PVE20"
}
},
"disabled": true
},
{
"parameters": {
"formTitle": "Delete",
"formFields": {
"values": [
{
"fieldLabel": "Host-Number",
"requiredField": true
}
]
},
"options": {
"buttonLabel": "Löschen"
}
},
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2.5,
"position": [
-32,
208
],
"id": "4c9878ec-177c-4fbd-a83a-a3895ebd8193",
"name": "On form submission",
"webhookId": "12847d69-15c8-44e4-b595-645ff3109355"
},
{
"parameters": {
"jsCode": "// Code Node - JavaScript\nconst sshOutput = $input.all();\n\n// stdout-String parsen\nconst parsedData = JSON.parse(sshOutput[0].json.stdout);\n\nreturn [{\n json: parsedData\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
416,
0
],
"id": "67ace9d6-7ed2-4495-b3e6-6091fd252596",
"name": "install_JSON"
},
{
"parameters": {
"jsCode": "// Code Node - JavaScript\nconst sshOutput = $input.all();\n\n// stdout-String parsen\nconst parsedData = JSON.parse(sshOutput[0].json.stdout);\n\nreturn [{\n json: parsedData\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
864,
0
],
"id": "fc1b9d9f-5a70-476e-8ae2-4cfd81050527",
"name": "setupOwnerJSON",
"disabled": true
},
{
"parameters": {
"jsCode": "// Code Node - JavaScript\nconst sshOutput = $input.all();\n\n// stdout-String parsen\nconst parsedData = JSON.parse(sshOutput[0].json.stdout);\n\nreturn [{\n json: parsedData\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1312,
0
],
"id": "86b70266-cafe-4a4f-98d1-20434f61061b",
"name": "setupProxyJSON",
"disabled": true
},
{
"parameters": {
"chatId": "26805429",
"text": "=Done.\nhttps://{{ $json.fqdn }}\nUsername: {{ $('install_JSON').item.json.n8n.owner_email }}\nPassword: {{ $('install_JSON').item.json.n8n.owner_password }}\nChat: {{ $('install_JSON').item.json.urls.chat_webhook }}",
"additionalFields": {
"appendAttribution": false
}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1536,
0
],
"id": "9e20ee75-c2ae-421f-ac4c-54f5643032f2",
"name": "Send a text message",
"webhookId": "55a97e93-a457-4bee-8b8f-3eea1ad62928",
"credentials": {
"telegramApi": {
"id": "7DYJfIx5JsxgKc0D",
"name": "LizTheLove_Bot"
}
}
},
{
"parameters": {
"authentication": "privateKey",
"command": "=/root/customer-installer/delete_nginx_proxy.sh --ctid {{ $('On form submission').item.json['Host-Number'] }}",
"cwd": "/root/customer-installer/"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
416,
208
],
"id": "34d50d3a-cdb8-4801-b54b-719ef60b4b63",
"name": "deleteProxy",
"credentials": {
"sshPrivateKey": {
"id": "bPl4nGXO7Iz4wJPJ",
"name": "PVE20"
}
}
},
{
"parameters": {
"authentication": "privateKey",
"command": "=pct stop {{ $json['Host-Number'] }} && pct destroy {{ $json['Host-Number'] }} ",
"cwd": "/root/customer-installer/"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
192,
208
],
"id": "4645ace7-30ef-4698-8288-065fe70ff9b0",
"name": "deleteLXC",
"credentials": {
"sshPrivateKey": {
"id": "bPl4nGXO7Iz4wJPJ",
"name": "PVE20"
}
}
}
],
"pinData": {},
"connections": {
"Start Installer 1": {
"main": [
[
{
"node": "install_JSON",
"type": "main",
"index": 0
}
]
]
},
"Setup n8n Owner": {
"main": [
[
{
"node": "setupOwnerJSON",
"type": "main",
"index": 0
}
]
]
},
"When clicking Execute workflow": {
"main": [
[
{
"node": "Start Installer 1",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "deleteLXC",
"type": "main",
"index": 0
}
]
]
},
"install_JSON": {
"main": [
[
{
"node": "Setup n8n Owner",
"type": "main",
"index": 0
}
]
]
},
"setupOwnerJSON": {
"main": [
[
{
"node": "setup_nginx_proxy",
"type": "main",
"index": 0
}
]
]
},
"setup_nginx_proxy": {
"main": [
[
{
"node": "setupProxyJSON",
"type": "main",
"index": 0
}
]
]
},
"setupProxyJSON": {
"main": [
[
{
"node": "Send a text message",
"type": "main",
"index": 0
}
]
]
},
"deleteLXC": {
"main": [
[
{
"node": "deleteProxy",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"availableInMCP": false
},
"versionId": "7814a0dd-fae3-40e6-913b-f7b8bac10e81",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "c832ea07b2e6ccb9d5832b81bb497b720b31ed50006898070951c4f6d209f426"
},
"id": "ba7BxTeeQif4zu2F",
"tags": []
}