Makefile Reference
All commands run from the Quickstart/ directory.
Required Repositories per Target
Clone all repos into the same root folder before running any make command. Docker Compose resolves each service's build context relative to Quickstart/, so a missing repo fails the whole command — even for services that don't depend on it.
| Target | Command | Repos Required |
|---|---|---|
base |
make base |
Quickstart, AuthAPI, CoreAPI |
noauths |
make noauths |
Quickstart, PlayoutAdmin |
media |
make media |
Quickstart, PlayoutAdmin |
coreapi |
make coreapi |
Quickstart, AuthAPI, CoreAPI, TellyID |
tellyid |
make tellyid |
Quickstart, AuthAPI, TellyID |
oc |
make oc |
Quickstart, AuthAPI, CoreAPI, TellyID, OrgConsole |
pc |
make pc |
Quickstart, AuthAPI, CoreAPI, TellyID, PlatformConsole |
console |
make console |
Quickstart, AuthAPI, CoreAPI, TellyID, OrgConsole, PlatformConsole |
malaysia |
make malaysia |
Quickstart, AuthAPI, CoreAPI, TellyID, SpatioAdmin, TicketCMS |
spatio |
make spatio |
Quickstart, AuthAPI, CoreAPI, TellyID, TicketCMS, TicketAdmin |
playout |
make playout |
Quickstart, AuthAPI, CoreAPI, TellyID, PlayoutAdmin |
demo5 |
make demo5 |
Quickstart, CoreAPI, PlayoutAdmin, TellyboardAdmin, AuthAPI, TellyID, documentation |
tkt |
make tkt |
Quickstart, AuthAPI, TicketAPI, TicketCMS, TicketAdmin |
apidocs |
make apidocs |
Quickstart, documentation |
up-infra |
make up-infra |
Quickstart only |
up-services |
make up-services |
Quickstart, CoreAPI, OrgConsole, PlatformConsole, PlayoutAdmin, SpatioAdmin, TellyboardAdmin |
up-access |
make up-access |
same as up-services, plus TellyID |
Missing repo = build failure
If a referenced repo is missing, the entire make command fails — even services that don't depend on it may not start.
Example root layout for make malaysia:
Roots/
├── Quickstart/
├── AuthAPI/
├── CoreAPI/
├── TellyID/
├── OrgConsole/
├── SpatioAdmin/
└── TicketCMS/
Infrastructure Profiles
| Variable | Contents |
|---|---|
BASE |
networks/volumes, Postgres, NATS, SeaweedFS, tusd, Zitadel, AuthAPI, CoreAPI |
INFRA |
networks/volumes, Postgres, Redis, VerneMQ, Zitadel |
INFRA-FULL |
networks/volumes, Postgres, SeaweedFS, VerneMQ, tusd, NATS, CDN, Zitadel |
SERVICES |
CoreAPI, OrgConsole, PlatformConsole, PlayoutAdmin, SpatioAdmin, TellyboardAdmin |
ACCESS |
TellyID |
LITE |
tusd, CDN — no database, no auth |
COREAPI |
networks/volumes, Postgres, SeaweedFS, NATS, Zitadel, AuthAPI, CoreAPI, TellyID — the standard "CoreAPI plus what it needs" bundle other targets build on |
TICKETING |
networks/volumes, Postgres, Redis, Zitadel, AuthAPI, TicketAPI, TicketCMS, TicketAdmin |
ORGCONSOLE / PLATFORMCONSOLE / TICKETUI / TELLYID / TELLYBOARD / SPATIO |
single-app or small groupings, combined with INFRA/COREAPI at the target level rather than standing alone |
ALL = INFRA + SERVICES + ACCESS — used by the generic logs, ps, restart utility targets.
Common Commands
# CoreAPI-only development (no admin frontend)
make coreapi
make coreapi-down
make coreapi-down-v
# CoreAPI + a specific console/admin app
make oc # + OrgConsole
make pc # + PlatformConsole
make console # + OrgConsole + PlatformConsole
make malaysia # + OrgConsole + SpatioAdmin + TicketCMS
make playout # + PlayoutAdmin
make spatio # + SpatioAdmin + TicketCMS + TicketAdmin (no OrgConsole)
# No-auth, no-database media stack (fastest local loop for media/CDN work)
make noauths
make media # identical composition to noauths today — see note below
# Ticketing stack (independent of CoreAPI)
make tkt
make tkt-reset
make tkt-zitadel-migration
# Documentation site only
make apidocs
make apidocs-d
# Follow logs / check status across the full ALL profile
make logs
make ps
make restart
# Reset infra volumes and restart
make reset-infra
make reset-all
make clean-infra
Each <target>, <target>-d, <target>-down, <target>-down-v group follows the same convention: foreground, detached, tear down, tear down + wipe volumes. Not every target has all four — check the Makefile directly before assuming one exists.
Environment Files
make base ENV_FILE=.env.staging
make staging # wrapper — see caveat below
make prod-deploy # wrapper — see caveat below
ENV_FILE defaults to .env and is passed through docker compose --env-file $(ENV_FILE). Any target accepts an override this way, not just staging/prod-deploy.
staging and prod-deploy currently point at targets that don't exist
staging:
$(MAKE) dev-d ENV_FILE=.env.staging
prod-deploy:
$(MAKE) prod ENV_FILE=.env.prod
dev-d nor prod is defined anywhere in the current Makefile — running make staging or make prod-deploy as-is will fail with No rule to make target. Until these are fixed, override ENV_FILE directly on whichever real target you mean, e.g. make coreapi ENV_FILE=.env.staging.
Known gotcha: PLAYOUT is defined twice
PLAYOUT = \
-f compose/services/CoreAPI.yml \
-f compose/services/PlayoutAdmin.yml \
-f compose/services/Documentation.yml
# ...later in the file...
PLAYOUT = \
-f compose/services/PlayoutAdmin.yml
Make does not error on redefinition — the second assignment silently wins for every use of $(PLAYOUT) in the file, including in noauths, media, and playout targets defined above the second block. In practice this means noauths and media currently resolve to $(LITE) $(PLAYOUT) = tusd + CDN + PlayoutAdmin only — no CoreAPI service, despite the target names implying a working media pipeline. The playout target is unaffected in practice since it explicitly adds $(COREAPI) alongside $(PLAYOUT).
If noauths/media are meant to include CoreAPI, rename one of the two PLAYOUT blocks (e.g. PLAYOUT-FULL) rather than relying on definition order.
Note: noauths and media are currently identical
noauths:
$(COMPOSE) $(LITE) $(PLAYOUT) up --build
media:
$(COMPOSE) $(LITE) $(PLAYOUT) up --build
Same variables, same command. If they're meant to diverge (e.g. media including SeaweedFS/tusd explicitly for upload testing, noauths staying minimal), that split hasn't been implemented yet — right now picking one over the other has no effect.