# Project plan — FootPrintLive

Evidence date: 2026-10-14.

Source repository: `git@bitbucket.org:overdrive/footprintlive.git`.

Inspected revision: `master` at `e54fddb` (2019-09-10 12:56:23 +0200, author `siliconoverdrive <jaco@overdrive.co.za>`, subject "First commit"). That commit is the only commit on `master`, and it is `origin/HEAD`.

This plan describes what that revision contains. It does not decide what the product should become.

The scan-host path named on OVER-127 (`~/projects/sonar_scan/repos/FootPrintLive`) was not present on the machine that produced this document. The tree below was read from a clone of `master`.

## Product

**Footprint** (repository README title: "FootprinLive") is a South African rugby operations web application. Signed-in people manage members, organisations, squads, tournaments, fixtures, accreditations, assessments, scouting, blue-card cases, news, and food sessions. A separate live-scoring screen records a fixture. Union users are sent into a squad workspace. Referee screens send SMS messages that include a one-time code and a link to `http://footprintapp.net/referee`.

Provenance: **Implemented** (logo alt text and title "Footprint" in `application/layouts/default.phtml`; menu in `application/modules/default/views/scripts/menu/default.phtml`; `Live_ScoreController`; `public/SMS.txt`).

Provenance: **Documented** only as the one-line README heading `# FootprinLive`. No other product statement exists in the repository.

The configured MySQL database name is `teamwizz_SARU`. Excel exports created by the member list set the document creator to "Evolve AV". Mail is sent as Footprint (`support@footprintapp.net`) and, in older message text, as SARU E-Filing (`support@footprint.net`, `saruefiling.com`). Provenance: **Implemented** in `application/configs/application.ini` and `LoginController`. Whether Footprint, Teamwizz, Evolve AV, and SARU E-Filing are one product, successive names, or shared infrastructure is **Unknown / Requires Confirmation**.

## What this repository is

A Zend Framework 1.11.10 PHP application. The web root rewrite sends requests into `public/`, and `public/index.php` boots `Zend_Application` with `application/configs/application.ini`. Default timezone in that front controller is `Africa/Johannesburg`.

About 9,195 files are in the `master` tree: application code, a vendored `library/Zend`, and public assets (CSS, JavaScript, PHPExcel, TCPDF, dompdf, a partial SparkPost client).

There is no Composer file, no package manifest, no Docker file, no PHPUnit suite, and no pipeline definition in git.

## Scope of the inspected revision

In scope for this knowledge set:

- The `master` tree at `e54fddb`.
- Behaviour that controllers, models, views, configuration, and `changelog.txt` actually implement.
- The two other remote branch tips, recorded only as tips. Their trees were not diffed.

Out of scope:

- Deciding which module is the production site in 2026.
- Treating `development` or `acc-tyrone` as the current product. Those trees were not read.
- Requirements that exist only in other Silicon Ark projects that share the database name `teamwizz_SARU`.

## System shape

```text
Browser
  -> Apache rewrite (repo .htaccess sends non-/public URLs into public/)
  -> public/index.php
  -> Zend_Application (production config)
  -> module front controller
       default | admin | api | app | union | union_old | gir
       accreditations | live | referee | pub | printers
  -> Zend_Db_Table models
  -> MySQL teamwizz_SARU on localhost (configured host)
```

Side doors that do not go through the front controller:

- `phpinfo.php` at the repository root.
- `mssql.php` and `boksmartmssql.php` at the repository root (connection probes).
- `public/class/sms.php` (MyMobileAPI client, included by controllers).

Provenance: **Implemented**.

## Major components

| Component | Role on `master` | Provenance |
|---|---|---|
| `default` module | Signed-in back office: dashboard, members, squads, tournaments, fixtures, accreditation, assessments, scout, blue card, CMS, food, settings, cron, login | **Implemented** |
| `union` module | Squad workspace. Index redirects to `/union/squads/` | **Implemented** |
| `union_old` module | Earlier copy of union controllers, still in the tree | **Implemented** as files. Whether any menu links to it is **Unknown** |
| `app` module | Controller set that mirrors `union` (squads, fixtures, tournaments, members, blacklist) | **Implemented** as files. Entry URL used in production is **Unknown** |
| `gir` module | "Get Into Rugby". Index redirects to `/gir/squads/`. The default menu link is commented out | **Implemented** |
| `live` module | Fixture scoring UI (`/live/score/scoring`) and a referee controller | **Implemented** |
| `referee`, `pub` | Referee and public referee screens that send SMS | **Implemented** |
| `accreditations` | Accreditation collection flow. Index redirects to `/accreditations/collections` | **Implemented** |
| `printers` | Accreditation role list and lookup by code | **Implemented** |
| `admin` | Small member/admin module with its own layout | **Implemented**. How it differs from `default` in daily use is **Unknown** |
| `api` module | JSON for tournaments, fixtures, squads, players, scores, commentary upload, accreditation sync | **Implemented** |
| `library/Zend` | Framework 1.11.10 | **Implemented** |
| `library/PG` | Layout picker, email layout, image upload, PDF helpers | **Implemented** |
| MySQL `teamwizz_SARU` | Default table adapter | **Implemented** as configuration. A live server was not queried |
| BokSmart MSSQL | Official number and course expiry lookup script | **Implemented** as a standalone script |
| MyMobileAPI | Outbound SMS | **Implemented** |
| MyPass PDF mail | Accreditation approval email with a dompdf pass | **Implemented** in `CronController::mypass` |
| AppWiz | POST of accreditation guest data | **Implemented** in `CronController::senddata_to_Api`, and the call site that would invoke it is commented out |

