chahinebrini 5d6c322129 wip: KeyboardAwareSheet migrations + Snake/Tetris UI + iron.png + useMe live-update
Sheets via neuer KeyboardAwareSheet-Composable (in Modal pattern, auto-grow
mit Tastatur, paddingBottom-Lift): EditMail, AddDomain, CreateRoom, ConnectMail.
GameOverScreen behält Spring-Slide-In, nutzt RN Keyboard.addListener für Lift.

- KeyboardAwareSheet.tsx — universal modal with sheet-grow + keyboard-padding
- react-native-keyboard-controller installiert + KeyboardProvider in Root
- Snake: time + ScoreProgressBar + useSnakeSounds (haptic, audio TODO)
- Tetris: title weg, Buttons zentriert, kein Pressable mit style-fn
- DPad-Buttons 60→48, more bg, no scale
- useMe: pub-sub listener pattern für app-weite avatar/nickname-Updates
- dm.tsx: resolveAvatar wrap (iron.png-Warning)
- Mail-error-humanizer + locales

Recovery-Doc-Update in docs/internal/RECOVERY_LOG_2026-05-10.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:59:25 +02:00

73 lines
1.6 KiB
TypeScript

export default defineNuxtConfig({
compatibilityDate: "2025-07-15",
devtools: { enabled: false },
// SPA-mode: statisch servierbar via nginx try_files /index.html
ssr: false,
app: {
htmlAttrs: { lang: "de" },
head: {
meta: [
{
name: "viewport",
content: "width=device-width, initial-scale=1",
},
],
},
},
modules: [
"@nuxt/ui",
"@nuxt/image",
"@nuxt/fonts",
"@nuxt/icon",
"@nuxtjs/i18n",
"@vueuse/motion/nuxt",
"@vueuse/nuxt",
],
fonts: {
families: [{ name: "Nunito", provider: "google" }],
},
i18n: {
locales: [
{ code: "de", name: "Deutsch", dir: "ltr", file: "de.json" },
{ code: "en", name: "English", dir: "ltr", file: "en.json" },
],
defaultLocale: "de",
strategy: "no_prefix",
// restructureDir:false verhindert dass i18n v9 den Nuxt-4-Default-Prefix
// "i18n/" vor langDir stellt. Ohne das würde es unter {rootDir}/i18n/locales/ suchen.
restructureDir: false,
langDir: "locales",
detectBrowserLanguage: {
useCookie: true,
cookieKey: "rebreak_lang",
cookieSecure: false,
fallbackLocale: "de",
redirectOn: "root",
},
},
colorMode: {
preference: "dark",
fallback: "dark",
},
css: ["~/assets/css/main.css"],
devServer: {
port: 3020,
},
runtimeConfig: {
public: {
// Backend-API für public endpoints (Blocklist-Count etc.)
// Staging: api.staging.rebreak.org | Prod: api.rebreak.org
apiBase: process.env.NUXT_PUBLIC_API_BASE ?? "https://api.staging.rebreak.org",
},
},
});