secubox-openwrt/package/secubox/secubox-app-streamlit-launcher/files/usr/share/streamlit-launcher/loading.html
CyberMind-FR d9bcf1c09b feat(streamlit-launcher): Add on-demand startup with idle shutdown
New package secubox-app-streamlit-launcher:
- Lazy loading: apps start only when accessed
- Idle shutdown: stop apps after configurable timeout (default 30min)
- Memory management: force-stop low-priority apps when memory low
- Priority system: higher priority = keep running longer
- Always-on mode for critical apps
- Procd daemon with respawn

CLI: streamlit-launcherctl
  - daemon: run background manager
  - status/list: show app states and idle times
  - start/stop: manual app control
  - priority: set app priority (1-100)
  - check/check-memory: manual checks

Updated slforge with launcher integration:
- slforge launcher status/priority/always-on commands
- Access tracking on app start
- README documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-14 07:55:47 +01:00

91 lines
2.4 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="refresh" content="3">
<title>Starting App...</title>
<style>
:root {
--bg: #0a0e17;
--card: #161e2e;
--text: #e2e8f0;
--muted: #94a3b8;
--green: #00C853;
--blue: #2979FF;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--bg);
color: var(--text);
font-family: 'Segoe UI', system-ui, sans-serif;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.container {
text-align: center;
padding: 40px;
}
.spinner {
width: 60px;
height: 60px;
border: 4px solid var(--card);
border-top-color: var(--green);
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 24px;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
h1 {
font-size: 24px;
font-weight: 600;
margin-bottom: 12px;
}
p {
color: var(--muted);
font-size: 14px;
margin-bottom: 8px;
}
.hint {
font-size: 12px;
color: var(--muted);
opacity: 0.7;
margin-top: 24px;
}
.progress {
width: 200px;
height: 4px;
background: var(--card);
border-radius: 2px;
margin: 20px auto;
overflow: hidden;
}
.progress-bar {
height: 100%;
background: linear-gradient(90deg, var(--green), var(--blue));
animation: progress 3s ease-in-out infinite;
}
@keyframes progress {
0% { width: 0%; }
50% { width: 70%; }
100% { width: 100%; }
}
</style>
</head>
<body>
<div class="container">
<div class="spinner"></div>
<h1>Starting Application</h1>
<p>The app is being launched on-demand...</p>
<div class="progress">
<div class="progress-bar"></div>
</div>
<p class="hint">This page will refresh automatically</p>
</div>
</body>
</html>