| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>InklyAI - Signature Verification Demo</title> |
| <style> |
| * { |
| margin: 0; |
| padding: 0; |
| box-sizing: border-box; |
| } |
| |
| body { |
| font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| min-height: 100vh; |
| padding: 20px; |
| } |
| |
| .container { |
| max-width: 800px; |
| margin: 0 auto; |
| background: white; |
| border-radius: 20px; |
| box-shadow: 0 20px 40px rgba(0,0,0,0.1); |
| overflow: hidden; |
| } |
| |
| .header { |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| color: white; |
| padding: 40px; |
| text-align: center; |
| } |
| |
| .header h1 { |
| font-size: 3em; |
| margin-bottom: 10px; |
| font-weight: 300; |
| } |
| |
| .header p { |
| font-size: 1.3em; |
| opacity: 0.9; |
| } |
| |
| .main-content { |
| padding: 40px; |
| } |
| |
| .feature-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); |
| gap: 30px; |
| margin-bottom: 40px; |
| } |
| |
| .feature-card { |
| background: #f8f9fa; |
| border-radius: 15px; |
| padding: 30px; |
| text-align: center; |
| transition: transform 0.3s ease; |
| } |
| |
| .feature-card:hover { |
| transform: translateY(-5px); |
| } |
| |
| .feature-icon { |
| font-size: 3em; |
| margin-bottom: 20px; |
| } |
| |
| .feature-title { |
| font-size: 1.3em; |
| font-weight: bold; |
| margin-bottom: 15px; |
| color: #333; |
| } |
| |
| .feature-description { |
| color: #666; |
| line-height: 1.6; |
| } |
| |
| .demo-section { |
| background: #e8f2ff; |
| border-radius: 15px; |
| padding: 30px; |
| margin-bottom: 30px; |
| } |
| |
| .demo-title { |
| font-size: 1.5em; |
| margin-bottom: 20px; |
| color: #333; |
| text-align: center; |
| } |
| |
| .demo-steps { |
| list-style: none; |
| counter-reset: step-counter; |
| } |
| |
| .demo-steps li { |
| counter-increment: step-counter; |
| margin-bottom: 15px; |
| padding: 15px; |
| background: white; |
| border-radius: 10px; |
| box-shadow: 0 2px 10px rgba(0,0,0,0.1); |
| position: relative; |
| padding-left: 60px; |
| } |
| |
| .demo-steps li::before { |
| content: counter(step-counter); |
| position: absolute; |
| left: 20px; |
| top: 50%; |
| transform: translateY(-50%); |
| background: #667eea; |
| color: white; |
| width: 30px; |
| height: 30px; |
| border-radius: 50%; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| font-weight: bold; |
| } |
| |
| .tech-stack { |
| background: #f8f9fa; |
| border-radius: 15px; |
| padding: 30px; |
| margin-bottom: 30px; |
| } |
| |
| .tech-title { |
| font-size: 1.3em; |
| margin-bottom: 20px; |
| color: #333; |
| text-align: center; |
| } |
| |
| .tech-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); |
| gap: 20px; |
| } |
| |
| .tech-item { |
| background: white; |
| padding: 20px; |
| border-radius: 10px; |
| text-align: center; |
| box-shadow: 0 2px 10px rgba(0,0,0,0.1); |
| } |
| |
| .tech-name { |
| font-weight: bold; |
| color: #667eea; |
| margin-bottom: 10px; |
| } |
| |
| .cta-section { |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| color: white; |
| border-radius: 15px; |
| padding: 40px; |
| text-align: center; |
| } |
| |
| .cta-title { |
| font-size: 2em; |
| margin-bottom: 20px; |
| } |
| |
| .cta-description { |
| font-size: 1.2em; |
| margin-bottom: 30px; |
| opacity: 0.9; |
| } |
| |
| .cta-buttons { |
| display: flex; |
| gap: 20px; |
| justify-content: center; |
| flex-wrap: wrap; |
| } |
| |
| .cta-btn { |
| background: white; |
| color: #667eea; |
| border: none; |
| padding: 15px 30px; |
| border-radius: 25px; |
| font-size: 1.1em; |
| font-weight: bold; |
| cursor: pointer; |
| text-decoration: none; |
| display: inline-block; |
| transition: transform 0.2s ease; |
| } |
| |
| .cta-btn:hover { |
| transform: translateY(-2px); |
| } |
| |
| .status-indicator { |
| display: inline-block; |
| width: 12px; |
| height: 12px; |
| border-radius: 50%; |
| margin-right: 8px; |
| } |
| |
| .status-online { |
| background: #28a745; |
| } |
| |
| .status-offline { |
| background: #dc3545; |
| } |
| |
| @media (max-width: 768px) { |
| .cta-buttons { |
| flex-direction: column; |
| align-items: center; |
| } |
| |
| .main-content { |
| padding: 20px; |
| } |
| } |
| </style> |
| </head> |
| <body> |
| <div class="container"> |
| <div class="header"> |
| <h1>InklyAI</h1> |
| <p>Advanced E-Signature Verification System</p> |
| <div style="margin-top: 20px;"> |
| <span class="status-indicator status-offline" id="statusIndicator"></span> |
| <span id="statusText">Web Server Offline</span> |
| </div> |
| </div> |
|
|
| <div class="main-content"> |
| |
| <div class="feature-grid"> |
| <div class="feature-card"> |
| <div class="feature-icon">🔐</div> |
| <div class="feature-title">Biometric Authentication</div> |
| <div class="feature-description"> |
| Advanced signature verification using Siamese neural networks for secure AI agent authentication. |
| </div> |
| </div> |
|
|
| <div class="feature-card"> |
| <div class="feature-icon">🤖</div> |
| <div class="feature-title">AgentAI Integration</div> |
| <div class="feature-description"> |
| Seamless integration with AgentAI systems for multi-agent authentication and secure communication. |
| </div> |
| </div> |
|
|
| <div class="feature-card"> |
| <div class="feature-icon">📊</div> |
| <div class="feature-title">Real-time Analytics</div> |
| <div class="feature-description"> |
| Comprehensive monitoring, statistics, and audit trails for compliance and performance tracking. |
| </div> |
| </div> |
|
|
| <div class="feature-card"> |
| <div class="feature-icon">🚀</div> |
| <div class="feature-title">Production Ready</div> |
| <div class="feature-description"> |
| Scalable architecture with REST API, web UI, and enterprise-grade security features. |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="demo-section"> |
| <h2 class="demo-title">How to Use InklyAI</h2> |
| <ol class="demo-steps"> |
| <li>Start the web server by running <code>python web_app.py</code></li> |
| <li>Open your browser and go to <code>http://localhost:5000</code></li> |
| <li>Select an agent from the dropdown menu</li> |
| <li>Upload a reference signature template</li> |
| <li>Upload a signature to verify</li> |
| <li>Click "Verify Signatures" to get results</li> |
| <li>View verification results with similarity scores</li> |
| <li>Manage agents and view statistics</li> |
| </ol> |
| </div> |
|
|
| |
| <div class="tech-stack"> |
| <h2 class="tech-title">Technology Stack</h2> |
| <div class="tech-grid"> |
| <div class="tech-item"> |
| <div class="tech-name">PyTorch</div> |
| <div>Deep Learning Framework</div> |
| </div> |
| <div class="tech-item"> |
| <div class="tech-name">Flask</div> |
| <div>Web Application Framework</div> |
| </div> |
| <div class="tech-item"> |
| <div class="tech-name">OpenCV</div> |
| <div>Image Processing</div> |
| </div> |
| <div class="tech-item"> |
| <div class="tech-name">ResNet</div> |
| <div>CNN Architecture</div> |
| </div> |
| <div class="tech-item"> |
| <div class="tech-name">Siamese Networks</div> |
| <div>Signature Verification</div> |
| </div> |
| <div class="tech-item"> |
| <div class="tech-name">REST API</div> |
| <div>Integration Interface</div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="cta-section"> |
| <h2 class="cta-title">Ready to Get Started?</h2> |
| <p class="cta-description"> |
| Experience the power of AI-driven signature verification with our interactive web interface. |
| </p> |
| <div class="cta-buttons"> |
| <a href="http://localhost:8080" class="cta-btn" id="openAppBtn" onclick="checkServer()"> |
| Open Web Application |
| </a> |
| <a href="http://localhost:8080/agents" class="cta-btn" id="manageAgentsBtn" onclick="checkServer()"> |
| Manage Agents |
| </a> |
| <button class="cta-btn" onclick="startServer()"> |
| Start Server |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| <script> |
| |
| async function checkServer() { |
| try { |
| const response = await fetch('http://localhost:8080/api/health'); |
| if (response.ok) { |
| updateStatus(true); |
| } else { |
| updateStatus(false); |
| } |
| } catch (error) { |
| updateStatus(false); |
| } |
| } |
| |
| function updateStatus(isOnline) { |
| const indicator = document.getElementById('statusIndicator'); |
| const text = document.getElementById('statusText'); |
| const openAppBtn = document.getElementById('openAppBtn'); |
| const manageAgentsBtn = document.getElementById('manageAgentsBtn'); |
| |
| if (isOnline) { |
| indicator.className = 'status-indicator status-online'; |
| text.textContent = 'Web Server Online'; |
| openAppBtn.style.display = 'inline-block'; |
| manageAgentsBtn.style.display = 'inline-block'; |
| } else { |
| indicator.className = 'status-indicator status-offline'; |
| text.textContent = 'Web Server Offline'; |
| openAppBtn.style.display = 'none'; |
| manageAgentsBtn.style.display = 'none'; |
| } |
| } |
| |
| function startServer() { |
| alert('To start the server, run the following command in your terminal:\n\npython web_app.py\n\nThen refresh this page.'); |
| } |
| |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| checkServer(); |
| |
| setInterval(checkServer, 5000); |
| }); |
| </script> |
| </body> |
| </html> |
|
|