Skip to content

The four codebases

TogoActive is four applications in four repositories, arranged as two pairs. Each pair is an API and a frontend; the two pairs share one database.

RepositoryWhat it isRuns onServed at
togoparts/tga-v3-admin-webAdmin panel — React + Vite SPA128.199.72.46v3.togoactive.com
togoparts/tga-v3-admin-apiAdmin API — Laravel128.199.72.46v3.togoactive.com/api
togoparts/tga-v3-wl-webPublic event sites — Next.js178.128.113.107every customer domain
togoparts/tga-v3-wl-apiPublic API — Laravel178.128.113.107wl-api.togoparts.com

"WL" is white-label: one deployment that serves every customer's event under their own domain.

There is a fifth system, and it is not in this list

The legacy app at /var/www/togoactive on the WL host runs the cron fleet — Strava sync, leaderboard stages, rank stored procedures and achievement awards — against the same shared database, plus the Togoparts database. It owns the activity pipeline outright; the four applications above only read its results.

It is not one of the four because nobody develops features in it, but editing it is deploying to production. See Legacy app and TGP.

How they fit together

The database is the integration. There is no API call between the admin side and the WL side for ordinary data. An organiser saves a setting through the admin API, it lands in a shared table, and the WL side reads it on the next request. That is the whole contract.

The one place the two sides do talk directly is the deploy agent, which the admin calls when a domain changes.

Why the split exists

Different audiences. The admin panel is used by a handful of organisers; the event sites are read by everyone. They have almost nothing in common in traffic shape, caching or authentication.

Different risk. The admin panel holds participant data and payment configuration and is deliberately noindex. The event sites are public and want to be indexed.

Different deploy rhythm. An admin change ships when it is ready. A change to the WL side touches every live event at once, so it moves more carefully.

Which one to change

TaskRepository
A settings screen, a chart, an exporttga-v3-admin-web
An endpoint the admin panel callstga-v3-admin-api
Anything a participant sees on an event sitetga-v3-wl-web
An endpoint the event sites calltga-v3-wl-api
A column, an index, a migrationBoth APIs read it — see Database schema

A schema change is the one that reaches everything. The two Laravel apps have separate migration histories against the same database, so decide deliberately which owns a change.

Versions and branches

A "version" is a branch of the WL pair plus its own running instance — not a fork:

Repositoryv3v4
tga-v3-wl-webmainv4
tga-v3-wl-apimainv4

v4 adds category-based paid registration. The admin side stays on main and serves both — it is version-aware rather than versioned.

Which version serves a given domain is stored per domain, on event_domains.version_key. See Domain resolution and the multi-version hosting brief.

v3 and v4 share the database

They are branches against one schema, not isolated environments. A migration run on the v4 branch affects live v3 events.

Local layout

All four are checked out side by side under /var/www/togoactive-development/:

admin-backend/                          tga-v3-admin-api
admin-frontend/                         tga-v3-admin-web
docs/                                   tga-v3-docs  (this site)
wl-event/
  frontend-wl-development/              tga-v3-wl-web      @ main
  frontend-api-wl-development/          tga-v3-wl-api      @ main
  frontend-wl-v4-development/           tga-v3-wl-web      @ v4
  frontend-api-wl-v4-development/       tga-v3-wl-api      @ v4

The v4 directories are the same repositories checked out on the v4 branch.

Organiser guide and developer documentation for the TogoActive platform.