Full enterprise web operating system including: - Next.js 14 frontend with App Router, i18n (DE/EN), shadcn/ui - NestJS 10 backend with Prisma, JWT auth, Swagger docs - Keycloak 24 SSO with role-based access control - HR module (employees, time tracking, absences, org chart) - LEAN module (3S planning, morning meeting SQCDM, skill matrix) - Integrations module (PlentyONE, Zulip, Todoist, FreeScout, Nextcloud, ecoDMS, GembaDocs) - Dashboard with customizable drag & drop widget grid - Docker Compose infrastructure (PostgreSQL 16, Redis 7, Keycloak 24) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
81 lines
2.2 KiB
Plaintext
81 lines
2.2 KiB
Plaintext
# Application
|
|
NODE_ENV=development
|
|
PORT=3001
|
|
API_PREFIX=api
|
|
|
|
# Database
|
|
# NOTE: App uses tos_app (separate from Keycloak's tos_db)
|
|
DATABASE_URL="postgresql://tos_user:tos_secret_password@localhost:5432/tos_app?schema=public"
|
|
|
|
# JWT / Keycloak
|
|
# IMPORTANT: Change JWT_SECRET in production! Use a cryptographically secure random string.
|
|
JWT_SECRET=your-super-secret-jwt-key-change-in-production
|
|
KEYCLOAK_URL=http://localhost:8080
|
|
KEYCLOAK_REALM=tOS
|
|
# NOTE: Client ID must match the Keycloak realm configuration in docker/keycloak/realm-export.json
|
|
KEYCLOAK_CLIENT_ID=tos-backend
|
|
KEYCLOAK_CLIENT_SECRET=your-keycloak-backend-client-secret
|
|
|
|
# CORS
|
|
CORS_ORIGINS=http://localhost:3000,http://localhost:5173
|
|
|
|
# Swagger
|
|
SWAGGER_ENABLED=true
|
|
|
|
# =============================================================================
|
|
# Phase 3: Integrations & Sync Jobs
|
|
# =============================================================================
|
|
|
|
# Encryption
|
|
# IMPORTANT: Generate a secure 32+ character key for production!
|
|
# You can generate one with: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
|
ENCRYPTION_KEY=your-32-byte-encryption-key-change-in-production
|
|
|
|
# Redis (required for BullMQ in production)
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
|
|
# Sync Jobs
|
|
# Set to 'true' to enable automatic background sync jobs
|
|
ENABLE_SYNC_JOBS=false
|
|
|
|
# Sync Intervals (in minutes)
|
|
SYNC_INTERVAL_PLENTYONE=15
|
|
SYNC_INTERVAL_ZULIP=5
|
|
SYNC_INTERVAL_TODOIST=10
|
|
SYNC_INTERVAL_FREESCOUT=10
|
|
SYNC_INTERVAL_NEXTCLOUD=30
|
|
SYNC_INTERVAL_ECODMS=60
|
|
SYNC_INTERVAL_GEMBADOCS=30
|
|
|
|
# =============================================================================
|
|
# Phase 3: API Connector Credentials
|
|
# =============================================================================
|
|
|
|
# PlentyONE (OAuth2 Client Credentials)
|
|
PLENTYONE_BASE_URL=
|
|
PLENTYONE_CLIENT_ID=
|
|
PLENTYONE_CLIENT_SECRET=
|
|
|
|
# ZULIP (Basic Auth with API Key)
|
|
ZULIP_BASE_URL=
|
|
ZULIP_EMAIL=
|
|
ZULIP_API_KEY=
|
|
|
|
# Todoist (Bearer Token)
|
|
TODOIST_API_TOKEN=
|
|
|
|
# FreeScout (API Key)
|
|
FREESCOUT_API_URL=
|
|
FREESCOUT_API_KEY=
|
|
|
|
# Nextcloud (Basic Auth / App Password)
|
|
NEXTCLOUD_URL=
|
|
NEXTCLOUD_USERNAME=
|
|
NEXTCLOUD_PASSWORD=
|
|
|
|
# ecoDMS (Session-based Auth)
|
|
ECODMS_API_URL=
|
|
ECODMS_USERNAME=
|
|
ECODMS_PASSWORD=
|