managarten/apps-archived/uload/apps/web/src/app.html
Till-JS 61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00

103 lines
3.2 KiB
HTML

<!doctype html>
<html lang="%paraglide.lang%" dir="%paraglide.dir%">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<!-- PWA Meta Tags -->
<meta name="theme-color" content="#3b82f6" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<meta name="apple-mobile-web-app-title" content="uLoad" />
<meta name="mobile-web-app-capable" content="yes" />
<!-- PWA Manifest -->
<link rel="manifest" href="/manifest.json" />
<!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/icons/icon-192x192.png" />
<link rel="apple-touch-icon" sizes="152x152" href="/icons/icon-152x152.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/icons/icon-192x192.png" />
<!-- Preconnect für Performance -->
<link rel="preconnect" href="https://pb.ulo.ad" />
<link rel="dns-prefetch" href="https://pb.ulo.ad" />
%sveltekit.head%
<!-- Umami Analytics -->
<script>
// Only load Umami if configured
if ('%sveltekit.env.PUBLIC_UMAMI_URL%'.startsWith('http')) {
const script = document.createElement('script');
script.defer = true;
script.src = '%sveltekit.env.PUBLIC_UMAMI_URL%/script.js';
script.dataset.websiteId = '%sveltekit.env.PUBLIC_UMAMI_WEBSITE_ID%';
document.head.appendChild(script);
}
</script>
<script>
// Initialize theme early to prevent flash
(function () {
// Load theme mode (light/dark/system)
const themeMode = localStorage.getItem('theme-mode') || 'system';
const themePreset = localStorage.getItem('theme-preset') || 'minimal';
// Determine if dark mode should be active
let isDark = false;
if (themeMode === 'dark') {
isDark = true;
} else if (themeMode === 'system') {
isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
}
// Apply dark class if needed
if (isDark) {
document.documentElement.classList.add('dark');
}
// Load theme preset colors
const themes = {
minimal: {
light: {
primary: '#171717',
primaryHover: '#0a0a0a',
background: '#fafafa',
surface: '#ffffff',
surfaceHover: '#f5f5f5',
text: '#171717',
textMuted: '#737373',
border: '#e5e5e5',
accent: '#525252',
accentHover: '#404040'
},
dark: {
primary: '#fafafa',
primaryHover: '#ffffff',
background: '#0a0a0a',
surface: '#171717',
surfaceHover: '#262626',
text: '#fafafa',
textMuted: '#a3a3a3',
border: '#404040',
accent: '#d4d4d4',
accentHover: '#e5e5e5'
}
}
};
// Apply CSS variables for the theme
const preset = themes[themePreset] || themes.minimal;
const colors = isDark ? preset.dark : preset.light;
const root = document.documentElement;
Object.entries(colors).forEach(([key, value]) => {
const cssKey = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());
root.style.setProperty(`--theme-${cssKey}`, value);
});
})();
</script>
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>