Infrastructure and booking for a tour operating platform.
A platform for tours and experiences in Italy, with a Next.js frontend, a Laravel API and a channel manager connected over gRPC. The application is the client's; we run infrastructure, deploys and integration.
On AWS, with Laravel Forge, we run the servers of a travel platform: a Next.js frontend, a Laravel API with queues and scheduler, staging environments and a gRPC plugin connecting the platform to the experiences channel manager, Bokun. In 2026 we rebuilt the same architecture from scratch for a second brand with separate data, and production went live two days after provisioning.
Context
The client builds its platform with an external team: one developer and a project manager. We own servers, DNS, certificates, web configuration and the channel-manager integration.
The problem
The channel manager connects to external suppliers through a gRPC plugin: an always-on Java service that needs a dedicated nginx configuration. On top of that, each site needs its own deploy key, because GitHub doesn't allow the same key on more than one repository.
What we did
- 01
Isolated sites
Each site runs under its own system user: a Next.js frontend managed by Supervisor, a Laravel API with queues and scheduler, PHP 8.4, MySQL 8, Redis, Node 22. A developer's failed deploy doesn't touch the other sites.
- 02
The gRPC plugin
A Java service under systemd, published over TLS through nginx, with a health check, log rotation and JVM settings. From the access logs we spotted that the channel manager had registered the plugin as REST instead of gRPC, and had it fixed.
- 03
One key per site
Each user has its own deploy key, registered read-only on its repository. Explicit deploy scripts: pull, dependencies, migrations, restart of queues and the Node process.
- 04
A second brand, from scratch
Same architecture on a new server, its own database and fresh application keys: the two brands share no data. The client's team runs deploys, queues and scheduler from the panel on its own.
How it went
The second brand went live two days after the server was provisioned. The client's developer works independently on their sites; we keep AWS, DNS, nginx and the channel-manager integration.
Tools
FAQ
Can we keep our own development team?
Yes, that's the typical case. We look after infrastructure and integrations, your team keeps building the application.
What is a gRPC plugin for a channel manager?
Some channel managers, such as Bokun, connect to external suppliers through a plugin exposing a gRPC service. We host it, publish it behind TLS and keep it running and monitored.