mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 23:01:09 +02:00
- Rename entire quote project to zitare (German name) - Add global search page with quote and author search - Add search to navigation with Cmd/Ctrl+K shortcut - Add missing icons to PillNavigation (heart, list, compass) - Update all package names from @quote/* to @zitare/* - Update env variables from QUOTE_* to ZITARE_* - Update CLAUDE.md documentation - Fix layout with flex container structure 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5.3 KiB
5.3 KiB
Zitare Project Guide
Project Structure
apps/zitare/
├── apps/
│ ├── backend/ # NestJS API server (@zitare/backend)
│ ├── landing/ # Astro marketing landing page (@zitare/landing)
│ ├── web/ # SvelteKit web application (@zitare/web)
│ └── mobile/ # Expo/React Native mobile app (@zitare/mobile)
├── packages/
│ ├── shared/ # Shared types, utils, configs (@zitare/shared)
│ ├── content/ # Quote data and content (@zitare/content)
│ └── web-ui/ # Shared Svelte components (@zitare/web-ui)
└── package.json
Commands
Root Level (from monorepo root)
pnpm zitare:dev # Run all zitare apps
pnpm dev:zitare:mobile # Start mobile app
pnpm dev:zitare:web # Start web app
pnpm dev:zitare:landing # Start landing page
pnpm dev:zitare:backend # Start backend server
pnpm dev:zitare:app # Start web + backend together
Mobile App (apps/zitare/apps/mobile)
pnpm dev # Start Expo dev server
pnpm ios # Run on iOS simulator
pnpm android # Run on Android emulator
Backend (apps/zitare/apps/backend)
pnpm dev # Start with hot reload
pnpm build # Build for production
pnpm start:prod # Start production server
pnpm db:push # Push schema to database
pnpm db:studio # Open Drizzle Studio
Web App (apps/zitare/apps/web)
pnpm dev # Start dev server
pnpm build # Build for production
pnpm preview # Preview production build
Landing Page (apps/zitare/apps/landing)
pnpm dev # Start dev server
pnpm build # Build for production
Technology Stack
- Mobile: React Native 0.81 + Expo SDK 54, NativeWind, Expo Router, Zustand
- Web: SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS
- Landing: Astro 5.x, Tailwind CSS
- Backend: NestJS 10, Drizzle ORM, PostgreSQL
- Types: TypeScript 5.x
Architecture
Content Delivery (Hybrid)
- Static Content: Quotes and authors are bundled in
@zitare/contentpackage for offline access - Backend API: User-specific data (favorites, lists) are stored in PostgreSQL via backend API
Backend API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/api/health |
GET | Health check |
/api/favorites |
GET | Get user's favorites |
/api/favorites |
POST | Add quote to favorites |
/api/favorites/:quoteId |
DELETE | Remove from favorites |
/api/lists |
GET | Get user's lists |
/api/lists |
POST | Create new list |
/api/lists/:id |
GET | Get list details |
/api/lists/:id |
PUT | Update list |
/api/lists/:id |
DELETE | Delete list |
/api/lists/:id/quotes |
POST | Add quote to list |
/api/lists/:id/quotes/:quoteId |
DELETE | Remove quote from list |
Database Schema
favorites - User favorite quotes
id(UUID) - Primary keyuser_id(UUID) - User referencequote_id(VARCHAR) - Reference to static quote IDcreated_at(TIMESTAMP)
user_lists - Custom user lists
id(UUID) - Primary keyuser_id(UUID) - User referencename(TEXT) - List namedescription(TEXT) - Optional descriptionquote_ids(JSONB) - Array of quote IDscreated_at(TIMESTAMP)updated_at(TIMESTAMP)
Environment Variables
Backend (.env)
NODE_ENV=development
PORT=3007
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/zitare
MANA_CORE_AUTH_URL=http://localhost:3001
CORS_ORIGINS=http://localhost:5173,http://localhost:5177,http://localhost:8081
Mobile (.env)
EXPO_PUBLIC_BACKEND_URL=http://localhost:3007
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
Web (.env)
PUBLIC_BACKEND_URL=http://localhost:3007
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
Shared Packages
@zitare/shared
- Types:
ContentItem,ContentAuthor,Quote,QuoteMetadata - Utils: Search, filter, random selection functions
- Configs: App configuration
@zitare/content
- Static quote data (German and English)
- Author information with biographies
- Export functions for data access
@zitare/web-ui
- Shared Svelte 5 components
- Styling utilities
- Stores
Code Style Guidelines
- TypeScript: Strict typing with interfaces
- Mobile: Functional components with hooks, Zustand for state
- Web: Svelte 5 runes mode (
$state,$derived,$effect) - Styling: Tailwind CSS / NativeWind
- Formatting: Prettier with project config
Important Notes
- Offline First: Static content works without backend
- Authentication: Uses Mana Core Auth (JWT in Authorization header)
- Database: PostgreSQL with Drizzle ORM
- Port: Backend runs on port 3007 by default