feat: show build date/time on login screen across all apps

- Add BUILD_TIME and BUILD_HASH exports to all version.ts files
- Add getBuildDefines() to all vite.config.ts for compile-time injection
- Add buildTime prop to shared LoginPage component
- Display formatted date/time next to version number (e.g. "v1.0.0 · 21.03.2026 10:30")
- Add app.d.ts type declarations for __BUILD_TIME__ and __BUILD_HASH__

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-21 12:40:57 +01:00
parent a6a5265332
commit fc5dfe2f0f
69 changed files with 210 additions and 34 deletions

2
apps/calendar/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '1.0.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -9,7 +9,7 @@
import { authStore } from '$lib/stores/auth.svelte';
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params or sessionStorage (set by AuthGateModal)
@ -68,6 +68,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -4,7 +4,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -34,4 +34,7 @@ export default defineConfig({
include: ['src/**/*.test.ts'],
globals: true,
},
define: {
...getBuildDefines(),
},
});

View file

@ -1,3 +1,6 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.3.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -9,7 +9,7 @@
import { authStore } from '$lib/stores/auth.svelte';
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Dev credentials - pre-filled in development mode
@ -76,6 +76,7 @@
{initialEmail}
{initialPassword}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -2,7 +2,7 @@ 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 { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
import { createPWAConfig } from '@manacore/shared-pwa';
export default defineConfig({
@ -29,4 +29,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES, 'marked'],
},
define: {
...getBuildDefines(),
},
});

2
apps/clock/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -7,7 +7,7 @@
import { getLoginTranslations } from '@manacore/shared-i18n';
import { ClockLogo } from '@manacore/shared-branding';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Read verification status from query params (set after email verification)
@ -66,4 +66,5 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
/>

View file

@ -2,7 +2,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -27,4 +27,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

2
apps/contacts/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '1.0.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -9,7 +9,7 @@
import { authStore } from '$lib/stores/auth.svelte';
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params or sessionStorage
@ -65,6 +65,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
/// <reference types="vitest/config" />
export default defineConfig({
@ -34,4 +34,7 @@ export default defineConfig({
include: ['src/**/*.test.ts'],
globals: true,
},
define: {
...getBuildDefines(),
},
});

View file

@ -2,7 +2,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -27,4 +27,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

View file

@ -1,3 +1,6 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;
/**
* App type declarations for ManaCore web app
*

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -8,7 +8,7 @@
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
// Get translations based on current locale
const translations = $derived(getLoginTranslations($locale || 'de'));
@ -44,6 +44,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -32,4 +32,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

View file

@ -1,3 +1,6 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -8,7 +8,7 @@
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
// Get translations based on current locale
const translations = $derived(getLoginTranslations($locale || 'de'));
@ -44,6 +44,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -28,4 +28,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

View file

@ -1,3 +1,6 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -6,7 +6,7 @@
import { getLoginTranslations } from '@manacore/shared-i18n';
import { MukkeLogo } from '@manacore/shared-branding';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
// Get redirect URL from query params or sessionStorage
const redirectTo = $derived.by(() => {
@ -62,4 +62,5 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
/>

2
apps/nutriphi/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -7,7 +7,7 @@
import { locale } from 'svelte-i18n';
import { NutriPhiLogo } from '@manacore/shared-branding';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params or sessionStorage
@ -64,4 +64,5 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
/>

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -28,4 +28,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES, '@nutriphi/shared'],
},
define: {
...getBuildDefines(),
},
});

2
apps/photos/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -6,7 +6,7 @@
import { LoginPage } from '@manacore/shared-auth-ui';
import { getLoginTranslations } from '@manacore/shared-i18n';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
let redirectTo = $state('/');
@ -55,4 +55,5 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
/>

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -28,4 +28,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

View file

@ -1,3 +1,6 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.3.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -8,7 +8,7 @@
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import { onMount } from 'svelte';
import { PUBLIC_GOOGLE_CLIENT_ID, PUBLIC_APPLE_CLIENT_ID } from '$env/static/public';
@ -68,6 +68,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -28,4 +28,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

2
apps/planta/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.1.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -7,7 +7,7 @@
import { locale } from 'svelte-i18n';
import { PlantaLogo } from '@manacore/shared-branding';
import { authStore } from '$lib/stores/auth.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params or sessionStorage
@ -64,4 +64,5 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
/>

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -28,4 +28,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES, '@planta/shared'],
},
define: {
...getBuildDefines(),
},
});

2
apps/presi/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -8,7 +8,7 @@
import { auth } from '$lib/stores/auth.svelte';
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params
@ -52,6 +52,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -4,7 +4,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -39,4 +39,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

View file

@ -1,3 +1,6 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.1.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -8,7 +8,7 @@
import { QuestionsLogo } from '@manacore/shared-branding';
import { authStore } from '$lib/stores/auth.svelte';
import { apiClient } from '$lib/api/client';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params or sessionStorage
@ -70,4 +70,5 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
/>

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -28,4 +28,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

View file

@ -1,3 +1,6 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -8,7 +8,7 @@
import { SkillTreeLogo } from '@manacore/shared-branding';
import { authStore } from '$lib/stores/auth.svelte';
import { apiClient } from '$lib/api/client';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params or sessionStorage
@ -70,4 +70,5 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
/>

View file

@ -3,7 +3,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -28,4 +28,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES],
},
define: {
...getBuildDefines(),
},
});

2
apps/storage/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -4,7 +4,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -34,4 +34,7 @@ export default defineConfig({
include: ['src/**/*.test.ts'],
globals: true,
},
define: {
...getBuildDefines(),
},
});

