maximus-im / automation_workflow.html
lattmamb's picture
Upload 47 files
8beb2b1
{% extends 'layout.html' %}
{% block content %}
<div class="row mb-4">
<div class="col-12">
<div class="glass-card">
<div class="p-4">
<h1 class="display-5 quantum-glow">
<i class="fas fa-cogs me-2"></i> Automation Workflow
</h1>
<p class="lead">Visualize and manage the multi-dimensional quantum processing pipeline.</p>
<div class="vision-progress">
<div class="vision-progress-bar"></div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="glass-card mb-4">
<div class="card-body p-4">
<h3 class="h4 mb-4 quantum-glow">Quantum Processing Pipeline</h3>
<!-- Pyramid Workflow Visualization -->
<div class="workflow-pyramid-container">
<div class="workflow-pyramid position-relative">
{% for step in workflow_steps %}
<div class="workflow-step {% if step.status == 'completed' %}completed{% elif step.status == 'active' %}active{% else %}pending{% endif %}"
data-step-id="{{ step.id }}" style="--step-color: {{ step.color }};">
<div class="step-indicator">
<div class="step-number">{{ step.id }}</div>
<div class="step-line"></div>
</div>
<div class="step-content">
<h4 class="step-title">{{ step.name }}</h4>
<p class="step-desc">{{ step.description }}</p>
<span class="step-status badge {% if step.status == 'completed' %}bg-success{% elif step.status == 'active' %}bg-info{% else %}bg-secondary{% endif %} quantum-score">
{{ step.status | capitalize }}
</span>
</div>
<!-- LED tracer lines connecting steps -->
{% if not loop.last %}
<div class="step-connector" style="--connector-color: {{ step.color }};"></div>
{% endif %}
</div>
{% endfor %}
<!-- 3D Tetrahedron visualization at the bottom -->
<div class="tetrahedron-container">
<div class="tetrahedron">
<div class="tetra-face tetra-face-1"></div>
<div class="tetra-face tetra-face-2"></div>
<div class="tetra-face tetra-face-3"></div>
<div class="tetra-face tetra-face-4"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="glass-card mb-4">
<div class="card-body p-4">
<h3 class="h4 mb-4 quantum-glow">Workflow Status</h3>
<div class="mb-4">
<div class="d-flex justify-content-between align-items-center mb-2">
<span>Overall Progress</span>
<span class="badge bg-info quantum-score">60%</span>
</div>
<div class="progress" style="height: 8px;">
<div class="progress-bar progress-bar-striped progress-bar-animated bg-info" role="progressbar" style="width: 60%" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
<div class="workflow-stats">
<div class="stat-item mb-3">
<div class="d-flex justify-content-between">
<span>Completed Steps</span>
<span class="fw-bold text-success">2</span>
</div>
</div>
<div class="stat-item mb-3">
<div class="d-flex justify-content-between">
<span>Active Steps</span>
<span class="fw-bold text-info">1</span>
</div>
</div>
<div class="stat-item mb-3">
<div class="d-flex justify-content-between">
<span>Pending Steps</span>
<span class="fw-bold text-secondary">2</span>
</div>
</div>
<div class="stat-item mb-3">
<div class="d-flex justify-content-between">
<span>Total Execution Time</span>
<span class="fw-bold">2.4s</span>
</div>
</div>
</div>
<div class="mt-4 d-grid">
<button class="btn btn-outline-light quantum-btn">
<i class="fas fa-play me-2"></i> Run Workflow
</button>
</div>
</div>
</div>
<div class="glass-card">
<div class="card-body p-4">
<h3 class="h4 mb-4 quantum-glow">Current Activity</h3>
<div class="activity-log" id="activity-log">
<div class="activity-item">
<div class="activity-timestamp">11:15:30</div>
<div class="activity-content">
<span class="badge bg-success me-1">Step 2</span>
NLP Processing completed
</div>
</div>
<div class="activity-item">
<div class="activity-timestamp">11:15:28</div>
<div class="activity-content">
<span class="badge bg-info me-1">Step 3</span>
Starting Quantum Thinking algorithm
</div>
</div>
<div class="activity-item">
<div class="activity-timestamp">11:15:25</div>
<div class="activity-content">
<span class="badge bg-success me-1">Step 1</span>
Text input received (128 chars)
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
/* Workflow Pyramid Container */
.workflow-pyramid-container {
padding: 20px 0;
position: relative;
}
.workflow-pyramid {
display: flex;
flex-direction: column;
gap: 30px;
padding: 20px;
position: relative;
}
/* Workflow Steps */
.workflow-step {
--step-bg: rgba(30, 41, 59, 0.4);
--step-border: var(--step-color);
display: flex;
background: var(--step-bg);
border-radius: 12px;
padding: 15px;
position: relative;
transition: all 0.3s ease;
box-shadow: 0 3px 15px rgba(0, 0, 0, 0.1);
border-left: 3px solid var(--step-border);
}
.workflow-step:hover {
transform: translateY(-5px);
}
.workflow-step.completed {
--step-bg: rgba(40, 167, 69, 0.1);
}
.workflow-step.active {
--step-bg: rgba(13, 202, 240, 0.1);
animation: step-pulse 2s infinite alternate;
}
@keyframes step-pulse {
0% { box-shadow: 0 0 5px var(--step-color); }
100% { box-shadow: 0 0 15px var(--step-color); }
}
/* Step Connector - LED Tracer Lines */
.step-connector {
position: absolute;
left: 24px;
top: 100%;
height: 30px;
width: 2px;
background: linear-gradient(to bottom, var(--connector-color), transparent);
z-index: 1;
animation: pulse-connector 2s infinite alternate;
}
@keyframes pulse-connector {
0% { opacity: 0.5; }
100% { opacity: 1; }
}
/* Step Content */
.step-indicator {
display: flex;
flex-direction: column;
align-items: center;
margin-right: 15px;
}
.step-number {
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--step-color);
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
color: white;
box-shadow: 0 0 10px var(--step-color);
}
.step-line {
width: 2px;
height: 100%;
background-color: var(--step-color);
opacity: 0.5;
}
.step-content {
flex: 1;
}
.step-title {
font-size: 1.1rem;
margin-bottom: 5px;
color: var(--step-color);
}
.step-desc {
font-size: 0.9rem;
opacity: 0.8;
margin-bottom: 10px;
}
/* 3D Tetrahedron */
.tetrahedron-container {
margin-top: 30px;
height: 150px;
display: flex;
justify-content: center;
align-items: center;
perspective: 1000px;
}
.tetrahedron {
width: 100px;
height: 100px;
position: relative;
transform-style: preserve-3d;
animation: tetra-rotate 15s linear infinite;
}
@keyframes tetra-rotate {
0% { transform: rotateX(0) rotateY(0); }
100% { transform: rotateX(360deg) rotateY(360deg); }
}
.tetra-face {
position: absolute;
width: 0;
height: 0;
border-style: solid;
opacity: 0.7;
backface-visibility: visible;
}
.tetra-face-1 {
border-width: 0 50px 86.6px 50px;
border-color: transparent transparent rgba(218, 75, 134, 0.5) transparent;
transform: rotateX(30deg) translateY(-50px) translateZ(28.87px);
}
.tetra-face-2 {
border-width: 0 50px 86.6px 50px;
border-color: transparent transparent rgba(111, 66, 193, 0.5) transparent;
transform: rotateX(30deg) rotateY(120deg) translateY(-50px) translateZ(28.87px);
}
.tetra-face-3 {
border-width: 0 50px 86.6px 50px;
border-color: transparent transparent rgba(13, 202, 240, 0.5) transparent;
transform: rotateX(30deg) rotateY(240deg) translateY(-50px) translateZ(28.87px);
}
.tetra-face-4 {
border-width: 0 50px 86.6px 50px;
border-color: transparent transparent rgba(255, 255, 255, 0.3) transparent;
transform: rotateX(-30deg) rotateY(0deg) translateY(50px) translateZ(28.87px);
}
/* Activity Log */
.activity-log {
display: flex;
flex-direction: column;
gap: 15px;
height: 200px;
overflow-y: auto;
}
.activity-item {
display: flex;
gap: 10px;
font-size: 0.9rem;
padding-bottom: 10px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.activity-timestamp {
color: rgba(255, 255, 255, 0.6);
white-space: nowrap;
}
.activity-content {
flex: 1;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Animate the workflow steps on load
const steps = document.querySelectorAll('.workflow-step');
steps.forEach((step, index) => {
setTimeout(() => {
step.classList.add('fade-in');
}, index * 200);
});
// Simulate activity log updates
const activityLog = document.getElementById('activity-log');
const activities = [
{ time: '11:15:35', step: 3, message: 'Processing quantum dimension 1/3' },
{ time: '11:15:42', step: 3, message: 'Processing quantum dimension 2/3' },
{ time: '11:15:50', step: 3, message: 'Processing quantum dimension 3/3' }
];
let i = 0;
const activityTimer = setInterval(() => {
if (i >= activities.length) {
clearInterval(activityTimer);
return;
}
const activity = activities[i];
const activityItem = document.createElement('div');
activityItem.className = 'activity-item';
activityItem.innerHTML = `
<div class="activity-timestamp">${activity.time}</div>
<div class="activity-content">
<span class="badge bg-info me-1">Step ${activity.step}</span>
${activity.message}
</div>
`;
activityLog.insertBefore(activityItem, activityLog.firstChild);
// Apply fade-in effect
activityItem.style.opacity = '0';
setTimeout(() => {
activityItem.style.transition = 'opacity 0.5s ease';
activityItem.style.opacity = '1';
}, 10);
i++;
}, 5000);
// Add particle effects to the tetrahedron
const tetrahedron = document.querySelector('.tetrahedron');
setInterval(() => {
const rect = tetrahedron.getBoundingClientRect();
const x = rect.left + rect.width / 2;
const y = rect.top + rect.height / 2;
// Random position around the tetrahedron
const angle = Math.random() * Math.PI * 2;
const distance = 20 + Math.random() * 30;
const particleX = x + Math.cos(angle) * distance;
const particleY = y + Math.sin(angle) * distance;
// Create particle
createParticle(particleX, particleY);
}, 300);
function createParticle(x, y) {
const colors = ['#da4b86', '#6f42c1', '#0dcaf0'];
const color = colors[Math.floor(Math.random() * colors.length)];
const particle = document.createElement('div');
particle.className = 'quantum-particle';
particle.style.left = x + 'px';
particle.style.top = y + 'px';
particle.style.color = color;
document.body.appendChild(particle);
// Remove after animation
setTimeout(() => {
particle.remove();
}, 1000);
}
});
</script>
{% endblock %}