Grorapid Platform is a self-hosted email operations platform for developers, marketers, and sales teams. It combines contact management, campaigns, forms, webpages, workflows, and sending infrastructure in one product instead of splitting those workflows across separate tools. Use this guide if you want to run the backend and frontend locally for development. If you only need the hosted application, use https://portal.grorapid.com/.

What the platform includes

The Grorapid Platform setup in this docs hub includes:
  • a frontend portal at http://localhost:3000
  • a backend API at http://localhost:8989
  • supporting self-hosted services that typically run through Docker, such as the application container, queues, scheduling, Redis, and the database layer
The backend API is the source of truth for the API reference in this repo. Local API requests should hit the backend origin directly on port 8989.

Before you start

Make sure you have:
  • git
  • Docker and Docker Compose
  • Nginx and Certbot if you also plan to expose the app through a reverse proxy later

Prepare your environment

Clone the project and create your environment file:
git clone <repo-url> /path/to/grorapid
cd /path/to/grorapid
cp .env.example .env
Before you run setup locally, review these environment areas:
  • local app URL keys such as APP_URL and PLATFORM_URL
  • DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
  • MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD, MAIL_ENCRYPTION
If your local setup relies on custom constants, update Helpers/Constants.php before you run the platform setup.

Install and run with Docker

Build and start the containers:
docker compose build --no-cache
docker compose up -d
Run the application setup inside the app container:
docker compose exec app app-setup

Verify the installation

After the containers start, check these URLs:
  • local frontend portal: http://localhost:3000
  • local backend API: http://localhost:8989
When you test the API locally, call the backend directly on http://localhost:8989. The portal on http://localhost:3000 is a separate frontend surface, not the preferred local API entrypoint for this docs set. You can also verify the backend is reachable with a direct request:
curl http://localhost:8989

Reverse proxy

If you later want to expose the backend API and frontend portal on a server, configure them as separate Nginx sites:
  • api.your-domain.com should proxy to 127.0.0.1:8989
  • app.your-domain.com should proxy to 127.0.0.1:3000
Install Nginx and Certbot on Ubuntu:
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx -y
sudo ufw allow 'Nginx Full'

Backend API host: api.your-domain.com

Create /etc/nginx/sites-available/api.your-domain.com with a backend proxy like this:
server {
    listen 80;
    server_name api.your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8989;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}
Enable the site and request the certificate:
sudo ln -s /etc/nginx/sites-available/api.your-domain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d api.your-domain.com

Frontend portal host: app.your-domain.com

Create /etc/nginx/sites-available/app.your-domain.com with a frontend proxy like this:
server {
    listen 80;
    server_name app.your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}
Enable the site and request the certificate:
sudo ln -s /etc/nginx/sites-available/app.your-domain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d app.your-domain.com

Minimum system requirements

  • Minimum: 2 vCPUs, 4 GB memory, and 15 GB of disk storage
  • Recommended: scale CPU and memory based on workload, queue usage, and concurrent users

Troubleshooting

  • Make sure .env includes working database and mail credentials before you run app-setup.
  • If you use external Redis or queue infrastructure, configure those values in .env before deployment.
  • Ensure storage and bootstrap/cache are writable by the application user.
  • If Nginx sits in front of the platform, confirm the backend host still proxies to 8989 and the portal host still proxies to 3000.

Next steps

Once the platform is running, move to the Grorapid Platform API reference for the full backend, integration, external API, and webhook endpoint reference.