diff --git a/apps/mukke/apps/web/package.json b/apps/mukke/apps/web/package.json
index e1cca77b8..26c8d2da1 100644
--- a/apps/mukke/apps/web/package.json
+++ b/apps/mukke/apps/web/package.json
@@ -36,6 +36,8 @@
"@manacore/shared-auth": "workspace:*",
"@manacore/shared-auth-ui": "workspace:*",
"@manacore/shared-branding": "workspace:*",
+ "@manacore/shared-feedback-service": "workspace:^",
+ "@manacore/shared-feedback-ui": "workspace:^",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-splitscreen": "workspace:^",
diff --git a/apps/mukke/apps/web/src/lib/services/feedback.ts b/apps/mukke/apps/web/src/lib/services/feedback.ts
new file mode 100644
index 000000000..143ad1ae9
--- /dev/null
+++ b/apps/mukke/apps/web/src/lib/services/feedback.ts
@@ -0,0 +1,18 @@
+import { browser } from '$app/environment';
+import { createFeedbackService } from '@manacore/shared-feedback-service';
+import { authStore } from '$lib/stores/auth.svelte';
+
+function getAuthUrl(): string {
+ if (browser && typeof window !== 'undefined') {
+ const injectedUrl = (window as unknown as { __PUBLIC_MANA_CORE_AUTH_URL__?: string })
+ .__PUBLIC_MANA_CORE_AUTH_URL__;
+ return injectedUrl || 'http://localhost:3001';
+ }
+ return 'http://localhost:3001';
+}
+
+export const feedbackService = createFeedbackService({
+ apiUrl: getAuthUrl(),
+ appId: 'mukke',
+ getAuthToken: async () => authStore.getValidToken(),
+});
diff --git a/apps/mukke/apps/web/src/routes/(app)/+layout.svelte b/apps/mukke/apps/web/src/routes/(app)/+layout.svelte
index a0b8150f3..cbf499632 100644
--- a/apps/mukke/apps/web/src/routes/(app)/+layout.svelte
+++ b/apps/mukke/apps/web/src/routes/(app)/+layout.svelte
@@ -66,6 +66,8 @@
{ href: '/projects', label: 'Editor', icon: 'waveform' },
{ href: '/upload', label: 'Upload', icon: 'upload' },
{ href: '/settings', label: 'Settings', icon: 'settings' },
+ { href: '/feedback', label: 'Feedback', icon: 'chat' },
+ { href: '/help', label: 'Help', icon: 'help-circle' },
];
const navItems = $derived(baseNavItems);
diff --git a/apps/mukke/apps/web/src/routes/(app)/feedback/+page.svelte b/apps/mukke/apps/web/src/routes/(app)/feedback/+page.svelte
new file mode 100644
index 000000000..7ff699b5a
--- /dev/null
+++ b/apps/mukke/apps/web/src/routes/(app)/feedback/+page.svelte
@@ -0,0 +1,11 @@
+
+
+
+ Feedback - Mukke
+
+
+
diff --git a/apps/mukke/apps/web/src/routes/(app)/help/+page.svelte b/apps/mukke/apps/web/src/routes/(app)/help/+page.svelte
new file mode 100644
index 000000000..bed75c520
--- /dev/null
+++ b/apps/mukke/apps/web/src/routes/(app)/help/+page.svelte
@@ -0,0 +1,59 @@
+
+
+
+ Help - Mukke
+
+
+
+
+ {#snippet icon()}{/snippet}
+
+
+
+
+
+
+
+
+
+
+ {#snippet icon()}{/snippet}
+
+
+
+
+
+
+
+ {#snippet icon()}{/snippet}
+
+
+
+
+
diff --git a/apps/mukke/apps/web/src/routes/(app)/settings/+page.svelte b/apps/mukke/apps/web/src/routes/(app)/settings/+page.svelte
new file mode 100644
index 000000000..10d2a3cd0
--- /dev/null
+++ b/apps/mukke/apps/web/src/routes/(app)/settings/+page.svelte
@@ -0,0 +1,63 @@
+
+
+
+ Settings - Mukke
+
+
+
+
+
+ {#snippet icon()}{/snippet}
+
+
+
+
+
+
+
+
+ {#snippet icon()}{/snippet}
+
+
+
+
+
+
+
+ {#snippet icon()}{/snippet}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/mukke/apps/web/src/routes/(app)/themes/+page.svelte b/apps/mukke/apps/web/src/routes/(app)/themes/+page.svelte
new file mode 100644
index 000000000..47ed9d251
--- /dev/null
+++ b/apps/mukke/apps/web/src/routes/(app)/themes/+page.svelte
@@ -0,0 +1,19 @@
+
+
+
+ Themes - Mukke
+
+
+ theme.setVariant(v)}
+ showModeSelector={true}
+ currentMode={theme.mode}
+ onModeChange={(m) => theme.setMode(m)}
+ showBackButton={true}
+ onBack={() => goto('/library')}
+/>