feat(quote): integrate Quote app into monorepo

- Add complete Quote app with mobile (Expo), web (SvelteKit), landing (Astro), and backend (NestJS)
- Create NestJS backend with Drizzle ORM for PostgreSQL
- Add API endpoints for favorites and user lists
- Add database schema for favorites and user_lists tables
- Update root package.json with quote dev scripts
- Add Quote environment variables to generate-env.mjs
- Add missing toast.ts store for web app
- Configure hybrid content strategy (static + API)

🤖 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-27 14:44:33 +01:00
parent 3a8d6bcf94
commit ea3285dcbb
285 changed files with 645599 additions and 8 deletions

View file

@ -212,12 +212,27 @@ const APP_CONFIGS = [
},
},
// Picture Backend (NestJS)
{
path: 'apps/picture/apps/backend/.env',
vars: {
NODE_ENV: () => 'development',
PORT: () => '3003',
DATABASE_URL: () => 'postgresql://picture:picturepassword@localhost:5434/picture',
MANA_CORE_AUTH_URL: (env) => env.MANA_CORE_AUTH_URL,
REPLICATE_API_TOKEN: (env) => env.MAERCHENZAUBER_REPLICATE_API_KEY, // Reuse existing Replicate key
CORS_ORIGINS: (env) => env.CORS_ORIGINS,
},
},
// Picture Mobile (Expo)
{
path: 'apps/picture/apps/mobile/.env',
vars: {
EXPO_PUBLIC_SUPABASE_URL: (env) => env.PICTURE_SUPABASE_URL,
EXPO_PUBLIC_SUPABASE_ANON_KEY: (env) => env.PICTURE_SUPABASE_ANON_KEY,
EXPO_PUBLIC_BACKEND_URL: (env) => env.PICTURE_BACKEND_URL || 'http://localhost:3003',
EXPO_PUBLIC_MANA_CORE_AUTH_URL: (env) => env.MANA_CORE_AUTH_URL,
},
},
@ -227,10 +242,42 @@ const APP_CONFIGS = [
vars: {
PUBLIC_SUPABASE_URL: (env) => env.PICTURE_SUPABASE_URL,
PUBLIC_SUPABASE_ANON_KEY: (env) => env.PICTURE_SUPABASE_ANON_KEY,
PUBLIC_BACKEND_URL: (env) => env.PICTURE_BACKEND_URL || 'http://localhost:3003',
PUBLIC_MANA_CORE_AUTH_URL: (env) => env.MANA_CORE_AUTH_URL,
PUBLIC_GOOGLE_CLIENT_ID: (env) => env.PICTURE_GOOGLE_CLIENT_ID || '',
PUBLIC_APPLE_CLIENT_ID: (env) => env.PICTURE_APPLE_CLIENT_ID || '',
},
},
// Quote Backend (NestJS)
{
path: 'apps/quote/apps/backend/.env',
vars: {
NODE_ENV: () => 'development',
PORT: (env) => env.QUOTE_BACKEND_PORT || '3007',
DATABASE_URL: (env) => env.QUOTE_DATABASE_URL,
MANA_CORE_AUTH_URL: (env) => env.MANA_CORE_AUTH_URL,
CORS_ORIGINS: (env) => env.CORS_ORIGINS,
},
},
// Quote Mobile (Expo)
{
path: 'apps/quote/apps/mobile/.env',
vars: {
EXPO_PUBLIC_BACKEND_URL: (env) => `http://localhost:${env.QUOTE_BACKEND_PORT || '3007'}`,
EXPO_PUBLIC_MANA_CORE_AUTH_URL: (env) => env.MANA_CORE_AUTH_URL,
},
},
// Quote Web (SvelteKit)
{
path: 'apps/quote/apps/web/.env',
vars: {
PUBLIC_BACKEND_URL: (env) => `http://localhost:${env.QUOTE_BACKEND_PORT || '3007'}`,
PUBLIC_MANA_CORE_AUTH_URL: (env) => env.MANA_CORE_AUTH_URL,
},
},
];
function main() {