Installation
HridaSign ships as a single Docker image — a Spring Boot process that serves the REST API and the built React frontend.
Prerequisites
- Docker and Docker Compose
- A PostgreSQL instance. The bundled compose file targets an existing
hrida-postgrescontainer on an externalhridaai-network(shared with other Hrida apps, separate database); pointSPRING_DATASOURCE_URLat your own if you prefer.
Deploy
cp .env.example .env # fill in the values
docker compose up -d --buildThe container binds 127.0.0.1:8084 → 8080 internally. Put a TLS-terminating reverse proxy in front. Uploads persist in the uploads_data volume.
Required values
| Variable | Notes |
|---|---|
DB_NAME / DB_USERNAME / DB_PASSWORD | The database. POSTGRES_HOST names the server. |
JWT_SECRET | Signs session tokens — a long random string, never reused across environments. |
APP_URL | Public origin, used for email deep-links (invitations, OTP). https://sign.hrida.ai in production. |
CORS_ALLOWED_ORIGINS | Comma-separated browser origin allow-list. |
MAIL_HOST / MAIL_PORT / MAIL_USERNAME / MAIL_PASSWORD / MAIL_FROM | SMTP for signing invitations and OTP. Gmail needs an App Password. |
ADMIN_SETUP_KEY | Guards platform-admin bootstrap (POST /api/admin/auth/register). |
Optional integrations
Leave empty to disable:
| Feature | Variables |
|---|---|
| Cloudinary storage | CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET |
| OpenAI (AI PDF tools) | OPENAI_API_KEY, OPENAI_OCR_MODEL |
| Razorpay payments | RAZORPAY_KEY_ID, RAZORPAY_KEY_SECRET, RAZORPAY_WEBHOOK_SECRET |
| Contact routing | CONTACT_TEAM_EMAIL |
Full reference in Configuration.
Local development
Per the project's own work-details/ notes, dev runs the two processes separately:
| Port | Process |
|---|---|
| 5173 | Vite dev server (frontend) |
| 8080 | Spring Boot API |
| 5432 | PostgreSQL |
# backend
cd backend && ./mvnw spring-boot:run
# frontend
cd frontend && npm install && npm run devFirst run
- Bootstrap the first platform owner with
ADMIN_SETUP_KEYviaPOST /api/admin/auth/register. - Seed the plan catalog (or let the app seed defaults).
- Users self-register at
/register; a company registers at/register-company, which creates the organization and its first org admin.