mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-23 19:46:42 +02:00
chore: remove all NestJS backend references, replace with Hono/Bun
- Delete nestjs-backend.md guideline (replaced by hono-server.md) - Delete Dockerfile.nestjs-base and Dockerfile.nestjs templates - Delete stale BACKEND_ARCHITECTURE.md doc (NestJS-era, obsolete) - Update CLAUDE.md, GUIDELINES.md, authentication.md to Hono/Bun first - Update all app CLAUDE.md files: backend/ → server/, NestJS → Hono+Bun - Update all app package.json files: @*/backend → @*/server - Update docs: LOCAL_DEVELOPMENT, PORT_SCHEMA, ENVIRONMENT_VARIABLES, DATABASE_MIGRATIONS, MAC_MINI_SERVER, PROJECT_OVERVIEW - Update scripts: generate-env.mjs, setup-databases.sh, build-app.sh - Update CI/CD: cd-macmini.yml backend → server paths - Update Astro docs site: @chat/backend → @chat/server Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
708299b35e
commit
ab387b9b3d
43 changed files with 598 additions and 2398 deletions
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
| App | Port | URL |
|
||||
|-----|------|-----|
|
||||
| Backend | 3014 | http://localhost:3014 |
|
||||
| Server | 3014 | http://localhost:3014 |
|
||||
| Web App | 5179 | http://localhost:5179 |
|
||||
| Landing Page | 4322 | http://localhost:4322 |
|
||||
| Mobile | 8081 | Expo Go |
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
```
|
||||
apps/calendar/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@calendar/backend)
|
||||
│ ├── server/ # Hono/Bun compute server (@calendar/server)
|
||||
│ │ └── src/
|
||||
│ │ ├── main.ts
|
||||
│ │ ├── app.module.ts
|
||||
|
|
@ -114,11 +114,12 @@ apps/calendar/
|
|||
pnpm calendar:dev # Run all calendar apps
|
||||
|
||||
# Einzelne Apps starten
|
||||
pnpm dev:calendar:backend # Start backend server (port 3014)
|
||||
pnpm dev:calendar:server # Start server (port 3014)
|
||||
pnpm dev:calendar:web # Start web app (port 5179)
|
||||
pnpm dev:calendar:landing # Start landing page (port 4322)
|
||||
pnpm dev:calendar:mobile # Start mobile app [TODO]
|
||||
pnpm dev:calendar:app # Start web + backend together
|
||||
pnpm dev:calendar:app # Start web + server together
|
||||
pnpm dev:calendar:local # Start web + sync (no auth needed)
|
||||
|
||||
# Datenbank
|
||||
pnpm calendar:db:push # Push schema to database
|
||||
|
|
@ -126,7 +127,7 @@ pnpm calendar:db:studio # Open Drizzle Studio
|
|||
pnpm calendar:db:seed # Seed initial data
|
||||
```
|
||||
|
||||
### Backend (apps/calendar/apps/backend)
|
||||
### Server (apps/calendar/apps/server)
|
||||
|
||||
```bash
|
||||
pnpm dev # Start with hot reload
|
||||
|
|
@ -157,7 +158,7 @@ pnpm preview # Preview build
|
|||
|
||||
| Layer | Technology |
|
||||
|-------|------------|
|
||||
| **Backend** | NestJS 10, Drizzle ORM, PostgreSQL |
|
||||
| **Server** | Hono + Bun, Drizzle ORM, PostgreSQL |
|
||||
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
||||
| **Landing** | Astro 5.x, Tailwind CSS |
|
||||
| **Mobile** | React Native 0.81 + Expo SDK 54, NativeWind [TODO] |
|
||||
|
|
@ -224,7 +225,7 @@ eventsStore.updateEvent(id, data)
|
|||
eventsStore.deleteEvent(id)
|
||||
```
|
||||
|
||||
### Backend API Endpoints
|
||||
### Server API Endpoints
|
||||
|
||||
#### Health
|
||||
|
||||
|
|
@ -400,7 +401,7 @@ FREQ=WEEKLY;UNTIL=20241231T235959Z # Wöchentlich bis Ende 2024
|
|||
|
||||
## Environment Variables
|
||||
|
||||
### Backend (.env)
|
||||
### Server (.env)
|
||||
|
||||
```env
|
||||
NODE_ENV=development
|
||||
|
|
@ -544,11 +545,11 @@ pnpm calendar:db:push
|
|||
### 2. Apps starten
|
||||
|
||||
```bash
|
||||
# Backend + Web zusammen
|
||||
# Server + Web zusammen
|
||||
pnpm dev:calendar:app
|
||||
|
||||
# Oder einzeln:
|
||||
pnpm dev:calendar:backend # Terminal 1
|
||||
pnpm dev:calendar:server # Terminal 1
|
||||
pnpm dev:calendar:web # Terminal 2
|
||||
pnpm dev:calendar:landing # Terminal 3 (optional)
|
||||
```
|
||||
|
|
@ -653,7 +654,7 @@ pnpm --filter @calendar/web test:e2e
|
|||
|
||||
1. **Authentication**: Nutzt Mana Core Auth (JWT im Authorization Header)
|
||||
2. **Database**: PostgreSQL mit Drizzle ORM (Port 5432)
|
||||
3. **Port**: Backend läuft auf Port 3014
|
||||
3. **Port**: Server läuft auf Port 3014
|
||||
4. **Recurrence**: Verwendet RFC 5545 RRULE Format
|
||||
5. **i18n**: 5 Sprachen unterstützt (DE, EN, FR, ES, IT)
|
||||
6. **Theme**: Ocean-Theme (Blautöne) als Standard
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
"description": "Calendar App - Personal and Shared Calendars with CalDAV/iCal Sync",
|
||||
"scripts": {
|
||||
"dev": "pnpm run --filter=@calendar/* --parallel dev",
|
||||
"dev:backend": "pnpm --filter @calendar/backend dev",
|
||||
"dev:server": "pnpm --filter @calendar/server dev",
|
||||
"dev:web": "pnpm --filter @calendar/web dev",
|
||||
"dev:landing": "pnpm --filter @calendar/landing dev",
|
||||
"dev:mobile": "pnpm --filter @calendar/mobile dev",
|
||||
"db:push": "pnpm --filter @calendar/backend db:push",
|
||||
"db:studio": "pnpm --filter @calendar/backend db:studio",
|
||||
"db:seed": "pnpm --filter @calendar/backend db:seed"
|
||||
"db:push": "pnpm --filter @calendar/server db:push",
|
||||
"db:studio": "pnpm --filter @calendar/server db:studio",
|
||||
"db:seed": "pnpm --filter @calendar/server db:seed"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.9.3"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
```
|
||||
apps/chat/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@chat/backend)
|
||||
│ ├── server/ # Hono/Bun compute server (@chat/server)
|
||||
│ ├── landing/ # Astro marketing landing page (@chat/landing)
|
||||
│ ├── web/ # SvelteKit web application (@chat/web)
|
||||
│ └── mobile/ # Expo/React Native mobile app (@chat/mobile)
|
||||
|
|
@ -23,8 +23,9 @@ pnpm chat:dev # Run all chat apps
|
|||
pnpm dev:chat:mobile # Start mobile app
|
||||
pnpm dev:chat:web # Start web app
|
||||
pnpm dev:chat:landing # Start landing page
|
||||
pnpm dev:chat:backend # Start backend server
|
||||
pnpm dev:chat:full # Start backend + web + auth together
|
||||
pnpm dev:chat:server # Start server
|
||||
pnpm dev:chat:local # Start web + sync (no auth needed)
|
||||
pnpm dev:chat:full # Start server + web + auth together
|
||||
```
|
||||
|
||||
### Mobile App (chat/apps/mobile)
|
||||
|
|
@ -38,7 +39,7 @@ pnpm build:preview # Build preview version
|
|||
pnpm build:prod # Build production version
|
||||
```
|
||||
|
||||
### Backend (apps/chat/apps/backend)
|
||||
### Server (apps/chat/apps/server)
|
||||
|
||||
```bash
|
||||
pnpm start:dev # Start with hot reload
|
||||
|
|
@ -70,13 +71,13 @@ pnpm preview # Preview production build
|
|||
- **Mobile**: React Native 0.76.7 + Expo SDK 52, NativeWind, Expo Router
|
||||
- **Web**: SvelteKit 2.x, Svelte 5, Tailwind CSS 4
|
||||
- **Landing**: Astro 5.16, Tailwind CSS
|
||||
- **Backend**: NestJS 10, OpenRouter AI + mana-llm (local), Drizzle ORM, PostgreSQL
|
||||
- **Server**: Hono + Bun, OpenRouter AI + mana-llm (local), Drizzle ORM, PostgreSQL
|
||||
- **Auth**: Mana Core Auth (JWT)
|
||||
- **Types**: TypeScript 5.x
|
||||
|
||||
## Architecture
|
||||
|
||||
### Backend API Endpoints
|
||||
### Server API Endpoints
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| --------------------------------- | ------ | --------------------------- |
|
||||
|
|
@ -91,7 +92,7 @@ pnpm preview # Preview production build
|
|||
|
||||
### Environment Variables
|
||||
|
||||
#### Backend (.env)
|
||||
#### Server (.env)
|
||||
|
||||
```env
|
||||
# Cloud AI models via OpenRouter (optional if using only local models)
|
||||
|
|
@ -162,13 +163,13 @@ PUBLIC_BACKEND_URL=http://localhost:3002
|
|||
|
||||
```bash
|
||||
# Add new models to existing database
|
||||
pnpm --filter @chat/backend db:add-local-models
|
||||
pnpm --filter @chat/server db:add-local-models
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
1. **Get OpenRouter API key** at https://openrouter.ai/keys
|
||||
2. **Create `.env`** in `apps/chat/apps/backend/`:
|
||||
2. **Create `.env`** in `apps/chat/apps/server/`:
|
||||
```env
|
||||
OPENROUTER_API_KEY=sk-or-v1-xxx
|
||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
||||
|
|
@ -182,13 +183,13 @@ pnpm --filter @chat/backend db:add-local-models
|
|||
```
|
||||
4. **Seed database** (first time only):
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:push
|
||||
pnpm --filter @chat/backend db:seed
|
||||
pnpm --filter @chat/server db:push
|
||||
pnpm --filter @chat/server db:seed
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Security**: API keys are stored in the backend only - never in client apps
|
||||
1. **Security**: API keys are stored in the server only - never in client apps
|
||||
2. **Authentication**: Uses Mana Core Auth (JWT tokens)
|
||||
3. **Database**: PostgreSQL with Drizzle ORM (uses shared Docker container)
|
||||
4. **Deployment**: Backend runs on port 3002
|
||||
4. **Deployment**: Server runs on port 3002
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
```
|
||||
apps/contacts/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@contacts/backend) - Port 3015
|
||||
│ ├── server/ # Hono/Bun compute server (@contacts/server) - Port 3015
|
||||
│ ├── landing/ # Astro marketing landing page (@contacts/landing)
|
||||
│ ├── web/ # SvelteKit web application (@contacts/web) - Port 5184
|
||||
│ └── mobile/ # Expo/React Native mobile app (@contacts/mobile)
|
||||
|
|
@ -23,8 +23,9 @@ pnpm contacts:dev # Run all contacts apps
|
|||
pnpm dev:contacts:mobile # Start mobile app
|
||||
pnpm dev:contacts:web # Start web app
|
||||
pnpm dev:contacts:landing # Start landing page
|
||||
pnpm dev:contacts:backend # Start backend server
|
||||
pnpm dev:contacts:app # Start web + backend together
|
||||
pnpm dev:contacts:server # Start server
|
||||
pnpm dev:contacts:app # Start web + server together
|
||||
pnpm dev:contacts:local # Start web + sync (no auth needed)
|
||||
```
|
||||
|
||||
### Mobile App (apps/contacts/apps/mobile)
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
"description": "Contacts App - Contact Management with Manacore Integration",
|
||||
"scripts": {
|
||||
"dev": "pnpm run --filter=@contacts/* --parallel dev",
|
||||
"dev:backend": "pnpm --filter @contacts/backend dev",
|
||||
"dev:server": "pnpm --filter @contacts/server dev",
|
||||
"dev:web": "pnpm --filter @contacts/web dev",
|
||||
"dev:landing": "pnpm --filter @contacts/landing dev",
|
||||
"dev:mobile": "pnpm --filter @contacts/mobile dev",
|
||||
"db:push": "pnpm --filter @contacts/backend db:push",
|
||||
"db:studio": "pnpm --filter @contacts/backend db:studio",
|
||||
"db:seed": "pnpm --filter @contacts/backend db:seed"
|
||||
"db:push": "pnpm --filter @contacts/server db:push",
|
||||
"db:studio": "pnpm --filter @contacts/server db:studio",
|
||||
"db:seed": "pnpm --filter @contacts/server db:seed"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.9.3"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ AI-powered document management and context system for knowledge organization.
|
|||
```
|
||||
apps/context/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@context/backend)
|
||||
│ ├── backend/ # Hono/Bun compute server (@context/server)
|
||||
│ │ └── src/
|
||||
│ │ ├── main.ts
|
||||
│ │ ├── app.module.ts
|
||||
|
|
@ -45,7 +45,7 @@ apps/context/
|
|||
```bash
|
||||
# From monorepo root
|
||||
pnpm dev:context:full # Start auth + backend + web (with DB setup)
|
||||
pnpm dev:context:backend # Start backend only (port 3020)
|
||||
pnpm dev:context:server # Start backend only (port 3020)
|
||||
pnpm dev:context:web # Start web only (port 5192)
|
||||
pnpm dev:context:app # Start web + backend together
|
||||
pnpm dev:context:mobile # Start mobile app
|
||||
|
|
@ -61,7 +61,7 @@ pnpm setup:db:context # Create DB + push schema
|
|||
|
||||
| Layer | Technology |
|
||||
|-------|------------|
|
||||
| **Backend** | NestJS 10, Drizzle ORM, PostgreSQL |
|
||||
| **Backend** | Hono + Bun, Drizzle ORM, PostgreSQL |
|
||||
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
||||
| **Mobile** | React Native 0.76 + Expo SDK 52, NativeWind |
|
||||
| **Auth** | Mana Core Auth (JWT) |
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"scripts": {
|
||||
"dev": "turbo run dev",
|
||||
"dev:web": "pnpm --filter @context/web dev",
|
||||
"dev:backend": "pnpm --filter @context/backend dev",
|
||||
"dev:server": "pnpm --filter @context/server dev",
|
||||
"dev:mobile": "pnpm --filter @context/mobile dev"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,16 +25,16 @@ Each backend service has its own database and schema:
|
|||
|
||||
```bash
|
||||
# Push schema changes (development)
|
||||
pnpm --filter @chat/backend db:push
|
||||
pnpm --filter @chat/server db:push
|
||||
|
||||
# Generate migration files
|
||||
pnpm --filter @chat/backend db:generate
|
||||
pnpm --filter @chat/server db:generate
|
||||
|
||||
# Run migrations
|
||||
pnpm --filter @chat/backend db:migrate
|
||||
pnpm --filter @chat/server db:migrate
|
||||
|
||||
# Open Drizzle Studio (database GUI)
|
||||
pnpm --filter @chat/backend db:studio
|
||||
pnpm --filter @chat/server db:studio
|
||||
```
|
||||
|
||||
## Development Workflow
|
||||
|
|
@ -60,13 +60,13 @@ For local development, use `db:push` to quickly sync schema changes:
|
|||
2. **Push changes**
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:push
|
||||
pnpm --filter @chat/server db:push
|
||||
```
|
||||
|
||||
3. **Verify in Studio**
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:studio
|
||||
pnpm --filter @chat/server db:studio
|
||||
```
|
||||
</Steps>
|
||||
|
||||
|
|
@ -82,7 +82,7 @@ For production, use proper migration files:
|
|||
1. **Generate migration**
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:generate
|
||||
pnpm --filter @chat/server db:generate
|
||||
```
|
||||
|
||||
This creates a timestamped SQL file in `drizzle/migrations/`.
|
||||
|
|
@ -99,7 +99,7 @@ For production, use proper migration files:
|
|||
3. **Run migration**
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:migrate
|
||||
pnpm --filter @chat/server db:migrate
|
||||
```
|
||||
</Steps>
|
||||
|
||||
|
|
@ -241,7 +241,7 @@ export class UsersService {
|
|||
Schema not pushed:
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:push --force
|
||||
pnpm --filter @chat/server db:push --force
|
||||
```
|
||||
|
||||
### Migration conflicts
|
||||
|
|
@ -253,7 +253,7 @@ Reset and regenerate:
|
|||
rm -rf apps/chat/apps/backend/drizzle/migrations/*
|
||||
|
||||
# Regenerate
|
||||
pnpm --filter @chat/backend db:generate
|
||||
pnpm --filter @chat/server db:generate
|
||||
```
|
||||
|
||||
### Connection refused
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ If you see errors about missing tables/columns:
|
|||
|
||||
```bash
|
||||
# Push the latest schema
|
||||
pnpm --filter @chat/backend db:push --force
|
||||
pnpm --filter @chat/server db:push --force
|
||||
```
|
||||
|
||||
### Port already in use
|
||||
|
|
|
|||
|
|
@ -16,13 +16,13 @@ Manacore uses Jest for backend testing and Vitest for frontend testing.
|
|||
pnpm test
|
||||
|
||||
# Run tests for specific project
|
||||
pnpm --filter @chat/backend test
|
||||
pnpm --filter @chat/server test
|
||||
|
||||
# Run tests in watch mode
|
||||
pnpm --filter @chat/backend test:watch
|
||||
pnpm --filter @chat/server test:watch
|
||||
|
||||
# Run with coverage
|
||||
pnpm --filter @chat/backend test:cov
|
||||
pnpm --filter @chat/server test:cov
|
||||
```
|
||||
|
||||
## Test Structure
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ Turborepo handles task orchestration with:
|
|||
|
||||
| Type | Pattern | Example |
|
||||
|------|---------|---------|
|
||||
| App package | `@{project}/{app}` | `@chat/backend` |
|
||||
| App package | `@{project}/{app}` | `@chat/server` |
|
||||
| Shared package | `@manacore/shared-{name}` | `@manacore/shared-auth` |
|
||||
| Service | `@mana-{name}/service` | `@mana-search/service` |
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ AI chat application supporting multiple language models including local (Ollama)
|
|||
|
||||
| Component | Technology | Port |
|
||||
|-----------|------------|------|
|
||||
| Backend | NestJS | 3002 |
|
||||
| Server | Hono/Bun | 3002 |
|
||||
| Web | SvelteKit | 5173 |
|
||||
| Mobile | Expo | - |
|
||||
| Landing | Astro | - |
|
||||
|
|
@ -27,7 +27,7 @@ AI chat application supporting multiple language models including local (Ollama)
|
|||
pnpm dev:chat:full
|
||||
|
||||
# Or individual components
|
||||
pnpm dev:chat:backend
|
||||
pnpm dev:chat:server
|
||||
pnpm dev:chat:web
|
||||
pnpm dev:chat:mobile
|
||||
```
|
||||
|
|
@ -36,8 +36,8 @@ pnpm dev:chat:mobile
|
|||
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ Client │────>│ Backend │────>│ AI Models │
|
||||
│ (Web/Mobile)│ │ (NestJS) │ │ Ollama/API │
|
||||
│ Client │────>│ Server │────>│ AI Models │
|
||||
│ (Web/Mobile)│ │ (Hono/Bun) │ │ Ollama/API │
|
||||
└─────────────┘ └──────┬──────┘ └─────────────┘
|
||||
│
|
||||
▼
|
||||
|
|
@ -147,21 +147,21 @@ export const messages = pgTable('messages', {
|
|||
First time setup requires seeding AI models:
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:push
|
||||
pnpm --filter @chat/backend db:seed
|
||||
pnpm --filter @chat/server db:push
|
||||
pnpm --filter @chat/server db:seed
|
||||
```
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend test
|
||||
pnpm --filter @chat/backend test:e2e
|
||||
pnpm --filter @chat/server test
|
||||
pnpm --filter @chat/server test:e2e
|
||||
```
|
||||
|
||||
### Open Database GUI
|
||||
|
||||
```bash
|
||||
pnpm --filter @chat/backend db:studio
|
||||
pnpm --filter @chat/server db:studio
|
||||
```
|
||||
|
||||
## Links
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ Mukke is a web application for managing your music library, playing tracks, and
|
|||
```
|
||||
apps/mukke/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API (port 3010)
|
||||
│ ├── backend/ # Hono/Bun server (port 3010)
|
||||
│ ├── web/ # SvelteKit app (port 5180)
|
||||
│ └── landing/ # Astro marketing page
|
||||
├── packages/
|
||||
|
|
@ -23,7 +23,7 @@ pnpm dev:mukke:full
|
|||
|
||||
# Or start components individually
|
||||
pnpm docker:up # Start PostgreSQL, Redis, MinIO
|
||||
pnpm --filter @mukke/backend dev # Backend on port 3010
|
||||
pnpm --filter @mukke/server dev # Server on port 3010
|
||||
pnpm --filter @mukke/web dev # Web on port 5180
|
||||
pnpm --filter @mukke/landing dev # Landing page
|
||||
```
|
||||
|
|
@ -150,7 +150,7 @@ Playback uses HTML5 Audio (browser-native codec support). Upload accepts any `au
|
|||
| Waveform | wavesurfer.js 7.x |
|
||||
| BPM Detection | Web Audio API (peak detection) |
|
||||
| Metadata | music-metadata (server-side) |
|
||||
| Backend | NestJS 10, Drizzle ORM |
|
||||
| Backend | Hono + Bun, Drizzle ORM |
|
||||
| Database | PostgreSQL |
|
||||
| Storage | MinIO (S3-compatible) |
|
||||
| Auth | mana-core-auth |
|
||||
|
|
@ -178,14 +178,14 @@ PUBLIC_BACKEND_URL=http://localhost:3010
|
|||
|
||||
```bash
|
||||
# Database
|
||||
pnpm --filter @mukke/backend db:push # Push schema
|
||||
pnpm --filter @mukke/backend db:studio # Open Drizzle Studio
|
||||
pnpm --filter @mukke/server db:push # Push schema
|
||||
pnpm --filter @mukke/server db:studio # Open Drizzle Studio
|
||||
|
||||
# Type checking
|
||||
pnpm --filter @mukke/backend type-check
|
||||
pnpm --filter @mukke/server type-check
|
||||
pnpm --filter @mukke/web type-check
|
||||
|
||||
# Build
|
||||
pnpm --filter @mukke/backend build
|
||||
pnpm --filter @mukke/server build
|
||||
pnpm --filter @mukke/web build
|
||||
```
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
```
|
||||
apps/nutriphi/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@nutriphi/backend)
|
||||
│ ├── backend/ # Hono/Bun compute server (@nutriphi/server)
|
||||
│ │ └── src/
|
||||
│ │ ├── main.ts
|
||||
│ │ ├── app.module.ts
|
||||
|
|
@ -71,7 +71,7 @@ apps/nutriphi/
|
|||
pnpm nutriphi:dev
|
||||
|
||||
# Individual apps
|
||||
pnpm dev:nutriphi:backend # Backend (port 3015)
|
||||
pnpm dev:nutriphi:server # Backend (port 3015)
|
||||
pnpm dev:nutriphi:web # Web app (port 5180)
|
||||
pnpm dev:nutriphi:landing # Landing page (port 4323)
|
||||
pnpm dev:nutriphi:app # Web + backend together
|
||||
|
|
@ -108,7 +108,7 @@ pnpm build # Build for production
|
|||
|
||||
| Layer | Technology |
|
||||
|-------|------------|
|
||||
| **Backend** | NestJS 10, Drizzle ORM, PostgreSQL |
|
||||
| **Backend** | Hono + Bun, Drizzle ORM, PostgreSQL |
|
||||
| **AI** | Google Gemini 2.5 Flash |
|
||||
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
||||
| **Landing** | Astro 5.x, Tailwind CSS |
|
||||
|
|
@ -306,7 +306,7 @@ GEMINI_API_KEY=your-gemini-api-key
|
|||
pnpm dev:nutriphi:app
|
||||
|
||||
# Or individually:
|
||||
pnpm dev:nutriphi:backend # Terminal 1
|
||||
pnpm dev:nutriphi:server # Terminal 1
|
||||
pnpm dev:nutriphi:web # Terminal 2
|
||||
pnpm dev:nutriphi:landing # Terminal 3
|
||||
```
|
||||
|
|
|
|||
|
|
@ -5,17 +5,17 @@
|
|||
"description": "NutriPhi - AI-powered nutrition tracking with photo analysis",
|
||||
"scripts": {
|
||||
"dev": "pnpm run --filter=@nutriphi/* --parallel dev",
|
||||
"dev:backend": "pnpm --filter @nutriphi/backend dev",
|
||||
"dev:server": "pnpm --filter @nutriphi/server dev",
|
||||
"dev:web": "pnpm --filter @nutriphi/web dev",
|
||||
"dev:landing": "pnpm --filter @nutriphi/landing dev",
|
||||
"db:push": "pnpm --filter @nutriphi/backend db:push",
|
||||
"db:studio": "pnpm --filter @nutriphi/backend db:studio",
|
||||
"db:seed": "pnpm --filter @nutriphi/backend db:seed",
|
||||
"test": "pnpm --filter @nutriphi/backend test && pnpm --filter @nutriphi/shared test && pnpm --filter @nutriphi/web test",
|
||||
"test:backend": "pnpm --filter @nutriphi/backend test",
|
||||
"db:push": "pnpm --filter @nutriphi/server db:push",
|
||||
"db:studio": "pnpm --filter @nutriphi/server db:studio",
|
||||
"db:seed": "pnpm --filter @nutriphi/server db:seed",
|
||||
"test": "pnpm --filter @nutriphi/server test && pnpm --filter @nutriphi/shared test && pnpm --filter @nutriphi/web test",
|
||||
"test:backend": "pnpm --filter @nutriphi/server test",
|
||||
"test:web": "pnpm --filter @nutriphi/web test",
|
||||
"test:shared": "pnpm --filter @nutriphi/shared test",
|
||||
"test:cov": "pnpm --filter @nutriphi/backend test:cov"
|
||||
"test:cov": "pnpm --filter @nutriphi/server test:cov"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.9.3"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ AI image generation app using Replicate API with freemium credit system.
|
|||
```
|
||||
apps/picture/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API (port 3006)
|
||||
│ ├── backend/ # Hono/Bun server (port 3006)
|
||||
│ ├── mobile/ # Expo React Native app
|
||||
│ ├── web/ # SvelteKit web app
|
||||
│ └── landing/ # Astro marketing page
|
||||
|
|
@ -21,7 +21,7 @@ apps/picture/
|
|||
pnpm dev:picture:full # Start backend + web + auto DB setup
|
||||
|
||||
# Individual apps
|
||||
pnpm --filter @picture/backend dev # Backend only (port 3006)
|
||||
pnpm --filter @picture/server dev # Backend only (port 3006)
|
||||
pnpm --filter @picture/web dev # Web only
|
||||
pnpm --filter @picture/mobile dev # Mobile only
|
||||
```
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
```
|
||||
apps/planta/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@planta/backend)
|
||||
│ ├── backend/ # Hono/Bun compute server (@planta/server)
|
||||
│ └── web/ # SvelteKit web application (@planta/web)
|
||||
├── packages/
|
||||
│ └── shared/ # Shared types, utils (@planta/shared)
|
||||
|
|
@ -19,7 +19,7 @@ apps/planta/
|
|||
```bash
|
||||
pnpm planta:dev # Run all planta apps
|
||||
pnpm dev:planta:web # Start web app
|
||||
pnpm dev:planta:backend # Start backend server
|
||||
pnpm dev:planta:server # Start backend server
|
||||
pnpm dev:planta:app # Start web + backend together
|
||||
pnpm dev:planta:full # Start auth + backend + web with DB setup
|
||||
```
|
||||
|
|
@ -45,7 +45,7 @@ pnpm preview # Preview production build
|
|||
## Technology Stack
|
||||
|
||||
- **Web**: SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS
|
||||
- **Backend**: NestJS 10, Drizzle ORM, PostgreSQL
|
||||
- **Backend**: Hono + Bun, Drizzle ORM, PostgreSQL
|
||||
- **AI**: Google Gemini Vision for plant analysis
|
||||
- **Storage**: MinIO (S3-compatible)
|
||||
- **Auth**: Mana Core Auth (JWT)
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@
|
|||
"description": "Planta - Plant Documentation & Care App",
|
||||
"scripts": {
|
||||
"dev": "turbo run dev",
|
||||
"dev:backend": "pnpm --filter @planta/backend dev",
|
||||
"dev:server": "pnpm --filter @planta/server dev",
|
||||
"dev:web": "pnpm --filter @planta/web dev",
|
||||
"db:push": "pnpm --filter @planta/backend db:push",
|
||||
"db:studio": "pnpm --filter @planta/backend db:studio",
|
||||
"db:seed": "pnpm --filter @planta/backend db:seed"
|
||||
"db:push": "pnpm --filter @planta/server db:push",
|
||||
"db:studio": "pnpm --filter @planta/server db:studio",
|
||||
"db:seed": "pnpm --filter @planta/server db:seed"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.9.3"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
```
|
||||
apps/storage/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@storage/backend) - Port 3016
|
||||
│ ├── backend/ # Hono/Bun compute server (@storage/server) - Port 3016
|
||||
│ ├── landing/ # Astro marketing landing page (@storage/landing)
|
||||
│ └── web/ # SvelteKit web application (@storage/web) - Port 5185
|
||||
├── packages/
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
```
|
||||
apps/todo/
|
||||
├── apps/
|
||||
│ ├── backend/ # NestJS API server (@todo/backend)
|
||||
│ ├── backend/ # Hono/Bun compute server (@todo/server)
|
||||
│ ├── web/ # SvelteKit web application (@todo/web)
|
||||
│ └── landing/ # Astro marketing landing page (@todo/landing)
|
||||
├── packages/
|
||||
|
|
@ -75,7 +75,7 @@ pnpm preview # Preview build
|
|||
|
||||
| Layer | Technology |
|
||||
|-------|------------|
|
||||
| **Backend** | NestJS 10, Drizzle ORM, PostgreSQL |
|
||||
| **Backend** | Hono + Bun, Drizzle ORM, PostgreSQL |
|
||||
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
||||
| **Landing** | Astro 5.x, Tailwind CSS |
|
||||
| **Auth** | Mana Core Auth (JWT) |
|
||||
|
|
@ -300,7 +300,7 @@ Priority: explicit duration in text > history estimate > default fallback > none
|
|||
|
||||
```bash
|
||||
# Unit tests
|
||||
pnpm --filter @todo/backend test
|
||||
pnpm --filter @todo/server test
|
||||
pnpm --filter @todo/web test
|
||||
|
||||
# E2E tests
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
"description": "Todo App - Task Management for ManaCore Ecosystem",
|
||||
"scripts": {
|
||||
"dev": "pnpm run --filter=@todo/* --parallel dev",
|
||||
"dev:backend": "pnpm --filter @todo/backend dev",
|
||||
"dev:server": "pnpm --filter @todo/server dev",
|
||||
"dev:web": "pnpm --filter @todo/web dev",
|
||||
"dev:landing": "pnpm --filter @todo/landing dev",
|
||||
"db:push": "pnpm --filter @todo/backend db:push",
|
||||
"db:studio": "pnpm --filter @todo/backend db:studio",
|
||||
"db:seed": "pnpm --filter @todo/backend db:seed"
|
||||
"db:push": "pnpm --filter @todo/server db:push",
|
||||
"db:studio": "pnpm --filter @todo/server db:studio",
|
||||
"db:seed": "pnpm --filter @todo/server db:seed"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.9.3"
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ GPS tracking app with AI city guides. Location tracking runs locally via AsyncSt
|
|||
apps/traces/
|
||||
├── package.json # Orchestrator (name: traces)
|
||||
├── apps/
|
||||
│ ├── backend/ # @traces/backend (NestJS, Port 3026)
|
||||
│ ├── backend/ # @traces/server (NestJS, Port 3026)
|
||||
│ │ └── src/
|
||||
│ │ ├── main.ts
|
||||
│ │ ├── app.module.ts
|
||||
|
|
@ -31,7 +31,7 @@ apps/traces/
|
|||
```bash
|
||||
# Development
|
||||
pnpm dev:traces:mobile # Start Expo app
|
||||
pnpm dev:traces:backend # Start NestJS backend
|
||||
pnpm dev:traces:server # Start NestJS backend
|
||||
pnpm dev:traces:full # Start auth + backend + mobile
|
||||
|
||||
# Database
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue