feat: add clean public routes for alpine ui

This commit is contained in:
a.tolmachev
2026-03-31 22:07:12 +03:00
parent 9cee29d110
commit f5a658b4f0
17 changed files with 198 additions and 115 deletions
+1
View File
@@ -10,6 +10,7 @@ DoD:
- Alpine UI pages have consistent feedback and shell state - Alpine UI pages have consistent feedback and shell state
- Settings page exposes only honest live functionality and clearly marks deferred capabilities - Settings page exposes only honest live functionality and clearly marks deferred capabilities
- Wizard live actions have stable loading and feedback behavior on real backend requests - Wizard live actions have stable loading and feedback behavior on real backend requests
- Public UI routes use clean canonical paths instead of exposing `/html/...`
## Next ## Next
+13 -13
View File
@@ -23,7 +23,7 @@
<!-- ═══════════════════ NAVBAR ═══════════════════ --> <!-- ═══════════════════ NAVBAR ═══════════════════ -->
<nav class="navbar"> <nav class="navbar">
<a href="index.html" class="nav-logo"> <a href="/" class="nav-logo">
<div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div> <div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div>
<span class="nav-logo-text">Crank</span> <span class="nav-logo-text">Crank</span>
</a> </a>
@@ -39,7 +39,7 @@
<div class="ws-dropdown-label">Your workspaces</div> <div class="ws-dropdown-label">Your workspaces</div>
<div id="ws-dropdown-list"></div> <div id="ws-dropdown-list"></div>
<div class="ws-dropdown-footer"> <div class="ws-dropdown-footer">
<button class="ws-dropdown-create" onclick="window.location.href='workspace-setup.html?mode=create'"> <button class="ws-dropdown-create" onclick="window.location.href='/workspace-setup?mode=create'">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg> <svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg>
Create workspace Create workspace
</button> </button>
@@ -48,11 +48,11 @@
</div> </div>
<div class="nav-links"> <div class="nav-links">
<a href="index.html" class="nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="nav-link active" data-i18n="nav.agents">Agents</a> <a href="/agents" class="nav-link active" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="nav-right"> <div class="nav-right">
@@ -72,7 +72,7 @@
<div class="user-dropdown-name">Operator</div> <div class="user-dropdown-name">Operator</div>
<div class="user-dropdown-role" id="user-ws-role">Admin · acme-workspace</div> <div class="user-dropdown-role" id="user-ws-role">Admin · acme-workspace</div>
</div> </div>
<button class="user-dropdown-item" onclick="window.location.href='settings.html'"> <button class="user-dropdown-item" onclick="window.location.href='/settings'">
<svg width="13" height="13"><use href="icons/general/settings.svg#icon"/></svg> <svg width="13" height="13"><use href="icons/general/settings.svg#icon"/></svg>
<span data-i18n="nav.settings">Settings</span> <span data-i18n="nav.settings">Settings</span>
</button> </button>
@@ -87,11 +87,11 @@
</nav> </nav>
<div class="mobile-nav"> <div class="mobile-nav">
<a href="index.html" class="mobile-nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="mobile-nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="mobile-nav-link active" data-i18n="nav.agents">Agents</a> <a href="/agents" class="mobile-nav-link active" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="mobile-nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="mobile-nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="mobile-nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="mobile-nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<!-- ═══════════════════ PAGE ═══════════════════ --> <!-- ═══════════════════ PAGE ═══════════════════ -->
+12 -12
View File
@@ -35,7 +35,7 @@
<!-- ═══════════════════ NAVBAR ═══════════════════ --> <!-- ═══════════════════ NAVBAR ═══════════════════ -->
<nav class="navbar"> <nav class="navbar">
<a href="index.html" class="nav-logo"> <a href="/" class="nav-logo">
<div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div> <div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div>
<span class="nav-logo-text">Crank</span> <span class="nav-logo-text">Crank</span>
</a> </a>
@@ -51,7 +51,7 @@
<div class="ws-dropdown-label">Your workspaces</div> <div class="ws-dropdown-label">Your workspaces</div>
<div id="ws-dropdown-list"></div> <div id="ws-dropdown-list"></div>
<div class="ws-dropdown-footer"> <div class="ws-dropdown-footer">
<button class="ws-dropdown-create" onclick="window.location.href='workspace-setup.html?mode=create'"> <button class="ws-dropdown-create" onclick="window.location.href='/workspace-setup?mode=create'">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg> <svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg>
Create workspace Create workspace
</button> </button>
@@ -60,11 +60,11 @@
</div> </div>
<div class="nav-links"> <div class="nav-links">
<a href="index.html" class="nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="nav-link active" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="nav-link active" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="nav-right"> <div class="nav-right">
@@ -103,11 +103,11 @@
</nav> </nav>
<div class="mobile-nav"> <div class="mobile-nav">
<a href="index.html" class="mobile-nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="mobile-nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="mobile-nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="mobile-nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="mobile-nav-link active" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="mobile-nav-link active" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="mobile-nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="mobile-nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="mobile-nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="mobile-nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<!-- ═══════════════════ PAGE ═══════════════════ --> <!-- ═══════════════════ PAGE ═══════════════════ -->
+12 -12
View File
@@ -21,7 +21,7 @@
<body> <body>
<nav class="navbar"> <nav class="navbar">
<a href="index.html" class="nav-logo"> <a href="/" class="nav-logo">
<div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div> <div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div>
<span class="nav-logo-text">Crank</span> <span class="nav-logo-text">Crank</span>
</a> </a>
@@ -37,7 +37,7 @@
<div class="ws-dropdown-label">Your workspaces</div> <div class="ws-dropdown-label">Your workspaces</div>
<div id="ws-dropdown-list"></div> <div id="ws-dropdown-list"></div>
<div class="ws-dropdown-footer"> <div class="ws-dropdown-footer">
<button class="ws-dropdown-create" onclick="window.location.href='workspace-setup.html?mode=create'"> <button class="ws-dropdown-create" onclick="window.location.href='/workspace-setup?mode=create'">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg> <svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg>
Create workspace Create workspace
</button> </button>
@@ -46,11 +46,11 @@
</div> </div>
<div class="nav-links"> <div class="nav-links">
<a href="index.html" class="nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="nav-link active" data-i18n="nav.logs">Logs</a> <a href="/logs" class="nav-link active" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="nav-right"> <div class="nav-right">
<button class="nav-hamburger" aria-label="Menu"><span></span><span></span><span></span></button> <button class="nav-hamburger" aria-label="Menu"><span></span><span></span><span></span></button>
@@ -84,11 +84,11 @@
</nav> </nav>
<div class="mobile-nav"> <div class="mobile-nav">
<a href="index.html" class="mobile-nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="mobile-nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="mobile-nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="mobile-nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="mobile-nav-link active" data-i18n="nav.logs">Logs</a> <a href="/logs" class="mobile-nav-link active" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="mobile-nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="mobile-nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="page"> <div class="page">
+12 -12
View File
@@ -21,7 +21,7 @@
<body> <body>
<nav class="navbar"> <nav class="navbar">
<a href="index.html" class="nav-logo"> <a href="/" class="nav-logo">
<div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div> <div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div>
<span class="nav-logo-text">Crank</span> <span class="nav-logo-text">Crank</span>
</a> </a>
@@ -37,7 +37,7 @@
<div class="ws-dropdown-label">Your workspaces</div> <div class="ws-dropdown-label">Your workspaces</div>
<div id="ws-dropdown-list"></div> <div id="ws-dropdown-list"></div>
<div class="ws-dropdown-footer"> <div class="ws-dropdown-footer">
<button class="ws-dropdown-create" onclick="window.location.href='workspace-setup.html?mode=create'"> <button class="ws-dropdown-create" onclick="window.location.href='/workspace-setup?mode=create'">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg> <svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg>
Create workspace Create workspace
</button> </button>
@@ -46,11 +46,11 @@
</div> </div>
<div class="nav-links"> <div class="nav-links">
<a href="index.html" class="nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="nav-right"> <div class="nav-right">
<button class="nav-hamburger" aria-label="Menu"><span></span><span></span><span></span></button> <button class="nav-hamburger" aria-label="Menu"><span></span><span></span><span></span></button>
@@ -84,11 +84,11 @@
</nav> </nav>
<div class="mobile-nav"> <div class="mobile-nav">
<a href="index.html" class="mobile-nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="mobile-nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="mobile-nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="mobile-nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="mobile-nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="mobile-nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="mobile-nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="mobile-nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="page"> <div class="page">
+12 -12
View File
@@ -21,7 +21,7 @@
<body> <body>
<nav class="navbar"> <nav class="navbar">
<a href="index.html" class="nav-logo"> <a href="/" class="nav-logo">
<div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div> <div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div>
<span class="nav-logo-text">Crank</span> <span class="nav-logo-text">Crank</span>
</a> </a>
@@ -37,7 +37,7 @@
<div class="ws-dropdown-label">Your workspaces</div> <div class="ws-dropdown-label">Your workspaces</div>
<div id="ws-dropdown-list"></div> <div id="ws-dropdown-list"></div>
<div class="ws-dropdown-footer"> <div class="ws-dropdown-footer">
<button class="ws-dropdown-create" onclick="window.location.href='workspace-setup.html?mode=create'"> <button class="ws-dropdown-create" onclick="window.location.href='/workspace-setup?mode=create'">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg> <svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg>
Create workspace Create workspace
</button> </button>
@@ -46,11 +46,11 @@
</div> </div>
<div class="nav-links"> <div class="nav-links">
<a href="index.html" class="nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="nav-link active" data-i18n="nav.usage">Usage</a> <a href="/usage" class="nav-link active" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="nav-right"> <div class="nav-right">
<button class="nav-hamburger" aria-label="Menu"><span></span><span></span><span></span></button> <button class="nav-hamburger" aria-label="Menu"><span></span><span></span><span></span></button>
@@ -84,11 +84,11 @@
</nav> </nav>
<div class="mobile-nav"> <div class="mobile-nav">
<a href="index.html" class="mobile-nav-link" data-i18n="nav.operations">Operations</a> <a href="/" class="mobile-nav-link" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="mobile-nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="mobile-nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="mobile-nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="mobile-nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="mobile-nav-link active" data-i18n="nav.usage">Usage</a> <a href="/usage" class="mobile-nav-link active" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="page"> <div class="page">
+12 -12
View File
@@ -22,7 +22,7 @@
<!-- ═══════════════════ NAVBAR ═══════════════════ --> <!-- ═══════════════════ NAVBAR ═══════════════════ -->
<nav class="navbar"> <nav class="navbar">
<a href="../../index.html" class="nav-logo"> <a href="/" class="nav-logo">
<div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div> <div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div>
<span class="nav-logo-text">Crank</span> <span class="nav-logo-text">Crank</span>
</a> </a>
@@ -38,7 +38,7 @@
<div class="ws-dropdown-label">Your workspaces</div> <div class="ws-dropdown-label">Your workspaces</div>
<div id="ws-dropdown-list"></div> <div id="ws-dropdown-list"></div>
<div class="ws-dropdown-footer"> <div class="ws-dropdown-footer">
<button class="ws-dropdown-create" onclick="window.location.href='../workspace-setup.html?mode=create'"> <button class="ws-dropdown-create" onclick="window.location.href='/workspace-setup?mode=create'">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg> <svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg>
Create workspace Create workspace
</button> </button>
@@ -47,11 +47,11 @@
</div> </div>
<div class="nav-links"> <div class="nav-links">
<a href="../../index.html" class="nav-link active" data-i18n="nav.operations">Operations</a> <a href="/" class="nav-link active" data-i18n="nav.operations">Operations</a>
<a href="../agents.html" class="nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="nav-link" data-i18n="nav.agents">Agents</a>
<a href="../api-keys.html" class="nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="../logs.html" class="nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="nav-link" data-i18n="nav.logs">Logs</a>
<a href="../usage.html" class="nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="nav-right"> <div class="nav-right">
@@ -90,11 +90,11 @@
</nav> </nav>
<div class="mobile-nav"> <div class="mobile-nav">
<a href="../../index.html" class="mobile-nav-link active" data-i18n="nav.operations">Operations</a> <a href="/" class="mobile-nav-link active" data-i18n="nav.operations">Operations</a>
<a href="../agents.html" class="mobile-nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="mobile-nav-link" data-i18n="nav.agents">Agents</a>
<a href="../api-keys.html" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="../logs.html" class="mobile-nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="mobile-nav-link" data-i18n="nav.logs">Logs</a>
<a href="../usage.html" class="mobile-nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="mobile-nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<!-- ═══════════════════ WIZARD SHELL ═══════════════════ --> <!-- ═══════════════════ WIZARD SHELL ═══════════════════ -->
+1 -1
View File
@@ -23,7 +23,7 @@
<!-- Top bar --> <!-- Top bar -->
<div class="ws-setup-topbar"> <div class="ws-setup-topbar">
<a href="index.html" class="ws-setup-logo"> <a href="/" class="ws-setup-logo">
<div class="ws-setup-logo-mark"> <div class="ws-setup-logo-mark">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="18" height="18" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="18" height="18" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/></svg>
</div> </div>
+13 -13
View File
@@ -21,7 +21,7 @@
<!-- ═══════════════════ NAVBAR ═══════════════════ --> <!-- ═══════════════════ NAVBAR ═══════════════════ -->
<nav class="navbar"> <nav class="navbar">
<a href="index.html" class="nav-logo"> <a href="/" class="nav-logo">
<div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div> <div class="nav-logo-mark"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="white"><path fill-rule="evenodd" d="M 10.000,1.800 L 12.287,3.962 L 15.408,3.557 L 15.987,6.650 L 18.750,8.157 L 17.400,11.000 L 18.750,13.843 L 15.987,15.350 L 15.408,18.443 L 12.287,18.038 L 10.000,20.200 L 7.713,18.038 L 4.592,18.443 L 4.013,15.350 L 1.250,13.843 L 2.600,11.000 L 1.250,8.157 L 4.013,6.650 L 4.592,3.557 L 7.713,3.962 Z M 12.800,11.000 A 2.8 2.8 0 1 0 7.200,11.000 A 2.8 2.8 0 1 0 12.800,11.000 Z"/><path fill-rule="evenodd" d="M 11.791,15.604 Q 16.083,17.179 21.375,21.154 A 2.00 2.00 0 1 1 23.625,17.846 Q 19.782,15.610 14.940,10.973 Z M 24.300,19.500 A 1.8 1.8 0 1 0 20.700,19.500 A 1.8 1.8 0 1 0 24.300,19.500 Z"/><path d="M 10.0,9.7 L 11.3,11.0 L 10.0,12.3 L 8.7,11.0 Z" fill="rgba(0,0,0,0.3)"/></svg></div>
<span class="nav-logo-text">Crank</span> <span class="nav-logo-text">Crank</span>
</a> </a>
@@ -37,7 +37,7 @@
<div class="ws-dropdown-label">Your workspaces</div> <div class="ws-dropdown-label">Your workspaces</div>
<div id="ws-dropdown-list"></div> <div id="ws-dropdown-list"></div>
<div class="ws-dropdown-footer"> <div class="ws-dropdown-footer">
<button class="ws-dropdown-create" onclick="window.location.href=(window.APP_BASE||'')+'html/workspace-setup.html?mode=create'"> <button class="ws-dropdown-create" onclick="window.location.href='/workspace-setup?mode=create'">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg> <svg width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M8 3v10M3 8h10"/></svg>
Create workspace Create workspace
</button> </button>
@@ -46,11 +46,11 @@
</div> </div>
<div class="nav-links"> <div class="nav-links">
<a href="index.html" class="nav-link active" data-i18n="nav.operations">Operations</a> <a href="/" class="nav-link active" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<div class="nav-right"> <div class="nav-right">
@@ -79,7 +79,7 @@
<div class="user-dropdown-name">Operator</div> <div class="user-dropdown-name">Operator</div>
<div class="user-dropdown-role">Admin · acme-workspace</div> <div class="user-dropdown-role">Admin · acme-workspace</div>
</div> </div>
<button class="user-dropdown-item" @click="openDropdown = null; window.location.href='html/settings.html'"> <button class="user-dropdown-item" @click="openDropdown = null; window.location.href='/settings'">
<svg width="13" height="13"><use href="icons/general/settings.svg#icon"/></svg> <svg width="13" height="13"><use href="icons/general/settings.svg#icon"/></svg>
<span data-i18n="nav.settings">Settings</span> <span data-i18n="nav.settings">Settings</span>
</button> </button>
@@ -95,11 +95,11 @@
<!-- Mobile nav dropdown --> <!-- Mobile nav dropdown -->
<div class="mobile-nav" x-show="navOpen" x-transition @click.stop> <div class="mobile-nav" x-show="navOpen" x-transition @click.stop>
<a href="index.html" class="mobile-nav-link active" data-i18n="nav.operations">Operations</a> <a href="/" class="mobile-nav-link active" data-i18n="nav.operations">Operations</a>
<a href="html/agents.html" class="mobile-nav-link" data-i18n="nav.agents">Agents</a> <a href="/agents" class="mobile-nav-link" data-i18n="nav.agents">Agents</a>
<a href="html/api-keys.html" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a> <a href="/api-keys" class="mobile-nav-link" data-i18n="nav.apikeys">API Keys</a>
<a href="html/logs.html" class="mobile-nav-link" data-i18n="nav.logs">Logs</a> <a href="/logs" class="mobile-nav-link" data-i18n="nav.logs">Logs</a>
<a href="html/usage.html" class="mobile-nav-link" data-i18n="nav.usage">Usage</a> <a href="/usage" class="mobile-nav-link" data-i18n="nav.usage">Usage</a>
</div> </div>
<!-- ═══════════════════ PAGE ═══════════════════ --> <!-- ═══════════════════ PAGE ═══════════════════ -->
+2 -2
View File
@@ -22,11 +22,11 @@
} }
function loginUrl() { function loginUrl() {
return (window.APP_BASE || '') + 'html/login.html'; return (window.CrankRoutes && window.CrankRoutes.login) || '/login';
} }
function homeUrl() { function homeUrl() {
return (window.APP_BASE || '') + 'index.html'; return (window.CrankRoutes && window.CrankRoutes.home) || '/';
} }
function clearUserMirror() { function clearUserMirror() {
+3 -2
View File
@@ -356,7 +356,8 @@ document.addEventListener('alpine:init', function() {
}, },
editOperation(operation) { editOperation(operation) {
window.location.href = (window.APP_BASE || '') + 'html/wizard/?mode=edit&operationId=' + encodeURIComponent(operation.id); window.location.href = ((window.CrankRoutes && window.CrankRoutes.wizard) || '/wizard/')
+ '?mode=edit&operationId=' + encodeURIComponent(operation.id);
}, },
async deleteOperation(id) { async deleteOperation(id) {
@@ -428,7 +429,7 @@ document.addEventListener('alpine:init', function() {
}, },
handleNewOperation() { handleNewOperation() {
window.location.href = (window.APP_BASE || '') + 'html/wizard/'; window.location.href = (window.CrankRoutes && window.CrankRoutes.wizard) || '/wizard/';
}, },
handleLogout() { handleLogout() {
+13 -18
View File
@@ -1,20 +1,15 @@
/**
* config.js — auto-detects base paths based on current page location.
* Must be loaded before workspace.js and other navigation-using scripts.
*/
(function() { (function() {
var p = window.location.pathname; window.APP_BASE = '/';
// html/wizard/ is two levels deep from root window.DATA_URL = '/data/';
if (/\/html\/wizard\//.test(p)) { window.CrankRoutes = {
window.APP_BASE = '../../'; home: '/',
window.DATA_URL = '../../data/'; login: '/login',
// html/*.html is one level deep from root agents: '/agents',
} else if (/\/html\//.test(p)) { apiKeys: '/api-keys',
window.APP_BASE = '../'; logs: '/logs',
window.DATA_URL = '../data/'; usage: '/usage',
// root level (index.html) settings: '/settings',
} else { workspaceSetup: '/workspace-setup',
window.APP_BASE = ''; wizard: '/wizard/'
window.DATA_URL = 'data/'; };
}
}()); }());
+2 -2
View File
@@ -84,7 +84,7 @@
if (dropdown) { if (dropdown) {
dropdown.style.display = 'none'; dropdown.style.display = 'none';
} }
window.location.href = (window.APP_BASE || '') + 'html/settings.html#profile'; window.location.href = ((window.CrankRoutes && window.CrankRoutes.settings) || '/settings') + '#profile';
}); });
}); });
@@ -93,7 +93,7 @@
if (dropdown) { if (dropdown) {
dropdown.style.display = 'none'; dropdown.style.display = 'none';
} }
window.location.href = (window.APP_BASE || '') + 'html/settings.html'; window.location.href = (window.CrankRoutes && window.CrankRoutes.settings) || '/settings';
}); });
}); });
} }
+2 -2
View File
@@ -189,14 +189,14 @@ document.addEventListener('DOMContentLoaded', async function() {
var backToCatalog = document.getElementById('back-to-catalog'); var backToCatalog = document.getElementById('back-to-catalog');
if (backToCatalog) { if (backToCatalog) {
backToCatalog.addEventListener('click', function() { backToCatalog.addEventListener('click', function() {
window.location.href = (window.APP_BASE || '') + 'index.html'; window.location.href = (window.CrankRoutes && window.CrankRoutes.home) || '/';
}); });
} }
var closeBtn = document.querySelector('.progress-close'); var closeBtn = document.querySelector('.progress-close');
if (closeBtn) { if (closeBtn) {
closeBtn.addEventListener('click', function() { closeBtn.addEventListener('click', function() {
window.location.href = (window.APP_BASE || '') + 'index.html'; window.location.href = (window.CrankRoutes && window.CrankRoutes.home) || '/';
}); });
} }
+1 -1
View File
@@ -330,7 +330,7 @@ async function submitForm() {
setFormDirty(false); setFormDirty(false);
if (workspaceFormState.isCreateMode) { if (workspaceFormState.isCreateMode) {
window.location.href = (window.APP_BASE || '') + 'html/workspace-setup.html'; window.location.href = (window.CrankRoutes && window.CrankRoutes.workspaceSetup) || '/workspace-setup';
return; return;
} }
+1 -1
View File
@@ -117,7 +117,7 @@ function renderWorkspaceList() {
'</div>'; '</div>';
}).join('') + }).join('') +
'<div class="ws-dropdown-divider"></div>' + '<div class="ws-dropdown-divider"></div>' +
'<a class="ws-dropdown-mgmt-link" href="' + (window.APP_BASE || '') + 'html/workspace-setup.html" onclick="var dd=document.getElementById(\'ws-dropdown\');if(dd)dd.style.display=\'none\'">' + '<a class="ws-dropdown-mgmt-link" href="' + ((window.CrankRoutes && window.CrankRoutes.workspaceSetup) || '/workspace-setup') + '" onclick="var dd=document.getElementById(\'ws-dropdown\');if(dd)dd.style.display=\'none\'">' +
'<svg width="14" height="14"><use href="' + (window.APP_BASE || '') + 'icons/general/settings.svg#icon"/></svg>' + '<svg width="14" height="14"><use href="' + (window.APP_BASE || '') + 'icons/general/settings.svg#icon"/></svg>' +
'Workspace settings' + 'Workspace settings' +
'</a>'; '</a>';
+86
View File
@@ -1,10 +1,96 @@
server { server {
listen 3000; listen 3000;
server_name _; server_name _;
absolute_redirect off;
root /usr/share/nginx/html; root /usr/share/nginx/html;
index index.html; index index.html;
location = / {
try_files /index.html =404;
}
location = /index.html {
return 302 /;
}
location = /login {
try_files /html/login.html =404;
}
location = /agents {
try_files /html/agents.html =404;
}
location = /api-keys {
try_files /html/api-keys.html =404;
}
location = /logs {
try_files /html/logs.html =404;
}
location = /usage {
try_files /html/usage.html =404;
}
location = /settings {
try_files /html/settings.html =404;
}
location = /workspace-setup {
try_files /html/workspace-setup.html =404;
}
location = /wizard {
return 302 /wizard/;
}
location = /wizard/ {
try_files /html/wizard/index.html =404;
}
location ~ ^/wizard/(.+)$ {
rewrite ^/wizard/(.+)$ /html/wizard/$1 break;
try_files $uri =404;
}
location = /html/login.html {
return 302 /login;
}
location = /html/agents.html {
return 302 /agents;
}
location = /html/api-keys.html {
return 302 /api-keys;
}
location = /html/logs.html {
return 302 /logs;
}
location = /html/usage.html {
return 302 /usage;
}
location = /html/settings.html {
return 302 /settings;
}
location = /html/workspace-setup.html {
return 302 /workspace-setup$is_args$args;
}
location = /html/wizard/ {
return 302 /wizard/$is_args$args;
}
location = /html/wizard/index.html {
return 302 /wizard/;
}
location / { location / {
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html;
} }