2
apps/todo/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '1.0.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -9,7 +9,7 @@
import { authStore } from '$lib/stores/auth.svelte';
import AppSlider from '$lib/components/AppSlider.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
// Get redirect URL from query params or sessionStorage (set by AuthGateModal)
const redirectTo = $derived.by(() => {
@ -67,6 +67,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -4,7 +4,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -34,4 +34,7 @@ export default defineConfig({
include: ['src/**/*.test.ts'],
globals: true,
},
define: {
...getBuildDefines(),
},
});

2
apps/zitare/apps/web/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
declare const __BUILD_HASH__: string;
declare const __BUILD_TIME__: string;

View file

@ -1 +1,4 @@
export const APP_VERSION = '0.2.0';
export const BUILD_TIME: string =
typeof __BUILD_TIME__ !== 'undefined' ? __BUILD_TIME__ : new Date().toISOString();
export const BUILD_HASH: string = typeof __BUILD_HASH__ !== 'undefined' ? __BUILD_HASH__ : 'dev';

View file

@ -8,7 +8,7 @@
import { ZitareLogo } from '@manacore/shared-branding';
import { authStore } from '$lib/stores/auth.svelte';
import LanguageSelector from '$lib/components/LanguageSelector.svelte';
import { APP_VERSION } from '$lib/version';
import { APP_VERSION, BUILD_TIME } from '$lib/version';
import '$lib/i18n';
// Get redirect URL from query params or sessionStorage
@ -65,6 +65,7 @@
{verified}
{initialEmail}
version={APP_VERSION}
buildTime={BUILD_TIME}
>
{#snippet headerControls()}
<LanguageSelector />

View file

@ -2,7 +2,7 @@ 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';
import { MANACORE_SHARED_PACKAGES, getBuildDefines } from '@manacore/shared-vite-config';
export default defineConfig({
plugins: [
@ -26,4 +26,7 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES, '@zitare/content'],
},
define: {
...getBuildDefines(),
},
});

View file

@ -93,6 +93,8 @@
initialPassword?: string;
/** App version string to display */
version?: string;
/** Build timestamp (ISO string) to display next to version */
buildTime?: string;
}
let {
@ -118,6 +120,7 @@
initialEmail = '',
initialPassword = '',
version = '',
buildTime = '',
}: Props = $props();
const t = $derived({ ...defaultTranslations, ...translations });
@ -547,7 +550,18 @@
{/if}
{#if version}
<p class="version-label">v{version}</p>
<p class="version-label">
v{version}{#if buildTime}
· {new Date(buildTime).toLocaleDateString('de-DE', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
})}
{new Date(buildTime).toLocaleTimeString('de-DE', {
hour: '2-digit',
minute: '2-digit',
})}{/if}
</p>
{/if}
</div>