## History that can be dated

| When | Evidence | What it shows |
|---|---|---|
| 2018-03-23 | `public/SMS.txt` | Sample referee SMS for an assessment, with an OTP and a link to `http://footprintapp.net/referee` |
| 2018-03-30 | `public/cron.txt` | A single timestamp. No job description |
| 2019-05-13 | `changelog.txt` and `MembersController::generateExcel` | Release 1. Member Excel export gained an ID Number column between Gender and Age. Signed "HDP" |
| 2019-05-17 | `changelog.txt` and `SquadController::competitionsquadAction` | Competition squad checklist uses document file type 23, and only the latest upload from the current calendar year. Signed "HDP" |
| 2019-05-28 | Root `error_log` | PHP warning that module `iconv` is already loaded. Log timezone `Africa/Harare` |
| 2019-09-10 | Git `e54fddb` | Entire `master` tree committed once, message "First commit" |
| 2019-11-19 | Branch `development` tip `6620f7e` | Commit subject "Changes to VAP API's". Tree not inspected |

`footprint_changelog.txt` is an empty file.

The initials "HDP" are not expanded anywhere in this repository. **Unknown / Requires Confirmation.**

## Other branches

Remote heads on 2026-10-14:

| Branch | Tip | Inspected |
|---|---|---|
| `master` | `e54fddb` — First commit, 2019-09-10 | Yes. This document set |
| `development` | `6620f7e` — "Changes to VAP API's", 2019-11-19 | Tip only |
| `acc-tyrone` | `38e3150593b3aad5661b42af347d75f6971695b4` | Tip only. Date and subject were not read |

What "VAP" means, and how far `development` diverges from `master`, is **Unknown / Requires Confirmation**.

## Milestones

No roadmap, issue tracker, or milestone list is in the repository.

The only named release is "Release 1" in `changelog.txt`, with the two May 2019 items above. Provenance: **Documented**.

Anything after November 2019, including whether this repository is still the production Footprint site, is **Unknown / Requires Confirmation**.

## Implementation status

| Area | Status on `master` |
|---|---|
| Back-office modules listed in the signed-in menu | Present |
| Login, terms gate, password reset, first-login profile | Present |
| Live scoring screen | Present |
| JSON API | Present, largely without an auth check in controller `init` |
| Accreditation queue that emails a MyPass PDF | Present |
| Automated test suite | Absent |
| Deployment manifests | Absent |
| Sonar project files named on the scan host (`sonar-project.properties`, `sonarqube_scan.bat`) | Not in git |

## Dependencies the code names

- PHP with the `mssql` extension for the two root scripts (`mssql_connect`). PHP version is **Unknown**.
- Apache with `mod_rewrite`.
- MySQL database `teamwizz_SARU` (Zend `pdo_mysql`). A second ini block names database `teamwizz_API` and is not registered as a Zend resource.
- MyMobileAPI HTTP endpoint.
- Mail transport used by `Zend_Mail` (default transport is not set in `application.ini`).
- BokSmart Microsoft SQL Server reached by `boksmartmssql.php`.
- Optional: `https://fsrugby.appwizard.co.za/scripts/AppWiz.dll` for the commented accreditation push.
- CDN stylesheet: Font Awesome 4.7.0 from cdnjs.

Credentials for the database, SMS gateway, and MSSQL scripts are stored in the repository in plaintext. This document does not repeat them. They require rotation and removal from git. **Requires Confirmation** that production no longer uses those values.

## Current project status

`master` is a single snapshot from September 2019. The application is feature-rich and internally inconsistent (duplicate controllers, commented menus, test controllers left in the modules, a master password path, `phpinfo.php` at the web root). No statement in the repository says the project is finished, retired, or still operated.

Related Silicon Ark note, not a requirement of this repository: `track.mypass.zone` documents a later cut of SARU permit screens that also configure MySQL database `teamwizz_SARU`. Whether that database is still shared with FootPrintLive is **Unknown / Requires Confirmation**.
