managarten/picture/apps/web/src/routes/+layout.svelte
Till-JS c712a2504a feat: integrate uload and picture, unify package naming
- Add uload project with apps/web structure
  - Reorganize from flat to monorepo structure
  - Remove PocketBase binary and local data
  - Update to pnpm and @uload/web namespace

- Add picture project to monorepo
  - Remove embedded git repository

- Unify all package names to @{project}/{app} schema:
  - @maerchenzauber/* (was @storyteller/*)
  - @manacore/* (was manacore-*, manacore)
  - @manadeck/* (was web, backend, manadeck)
  - @memoro/* (was memoro-web, landing, memoro)
  - @picture/* (already unified)
  - @uload/web

- Add convenient dev scripts for all apps:
  - pnpm dev:{project}:web
  - pnpm dev:{project}:landing
  - pnpm dev:{project}:mobile
  - pnpm dev:{project}:backend

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 04:00:36 +01:00

79 lines
1.9 KiB
Svelte

<script lang="ts">
import '../app.css';
import favicon from '$lib/assets/favicon.svg';
import { supabase } from '$lib/supabase';
import { user, session, loading } from '$lib/stores/auth';
import Toast from '$lib/components/ui/Toast.svelte';
import { onMount } from 'svelte';
import { initPostHog, analytics } from '$lib/analytics/posthog';
// Import theme stores to initialize them
import '$lib/stores/theme';
// Initialize i18n
import '$lib/i18n';
let { children, data } = $props();
onMount(() => {
// Initialize PostHog
initPostHog();
// Get initial session
supabase.auth.getSession().then(({ data: { session: initialSession } }) => {
session.set(initialSession);
user.set(initialSession?.user ?? null);
loading.set(false);
// Identify user in PostHog if logged in
if (initialSession?.user) {
analytics.identify(initialSession.user.id, {
email: initialSession.user.email,
created_at: initialSession.user.created_at
});
}
});
// Listen for auth changes
const {
data: { subscription }
} = supabase.auth.onAuthStateChange((_event, newSession) => {
session.set(newSession);
user.set(newSession?.user ?? null);
// Update PostHog identity on auth changes
if (newSession?.user) {
analytics.identify(newSession.user.id, {
email: newSession.user.email,
created_at: newSession.user.created_at
});
} else {
// Reset PostHog on logout
analytics.reset();
}
});
return () => {
subscription.unsubscribe();
};
});
</script>
<svelte:head>
<link rel="icon" href={favicon} />
<!-- Umami Analytics -->
{#if import.meta.env.PUBLIC_UMAMI_WEBSITE_ID && import.meta.env.PUBLIC_UMAMI_URL}
<script
defer
src={`${import.meta.env.PUBLIC_UMAMI_URL}/script.js`}
data-website-id={import.meta.env.PUBLIC_UMAMI_WEBSITE_ID}
data-do-not-track="true"
></script>
{/if}
</svelte:head>
{@render children?.()}
<!-- Global Toast Notifications -->
<Toast />