📝 docs(auth): update organization endpoint documentation

- Add all new organization management endpoints to API table
- Add new Invitations section for invitation endpoints
- Update controller JSDoc with complete endpoint list
- Update last updated date
This commit is contained in:
Till-JS 2026-02-16 12:57:29 +01:00
parent 67a2d639fe
commit 14da5a28ef
37 changed files with 1668 additions and 20 deletions

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Calendar</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Deine Termine werden lokal gespeichert und sind offline verfügbar.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createOfflineFirstPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createOfflineFirstPWAConfig({
name: 'Calendar - Kalender',
shortName: 'Calendar',
description: 'Kalender und Terminverwaltung',
themeColor: '#3b82f6',
})
),
],
server: {
port: 5179,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Chat</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Chat benötigt eine Internetverbindung, um Nachrichten zu senden.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-violet-600 hover:bg-violet-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,24 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
import { createPWAConfig } from '@manacore/shared-pwa';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Chat - KI Assistent',
shortName: 'Chat',
description: 'KI-Chat mit verschiedenen Modellen',
themeColor: '#8b5cf6',
preset: 'standard',
})
),
],
server: {
port: 5174,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Clock</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Die Uhr funktioniert auch offline - Timer und Stoppuhr sind verfügbar.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-cyan-600 hover:bg-cyan-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,9 +1,22 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [sveltekit()],
plugins: [
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Clock - Uhr & Timer',
shortName: 'Clock',
description: 'Uhr, Timer und Stoppuhr',
themeColor: '#06b6d4',
preset: 'minimal',
})
),
],
server: {
port: 5187,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Contacts</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Kontakte benötigt eine Internetverbindung für Synchronisierung.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-cyan-600 hover:bg-cyan-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Contacts - Kontakte',
shortName: 'Contacts',
description: 'Kontaktverwaltung',
themeColor: '#0891b2',
})
),
],
server: {
port: 5184,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - LightWrite</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
LightWrite benötigt eine Internetverbindung für Audio.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-orange-600 hover:bg-orange-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,9 +1,21 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [sveltekit()],
plugins: [
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'LightWrite - Audio Editor',
shortName: 'LightWrite',
description: 'Beat und Lyrics Editor',
themeColor: '#f97316',
})
),
],
server: {
port: 5180,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - ManaCore</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
ManaCore benötigt eine Internetverbindung.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-indigo-600 hover:bg-indigo-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'ManaCore',
shortName: 'ManaCore',
description: 'ManaCore App Ecosystem',
themeColor: '#6366f1',
})
),
],
server: {
port: 5173,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - ManaDeck</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
ManaDeck benötigt eine Internetverbindung für deine Kartendecks.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-amber-600 hover:bg-amber-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'ManaDeck - Kartendecks',
shortName: 'ManaDeck',
description: 'Kartendecks erstellen und lernen',
themeColor: '#f59e0b',
})
),
],
server: {
port: 5176,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Matrix</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Matrix benötigt eine Internetverbindung für Nachrichten.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-sky-600 hover:bg-sky-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - NutriPhi</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
NutriPhi benötigt eine Internetverbindung für Analysen.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-green-600 hover:bg-green-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'NutriPhi - Ernährungstracker',
shortName: 'NutriPhi',
description: 'KI-gestützte Ernährungsverfolgung',
themeColor: '#22c55e',
})
),
],
server: {
port: 5180,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Photos</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Photos benötigt eine Internetverbindung für deine Fotos.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Photos - Fotogalerie',
shortName: 'Photos',
description: 'Fotogalerie und -verwaltung',
themeColor: '#3b82f6',
})
),
],
server: {
port: 5189,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Picture</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Picture benötigt eine Internetverbindung, um Bilder zu generieren.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-pink-600 hover:bg-pink-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Picture - KI Bildgenerator',
shortName: 'Picture',
description: 'KI-gestützte Bildgenerierung',
themeColor: '#ec4899',
})
),
],
server: {
port: 5175,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Planta</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Planta benötigt eine Internetverbindung für Pflegetipps.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-green-600 hover:bg-green-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Planta - Pflanzenpflege',
shortName: 'Planta',
description: 'Pflanzenpflege und -identifikation',
themeColor: '#22c55e',
})
),
],
server: {
port: 5191,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Presi</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Presi benötigt eine Internetverbindung für Präsentationen.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-purple-600 hover:bg-purple-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -2,10 +2,24 @@ import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import path from 'path';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Presi - Präsentationen',
shortName: 'Presi',
description: 'Präsentationen erstellen und halten',
themeColor: '#a855f7',
preset: 'full',
})
),
],
server: {
port: 5178,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Questions</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Questions benötigt eine Internetverbindung für Antworten.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-violet-600 hover:bg-violet-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Questions - Fragen & Antworten',
shortName: 'Questions',
description: 'KI-gestützte Recherche und Fragen',
themeColor: '#8b5cf6',
})
),
],
server: {
port: 5111,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - SkillTree</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Deine Skills werden lokal gespeichert und sind offline verfügbar.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-violet-600 hover:bg-violet-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'SkillTree - Skills',
shortName: 'SkillTree',
description: 'Skill-Tracking und Entwicklung',
themeColor: '#8b5cf6',
})
),
],
server: {
port: 5195,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Storage</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Storage benötigt eine Internetverbindung für Cloud-Dateien.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-slate-600 hover:bg-slate-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Storage - Cloud Speicher',
shortName: 'Storage',
description: 'Cloud-Dateispeicher',
themeColor: '#64748b',
})
),
],
server: {
port: 5185,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Todo</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Deine Aufgaben werden lokal gespeichert und sind offline verfügbar.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-emerald-600 hover:bg-emerald-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,10 +1,23 @@
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [tailwindcss(), sveltekit()],
plugins: [
tailwindcss(),
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Todo - Aufgaben',
shortName: 'Todo',
description: 'Aufgaben und Projekte verwalten',
themeColor: '#10b981',
})
),
],
server: {
port: 5188,
strictPort: true,

View file

@ -0,0 +1,78 @@
<script lang="ts">
import { onMount } from 'svelte';
let isOnline = $state(false);
onMount(() => {
isOnline = navigator.onLine;
const handleOnline = () => {
isOnline = true;
setTimeout(() => {
window.location.href = '/';
}, 1000);
};
const handleOffline = () => {
isOnline = false;
};
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
});
</script>
<svelte:head>
<title>Offline - Zitare</title>
</svelte:head>
<div class="min-h-screen bg-slate-900 flex items-center justify-center px-4">
<div class="text-center max-w-md">
<div class="mb-8">
<svg class="w-24 h-24 mx-auto text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a5 5 0 01-.354-7.072L8.95 7.636m1.414 5.657L7.535 16.12m8.485 0a5 5 0 01-7.07 0" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3l18 18" />
</svg>
</div>
<h1 class="text-2xl font-bold text-white mb-4">
{isOnline ? 'Verbindung wiederhergestellt!' : 'Du bist offline'}
</h1>
<p class="text-slate-400 mb-8">
{#if isOnline}
Du wirst gleich weitergeleitet...
{:else}
Zitare benötigt eine Internetverbindung für neue Zitate.
{/if}
</p>
{#if !isOnline}
<div class="space-y-4">
<a href="/" class="inline-flex items-center justify-center px-6 py-3 bg-amber-600 hover:bg-amber-700 text-white font-medium rounded-lg transition-colors">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
Zur Startseite
</a>
<button onclick={() => window.location.reload()} class="block w-full px-6 py-3 text-slate-400 hover:text-white transition-colors">
Erneut versuchen
</button>
</div>
{:else}
<div class="flex items-center justify-center text-green-400">
<svg class="w-5 h-5 mr-2 animate-spin" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Weiterleitung...
</div>
{/if}
</div>
</div>

View file

@ -1,9 +1,21 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
import { createPWAConfig } from '@manacore/shared-pwa';
import { MANACORE_SHARED_PACKAGES } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [sveltekit()],
plugins: [
sveltekit(),
SvelteKitPWA(
createPWAConfig({
name: 'Zitare - Zitate',
shortName: 'Zitare',
description: 'Tägliche Inspiration und Zitate',
themeColor: '#f59e0b',
})
),
],
server: {
port: 5107,
strictPort: true,

View file

@ -2,7 +2,7 @@
> **Decision Date**: December 2024
> **Status**: Active
> **Last Updated**: December 1, 2024
> **Last Updated**: February 16, 2026
## Overview
@ -258,8 +258,22 @@ issuer: process.env.JWT_ISSUER || 'manacore',
| `/api/v1/auth/register/b2b` | POST | Register organization |
| `/api/v1/auth/organizations` | GET | List user's orgs |
| `/api/v1/auth/organizations/:id` | GET | Get org details |
| `/api/v1/auth/organizations/:id` | PUT | Update org (name, logo, metadata) |
| `/api/v1/auth/organizations/:id` | DELETE | Delete organization (owner only) |
| `/api/v1/auth/organizations/:id/invite` | POST | Invite employee |
| `/api/v1/auth/organizations/:id/members` | GET | List org members |
| `/api/v1/auth/organizations/:id/members/:memberId` | DELETE | Remove member |
| `/api/v1/auth/organizations/:orgId/members/:memberId/role` | PATCH | Update member role |
| `/api/v1/auth/organizations/:id/invitations` | GET | List org invitations |
| `/api/v1/auth/organizations/set-active` | POST | Switch active org |
| `/api/v1/auth/organizations/accept-invitation` | POST | Accept invitation |
### Invitations
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/api/v1/auth/invitations` | GET | List user's pending invitations |
| `/api/v1/auth/invitations/:id` | DELETE | Cancel or reject invitation |
---

View file

@ -49,14 +49,23 @@ import type { CurrentUserData } from '../common/decorators/current-user.decorato
* - POST /auth/refresh - Refresh access token
* - GET /auth/session - Get current session
*
* B2B Endpoints:
* B2B Organization Endpoints:
* - POST /auth/register/b2b - Register organization with owner
* - GET /auth/organizations - List user's organizations
* - GET /auth/organizations/:id - Get organization details
* - PUT /auth/organizations/:id - Update organization
* - DELETE /auth/organizations/:id - Delete organization (owner only)
* - POST /auth/organizations/:id/invite - Invite employee
* - POST /auth/organizations/accept-invitation - Accept invitation
* - GET /auth/organizations/:id/members - List organization members
* - DELETE /auth/organizations/:id/members/:memberId - Remove member
* - PATCH /auth/organizations/:orgId/members/:memberId/role - Update member role
* - GET /auth/organizations/:id/invitations - List organization invitations
* - POST /auth/organizations/accept-invitation - Accept invitation
* - POST /auth/organizations/set-active - Switch active organization
*
* Invitation Endpoints:
* - GET /auth/invitations - List user's pending invitations
* - DELETE /auth/invitations/:id - Cancel or reject invitation
*/
@ApiTags('auth')
@Controller('auth')