[32788f42] Keine Zusammenfassung angegeben.

Keine Zusammenfassung angegeben.
This commit is contained in:
2026-04-08 16:39:30 +00:00
parent 2cfda1da57
commit e8c2cdfff9
6 changed files with 409 additions and 275 deletions

View File

@@ -1 +1 @@
{"task_id": "32788f42-8544-80e1-a13a-c26114cf9b34", "token": "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", "readme_path": "readme.md", "session_start_time": "2026-04-08T08:21:53.169017"}
{"task_id": "32788f42-8544-80e1-a13a-c26114cf9b34", "token": "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", "readme_path": "readme.md", "session_start_time": "2026-04-08T16:39:28.516327"}

View File

@@ -133,18 +133,18 @@
</header>
<div class="container">
<!-- B2B Marketing Assistant -->
<!-- B2B Marketing Assistant (Inactive)
<div class="card">
<span class="card-icon">🚀</span>
<h2>B2B Marketing Assistant</h2>
<p>
KI-gestützte Analyse von Unternehmens-Websites zur Erstellung von Personas, Pain-Points und Marketing-Botschaften.
</p>
<!-- WICHTIG: Relativer Link für Reverse Proxy -->
<a href="/b2b/" class="btn">Starten &rarr;</a>
</div>
-->
<!-- General Market Intelligence -->
<!-- General Market Intelligence (Inactive)
<div class="card">
<span class="card-icon">📊</span>
<h2>Market Intelligence</h2>
@@ -152,22 +152,22 @@
Allgemeine Marktanalyse und Recherche-Tool.
Nutzt Web-Scraping und KI für tiefe Einblicke.
</p>
<!-- WICHTIG: Relativer Link für Reverse Proxy -->
<a href="/market/" class="btn">Starten &rarr;</a>
</div>
-->
<!-- GTM Architect -->
<!-- GTM Architect (Inactive)
<div class="card">
<span class="card-icon">🏛️</span>
<h2>GTM Architect</h2>
<p>
Entwickelt eine komplette Go-to-Market-Strategie für neue technische Produkte, von der Analyse bis zum Sales-Kit.
</p>
<!-- WICHTIG: Relativer Link für Reverse Proxy -->
<a href="/gtm/" class="btn">Starten &rarr;</a>
</div>
-->
<!-- Content Engine -->
<!-- Content Engine (Inactive)
<div class="card">
<span class="card-icon">✍️</span>
<h2>Content Engine</h2>
@@ -176,19 +176,19 @@
</p>
<a href="/content/" class="btn">Starten &rarr;</a>
</div>
-->
<!-- Company Explorer (Robotics) -->
<!-- Company Explorer -->
<div class="card">
<span class="card-icon">🤖</span>
<h2>Company Explorer</h2>
<p>
Das zentrale CRM-Data-Mining Tool. Importieren, Deduplizieren und Anreichern von Firmenlisten mit Fokus auf Robotik-Potential.
</p>
<!-- Jetzt direkt zum Frontend -->
<a href="/ce/" class="btn">Starten &rarr;</a>
</div>
<!-- Competitor Analysis Agent -->
<!-- Competitor Analysis Agent (Inactive)
<div class="card">
<span class="card-icon">⚔️</span>
<h2>Competitor Analysis</h2>
@@ -197,8 +197,9 @@
</p>
<a href="/competitor/" class="btn">Starten &rarr;</a>
</div>
-->
<!-- Lead Engine: TradingTwins -->
<!-- Lead Engine: TradingTwins (Inactive)
<div class="card">
<span class="card-icon">📈</span>
<h2>Lead Engine: TradingTwins</h2>
@@ -207,6 +208,7 @@
</p>
<a href="/lead/" class="btn" target="_blank">Starten &rarr;</a>
</div>
-->
<!-- Meeting Assistant (Transcription) -->
<div class="card">
@@ -218,7 +220,7 @@
<a href="/tr/" class="btn">Starten &rarr;</a>
</div>
<!-- Heatmap Tool -->
<!-- Heatmap Tool (Inactive)
<div class="card">
<span class="card-icon">🗺️</span>
<h2>Heatmap Tool</h2>
@@ -227,10 +229,21 @@
</p>
<a href="/heatmap/" class="btn">Starten &rarr;</a>
</div>
-->
<!-- Fotograf.de Scraper -->
<div class="card">
<span class="card-icon">📸</span>
<h2>Fotograf.de ERP</h2>
<p>
Automatisierter Workflow zum Download und Formatieren der Anmeldelisten von fotograf.de als sortiertes PDF.
</p>
<a href="/fotograf-de/" class="btn">Starten &rarr;</a>
</div>
</div>
<footer>
&copy; 2025 Local AI Suite | Secured Access
&copy; 2026 Local AI Suite | Secured Access
</footer>
</body>
</html>

