Major changes since initial commit: Schema: version branching (parentVersionId, branchLabel), share links, guest comments, track status enum (sketch/in_progress/final/released), track sections, cover art for projects and tracks. API: 29+ endpoints — auth, projects, tracks, versions, comments, share links (public + management), uploads (cover), activity feed, onboarding demo seed. Email templates in German with brand styling. Web: SvelteKit 5 workspace layout with persistent sidebar, breadcrumb top-bar, collapsible right panel. SoundCloud-style waveform player with round play button, avatar comment markers, keyboard shortcuts (Space/JKL/C). Full German UI. Cover art with gradient fallback. Track status pills. Activity feed dashboard. Welcome modal with demo-seed trigger. Landing page with 7-section scroll layout. Login on /login. Public /listen/:token page for guest feedback. Visual: Inter Variable font, Magenta→Orange gradient accent, warm dark neutrals, Lucide-style inline SVG icon set, spring animations on modals, glass-effect toasts, responsive from 360px to 2560px+. PWA: manifest, service worker, icons, iOS/Android installable. Production: adapter-node, server-side API proxy hook, docker-compose with Postgres + MinIO + auto-migration + health checks. Env example included. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
57 lines
1.0 KiB
Svelte
57 lines
1.0 KiB
Svelte
<script lang="ts">
|
|
import { onMount } from 'svelte';
|
|
import { goto } from '$app/navigation';
|
|
import { page } from '$app/stores';
|
|
import { verifyToken } from '$lib/stores/auth.js';
|
|
|
|
let error = $state('');
|
|
|
|
onMount(async () => {
|
|
const token = $page.url.searchParams.get('token');
|
|
if (!token) {
|
|
error = 'Kein Token angegeben';
|
|
return;
|
|
}
|
|
try {
|
|
await verifyToken(token);
|
|
goto('/dashboard');
|
|
} catch (err) {
|
|
error = err instanceof Error ? err.message : 'Login fehlgeschlagen';
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<div class="verify-page">
|
|
{#if error}
|
|
<div class="error-card">
|
|
<h2>Login fehlgeschlagen</h2>
|
|
<p>{error}</p>
|
|
<a href="/login">Erneut versuchen</a>
|
|
</div>
|
|
{:else}
|
|
<p>Login läuft…</p>
|
|
{/if}
|
|
</div>
|
|
|
|
<style>
|
|
.verify-page {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 100vh;
|
|
color: #888;
|
|
}
|
|
|
|
.error-card {
|
|
text-align: center;
|
|
}
|
|
|
|
.error-card h2 {
|
|
color: #ef4444;
|
|
}
|
|
|
|
a {
|
|
color: #6366f1;
|
|
}
|
|
</style>
|