fix post-login blank page + rebrand login hero
All checks were successful
All checks were successful
- nginx: use alias for BASE_PATH fallback so static assets resolve correctly when deployed under a sub-path (fixes white page on K8s) - base.html: remove dead template refs (chat, notes, projects) that caused html/template to fail silently with Content-Length: 0 - login hero: rebrand from "Chat Switchboard" to "Switchboard Core", update tagline and feature pills to reflect platform pivot Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -90,8 +90,10 @@ server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Fallback: serve frontend shell (SPA)
|
# Fallback: serve frontend shell (SPA)
|
||||||
|
# alias strips the BASE_PATH prefix so /test/css/app.css → /usr/share/nginx/html/css/app.css
|
||||||
location ${BASE_PATH}/ {
|
location ${BASE_PATH}/ {
|
||||||
try_files $uri $uri/ ${BASE_PATH}/index.html;
|
alias /usr/share/nginx/html/;
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Security headers
|
# Security headers
|
||||||
|
|||||||
@@ -26,9 +26,7 @@
|
|||||||
<link rel="stylesheet" href="{{.BasePath}}/css/extension-surface.css?v={{.Version}}">
|
<link rel="stylesheet" href="{{.BasePath}}/css/extension-surface.css?v={{.Version}}">
|
||||||
<link rel="stylesheet" href="{{.BasePath}}/css/sw-shell.css?v={{.Version}}">
|
<link rel="stylesheet" href="{{.BasePath}}/css/sw-shell.css?v={{.Version}}">
|
||||||
<link rel="stylesheet" href="{{.BasePath}}/css/sw-debug.css?v={{.Version}}">
|
<link rel="stylesheet" href="{{.BasePath}}/css/sw-debug.css?v={{.Version}}">
|
||||||
{{if eq .Surface "chat"}}{{template "css-chat" .}}{{end}}
|
{{/* gutted: css-chat, css-notes, css-projects templates removed */}}
|
||||||
{{if eq .Surface "notes"}}{{template "css-notes" .}}{{end}}
|
|
||||||
{{if eq .Surface "projects"}}{{template "css-projects" .}}{{end}}
|
|
||||||
{{/* v0.27.0: Extension surface CSS — loaded from /surfaces/{id}/css/main.css */}}
|
{{/* v0.27.0: Extension surface CSS — loaded from /surfaces/{id}/css/main.css */}}
|
||||||
{{if and .Manifest (eq .Manifest.Source "extension")}}
|
{{if and .Manifest (eq .Manifest.Source "extension")}}
|
||||||
<link rel="stylesheet" href="{{.BasePath}}/surfaces/{{.Surface}}/css/main.css?v={{.Version}}">
|
<link rel="stylesheet" href="{{.BasePath}}/surfaces/{{.Surface}}/css/main.css?v={{.Version}}">
|
||||||
@@ -93,12 +91,9 @@
|
|||||||
|
|
||||||
<div class="surface" id="surface">
|
<div class="surface" id="surface">
|
||||||
<div class="surface-inner" id="surfaceInner">
|
<div class="surface-inner" id="surfaceInner">
|
||||||
{{if eq .Surface "chat"}}{{template "surface-chat" .}}
|
{{if eq .Surface "admin"}}{{template "surface-admin" .}}
|
||||||
{{else if eq .Surface "admin"}}{{template "surface-admin" .}}
|
|
||||||
{{else if eq .Surface "team-admin"}}{{template "surface-team-admin" .}}
|
{{else if eq .Surface "team-admin"}}{{template "surface-team-admin" .}}
|
||||||
{{else if eq .Surface "notes"}}{{template "surface-notes" .}}
|
|
||||||
{{else if eq .Surface "settings"}}{{template "surface-settings" .}}
|
{{else if eq .Surface "settings"}}{{template "surface-settings" .}}
|
||||||
{{else if eq .Surface "projects"}}{{template "surface-projects" .}}
|
|
||||||
{{else if and .Manifest (eq .Manifest.Source "extension")}}{{template "surface-extension" .}}
|
{{else if and .Manifest (eq .Manifest.Source "extension")}}{{template "surface-extension" .}}
|
||||||
{{else}}<div style="padding:20px">Unknown surface: {{.Surface}}</div>
|
{{else}}<div style="padding:20px">Unknown surface: {{.Surface}}</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
@@ -130,12 +125,9 @@
|
|||||||
workflow-surfaces.js removed. All surfaces use Preact SDK boot().
|
workflow-surfaces.js removed. All surfaces use Preact SDK boot().
|
||||||
Survivors: debug.js, repl.js (standalone, no old-layer deps). */}}
|
Survivors: debug.js, repl.js (standalone, no old-layer deps). */}}
|
||||||
|
|
||||||
{{if eq .Surface "chat"}}{{template "scripts-chat" .}}{{end}}
|
|
||||||
{{if eq .Surface "admin"}}{{template "scripts-admin" .}}{{end}}
|
{{if eq .Surface "admin"}}{{template "scripts-admin" .}}{{end}}
|
||||||
{{if eq .Surface "team-admin"}}{{template "scripts-team-admin" .}}{{end}}
|
{{if eq .Surface "team-admin"}}{{template "scripts-team-admin" .}}{{end}}
|
||||||
{{if eq .Surface "notes"}}{{template "scripts-notes" .}}{{end}}
|
|
||||||
{{if eq .Surface "settings"}}{{template "scripts-settings" .}}{{end}}
|
{{if eq .Surface "settings"}}{{template "scripts-settings" .}}{{end}}
|
||||||
{{if eq .Surface "projects"}}{{template "scripts-projects" .}}{{end}}
|
|
||||||
{{/* v0.27.0: Extension surface JS — loaded from /surfaces/{id}/js/main.js */}}
|
{{/* v0.27.0: Extension surface JS — loaded from /surfaces/{id}/js/main.js */}}
|
||||||
{{if and .Manifest (eq .Manifest.Source "extension")}}
|
{{if and .Manifest (eq .Manifest.Source "extension")}}
|
||||||
<script type="module" nonce="{{.CSPNonce}}" src="{{.BasePath}}/surfaces/{{.Surface}}/js/main.js?v={{.Version}}"></script>
|
<script type="module" nonce="{{.CSPNonce}}" src="{{.BasePath}}/surfaces/{{.Surface}}/js/main.js?v={{.Version}}"></script>
|
||||||
|
|||||||
@@ -9,12 +9,12 @@
|
|||||||
const { html } = window;
|
const { html } = window;
|
||||||
|
|
||||||
const PILLS = [
|
const PILLS = [
|
||||||
{ icon: '\u{1F916}', label: 'Multi-Provider AI', cls: 'ac' },
|
|
||||||
{ icon: '\u{1F511}', label: 'Bring Your Own Key', cls: 'pu' },
|
|
||||||
{ icon: '\u{1F465}', label: 'Teams & Projects', cls: 'ac' },
|
|
||||||
{ icon: '\u{1F9E9}', label: 'Extensions', cls: 'pu' },
|
{ icon: '\u{1F9E9}', label: 'Extensions', cls: 'pu' },
|
||||||
{ icon: '\u{1F50D}', label: 'Web Search Tools', cls: 'ac' },
|
{ icon: '\u{1F310}', label: 'Surfaces', cls: 'ac' },
|
||||||
{ icon: '\u{1F4DD}', label: 'Notes & Memory', cls: 'pu' },
|
{ icon: '\u{1F465}', label: 'Teams & RBAC', cls: 'pu' },
|
||||||
|
{ icon: '\u{1F517}', label: 'Connections', cls: 'ac' },
|
||||||
|
{ icon: '\u{2699}\u{FE0F}', label: 'Workflows', cls: 'pu' },
|
||||||
|
{ icon: '\u{1F4E6}', label: 'Package Registry', cls: 'ac' },
|
||||||
];
|
];
|
||||||
|
|
||||||
export function Hero({ base = '', version = '', env = null }) {
|
export function Hero({ base = '', version = '', env = null }) {
|
||||||
@@ -28,15 +28,15 @@ export function Hero({ base = '', version = '', env = null }) {
|
|||||||
src="${base}/favicon.svg?v=${version}"
|
src="${base}/favicon.svg?v=${version}"
|
||||||
alt="Switchboard Core" />
|
alt="Switchboard Core" />
|
||||||
<span class="login-hero-brand-text">
|
<span class="login-hero-brand-text">
|
||||||
Chat <span class="hl">Switchboard</span>
|
Switchboard <span class="hl">Core</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<h1 class="login-anim login-anim-2">
|
<h1 class="login-anim login-anim-2">
|
||||||
Your AI conversations,${html`<br />`}your infrastructure
|
Your platform,${html`<br />`}your infrastructure
|
||||||
</h1>
|
</h1>
|
||||||
<p class="login-hero-sub login-anim login-anim-3">
|
<p class="login-hero-sub login-anim login-anim-3">
|
||||||
Self-hosted multi-provider chat with team collaboration,
|
Self-hosted extensible platform with surfaces, packages,
|
||||||
BYOK privacy, and an extensible plugin system.
|
team RBAC, and a workflow engine.
|
||||||
</p>
|
</p>
|
||||||
<div class="login-hero-pills login-anim login-anim-4">
|
<div class="login-hero-pills login-anim login-anim-4">
|
||||||
${PILLS.map(p => html`
|
${PILLS.map(p => html`
|
||||||
|
|||||||
Reference in New Issue
Block a user