[2fd88f42] 1. Kartendarstellung (Neutralisierung):
1. Kartendarstellung (Neutralisierung):
* Die TileLayer-URL in heatmap-tool/frontend/src/components/MapDisplay.tsx wurde auf eine neutrale CARTO light_all-Kachelansicht umgestellt und die Quellenangabe entsprechend angepasst.
This commit is contained in:
@@ -1 +1 @@
|
|||||||
{"task_id": "2ff88f42-8544-8000-8314-c9013414d1d0", "token": "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", "session_start_time": "2026-02-11T13:36:10.682978"}
|
{"task_id": "2fd88f42-8544-80f2-b60c-e23321da9620", "token": "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", "session_start_time": "2026-02-11T15:35:58.262778"}
|
||||||
@@ -201,9 +201,18 @@
|
|||||||
<p>
|
<p>
|
||||||
Transkribieren Sie Meetings (MP3/WAV) mit automatischer Sprechererkennung und Timestamps via Gemini 2.0.
|
Transkribieren Sie Meetings (MP3/WAV) mit automatischer Sprechererkennung und Timestamps via Gemini 2.0.
|
||||||
</p>
|
</p>
|
||||||
<a href="http://192.168.0.2:8001/tr/" class="btn">Starten →</a>
|
<a href="/tr/" class="btn">Starten →</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Heatmap Tool -->
|
||||||
|
<div class="card">
|
||||||
|
<span class="card-icon">🗺️</span>
|
||||||
|
<h2>Heatmap Tool</h2>
|
||||||
|
<p>
|
||||||
|
Visualisieren Sie Excel-Daten (PLZ) auf einer interaktiven Deutschlandkarte als Heatmap oder Cluster.
|
||||||
|
</p>
|
||||||
|
<a href="/heatmap/" class="btn">Starten →</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
|
|||||||
@@ -28,6 +28,25 @@ services:
|
|||||||
- transcription-app
|
- transcription-app
|
||||||
- content-app
|
- content-app
|
||||||
- competitor-analysis
|
- competitor-analysis
|
||||||
|
- heatmap-frontend
|
||||||
|
|
||||||
|
# --- HEATMAP ---
|
||||||
|
heatmap-backend:
|
||||||
|
build: ./heatmap-tool/backend
|
||||||
|
container_name: heatmap-backend
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./heatmap-tool/backend:/app
|
||||||
|
|
||||||
|
heatmap-frontend:
|
||||||
|
build: ./heatmap-tool/frontend
|
||||||
|
container_name: heatmap-frontend
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./heatmap-tool/frontend:/app
|
||||||
|
depends_on:
|
||||||
|
- heatmap-backend
|
||||||
|
|
||||||
|
|
||||||
# --- AGENT (moltbot) ---
|
# --- AGENT (moltbot) ---
|
||||||
# moltbot: # Moltbot ist oft auskommentiert, um Port-Konflikte zu vermeiden, da der Agent oft separat läuft.
|
# moltbot: # Moltbot ist oft auskommentiert, um Port-Konflikte zu vermeiden, da der Agent oft separat läuft.
|
||||||
@@ -88,8 +107,6 @@ services:
|
|||||||
GEMINI_API_KEY: "AIzaSyCFRmr1rOrkFKiEuh9GOCJNB2zfJsYmR68" # Placeholder, actual key is in file
|
GEMINI_API_KEY: "AIzaSyCFRmr1rOrkFKiEuh9GOCJNB2zfJsYmR68" # Placeholder, actual key is in file
|
||||||
ports:
|
ports:
|
||||||
- "8001:8001"
|
- "8001:8001"
|
||||||
depends_on:
|
|
||||||
- nginx # Abhängigkeit vom Proxy, da der Frontend über den Proxy geht
|
|
||||||
|
|
||||||
b2b-app:
|
b2b-app:
|
||||||
build:
|
build:
|
||||||
|
|||||||
@@ -77,10 +77,3 @@ body {
|
|||||||
padding: 20px;
|
padding: 20px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.map-container p {
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translate(-50%, -50%);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ function App() {
|
|||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
try {
|
try {
|
||||||
const response = await axios.post('/api/set-plz-column', {
|
const response = await axios.post('/heatmap/api/set-plz-column', {
|
||||||
plz_column: selectedColumn,
|
plz_column: selectedColumn,
|
||||||
});
|
});
|
||||||
handleUploadSuccess(response.data); // Re-use the success handler
|
handleUploadSuccess(response.data); // Re-use the success handler
|
||||||
@@ -89,7 +89,7 @@ function App() {
|
|||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
try {
|
try {
|
||||||
const response = await axios.post('/api/heatmap', {
|
const response = await axios.post('/heatmap/api/heatmap', {
|
||||||
filters: selectedFilters,
|
filters: selectedFilters,
|
||||||
tooltip_config: currentTooltipConfig, // Pass tooltip config to backend
|
tooltip_config: currentTooltipConfig, // Pass tooltip config to backend
|
||||||
});
|
});
|
||||||
@@ -170,14 +170,18 @@ function App() {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="map-container">
|
<div className="map-container">
|
||||||
{isLoading && <p>Loading map data...</p>}
|
{isLoading ? (
|
||||||
{error && <p className="error">{error}</p>}
|
<p>Loading map data...</p>
|
||||||
<MapDisplay
|
) : error ? (
|
||||||
heatmapData={heatmapData}
|
<p className="error">{error}</p>
|
||||||
radiusMultiplier={radiusMultiplier}
|
) : (
|
||||||
viewMode={viewMode}
|
<MapDisplay
|
||||||
tooltipColumns={tooltipColumns}
|
heatmapData={heatmapData}
|
||||||
/>
|
radiusMultiplier={radiusMultiplier}
|
||||||
|
viewMode={viewMode}
|
||||||
|
tooltipColumns={tooltipColumns}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ const FileUpload: React.FC<FileUploadProps> = ({ onUploadSuccess, setIsLoading,
|
|||||||
setError(null);
|
setError(null);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await axios.post('/api/upload', formData, {
|
const response = await axios.post('/heatmap/api/upload', formData, {
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'multipart/form-data',
|
'Content-Type': 'multipart/form-data',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ const MapDisplay: React.FC<MapDisplayProps> = ({ heatmapData, radiusMultiplier,
|
|||||||
|
|
||||||
if (heatmapData.length === 0) {
|
if (heatmapData.length === 0) {
|
||||||
return (
|
return (
|
||||||
<div style={{ textAlign: 'center', paddingTop: '50px' }}>
|
<div>
|
||||||
<p>No data to display on the map.</p>
|
<p>No data to display on the map.</p>
|
||||||
<p>Upload a file and apply filters to see the heatmap.</p>
|
<p>Upload a file and apply filters to see the heatmap.</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -87,8 +87,8 @@ const MapDisplay: React.FC<MapDisplayProps> = ({ heatmapData, radiusMultiplier,
|
|||||||
return (
|
return (
|
||||||
<MapContainer key={viewMode} center={germanyCenter} zoom={6} style={{ height: '100%', width: '100%' }}>
|
<MapContainer key={viewMode} center={germanyCenter} zoom={6} style={{ height: '100%', width: '100%' }}>
|
||||||
<TileLayer
|
<TileLayer
|
||||||
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
|
url="https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png"
|
||||||
attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors © <a href="https://carto.com/attributions">CARTO</a>'
|
||||||
/>
|
/>
|
||||||
{viewMode === 'points' ? renderPoints() : renderHeatmap()}
|
{viewMode === 'points' ? renderPoints() : renderHeatmap()}
|
||||||
</MapContainer>
|
</MapContainer>
|
||||||
|
|||||||
@@ -3,11 +3,19 @@ import react from '@vitejs/plugin-react'
|
|||||||
|
|
||||||
// https://vite.dev/config/
|
// https://vite.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
base: '/heatmap/',
|
||||||
plugins: [react()],
|
plugins: [react()],
|
||||||
server: {
|
server: {
|
||||||
|
host: true,
|
||||||
|
fs: {
|
||||||
|
strict: false
|
||||||
|
},
|
||||||
|
allowedHosts: [
|
||||||
|
'floke-ai.duckdns.org'
|
||||||
|
],
|
||||||
proxy: {
|
proxy: {
|
||||||
'/api': {
|
'/api': {
|
||||||
target: 'http://backend:8000',
|
target: 'http://heatmap-backend:8000',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,23 @@ http {
|
|||||||
proxy_send_timeout 1800s;
|
proxy_send_timeout 1800s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location ~ ^/heatmap/api/(.*)$ {
|
||||||
|
proxy_pass http://heatmap-backend:8000/api/$1$is_args$args;
|
||||||
|
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 /heatmap/ {
|
||||||
|
# Heatmap Tool
|
||||||
|
proxy_pass http://heatmap-frontend:5173;
|
||||||
|
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 /lead/ {
|
location /lead/ {
|
||||||
# Lead Engine (TradingTwins)
|
# Lead Engine (TradingTwins)
|
||||||
# Proxying external service on host
|
# Proxying external service on host
|
||||||
|
|||||||
Reference in New Issue
Block a user