Die SvelteKit-App liegt unter frontend/, das Backend unter backend/ als eigenständige PocketBase-Instanz mit Dockerfile, docker-compose und versioniertem Schema. - PocketBase-URL über PUBLIC_PB_URL konfigurierbar, Default bleibt die produktive Instanz https://api.stammtisch-hersbruck.de - Schema als Snapshot-Migration der sechs fachlichen Collections (users, teams, events, runs, riders, times), abgezogen von der produktiven Instanz. Verifiziert: ein Erststart gegen leere pb_data legt alle sechs an, Felder und API-Rules stimmen überein. - pb_data und pb_migrations als Bind-Mounts, damit Daten persistieren und im Admin-UI erzeugte Migrationen im Repo landen - Veraltete Dokumentation entfernt: pocketbase_schema.json nannte Collections (stages, results, organizers), die es nicht gibt Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
35 lines
887 B
Svelte
35 lines
887 B
Svelte
<script lang="ts">
|
|
import '../app.css'
|
|
import favicon from '$lib/assets/favicon.svg'
|
|
import {ModeWatcher} from "mode-watcher"
|
|
import {api, auth} from '$lib/stores/pocketbase.svelte'
|
|
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte'
|
|
import {onMount} from 'svelte'
|
|
|
|
let {children} = $props()
|
|
let ready = $state(false)
|
|
|
|
onMount(async () => {
|
|
try {
|
|
await auth.load(document.cookie)
|
|
if (api.authStore.isValid) {
|
|
auth.user = api.authStore.record
|
|
await auth.refresh()
|
|
}
|
|
} catch (e) {
|
|
// ungültiger/abgelaufener Cookie → unauthentifiziert weiter
|
|
}
|
|
ready = true
|
|
})
|
|
</script>
|
|
|
|
<svelte:head>
|
|
<link href={favicon} rel="icon"/>
|
|
</svelte:head>
|
|
|
|
<ModeWatcher/>
|
|
|
|
{#if ready}
|
|
{@render children?.()}
|
|
<ConfirmDialog/>
|
|
{/if}
|