diff --git a/apps/mana/apps/web/src/lib/components/onboarding/OnboardingWizard.svelte b/apps/mana/apps/web/src/lib/components/onboarding/OnboardingWizard.svelte deleted file mode 100644 index 9d72f1994..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/OnboardingWizard.svelte +++ /dev/null @@ -1,196 +0,0 @@ - - - -
- -
- -
-
-
-
- M -
-
-

Willkommen bei Mana

-

- Schritt {currentStep + 1} von {STEPS.length} -

-
-
- -
- - -
-
-
- - -
- {#each STEPS as step, index} - - {/each} -
-
- - -
- {#if currentStepData.id === 'welcome'} - - {:else if currentStepData.id === 'profile'} - - {:else if currentStepData.id === 'apps'} - - {:else if currentStepData.id === 'ai-tier'} - - {:else if currentStepData.id === 'sync'} - - {:else if currentStepData.id === 'credits'} - - {:else if currentStepData.id === 'complete'} - - {/if} -
- - - -
-
diff --git a/apps/mana/apps/web/src/lib/components/onboarding/index.ts b/apps/mana/apps/web/src/lib/components/onboarding/index.ts deleted file mode 100644 index c1a7d358b..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { default as OnboardingWizard } from './OnboardingWizard.svelte'; -export { default as WelcomeStep } from './steps/WelcomeStep.svelte'; -export { default as ProfileStep } from './steps/ProfileStep.svelte'; -export { default as AppsStep } from './steps/AppsStep.svelte'; -export { default as CreditsStep } from './steps/CreditsStep.svelte'; -export { default as CompleteStep } from './steps/CompleteStep.svelte'; diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/AiTierStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/AiTierStep.svelte deleted file mode 100644 index 14926a51a..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/AiTierStep.svelte +++ /dev/null @@ -1,145 +0,0 @@ - - -
-
-
- -
-
Wie soll Mana KI nutzen?
-

- Mana bietet KI-Funktionen auf vier Ebenen — von "gar keine" bis zu allem. Du entscheidest, - welche Schichten dein Vertrauen haben. -

-
- - -
-
- -
-
Lokal (ohne KI) — immer aktiv
-
- Datum-Erkennung, Suche und einfache Klassifikation laufen offline ohne KI. Brauchst du - nichts auswählen — das ist immer da. -
-
-
-
- - -
- {#each cards as card} - {@const enabled = settings.allowedTiers.includes(card.tier)} - - {/each} -
- - - {#if settings.allowedTiers.length > 0} -
- Reihenfolge: - {settings.allowedTiers.map((t) => tierLabel(t)).join(' → ')} → Lokal (Fallback) -
- {/if} - -
- -
- Du kannst diese Auswahl jederzeit in den Einstellungen ändern. Es ist auch komplett okay, hier - nichts auszuwählen — KI-Funktionen sind in Mana optional und alle Kern-Features funktionieren - ohne sie. -
-
-
diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/AppsStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/AppsStep.svelte deleted file mode 100644 index 9c118a003..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/AppsStep.svelte +++ /dev/null @@ -1,119 +0,0 @@ - - -
-
-

Entdecke die Mana-Apps

-

Alle Apps sind mit deinem Mana-Konto verbunden.

-
- - {#each categories as category} -
-

{category}

-
- {#each APPS.filter((a) => a.category === category) as app} -
-
-
- {app.icon} -
-
-

{app.name}

-

{app.description}

-
-
-
- {/each} -
-
- {/each} - -
-
-
- -
-
-

Ein Konto, alle Apps

-

- Dein Mana-Login funktioniert in allen Apps. Deine Credits werden geteilt. -

-
-
-
-
diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/CompleteStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/CompleteStep.svelte deleted file mode 100644 index 72a47038f..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/CompleteStep.svelte +++ /dev/null @@ -1,111 +0,0 @@ - - -
- -
-
- -
- - -
- 🎉 -
-
- -
-
- 🌟 -
-
- -

Alles bereit!

-

- Du kannst jetzt loslegen und alle Mana-Apps nutzen. -

- - -
- -
-
- -
-
-
Dashboard
-
Dein Überblick
-
-
-
- - -
-
- -
-
-
Workbench
-
Deine Apps entdecken
-
-
-
- - -
-
- -
-
-
Credits
-
150 Gratis-Credits
-
-
-
- - -
-
- -
-
-
- Einstellungen -
-
Personalisieren
-
-
-
-
- -

- Klicke auf "Los geht's!" um zum Dashboard zu gelangen. -

-
diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/ContextStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/ContextStep.svelte deleted file mode 100644 index f40907f3b..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/ContextStep.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - - -
-
-

Erzähl Mana über dich

-

- Je besser Mana dich kennt, desto relevanter werden Vorschläge und Automatisierungen. Du kannst - alles jederzeit im Profil ändern oder ergänzen. -

-
- -
- -
-
- - diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/CreditsStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/CreditsStep.svelte deleted file mode 100644 index 2cd429376..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/CreditsStep.svelte +++ /dev/null @@ -1,109 +0,0 @@ - - -
-
-
- -
-

Das Credits-System

-

Einfach und transparent für alle AI-Features.

-
- -
- -
-

- 1 - So funktioniert's -

-
    -
  • - - Du hast ein Credit-Guthaben für alle Mana-Apps -
  • -
  • - - AI-Features wie Chat, Bildgenerierung etc. kosten Credits -
  • -
  • - - Einfache Preisregel: 1 Mana = 1 Cent -
  • -
-
- - -
-

- - - - Gratis-Credits -

-
-
-
150
-
Willkommensbonus
-
-
-
+5
-
Täglich gratis
-
-
-
- - -
-

- 2 - Credit-Pakete -

-
-
-
100
-
€1
-
-
-
500
-
€5
-
-
-
1.500
-
€15
-
-
-
5.000
-
€50
-
-
-
- - -
-
- -

- Tipp: Mit einer Mana Quelle M erhältst du monatlich 1.000 Mana ab 9,99€/Monat. -

-
-
-
-
diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/ProfileStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/ProfileStep.svelte deleted file mode 100644 index 9dced5896..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/ProfileStep.svelte +++ /dev/null @@ -1,200 +0,0 @@ - - -
-
-

Vervollständige dein Profil

-

Füge ein Profilbild und deinen Namen hinzu.

-
- -
- -
- - - - -

Klicke zum Ändern

-
- - -
- - -
- - -
-

E-Mail

-
- {authStore.user?.email || 'Nicht verfügbar'} -
-
- - {#if error} -
-

{error}

-
- {/if} - - {#if saved} -
-

- - Profil gespeichert! -

-
- {:else} - - {/if} - -

- Du kannst dein Profil jederzeit in den Einstellungen ändern. -

-
-
diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/SyncStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/SyncStep.svelte deleted file mode 100644 index 54f69ec26..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/SyncStep.svelte +++ /dev/null @@ -1,158 +0,0 @@ - - -
-
-
- -
-
Cloud Sync
-

- Synchronisiere deine Daten verschlüsselt über alle Geräte — oder nutze Mana nur lokal. -

-
- - -
-
- -
-
Lokal — immer verfügbar
-
- Alle deine Daten sind lokal auf deinem Gerät gespeichert. Mana funktioniert vollständig - offline — auch ohne Cloud Sync. -
-
-
-
- - - {#if syncBilling.active} -
-
- -
-
Cloud Sync ist aktiv
-
- Deine Daten werden über alle Geräte synchronisiert. -
-
-
-
- {:else} -
-
-
- -
-
-
Cloud Sync aktivieren
-

- Multi-Device-Sync, automatische Backups, Ende-zu-Ende-Verschlüsselung. -

-
-
- - -
- {#each ['monthly', 'quarterly', 'yearly'] as const as iv} - - {/each} -
- - {#if error} -
- -

{error}

-
- {/if} - - - - {#if balance !== null && balance.balance < SYNC_PRICES[selectedInterval].credits} -

- Nicht genügend Credits ({balance.balance} verfügbar). Du kannst Sync jederzeit später in den - Einstellungen aktivieren. -

- {/if} -
- {/if} - -
- -
- Sync ist optional — du kannst diesen Schritt überspringen und Mana nur lokal nutzen. Alle - Features funktionieren auch ohne Sync. Du kannst jederzeit in den Einstellungen aktivieren. -
-
-
diff --git a/apps/mana/apps/web/src/lib/components/onboarding/steps/WelcomeStep.svelte b/apps/mana/apps/web/src/lib/components/onboarding/steps/WelcomeStep.svelte deleted file mode 100644 index 019eeefa2..000000000 --- a/apps/mana/apps/web/src/lib/components/onboarding/steps/WelcomeStep.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - -
- -
-
- M -
-
- -

Willkommen bei Mana!

-

- Dein zentrales Dashboard für alle Mana-Apps. Verwalte deine Aufgaben, Termine, Kontakte und mehr - - alles an einem Ort. -

- - -
-
-
- -
-
-

Alle Apps

-

Todo, Kalender, Chat, Picture und mehr.

-
-
- -
-
- -
-
-

Credits-System

-

Ein Guthaben für alle AI-Features.

-
-
- -
-
- -
-
-

Personalisierung

-

Themes und Einstellungen nach deinem Geschmack.

-
-
-
-
diff --git a/apps/mana/apps/web/src/lib/config/storage-keys.ts b/apps/mana/apps/web/src/lib/config/storage-keys.ts index d46c6dc48..ac49f58fe 100644 --- a/apps/mana/apps/web/src/lib/config/storage-keys.ts +++ b/apps/mana/apps/web/src/lib/config/storage-keys.ts @@ -9,8 +9,6 @@ export const STORAGE_KEYS = { NAV_COLLAPSED: 'mana-nav-collapsed', /** Whether the welcome page has been seen */ HAS_SEEN_WELCOME: 'hasSeenWelcome', - /** Onboarding wizard state (JSON) */ - ONBOARDING: 'mana-onboarding', /** Dashboard widget layout (JSON) — defined in default-dashboard.ts */ // DASHBOARD: 'mana-dashboard-config', } as const; diff --git a/apps/mana/apps/web/src/lib/stores/onboarding.svelte.ts b/apps/mana/apps/web/src/lib/stores/onboarding.svelte.ts deleted file mode 100644 index 79bc58d57..000000000 --- a/apps/mana/apps/web/src/lib/stores/onboarding.svelte.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Onboarding Store - * Tracks user onboarding progress and completion status - */ - -import { STORAGE_KEYS } from '$lib/config/storage-keys'; - -const STORAGE_KEY = STORAGE_KEYS.ONBOARDING; - -interface OnboardingState { - completed: boolean; - currentStep: number; - completedSteps: string[]; - skipped: boolean; - startedAt: string | null; - completedAt: string | null; -} - -function createOnboardingStore() { - let state = $state({ - completed: false, - currentStep: 0, - completedSteps: [], - skipped: false, - startedAt: null, - completedAt: null, - }); - - // Load from localStorage on init - function load() { - if (typeof localStorage === 'undefined') return; - - const saved = localStorage.getItem(STORAGE_KEY); - if (saved) { - try { - const parsed = JSON.parse(saved); - state = { ...state, ...parsed }; - } catch { - // Ignore parse errors - } - } - } - - // Save to localStorage - function save() { - if (typeof localStorage === 'undefined') return; - localStorage.setItem(STORAGE_KEY, JSON.stringify(state)); - } - - return { - get completed() { - return state.completed; - }, - get currentStep() { - return state.currentStep; - }, - get completedSteps() { - return state.completedSteps; - }, - get skipped() { - return state.skipped; - }, - get shouldShow() { - return !state.completed && !state.skipped; - }, - - load, - - start() { - state.startedAt = new Date().toISOString(); - state.currentStep = 0; - save(); - }, - - nextStep() { - state.currentStep++; - save(); - }, - - prevStep() { - if (state.currentStep > 0) { - state.currentStep--; - save(); - } - }, - - goToStep(step: number) { - state.currentStep = step; - save(); - }, - - completeStep(stepId: string) { - if (!state.completedSteps.includes(stepId)) { - state.completedSteps = [...state.completedSteps, stepId]; - save(); - } - }, - - complete() { - state.completed = true; - state.completedAt = new Date().toISOString(); - save(); - }, - - skip() { - state.skipped = true; - save(); - }, - - reset() { - state = { - completed: false, - currentStep: 0, - completedSteps: [], - skipped: false, - startedAt: null, - completedAt: null, - }; - save(); - }, - }; -} - -export const onboardingStore = createOnboardingStore(); diff --git a/apps/mana/apps/web/src/routes/(app)/+layout.svelte b/apps/mana/apps/web/src/routes/(app)/+layout.svelte index c6750b3b4..058502c5d 100644 --- a/apps/mana/apps/web/src/routes/(app)/+layout.svelte +++ b/apps/mana/apps/web/src/routes/(app)/+layout.svelte @@ -80,7 +80,6 @@ import { userSettings } from '$lib/stores/user-settings.svelte'; import { isNavCollapsed as collapsedStore } from '$lib/stores/navigation'; import { getPillAppItems } from '@mana/shared-branding'; - import { onboardingStore } from '$lib/stores/onboarding.svelte'; import { STORAGE_KEYS } from '$lib/config/storage-keys'; import { SearchRegistry } from '$lib/search/registry'; import { registerAllProviders } from '$lib/search/providers'; @@ -146,7 +145,6 @@ // ── UI State ──────────────────────────────────────────── let isCollapsed = $state(false); let showShortcuts = $state(false); - let showOnboarding = $state(false); // ── Theme ─────────────────────────────────────────────── let isDark = $derived(theme.isDark); @@ -459,7 +457,6 @@ // where {@const} narrows the component back to its concrete type. type AnyComponent = Component; let KeyboardShortcutsModalC = $state(null); - let OnboardingWizardC = $state(null); let GuestWelcomeModalC = $state(null); let SessionWarningC = $state(null); let EncryptionIntroBannerC = $state(null); @@ -474,13 +471,6 @@ }); } }); - $effect(() => { - if (showOnboarding && !OnboardingWizardC) { - import('$lib/components/onboarding').then((m) => { - OnboardingWizardC = m.OnboardingWizard; - }); - } - }); $effect(() => { if (guestMode?.showWelcome && !GuestWelcomeModalC) { import('@mana/shared-auth-ui').then((m) => { @@ -507,19 +497,6 @@ }); }); - // ── Onboarding ────────────────────────────────────────── - function handleOnboardingComplete() { - onboardingStore.complete(); - ManaEvents.onboardingCompleted(); - showOnboarding = false; - } - - function handleOnboardingSkip() { - ManaEvents.onboardingSkipped(onboardingStore.currentStep); - onboardingStore.skip(); - showOnboarding = false; - } - // ── Auth Ready (replaces monolith onMount) ────────────── async function handleAuthReady() { // Wire the unified guest-prompt singleton to SvelteKit's `goto` @@ -623,19 +600,10 @@ // value (0 on a fresh tab) until a sync actually runs. refreshPendingCount(); - // Phase B-idle: settings, onboarding gating and return-visit - // telemetry. None of this gates rendering — onboarding shows - // via showOnboarding after the store resolves, which is fine - // on a delay. + // Phase B-idle: settings + return-visit telemetry. Non-gating. idle(async () => { trackReturnVisit(); userSettings.load().catch(() => {}); - await onboardingStore.load(); - if (onboardingStore.shouldShow) { - onboardingStore.start(); - ManaEvents.onboardingStarted(); - showOnboarding = true; - } }); } // IMPORTANT: do NOT call notificationService.requestPermission() here. @@ -775,16 +743,6 @@ appName="Mana" locale={($locale || 'de') === 'de' ? 'de' : 'en'} > - - {#if showOnboarding && authStore.isAuthenticated && OnboardingWizardC} - {@const OnboardingWizard = OnboardingWizardC} -
- -
- {/if} -