chore: auto-commit uncommitted changes

This commit is contained in:
James 2026-03-22 18:01:23 -04:00
parent f5e9b54767
commit f24d7e288a
3 changed files with 228 additions and 9 deletions

View File

@ -0,0 +1,51 @@
package main
import (
"context"
"log"
"net/http"
"time"
)
func main() {
fs := http.FileServer(http.Dir("."))
// Wrap to add no-cache headers
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
w.Header().Set("Pragma", "no-cache")
w.Header().Set("Expires", "0")
fs.ServeHTTP(w, r)
})
// Auto-shutdown after 60 minutes
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Minute)
defer cancel()
server := &http.Server{
Addr: "0.0.0.0:8888",
Handler: handler,
}
log.Println("Serving on http://192.168.1.16:8888")
log.Println("Auto-shutdown in 60 minutes")
// Run server in goroutine
go func() {
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("Server error: %v", err)
}
}()
// Wait for shutdown signal
<-ctx.Done()
log.Println("Shutting down...")
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 5*time.Second)
defer shutdownCancel()
if err := server.Shutdown(shutdownCtx); err != nil {
log.Printf("Shutdown error: %v", err)
}
log.Println("Server stopped")
}

View File

@ -43,6 +43,11 @@
/* Typography */ /* Typography */
--font-family: "Figtree", system-ui, sans-serif; --font-family: "Figtree", system-ui, sans-serif;
/* Wordmark — FINAL: Figtree 700, 0.25em */
--wordmark-font: "Figtree", system-ui, sans-serif;
--wordmark-weight: 700;
--wordmark-spacing: 0.25em;
/* Spacing */ /* Spacing */
--space-1: 4px; --space-1: 4px;
--space-2: 8px; --space-2: 8px;
@ -87,13 +92,20 @@
.text-secondary { color: var(--text-secondary); } .text-secondary { color: var(--text-secondary); }
.text-tertiary { color: var(--text-tertiary); } .text-tertiary { color: var(--text-tertiary); }
.wordmark { font-size: 18px; font-weight: 600; letter-spacing: 0.5em; text-transform: uppercase; } .wordmark { font-size: 18px; font-weight: var(--wordmark-weight); letter-spacing: var(--wordmark-spacing); text-transform: uppercase; }
.wordmark-lg { font-size: 32px; font-weight: 600; letter-spacing: 0.5em; text-transform: uppercase; } .wordmark-lg { font-size: 32px; font-weight: var(--wordmark-weight); letter-spacing: var(--wordmark-spacing); text-transform: uppercase; color: var(--brand-accent); }
/* Brand Block */ /* Brand Block */
.brand-block { display: flex; align-items: center; gap: 16px; margin: 32px 0; } .brand-block { display: flex; align-items: center; gap: 16px; margin: 32px 0; }
.black-square { width: 64px; height: 64px; background: var(--brand-black); } .black-square { width: 64px; height: 64px; background: var(--brand-black); }
/* Logo Lockup — The Trinity */
.logo-lockup { display: flex; gap: 20px; align-items: center; }
.logo-lockup-square { width: 72px; height: 72px; background: var(--brand-black); flex-shrink: 0; }
.logo-lockup-text { display: flex; flex-direction: column; gap: 4px; }
.logo-lockup-wordmark { font-family: var(--font-family); font-size: 28px; font-weight: var(--wordmark-weight); letter-spacing: var(--wordmark-spacing); text-transform: uppercase; color: var(--brand-accent); line-height: 1; }
.logo-lockup-tagline { font-size: 14px; color: var(--text-secondary); letter-spacing: 0.02em; }
/* Colors */ /* Colors */
.color-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 16px; } .color-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 16px; }
.color-swatch { border-radius: 8px; overflow: hidden; border: 1px solid var(--border-default); } .color-swatch { border-radius: 8px; overflow: hidden; border: 1px solid var(--border-default); }
@ -126,6 +138,9 @@
.stat-number { font-size: 72px; font-weight: 700; color: var(--brand-accent); line-height: 1; margin-bottom: 8px; } .stat-number { font-size: 72px; font-weight: 700; color: var(--brand-accent); line-height: 1; margin-bottom: 8px; }
.stat-label { font-size: 14px; color: var(--text-secondary); } .stat-label { font-size: 14px; color: var(--text-secondary); }
/* Section Title */
.section-title { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--text-tertiary); margin-bottom: 24px; padding-bottom: 12px; border-bottom: 1px solid var(--border-default); }
/* Buttons */ /* Buttons */
.btn { .btn {
display: inline-flex; align-items: center; justify-content: center; gap: 8px; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
@ -193,10 +208,6 @@
/* Code */ /* Code */
.code-block { background: var(--bg-inverse); color: var(--text-inverse); font-family: "JetBrains Mono", monospace; font-size: 14px; line-height: 1.6; padding: 16px; border-radius: 12px; overflow-x: auto; } .code-block { background: var(--bg-inverse); color: var(--text-inverse); font-family: "JetBrains Mono", monospace; font-size: 14px; line-height: 1.6; padding: 16px; border-radius: 12px; overflow-x: auto; }
code { font-family: "JetBrains Mono", monospace; font-size: 0.9em; background: var(--bg-secondary); padding: 2px 6px; border-radius: 4px; color: var(--brand-accent); }
/* Section Title */
.section-title { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--text-tertiary); margin-bottom: 24px; padding-bottom: 12px; border-bottom: 1px solid var(--border-default); }
</style> </style>
</head> </head>
<body> <body>
@ -207,17 +218,32 @@
<div class="brand-block"> <div class="brand-block">
<div class="black-square"></div> <div class="black-square"></div>
<div> <div>
<h1>Clavitor</h1> <h1 style="font-size:40px;">Clavitor</h1>
<p class="text-secondary">Design System v0.1 — Violet + Figtree + JetBrains Mono</p> <p class="text-secondary">Design System v0.1 — Violet + Figtree + JetBrains Mono</p>
</div> </div>
</div> </div>
<p class="wordmark-lg" style="margin-top: 24px; color: var(--brand-accent);">CLAVITOR</p> <p class="wordmark-lg" style="margin-top: 24px;">CLAVITOR</p>
<p class="text-secondary" style="max-width: 600px; margin-top: 12px;"> <p class="text-secondary" style="max-width: 600px; margin-top: 12px;">
A black box vault for AI infrastructure. Tokens, components, layouts. A black box vault for AI infrastructure. Tokens, components, layouts.
Based on vault1984.com patterns. Based on vault1984.com patterns.
</p> </p>
</div> </div>
<!-- Logo Lockup — The Trinity -->
<div class="section">
<div class="section-title">Logo Lockup (Black Square + Wordmark + Tagline)</div>
<div class="logo-lockup">
<div class="logo-lockup-square"></div>
<div class="logo-lockup-text">
<div class="logo-lockup-wordmark">CLAVITOR</div>
<div class="logo-lockup-tagline">Black-box credential issuance for AI infrastructure</div>
</div>
</div>
<p class="text-tertiary text-xs" style="margin-top: 16px;">
<strong>Spec:</strong> 72px black square, Figtree 700, 0.25em spacing, aligned left edge to left edge
</p>
</div>
<!-- Brand Colors --> <!-- Brand Colors -->
<div class="section"> <div class="section">
<div class="section-title">Brand Colors</div> <div class="section-title">Brand Colors</div>
@ -339,4 +365,4 @@
</div> </div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,142 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CLAVITOR Wordmark — Interactive Tester</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Figtree:wght@300..800&family=Plus+Jakarta+Sans:wght@300..800&family=Inter:wght@300..800&family=Sora:wght@300..800&family=Syne:wght@400..800&family=Cormorant+Garamond:wght@300..700&family=Unbounded:wght@300..900&family=DM+Sans:wght@300..800&family=Outfit:wght@300..800&display=swap" rel="stylesheet">
<style>
:root {
--brand-black: #0A0A0A;
--brand-accent: #7C3AED;
--bg-primary: #FFFFFF;
--bg-secondary: #F5F5F5;
--text-primary: #171717;
--text-secondary: #525252;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { font-family: system-ui, sans-serif; background: var(--bg-primary); color: var(--text-primary); padding: 40px; }
h1 { font-size: 32px; font-weight: 600; margin-bottom: 8px; }
.subtitle { color: var(--text-secondary); margin-bottom: 24px; }
.controls { background: var(--bg-secondary); padding: 20px; border-radius: 12px; margin-bottom: 40px; display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }
.control-group { display: flex; flex-direction: column; gap: 6px; }
label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--text-secondary); }
select, input[type="text"] { padding: 10px 14px; font-size: 16px; border-radius: 8px; border: 2px solid #E5E5E5; background: white; min-width: 200px; }
select:focus, input:focus { outline: none; border-color: var(--brand-accent); }
.weight-label { font-size: 14px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--text-secondary); margin: 40px 0 20px; padding-bottom: 8px; border-bottom: 2px solid var(--brand-accent); }
.spacing-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; }
.wordmark-box { text-align: center; padding: 28px 16px; background: var(--bg-secondary); border-radius: 12px; min-height: 140px; display: flex; flex-direction: column; justify-content: center; align-items: center; }
.wordmark { font-size: 72px; white-space: nowrap; margin-bottom: 12px; line-height: 1.1; }
.spacing-label { font-size: 13px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600; }
.preview-size { display: flex; gap: 12px; align-items: center; margin-left: auto; }
.size-value { font-weight: 600; color: var(--brand-accent); min-width: 50px; }
input[type="range"] { width: 140px; }
@media (max-width: 1000px) {
.spacing-grid { grid-template-columns: repeat(3, 1fr); }
.wordmark { font-size: 48px; }
}
@media (max-width: 600px) {
.spacing-grid { grid-template-columns: repeat(2, 1fr); }
.wordmark { font-size: 36px; }
.preview-size { width: 100%; margin-left: 0; margin-top: 10px; }
}
</style>
</head>
<body>
<h1>CLAVITOR Wordmark Tester</h1>
<p class="subtitle">Pick a font. See all weight + spacing combinations.</p>
<div class="controls">
<div class="control-group">
<label>Font Family</label>
<select id="fontSelect">
<option value="Figtree">Figtree (Sans)</option>
<option value="Inter">Inter (Sans)</option>
<option value="Plus Jakarta Sans">Plus Jakarta Sans (Sans)</option>
<option value="Sora">Sora — Geometric</option>
<option value="Syne">Syne — Wide Geometric</option>
<option value="Unbounded">Unbounded — Wide Display</option>
<option value="DM Sans">DM Sans — Clean Wide</option>
<option value="Outfit">Outfit — Geometric Modern</option>
<option value="Cormorant Garamond">Cormorant Garamond — Serif</option>
<option value="Satoshi">Satoshi (fallback)</option>
</select>
</div>
<div class="control-group">
<label>Preview Text</label>
<input type="text" id="previewText" value="Clavitor" maxlength="20">
</div>
<div class="control-group preview-size">
<label>Size</label>
<input type="range" id="sizeSlider" min="24" max="120" value="72">
<span class="size-value" id="sizeValue">72px</span>
</div>
</div>
<div id="results"></div>
<script>
const fonts = {
'Figtree': { family: "'Figtree', sans-serif", weights: [100, 200, 300, 400, 500, 600, 700, 800] },
'Inter': { family: "'Inter', sans-serif", weights: [200, 300, 400, 500, 600, 700, 800] },
'Plus Jakarta Sans': { family: "'Plus Jakarta Sans', sans-serif", weights: [200, 300, 400, 500, 600, 700, 800] },
'Sora': { family: "'Sora', sans-serif", weights: [200, 300, 400, 500, 600, 700, 800] },
'Syne': { family: "'Syne', sans-serif", weights: [400, 500, 600, 700, 800] },
'Unbounded': { family: "'Unbounded', sans-serif", weights: [200, 300, 400, 500, 600, 700, 800, 900] },
'DM Sans': { family: "'DM Sans', sans-serif", weights: [200, 300, 400, 500, 600, 700, 800] },
'Outfit': { family: "'Outfit', sans-serif", weights: [200, 300, 400, 500, 600, 700, 800] },
'Cormorant Garamond': { family: "'Cormorant Garamond', serif", weights: [300, 400, 500, 600, 700] },
'Satoshi': { family: "'Satoshi', 'Plus Jakarta Sans', sans-serif", weights: [300, 400, 500, 600, 700, 800] }
};
const spacings = [
{ val: 0, label: '0em (tight)' },
{ val: 0.125, label: '0.125em' },
{ val: 0.25, label: '0.25em' },
{ val: 0.375, label: '0.375em' },
{ val: 0.5, label: '0.5em (wide)' }
];
function render() {
const fontName = document.getElementById('fontSelect').value;
const text = document.getElementById('previewText').value || 'Clavitor';
const size = document.getElementById('sizeSlider').value;
const font = fonts[fontName];
let html = '';
font.weights.forEach(weight => {
html += `<div class="weight-label">Weight ${weight}</div>`;
html += `<div class="spacing-grid">`;
spacings.forEach(sp => {
html += `
<div class="wordmark-box">
<div class="wordmark" style="font-family: ${font.family}; font-weight: ${weight}; letter-spacing: ${sp.val}em; font-size: ${size}px;">
${text}
</div>
<div class="spacing-label">${sp.label}</div>
</div>
`;
});
html += `</div>`;
});
document.getElementById('results').innerHTML = html;
document.getElementById('sizeValue').textContent = size + 'px';
}
document.getElementById('fontSelect').addEventListener('change', render);
document.getElementById('previewText').addEventListener('input', render);
document.getElementById('sizeSlider').addEventListener('input', render);
render();
</script>
</body>
</html>