This guide explains how to use the Campaign Tracker application day to day.
Campaign Tracker helps you manage:
The dashboard gives you a quick overview of totals, recent items, and counts by type.
In the default Docker setup, open:
http://localhost:8801If authentication is enabled, click Login and sign in through the configured Keycloak server.
If you are running locally outside Docker, make sure your Keycloak values are set in your environment first.
The top navigation takes you to the main areas of the app:
A common setup flow looks like this:
You can work in a different order, but the type records usually come first because they define the available attributes for the main records.
The home page shows:
Use the dashboard to quickly jump into the area you need.
Use Campaign Types when you want to define reusable campaign templates.
Campaign types define the attributes that campaigns can use. For example, a campaign type might include fields like budget, owner, region, or status.
Use Campaigns to create and manage the main campaign records.
Each campaign can have jobs attached to it. From the campaign view, you can:
Use Job Types to define reusable job templates.
Job types define the attributes used when creating jobs. This makes it easier to keep job records consistent.
Use Jobs to track work items across campaigns.
You can also open the job list for a single campaign to focus on just that campaign’s work.
Use Customer Types to define reusable customer templates.
Customer types define the attributes available when you create customer records.
Use Customers to manage customer or account records.
The list pages use interactive tables.
Common table features include:
If a table looks empty, try refreshing the page or the table itself.
The app includes import tools for campaign jobs.
The importer looks for sheet columns that match the attribute names on the selected job type.
If the headers do not match, the import can fail or skip rows.
The campaign job page also supports file-based import.
Typical steps:
This is useful when the data already exists in a spreadsheet file instead of a published Google Sheet.
The app exposes a few public JSON endpoints:
GET /api/customersGET /api/customers/{id}GET /api/customer-typesThere is also an authenticated proxy endpoint:
GET /api/proxy?url=https://example.com/data.jsonThe proxy requires login and only accepts valid http or https URLs.
You can verify the app is running with:
GET /healthIn the default Docker setup, that is:
http://localhost:8801/healthCheck the Keycloak settings in your environment:
KEYCLOAK_BASE_URLKEYCLOAK_REALMKEYCLOAK_CLIENT_IDKEYCLOAK_CLIENT_SECRETKEYCLOAK_REDIRECT_URIKEYCLOAK_LOGOUT_REDIRECT_URIIf migrations fail, wait a few seconds and try again. SQL Server may still be starting.
Run migrations and make sure the database is initialized:
docker compose exec campaign-tracker-app php scripts/migrate.php up
If an import fails, check:
docker compose up -d --build
docker compose exec campaign-tracker-app composer install
docker compose exec campaign-tracker-app php scripts/migrate.php up
Then open:
http://localhost:8801routes/web.php — route definitionsapp/Controllers/ — request handlingapp/Repositories/ — database accessapp/Views/ — templatesdatabase/migrations/ — schema setupscripts/migrate.php — migration CLIPowered by TurnKey Linux.