What is an Impulse project?
A project bundles one or more services across Impulse modules into a single customer-facing grouping — one managed Postgres plus one MinIO bucket plus one cache, all tied to one app.
Last updated 20 days ago
What is an Impulse project?
A project is the client-facing grouping concept ImpulseCore owns. It bundles one or more services across modules so a customer running a single application can see all the related infrastructure together — and so operators can answer "what does this customer have?" in one query.
Why projects exist
A typical app needs more than one managed service: a database, an object store, sometimes a cache or a search index. Without a grouping concept, each one would show up as a standalone WHMCS service with no relationship to the others. The customer would have to remember which Postgres goes with which bucket. The operator would have to chase services across five module tabs.
A project says: "these services belong together." One managed Postgres plus one MinIO bucket plus one Valkey instance — all tied to a single customer app — sit under one project record.
What's in a project
Each project row in mod_impulsecore_projects carries:
- A client id (FK to
tblclients). - A project name the customer chose.
- A creation timestamp.
Services join the project through mod_impulsecore_project_services, which records which tblhosting.id belongs to which project. The same service can only belong to one project at a time.
How services join a project
Services join at provisioning time. When a module provisions a new service for a customer, it either:
- Creates a new project for the customer and attaches the service, or
- Attaches the service to an existing project the customer has selected during checkout or in the client area.
The "Connected" badge in the customer client area surfaces project membership: if a Postgres database, a MinIO bucket, and a cache instance share a project, the customer sees them grouped together with cross-links between their service pages.
Operators don't manually edit project membership in normal operation. Module hooks handle it through the ImpulseCore::* facade.
Finding which project a service belongs to
From the admin side, the quickest path is the service's WHMCS detail page — any module's admin tab links out to the parent project view in Core.
From SQL, the join is direct:
SELECT p.id, p.name, p.client_id FROM mod_impulsecore_projects p JOIN mod_impulsecore_project_services ps ON ps.project_id = p.id WHERE ps.service_id = 1234; To list every service in a project:
SELECT ps.service_id, h.domain, h.packageid FROM mod_impulsecore_project_services ps JOIN tblhosting h ON h.id = ps.service_id WHERE ps.project_id = 42; To check whether two services share a project from PHP, use the facade rather than the tables directly:
$same = ImpulseCore::servicesShareProject($serviceA, $serviceB); The project view
Core renders a project detail view that lists every service in the project across every module, with each service's status, region, and quick-action links back to its module admin tab. This is the page you land on from the "Connected" badge on a customer service page.
The project view is read-mostly. Lifecycle actions (suspend, terminate, upgrade) still happen on each service's own admin page — projects are a grouping concept, not a control plane.