Struttura Progetto
Guida dettagliata alla struttura del monorepo Emblema e organizzazione del codice.
π Struttura Monorepoβ
emblema/
βββ apps/ # Applicazioni principali
β βββ www-emblema/ # π Web app principale (Next.js 14)
β βββ ui/ # π¨ Libreria componenti condivisi
β βββ doc-emblema/ # π Documentazione (Docusaurus)
β βββ background-task/ # βοΈ Worker AI (Python/Celery)
β βββ document-render/ # π Rendering documenti (Python)
β βββ novu-bridge/ # π¬ Bridge notifiche (Node.js)
β βββ mcp-demo/ # π€ Demo MCP server (Python)
β βββ keycloakify-starter/ # π Tema Keycloak personalizzato
βββ packages/ # Pacchetti condivisi
β βββ ui/ # Componenti UI Shadcn
β βββ config/ # Configurazioni condivise
βββ config/ # Configurazioni infrastruttura
β βββ traefik/ # Reverse proxy config
β βββ keycloak/ # Auth config
β βββ monitoring/ # Grafana dashboards
βββ install/ # Script installazione
βββ scripts/ # Script utility
β βββ security/ # Security scanning
βββ docker/ # Dockerfile templates
βββ hasura/ # GraphQL schema & migrations
βββ templates/ # Template generatori codice
π Frontend Applicationsβ
apps/www-emblema/β
Applicazione web principale con Next.js 14 App Router.
www-emblema/
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout
β βββ page.tsx # Homepage
β βββ (auth)/ # Gruppo auth
β β βββ login/
β β βββ register/
β βββ dashboard/ # Dashboard utente
β β βββ layout.tsx
β β βββ page.tsx
β β βββ documents/
β βββ documents/ # Gestione documenti
β β βββ [id]/
β β βββ upload/
β β βββ list/
β βββ chat/ # Chat AI
β β βββ [chatId]/
β β βββ components/
β βββ api/ # API Routes
β β βββ v1/ # API versionate
β β βββ auth/[...nextauth]/ # NextAuth
β β βββ cron/ # Cron jobs
β βββ settings/ # Impostazioni utente
βββ components/ # React components
β βββ ui/ # UI base components
β βββ features/ # Feature components
β β βββ document/
β β βββ chat/
β β βββ chunk/
β β βββ knowledge-base/
β βββ layout/ # Layout components
βββ hooks/ # Custom React hooks
βββ lib/ # Utility functions
βββ contexts/ # React contexts
βββ schema/ # Zod validation schemas
βββ types/ # TypeScript types
βββ public/ # Static assets
βββ config/ # App configuration
apps/ui/β
Libreria componenti condivisi basata su Shadcn/ui.
ui/
βββ src/
β βββ components/ # Componenti esportati
β β βββ button.tsx
β β βββ card.tsx
β β βββ dialog.tsx
β β βββ ...
β βββ lib/ # Utilities
β βββ index.ts # Export principale
βββ package.json
βββ tsconfig.json
βοΈ Backend Servicesβ
apps/background-task/β
Worker Celery per elaborazioni AI intensive.
background-task/
βββ app/
β βββ __init__.py
β βββ main.py # FastAPI application
β βββ celery_app.py # Celery configuration
β βββ config.py # Settings
β βββ dependencies.py # Dependency injection
β βββ tasks.py # Celery tasks
β βββ chunkers/ # Document chunking
β β βββ __init__.py
β β βββ base.py
β β βββ document.py # PDF/TXT chunker
β β βββ audio.py # Audio chunker
β β βββ video.py # Video chunker
β βββ handlers/ # Business logic
β β βββ document.py
β β βββ audio.py
β β βββ storage.py
β β βββ vector_db.py
β βββ routers/ # API endpoints
β β βββ tasks.py
β βββ utils/ # Utilities
βββ tests/ # Test suite
βββ pyproject.toml # Python dependencies
βββ Dockerfile # Container config
βββ docker-compose.yaml # Local development
apps/document-render/β
Servizio rendering documenti PDF.
document-render/
βββ app/
β βββ main.py # FastAPI app
β βββ renderer.py # Rendering logic
β βββ config.py # Configuration
βββ templates/ # HTML templates
βββ static/ # CSS/JS assets
βββ Dockerfile
π§ Configuration Filesβ
Root Configurationβ
emblema/
βββ .env.example # Template variabili ambiente
βββ .gitignore # Git ignore rules
βββ docker-compose.yaml # Compose principale
βββ docker-compose-*.yaml # Compose modulari
βββ package.json # Root package.json
βββ pnpm-workspace.yaml # pnpm workspace config
βββ turbo.json # Turborepo config
βββ tsconfig.json # TypeScript base config
Docker Compose Filesβ
docker-compose.yaml- File principale con includesdocker-compose-base.yaml- Servizi base (DB, Redis, MinIO)docker-compose-data-source.yaml- Hasura, Milvusdocker-compose-auth.yaml- Keycloakdocker-compose-llm.yaml- LiteLLM gatewaydocker-compose-monitoring.yaml- Grafana, Prometheusdocker-compose-notification.yaml- Novudocker-compose-background-task.yaml- Celery workers
π Important Directoriesβ
/hasuraβ
Schema GraphQL e migrations Hasura.
hasura/
βββ metadata/ # Hasura metadata
β βββ tables.yaml
β βββ actions.yaml
β βββ permissions/
βββ migrations/ # Database migrations
βββ seeds/ # Seed data
/configβ
Configurazioni servizi infrastruttura.
config/
βββ traefik/
β βββ traefik.yml # Config principale
β βββ traefik-le.yml # Let's Encrypt config
β βββ dynamic/ # Routing dinamico
β βββ certs/ # Certificati custom
βββ keycloak/
β βββ realm-export.json # Realm configuration
βββ monitoring/
βββ prometheus.yml # Prometheus config
βββ dashboards/ # Grafana dashboards
/scriptsβ
Script utility per sviluppo e deployment.
scripts/
βββ security/ # Security scanning
β βββ scan.sh
β βββ generate-html-report.sh
β βββ generate-sbom.sh
βββ export-docker-images.sh # Export per air-gap
βββ import-docker-images.sh # Import immagini
βββ health-check.sh # Health monitoring
ποΈ Build Artifactsβ
Frontend Buildβ
apps/www-emblema/
βββ .next/ # Next.js build output
βββ out/ # Static export (se usato)
βββ node_modules/ # Dependencies
Python Servicesβ
apps/background-task/
βββ .venv/ # Virtual environment
βββ __pycache__/ # Python cache
βββ dist/ # Build artifacts
Docker Imagesβ
# Naming convention
emblema/www:dev
emblema/background-task:dev
emblema/document-render:dev
π Naming Conventionsβ
File Namingβ
- Components:
PascalCase.tsx(es.DocumentCard.tsx) - Hooks:
camelCase.tscon prefissouse(es.useDocuments.ts) - Utils:
kebab-case.ts(es.format-date.ts) - Types:
kebab-case.types.ts(es.document.types.ts) - Constants:
UPPER_SNAKE_CASE.ts(es.API_ENDPOINTS.ts)
Directory Structureβ
- Feature-based: Raggruppa per funzionalitΓ
- Colocation: Tieni vicini file correlati
- Shallow nesting: Max 3-4 livelli di profonditΓ
Import Pathsβ
// Usa alias assoluti
import { Button } from "@/components/ui/button";
import { useDocuments } from "@/hooks/use-documents";
// Non path relativi profondi
// β import { Button } from "../../../components/ui/button";
π Security Considerationsβ
Sensitive Filesβ
Non committare mai:
.env(usa.env.example)*.key,*.pem,*.crtsecrets/,credentials/.venv/,node_modules/
Docker Secretsβ
# docker-compose.yaml
secrets:
db_password:
file: ./secrets/db_password.txt
π Development Workflowβ
1. Setup Localeβ
# Clone e setup
git clone <repo>
cd emblema
pnpm install
./install.sh
2. Development Modeβ
# Frontend
pnpm --filter=www-emblema dev
# Backend
cd apps/background-task
uv run fastapi dev
3. Build & Testβ
# Build all
pnpm build
# Test
pnpm test
# Lint
pnpm lint
π Best Practicesβ
-
Monorepo Management
- Usa
pnpmworkspace per dipendenze condivise - Turbo per build caching
- Cambia solo ciΓ² che serve
- Usa
-
Code Organization
- Feature-based structure
- Colocate test vicino al codice
- Shared code in
packages/
-
Configuration
- Environment-specific in
.env - Defaults in code
- Type-safe configuration objects
- Environment-specific in
-
Documentation
- README in ogni app/package
- Inline comments per logica complessa
- API documentation con OpenAPI/GraphQL
π‘ Tip: Usa tree -I 'node_modules|.next|.venv' -L 3 per visualizzare la struttura senza file di build.