View File

@@ -19,23 +19,25 @@ services:
condition: service_started
company-explorer:
condition: service_healthy
connector-superoffice:
condition: service_healthy
lead-engine:
condition: service_started
gtm-architect:
condition: service_started
b2b-marketing-assistant:
condition: service_started
# connector-superoffice:
# condition: service_healthy
# lead-engine:
# condition: service_started
# gtm-architect:
# condition: service_started
# b2b-marketing-assistant:
# condition: service_started
transcription-tool:
condition: service_started
heatmap-frontend:
condition: service_started
competitor-analysis:
condition: service_started
content-engine:
condition: service_started
market-intelligence:
# heatmap-frontend:
# condition: service_started
# competitor-analysis:
# condition: service_started
# content-engine:
# condition: service_started
# market-intelligence:
# condition: service_started
fotograf-de-scraper-frontend:
condition: service_started
# --- DASHBOARD ---
@@ -47,60 +49,60 @@ services:
- ./dashboard:/usr/share/nginx/html:ro
# --- APPS ---
market-intelligence:
build:
context: .
dockerfile: general-market-intelligence/Dockerfile.fullstack
container_name: market-intelligence
restart: unless-stopped
ports:
- "8098:3001"
environment:
GEMINI_API_KEY: "${GEMINI_API_KEY}"
SERP_API_KEY: "${SERP_API}"
PYTHONUNBUFFERED: "1"
volumes:
- market_intel_data:/data
- ./Log_from_docker:/app/Log
# market-intelligence:
# build:
# context: .
# dockerfile: general-market-intelligence/Dockerfile.fullstack
# container_name: market-intelligence
# restart: unless-stopped
# ports:
# - "8098:3001"
# environment:
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
# SERP_API_KEY: "${SERP_API}"
# PYTHONUNBUFFERED: "1"
# volumes:
# - market_intel_data:/data
# - ./Log_from_docker:/app/Log
content-engine:
build:
context: .
dockerfile: content-engine/Dockerfile
container_name: content-engine
restart: unless-stopped
ports:
- "8093:3000"
environment:
GEMINI_API_KEY: "${GEMINI_API_KEY}"
PYTHONUNBUFFERED: "1"
GTM_DB_PATH: "/gtm_data/gtm_projects.db"
CONTENT_DB_PATH: "/data/content_engine.db"
volumes:
- content_engine_data:/data
- gtm_architect_data:/gtm_data:ro
- ./Log_from_docker:/app/logs_debug
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3006"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
# content-engine:
# build:
# context: .
# dockerfile: content-engine/Dockerfile
# container_name: content-engine
# restart: unless-stopped
# ports:
# - "8093:3000"
# environment:
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
# PYTHONUNBUFFERED: "1"
# GTM_DB_PATH: "/gtm_data/gtm_projects.db"
# CONTENT_DB_PATH: "/data/content_engine.db"
# volumes:
# - content_engine_data:/data
# - gtm_architect_data:/gtm_data:ro
# - ./Log_from_docker:/app/logs_debug
# healthcheck:
# test: ["CMD", "curl", "-f", "http://localhost:3006"]
# interval: 10s
# timeout: 5s
# retries: 5
# start_period: 30s
competitor-analysis:
build:
context: ./competitor-analysis-app
dockerfile: Dockerfile
container_name: competitor-analysis
restart: unless-stopped
ports:
- "8097:3000"
environment:
GEMINI_API_KEY: "${GEMINI_API_KEY}"
PYTHONUNBUFFERED: "1"
volumes:
- competitor_analysis_data:/data
- ./Log_from_docker:/app/logs_debug
# competitor-analysis:
# build:
# context: ./competitor-analysis-app
# dockerfile: Dockerfile
# container_name: competitor-analysis
# restart: unless-stopped
# ports:
# - "8097:3000"
# environment:
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
# PYTHONUNBUFFERED: "1"
# volumes:
# - competitor_analysis_data:/data
# - ./Log_from_docker:/app/logs_debug
transcription-tool:
build:
@@ -117,58 +119,58 @@ services:
- transcription_uploads:/app/uploads
- ./Log_from_docker:/app/logs_debug
heatmap-backend:
build:
context: ./heatmap-tool/backend
container_name: heatmap-backend
restart: unless-stopped
ports:
- "8002:8000"
environment:
ORS_API_KEY: "${ORS_API_KEY}"
PYTHONUNBUFFERED: "1"
# heatmap-backend:
# build:
# context: ./heatmap-tool/backend
# container_name: heatmap-backend
# restart: unless-stopped
# ports:
# - "8002:8000"
# environment:
# ORS_API_KEY: "${ORS_API_KEY}"
# PYTHONUNBUFFERED: "1"
heatmap-frontend:
build:
context: ./heatmap-tool/frontend
dockerfile: Dockerfile
container_name: heatmap-frontend
restart: unless-stopped
ports:
- "8096:80"
depends_on:
- heatmap-backend
# heatmap-frontend:
# build:
# context: ./heatmap-tool/frontend
# dockerfile: Dockerfile
# container_name: heatmap-frontend
# restart: unless-stopped
# ports:
# - "8096:80"
# depends_on:
# - heatmap-backend
b2b-marketing-assistant:
build:
context: .
dockerfile: b2b-marketing-assistant/Dockerfile
container_name: b2b-marketing-assistant
restart: unless-stopped
ports:
- "8092:3002"
environment:
GEMINI_API_KEY: "${GEMINI_API_KEY}"
PYTHONUNBUFFERED: "1"
volumes:
- b2b_marketing_data:/data
- ./Log_from_docker:/app/logs_debug
# b2b-marketing-assistant:
# build:
# context: .
# dockerfile: b2b-marketing-assistant/Dockerfile
# container_name: b2b-marketing-assistant
# restart: unless-stopped
# ports:
# - "8092:3002"
# environment:
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
# PYTHONUNBUFFERED: "1"
# volumes:
# - b2b_marketing_data:/data
# - ./Log_from_docker:/app/logs_debug
gtm-architect:
build:
context: .
dockerfile: gtm-architect/Dockerfile
container_name: gtm-architect
restart: unless-stopped
ports:
- "8094:80"
environment:
GEMINI_API_KEY: "${GEMINI_API_KEY}"
VITE_API_BASE_URL: "/gtm/api"
GTM_DB_PATH: "/data/gtm_projects.db"
volumes:
- ./Log_from_docker:/app/logs_debug
- gtm_architect_data:/data
# gtm-architect:
# build:
# context: .
# dockerfile: gtm-architect/Dockerfile
# container_name: gtm-architect
# restart: unless-stopped
# ports:
# - "8094:80"
# environment:
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
# VITE_API_BASE_URL: "/gtm/api"
# GTM_DB_PATH: "/data/gtm_projects.db"
# volumes:
# - ./Log_from_docker:/app/logs_debug
# - gtm_architect_data:/data
company-explorer:
build:
@@ -197,64 +199,90 @@ services:
retries: 5
start_period: 30s
connector-superoffice:
# connector-superoffice:
# build:
# context: ./connector-superoffice
# dockerfile: Dockerfile
# container_name: connector-superoffice
# restart: unless-stopped
# ports:
# - "8003:8000"
# volumes:
# - ./connector-superoffice:/app
# - ./connector-superoffice/data:/data # Persistent local DB storage
# environment:
# PYTHONUNBUFFERED: "1"
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
# SO_CLIENT_ID: "${SO_CLIENT_ID}"
# SO_CLIENT_SECRET: "${SO_CLIENT_SECRET}"
# SO_REFRESH_TOKEN: "${SO_REFRESH_TOKEN}"
# SO_ENVIRONMENT: "${SO_ENVIRONMENT}"
# SO_CONTEXT_IDENTIFIER: "${SO_CONTEXT_IDENTIFIER}"
# WEBHOOK_TOKEN: "${WEBHOOK_TOKEN}"
# WEBHOOK_SECRET: "${WEBHOOK_SECRET}"
# healthcheck:
# test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
# interval: 10s
# timeout: 5s
# retries: 5
# start_period: 30s
# lead-engine:
# build:
# context: ./lead-engine
# dockerfile: Dockerfile
# container_name: lead-engine
# restart: unless-stopped
# ports:
# - "8501:8501" # UI (Streamlit)
# - "8004:8004" # API / Monitor
# - "8099:8004" # Direct Test Port
# environment:
# PYTHONUNBUFFERED: "1"
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
# SERP_API: "${SERP_API}"
# INFO_Application_ID: "${INFO_Application_ID}"
# INFO_Tenant_ID: "${INFO_Tenant_ID}"
# INFO_Secret: "${INFO_Secret}"
# CAL_APPID: "${CAL_APPID}"
# CAL_SECRET: "${CAL_SECRET}"
# CAL_TENNANT_ID: "${CAL_TENNANT_ID}"
# TEAMS_WEBHOOK_URL: "${TEAMS_WEBHOOK_URL}"
# FEEDBACK_SERVER_BASE_URL: "${FEEDBACK_SERVER_BASE_URL}"
# WORDPRESS_BOOKING_URL: "${WORDPRESS_BOOKING_URL}"
# MS_BOOKINGS_URL: "${MS_BOOKINGS_URL}"
# volumes:
# - ./lead-engine:/app
# - ./lead-engine/data:/app/data # Local persistent database
fotograf-de-scraper-backend:
build:
context: ./connector-superoffice
context: ./fotograf-de-scraper/backend
dockerfile: Dockerfile
container_name: connector-superoffice
restart: unless-stopped
ports:
- "8003:8000"
volumes:
- ./connector-superoffice:/app
- ./connector-superoffice/data:/data # Persistent local DB storage
container_name: fotograf-de-scraper-backend
env_file:
- ./fotograf-de-scraper/.env
environment:
PYTHONUNBUFFERED: "1"
GEMINI_API_KEY: "${GEMINI_API_KEY}"
SO_CLIENT_ID: "${SO_CLIENT_ID}"
SO_CLIENT_SECRET: "${SO_CLIENT_SECRET}"
SO_REFRESH_TOKEN: "${SO_REFRESH_TOKEN}"
SO_ENVIRONMENT: "${SO_ENVIRONMENT}"
SO_CONTEXT_IDENTIFIER: "${SO_CONTEXT_IDENTIFIER}"
WEBHOOK_TOKEN: "${WEBHOOK_TOKEN}"
WEBHOOK_SECRET: "${WEBHOOK_SECRET}"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
- TZ=Europe/Berlin
ports:
- "8002:8000"
volumes:
- ./fotograf-de-scraper/backend:/app
- ./fotograf-de-scraper/backend/data:/app/data
restart: unless-stopped
lead-engine:
fotograf-de-scraper-frontend:
build:
context: ./lead-engine
context: ./fotograf-de-scraper/frontend
dockerfile: Dockerfile
container_name: lead-engine
restart: unless-stopped
args:
VITE_API_BASE_URL: "http://192.168.178.6:8002"
container_name: fotograf-de-scraper-frontend
ports:
- "8501:8501" # UI (Streamlit)
- "8004:8004" # API / Monitor
- "8099:8004" # Direct Test Port
environment:
PYTHONUNBUFFERED: "1"
GEMINI_API_KEY: "${GEMINI_API_KEY}"
SERP_API: "${SERP_API}"
INFO_Application_ID: "${INFO_Application_ID}"
INFO_Tenant_ID: "${INFO_Tenant_ID}"
INFO_Secret: "${INFO_Secret}"
CAL_APPID: "${CAL_APPID}"
CAL_SECRET: "${CAL_SECRET}"
CAL_TENNANT_ID: "${CAL_TENNANT_ID}"
TEAMS_WEBHOOK_URL: "${TEAMS_WEBHOOK_URL}"
FEEDBACK_SERVER_BASE_URL: "${FEEDBACK_SERVER_BASE_URL}"
WORDPRESS_BOOKING_URL: "${WORDPRESS_BOOKING_URL}"
MS_BOOKINGS_URL: "${MS_BOOKINGS_URL}"
volumes:
- ./lead-engine:/app
- ./lead-engine/data:/app/data # Local persistent database
# --- INFRASTRUCTURE SERVICES ---
- "3009:80"
depends_on:
- fotograf-de-scraper-backend
restart: unless-stopped
volumes:
gtm_architect_data: {}

View File

@@ -3,6 +3,9 @@ FROM node:20-alpine AS builder
WORKDIR /app
# Accept build arguments
ARG VITE_API_BASE_URL
# Copy package.json and package-lock.json
COPY package*.json ./
@@ -12,6 +15,9 @@ RUN npm install
# Copy the rest of the application source code
COPY . .
# Write the build arg to .env.production so Vite picks it up during build
RUN echo "VITE_API_BASE_URL=${VITE_API_BASE_URL}" > .env.production
# Build the application
RUN npm run build

View File

@@ -0,0 +1,66 @@
import yaml
with open('docker-compose.yml', 'r') as f:
data = yaml.safe_load(f)
services = data.get('services', {})
# We only keep the following core services
core_services = [
'nginx',
'dashboard',
'company-explorer',
'transcription-tool'
]
# Create a filtered services dict
new_services = {}
for k, v in services.items():
if k in core_services:
new_services[k] = v
# Add fotograf-de services since they are in subdirectories but belong to the main stack
new_services['fotograf-de-scraper-backend'] = {
'build': {
'context': './fotograf-de-scraper/backend',
'dockerfile': 'Dockerfile'
},
'container_name': 'fotograf-de-scraper-backend',
'env_file': ['./fotograf-de-scraper/.env'],
'environment': ['TZ=Europe/Berlin'],
'ports': ['8002:8000'],
'volumes': [
'./fotograf-de-scraper/backend:/app',
'./fotograf-de-scraper/backend/data:/app/data'
],
'restart': 'unless-stopped'
}
new_services['fotograf-de-scraper-frontend'] = {
'build': {
'context': './fotograf-de-scraper/frontend',
'dockerfile': 'Dockerfile',
'args': {'VITE_API_BASE_URL': '/fotograf-de-api'}
},
'container_name': 'fotograf-de-scraper-frontend',
'ports': ['3009:80'],
'depends_on': ['fotograf-de-scraper-backend'],
'restart': 'unless-stopped'
}
# Update NGINX depends_on
if 'nginx' in new_services and 'depends_on' in new_services['nginx']:
new_services['nginx']['depends_on'] = {
'dashboard': {'condition': 'service_started'},
'company-explorer': {'condition': 'service_healthy'},
'transcription-tool': {'condition': 'service_started'},
'fotograf-de-scraper-frontend': {'condition': 'service_started'}
}
data['services'] = new_services
# Prune unused volumes
data['volumes'] = {'transcription_uploads': {}}
with open('docker-compose.yml', 'w') as f:
yaml.dump(data, f, sort_keys=False)

