원클릭으로
frontend-design-strix
// Create or redesign frontend pages for Strix. Use when building new HTML pages, redesigning existing ones, or working on any UI task in the www/ directory. Covers design principles, layout patterns, and component usage.
// Create or redesign frontend pages for Strix. Use when building new HTML pages, redesigning existing ones, or working on any UI task in the www/ directory. Covers design principles, layout patterns, and component usage.
| name | frontend_design_strix |
| description | Create or redesign frontend pages for Strix. Use when building new HTML pages, redesigning existing ones, or working on any UI task in the www/ directory. Covers design principles, layout patterns, and component usage. |
| disable-model-invocation | true |
You are creating or modifying a frontend page for Strix. Your goal is to produce a page that looks identical in quality to the existing pages, especially www/homekit.html which is the design reference.
Read these files completely:
www/design-system.html -- All CSS variables, every component, JS patterns. This is your component library.www/homekit.html -- The design reference. This page is the gold standard. Study its structure, spacing, how little text it uses, how the back button is positioned.www/index.html -- The entry point. Understand the probe flow and how data is passed between pages via URL params.If you need to understand backend APIs or the probe system, read:
www/standard.html -- how probe data flows into a configuration pagewww/test.html -- how polling and real-time updates workwww/config.html -- complex two-column layout with live previewEvery element on screen must earn its place. If something doesn't help the user complete their task, remove it.
(i) icon pattern). The user who needs the explanation can hover. The user who doesn't is not bothered.When building homekit.html, we went through this process:
Apply this same thinking to every page you create.
:rootrgba(139, 92, 246, 0.15) -- barely visible purple tintThis is the most common case for new pages. Content is vertically centered on screen.
.screen {
min-height: 100vh;
display: flex;
align-items: center; /* TRUE CENTER -- not flex-start */
justify-content: center;
}
.container { max-width: 480px; width: 100%; }
Back button is positioned OUTSIDE the container, wider than content, using .back-wrapper:
.back-wrapper {
position: absolute; top: 1.5rem;
left: 50%; transform: translateX(-50%);
width: 100%; max-width: 600px; /* wider than container */
padding: 0 1.5rem;
z-index: 10;
}
This is MANDATORY for all centered layout pages. The back button must NOT be inside the centered container.
Content is near the top with margin-top: 8vh. Used for the main entry point only.
Back button at top, then title, then content flowing down. max-width: 600px, no vertical centering.
max-width: 1200px with card grids.
Settings left, live preview right. Collapses to tabs on mobile.
For centered pages, the hero contains a logo/icon + short title:
<div class="hero">
<svg class="logo-icon">...</svg> <!-- 48-72px, with glow filter -->
<h1 class="title">Short Name</h1> <!-- 1.25rem, white, font-weight 600 -->
</div>
filter: drop-shadow()All components are documented with live examples in www/design-system.html. Key ones:
.btn .btn-primary .btn-large for primary action (full width), .btn-outline for secondary.input with .label and optional .info-icon with .tooltip<div id="toast" class="toast hidden"></div> and the showToast() function.error-box with .visible class toggledWhen navigating to another page, pass every piece of data you have. This is non-negotiable. Future pages may need any of these values.
function navigateNext() {
var p = new URLSearchParams();
p.set('primary_data', value);
// Pass through EVERYTHING known:
if (ip) p.set('ip', ip);
if (mac) p.set('mac', mac);
if (vendor) p.set('vendor', vendor);
if (model) p.set('model', model);
if (server) p.set('server', server);
if (hostname) p.set('hostname', hostname);
if (ports) p.set('ports', ports);
if (user) p.set('user', user);
if (channel) p.set('channel', channel);
// ... any other params from probe
window.location.href = 'next.html?' + p.toString();
}
var params = new URLSearchParams(location.search);
var ip = params.get('ip') || '';
var mac = params.get('mac') || '';
var vendor = params.get('vendor') || '';
// ... read ALL possible params even if this page doesn't use them
// They need to be available for passing to the next page
var, not let/const -- ES5 compatibledocument.createElement, not innerHTMLasync function + fetch() for API calls!r.ok, catch exceptions, show toastaddEventListener, never inline event handlers in HTMLasync function doSomething() {
try {
var r = await fetch('api/endpoint', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
if (!r.ok) {
var text = await r.text();
showToast(text || 'Error ' + r.status);
return;
}
var data = await r.json();
// success...
} catch (e) {
showToast('Connection error: ' + e.message);
}
}
.back-wrapper for centered, inline for standard):root -- no hardcoded colorsFull release of Strix -- merge develop to main, tag, build multiarch Docker image, build static binaries, push to Docker Hub, update hassio-strix, create GitHub Release with binaries attached.
Add a new protocol support to Strix -- full flow from research to implementation. Covers stream handler registration, URL builder updates, database issues, and go2rtc integration.
Add a new device type detector to the Strix probe system. Covers adding new probers, result types, and detector functions.
Build and push dev Docker image for Strix, update hassio-strix dev add-on version.