From 71db334028195cdf1f66a8da9f4b1c1818b15954 Mon Sep 17 00:00:00 2001 From: Till JS Date: Tue, 31 Mar 2026 22:00:31 +0200 Subject: [PATCH] feat(guides): PillNavigation + public shared guide route - Replace custom sidebar/bottom-nav with PillNavigation (matches ecosystem pattern) - Full theme/language/app-switcher/user-dropdown support via PillNavigation - GuestWelcomeModal + SessionExpiredBanner wired up - GET /shared/[token] public route: checklist, progress bar, step types, CTA - Separate layout for /shared so it bypasses AuthGate - Port corrected to 3027 Co-Authored-By: Claude Sonnet 4.6 --- .../apps/web/src/routes/(app)/+layout.svelte | 235 ++++++++++++------ .../apps/web/src/routes/shared/+layout.svelte | 5 + .../src/routes/shared/[token]/+page.svelte | 211 ++++++++++++++++ 3 files changed, 374 insertions(+), 77 deletions(-) create mode 100644 apps/guides/apps/web/src/routes/shared/+layout.svelte create mode 100644 apps/guides/apps/web/src/routes/shared/[token]/+page.svelte diff --git a/apps/guides/apps/web/src/routes/(app)/+layout.svelte b/apps/guides/apps/web/src/routes/(app)/+layout.svelte index 4c5a969b9..b9d410140 100644 --- a/apps/guides/apps/web/src/routes/(app)/+layout.svelte +++ b/apps/guides/apps/web/src/routes/(app)/+layout.svelte @@ -1,12 +1,27 @@ - -
- - - - -
-
- {@render children()} -
+
+ {@render children()}
+ +
- - - - + + + + (showGuestWelcome = false)} + onLogin={() => goto('/login')} + onRegister={() => goto('/register')} + locale={currentLocale === 'de' ? 'de' : 'en'} + /> + + {#if authStore.isAuthenticated} + + {/if}
{#if showCreateModal} - {#await import('$lib/components/GuideEditModal.svelte') then { default: GuideEditModal }} + let { children } = $props(); + + +{@render children()} diff --git a/apps/guides/apps/web/src/routes/shared/[token]/+page.svelte b/apps/guides/apps/web/src/routes/shared/[token]/+page.svelte new file mode 100644 index 000000000..737852459 --- /dev/null +++ b/apps/guides/apps/web/src/routes/shared/[token]/+page.svelte @@ -0,0 +1,211 @@ + + + + {#if guide} + {guide.title} β€” Mana Guides + + {:else} + Geteilte Anleitung β€” Mana Guides + {/if} + + +
+
+ + {#if state === 'loading'} +
+ + + + +
+ + {:else if state === 'expired'} +
+ ⏳ +

Link abgelaufen

+

Dieser Freigabe-Link ist nicht mehr gΓΌltig (nach 7 Tagen abgelaufen).

+ Zur Guides-App β†’ +
+ + {:else if state === 'error'} +
+ ❌ +

{errorMsg}

+ Zur Guides-App β†’ +
+ + {:else if guide} + +
+ πŸ“– + Mana Guides + Geteilte Anleitung +
+ + +
+
+ {guide.coverEmoji ?? 'πŸ“–'} +
+

{guide.title}

+ {#if guide.description} +

{guide.description}

+ {/if} +
+ {#if guide.difficulty} + + {difficultyLabel[guide.difficulty] ?? guide.difficulty} + + {/if} + {#if guide.estimatedMinutes} + + ⏱ {guide.estimatedMinutes} Min. + + {/if} + + {steps.length} Schritte + +
+
+
+
+ + + {#if steps.some((s) => s.checkable)} +
+
+ Fortschritt + {progress}% +
+
+
+
+
+ {/if} + + +
+ {#each steps as step, i} + {@const cfg = stepTypeConfig[step.type ?? 'instruction'] ?? stepTypeConfig.instruction} +
+
+ {#if step.checkable} + + {:else} + {cfg.icon} + {/if} +
+

+ {i + 1}. {step.title} +

+ {#if step.content} +

{step.content}

+ {/if} +
+
+
+ {/each} +
+ + +
+

Eigene Anleitungen erstellen?

+

Mit Mana Guides kannst du SOPs, Rezepte, Tutorials und Lernpfade erstellen β€” kostenlos.

+ + Mana Guides ausprobieren β†’ + +
+ {/if} +
+