feat(chat): integrate chat project into monorepo with full app structure

- Restructure chat as apps/mobile, apps/web, apps/landing, backend
- Add NestJS backend for secure Azure OpenAI API calls
- Remove exposed API key from mobile app (security fix)
- Add shared chat-types package
- Create SvelteKit web app scaffold
- Create Astro landing page scaffold
- Update pnpm workspace configuration
- Add project-level CLAUDE.md documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Till-JS 2025-11-25 13:48:24 +01:00
parent fcf3a344b1
commit c638a7ffee
155 changed files with 22622 additions and 348 deletions

View file

@ -0,0 +1,41 @@
import React, { createContext, useContext, useState, useEffect } from 'react';
import { useColorScheme } from 'react-native';
import { lightTheme, darkTheme } from './index';
import { Theme } from '@react-navigation/native';
type ThemeContextType = {
isDarkMode: boolean;
toggleTheme: () => void;
theme: Theme;
};
const ThemeContext = createContext<ThemeContextType>({
isDarkMode: false,
toggleTheme: () => {},
theme: lightTheme,
});
export const useAppTheme = () => useContext(ThemeContext);
export function ThemeProvider({ children }: { children: React.ReactNode }) {
const colorScheme = useColorScheme();
const [isDarkMode, setIsDarkMode] = useState(colorScheme === 'dark');
// Aktualisiere den Theme-Modus, wenn sich das System-Theme ändert
useEffect(() => {
setIsDarkMode(colorScheme === 'dark');
}, [colorScheme]);
const toggleTheme = () => {
setIsDarkMode((prev) => !prev);
};
const theme = isDarkMode ? darkTheme : lightTheme;
return (
<ThemeContext.Provider value={{ isDarkMode, toggleTheme, theme }}>
{/* Wir verwenden die NativeWind-Klassen direkt in den Komponenten */}
{children}
</ThemeContext.Provider>
);
}

View file

@ -0,0 +1,83 @@
import { DefaultTheme, DarkTheme } from '@react-navigation/native';
export const lightTheme = {
...DefaultTheme,
colors: {
...DefaultTheme.colors,
primary: '#0A84FF',
secondary: '#5E5CE6',
background: '#F2F2F7',
card: '#FFFFFF',
text: '#000000',
border: '#E5E5EA',
notification: '#FF3B30',
placeholder: '#8E8E93',
accent: '#34C759',
muted: '#C7C7CC',
// Hover-States für Buttons und Menüpunkte
buttonHover: 'rgba(255, 255, 255, 0.7)', // Neutral weiß, heller
menuItemHover: 'rgba(255, 255, 255, 0.5)', // Neutral weiß, weniger intensiv
cardHover: 'rgba(255, 255, 255, 0.3)', // Neutral weiß, subtil
dangerHover: 'rgba(255, 255, 255, 0.5)', // Neutral weiß für Danger-Buttons
},
};
export const darkTheme = {
...DarkTheme,
colors: {
...DarkTheme.colors,
primary: '#0A84FF',
secondary: '#5E5CE6',
background: '#1C1C1E',
card: '#2C2C2E',
text: '#FFFFFF',
border: '#38383A',
notification: '#FF453A',
placeholder: '#8E8E93',
accent: '#30D158',
muted: '#48484A',
// Hover-States für Buttons und Menüpunkte
buttonHover: 'rgba(255, 255, 255, 0.15)', // Neutral weiß, heller für Dark Mode
menuItemHover: 'rgba(255, 255, 255, 0.1)', // Neutral weiß, dezent
cardHover: 'rgba(255, 255, 255, 0.05)', // Neutral weiß, sehr dezent
dangerHover: 'rgba(255, 255, 255, 0.15)', // Neutral weiß für Danger-Buttons
},
};
// Tailwind-kompatible Farbpalette für die Verwendung in der tailwind.config.js
export const tailwindColors = {
// Light Mode Colors
light: {
primary: '#0A84FF',
secondary: '#5E5CE6',
background: '#F2F2F7',
card: '#FFFFFF',
text: '#000000',
border: '#E5E5EA',
notification: '#FF3B30',
placeholder: '#8E8E93',
accent: '#34C759',
muted: '#C7C7CC',
buttonHover: 'rgba(255, 255, 255, 0.7)',
menuItemHover: 'rgba(255, 255, 255, 0.5)',
cardHover: 'rgba(255, 255, 255, 0.3)',
dangerHover: 'rgba(255, 255, 255, 0.5)',
},
// Dark Mode Colors
dark: {
primary: '#0A84FF',
secondary: '#5E5CE6',
background: '#1C1C1E',
card: '#2C2C2E',
text: '#FFFFFF',
border: '#38383A',
notification: '#FF453A',
placeholder: '#8E8E93',
accent: '#30D158',
muted: '#48484A',
buttonHover: 'rgba(255, 255, 255, 0.15)',
menuItemHover: 'rgba(255, 255, 255, 0.1)',
cardHover: 'rgba(255, 255, 255, 0.05)',
dangerHover: 'rgba(255, 255, 255, 0.15)',
},
};