View File

@@ -38,47 +38,47 @@ http {
proxy_set_header Connection "upgrade";
}
location /lead/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://lead-engine:8501/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_read_timeout 86400;
}
# location /lead/ {
# auth_basic "Restricted Access - Local AI Suite";
# auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_pass http://lead-engine:8501/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# proxy_http_version 1.1;
# proxy_read_timeout 86400;
# }
location /gtm/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://gtm-architect:3005/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# location /gtm/ {
# auth_basic "Restricted Access - Local AI Suite";
# auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_pass http://gtm-architect:3005/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
location /market/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://market-intelligence:3001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# location /market/ {
# auth_basic "Restricted Access - Local AI Suite";
# auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_pass http://market-intelligence:3001/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
location /b2b/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://b2b-marketing-assistant:3002/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# location /b2b/ {
# auth_basic "Restricted Access - Local AI Suite";
# auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_pass http://b2b-marketing-assistant:3002/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
location /tr/ {
auth_basic "Restricted Access - Local AI Suite";
@@ -91,72 +91,93 @@ http {
proxy_set_header Connection "upgrade";
}
location /content/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://content-engine:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# location /content/ {
# auth_basic "Restricted Access - Local AI Suite";
# auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_pass http://content-engine:3000/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
location /competitor/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://competitor-analysis:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# location /competitor/ {
# auth_basic "Restricted Access - Local AI Suite";
# auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_pass http://competitor-analysis:3000/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
location /heatmap/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://heatmap-frontend:80/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# location /heatmap/ {
# auth_basic "Restricted Access - Local AI Suite";
# auth_basic_user_file /etc/nginx/.htpasswd;
# proxy_pass http://heatmap-frontend:80/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
location /feedback/ {
auth_basic off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
rewrite ^/feedback/(.*)$ /$1 break;
proxy_pass http://lead-engine:8004;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# location /feedback/ {
# auth_basic off;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# rewrite ^/feedback/(.*)$ /$1 break;
# proxy_pass http://lead-engine:8004;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# }
# Smartlead Webhooks (public)
location /public/smartlead/ {
auth_basic off;
# Rewrite the URL to remove the public prefix and pass the rest to the webhook handler
# e.g., /public/smartlead/hot-lead -> /webhook/hot-lead
rewrite ^/public/smartlead/(.*)$ /webhook/$1 break;
# location /public/smartlead/ {
# auth_basic off;
# # Rewrite the URL to remove the public prefix and pass the rest to the webhook handler
# # e.g., /public/smartlead/hot-lead -> /webhook/hot-lead
# rewrite ^/public/smartlead/(.*)$ /webhook/$1 break;
#
# proxy_pass http://lead-engine:8004;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# }
proxy_pass http://lead-engine:8004;
# location /connector/ {
# auth_basic off;
# proxy_pass http://connector-superoffice:8000/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
location /fotograf-de/ {
auth_basic "Restricted Access - Local AI Suite";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://fotograf-de-scraper-frontend:80/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /connector/ {
auth_basic off;
proxy_pass http://connector-superoffice:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# Fotograf.de Backend API (internal)
location /fotograf-de-api/ {
auth_basic off;
rewrite ^/fotograf-de-api/(.*)$ /$1 break;
proxy_pass http://fotograf-de-scraper-backend:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}