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

@ -0,0 +1,5 @@
/**
* App Configurations
*/
export { quotesAppConfig } from './quotes.config';

View file

@ -0,0 +1,100 @@
/**
* Default configuration for Quotes app
*/
import type { FullAppConfig, Quote } from '../types';
export const quotesAppConfig: FullAppConfig<Quote> = {
metadata: {
name: 'quotes',
displayName: 'Zitate',
description: 'Inspirierende Zitate von großen Denkern',
version: '1.0.0',
primaryLanguage: 'de',
supportedLanguages: ['de', 'en'],
},
contentType: 'quote',
contentLabel: {
singular: 'Zitat',
plural: 'Zitate',
},
authorLabel: {
singular: 'Autor',
plural: 'Autoren',
},
colors: {
primary: '#667eea',
secondary: '#764ba2',
accent: '#f093fb',
},
features: {
favorites: true,
lists: true,
sharing: true,
search: true,
filters: true,
authors: true,
categories: true,
tags: true,
dailyContent: true,
notifications: true,
widgets: true,
cloudSync: true,
premium: true,
},
display: {
showAuthor: true,
showDate: false,
showSource: true,
showCategory: true,
showTags: true,
cardStyle: 'detailed',
swipeDirection: 'horizontal',
},
navigation: {
tabs: [
{
id: 'quotes',
label: 'Zitate',
icon: 'quote',
route: '/(tabs)',
enabled: true,
},
{
id: 'authors',
label: 'Autoren',
icon: 'person',
route: '/(tabs)/authors',
enabled: true,
},
{
id: 'lists',
label: 'Listen',
icon: 'list',
route: '/(tabs)/liste',
enabled: true,
},
{
id: 'favorites',
label: 'Favoriten',
icon: 'heart',
route: '/(tabs)/myquotes',
enabled: true,
},
{
id: 'search',
label: 'Suche',
icon: 'search',
route: '/(tabs)/search',
enabled: true,
},
],
showTabBar: true,
tabBarStyle: 'ios',
},
};