Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
|
|
|
# Database
|
|
|
|
|
DATABASE_URL=postgresql://crm:changeme@localhost:5432/port_nimara_crm
|
|
|
|
|
|
|
|
|
|
# Redis
|
|
|
|
|
REDIS_URL=redis://:changeme@localhost:6379
|
|
|
|
|
|
|
|
|
|
# Auth
|
|
|
|
|
BETTER_AUTH_SECRET=change-me-to-a-random-string-at-least-32-chars
|
|
|
|
|
BETTER_AUTH_URL=http://localhost:3000
|
|
|
|
|
CSRF_SECRET=change-me-to-a-random-string-at-least-32-chars
|
|
|
|
|
|
|
|
|
|
# MinIO
|
|
|
|
|
MINIO_ENDPOINT=localhost
|
|
|
|
|
MINIO_PORT=9000
|
|
|
|
|
MINIO_ACCESS_KEY=minioadmin
|
|
|
|
|
MINIO_SECRET_KEY=minioadmin
|
|
|
|
|
MINIO_BUCKET=crm-files
|
|
|
|
|
MINIO_USE_SSL=false
|
2026-05-11 14:04:28 +02:00
|
|
|
# When `true`, the S3 backend auto-creates the configured bucket on boot if it
|
|
|
|
|
# does not exist (otherwise boot throws so deployment-time misconfigs surface
|
|
|
|
|
# immediately). Leave unset in production.
|
|
|
|
|
MINIO_AUTO_CREATE_BUCKET=false
|
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
|
|
|
|
|
|
|
|
# Documenso
|
2026-05-11 14:04:28 +02:00
|
|
|
# Use the bare host — never include `/api/v1` in this URL. The Documenso
|
|
|
|
|
# client constructs versioned paths internally based on DOCUMENSO_API_VERSION
|
|
|
|
|
# below, and a double-pathed URL (https://.../api/v1/api/v1/...) returns 404
|
|
|
|
|
# on every call. Trailing-slash values are fine.
|
|
|
|
|
DOCUMENSO_API_URL=https://documenso.example.com
|
|
|
|
|
# `v1` (Documenso 1.13.x) or `v2` (Documenso 2.x). Determines which API path
|
|
|
|
|
# prefix the client uses and which response-shape normalizer runs.
|
|
|
|
|
DOCUMENSO_API_VERSION=v1
|
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
|
|
|
DOCUMENSO_API_KEY=your-documenso-api-key
|
|
|
|
|
DOCUMENSO_WEBHOOK_SECRET=your-webhook-secret-min-16-chars
|
2026-05-11 14:04:28 +02:00
|
|
|
# The Documenso template id used by the EOI send pathway. Per-port overrides
|
|
|
|
|
# live in `system_settings.documenso_template_id_eoi`; this env value is the
|
|
|
|
|
# global fallback when no per-port row exists.
|
|
|
|
|
DOCUMENSO_TEMPLATE_ID_EOI=
|
|
|
|
|
# Recipient role ids on the EOI template. The send service copies the template
|
|
|
|
|
# layout but re-targets recipients per interest, so we need the role ids to
|
|
|
|
|
# look up which template recipient becomes the Client / Sales signer.
|
|
|
|
|
DOCUMENSO_RECIPIENT_ID_CLIENT=
|
|
|
|
|
DOCUMENSO_RECIPIENT_ID_SALES=
|
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
|
|
|
|
|
|
|
|
# Email (SMTP)
|
|
|
|
|
SMTP_HOST=mail.portnimara.com
|
|
|
|
|
SMTP_PORT=587
|
|
|
|
|
|
|
|
|
|
# Encryption (64-char hex string for AES-256)
|
|
|
|
|
EMAIL_CREDENTIAL_KEY=0000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
|
|
|
|
|
|
# Google OAuth (optional)
|
|
|
|
|
GOOGLE_CLIENT_ID=
|
|
|
|
|
GOOGLE_CLIENT_SECRET=
|
|
|
|
|
|
|
|
|
|
# OpenAI (optional)
|
|
|
|
|
OPENAI_API_KEY=
|
|
|
|
|
|
|
|
|
|
# App
|
|
|
|
|
APP_URL=http://localhost:3000
|
|
|
|
|
PUBLIC_SITE_URL=https://portnimara.com
|
|
|
|
|
NODE_ENV=development
|
|
|
|
|
LOG_LEVEL=info
|
|
|
|
|
|
|
|
|
|
# Next.js public
|
|
|
|
|
NEXT_PUBLIC_APP_URL=http://localhost:3000
|