TOUCHLINE · CPANEL EDITION · 19 OCTOBER 2026

Install your live
football desk.

What you are installing

A PHP live-fixtures and statistics connector plus an experimental xG projection model. A provider key is required. Automatic SportyBet booking-code generation is not implemented. Do not mistake the upload package for a verified end-to-end betting integration.

1. Check the hosting

No database, Node.js, Composer or cron job is required. Refresh runs only while your browser tab is open and visible.

2. Put the files in the right places

Extract the ZIP in cPanel File Manager outside public_html first. Then move the files as described below. Show hidden files so that .htaccess is included.

Example for a standard main domain:
/home/YOUR_CPANEL_USER/
  touchline-private/
    config.php
    cache/           (created automatically)
  public_html/
    touchline/
      index.html
      live.js
      live-model.js
      model.js
      style.css
      live.css
      .htaccess
      api/
        index.php
        football.php
        .htaccess

For a subdomain, find its exact document root in cPanel → Domains. By default, the app looks for touchline-private/config.php in the parent of that document root. If that folder is still publicly accessible, choose a location outside all web roots and set the environment variable TOUCHLINE_CONFIG_FILE, or edit the single $configPath assignment in api/index.php to an absolute private path. Do not put keys in JavaScript.

3. Keep the tool private

In cPanel → Directory Privacy, password-protect the app folder. Use a separate app password. This protects both the page and its API routes. Keep touchline-private outside every public web root. Its included deny rule is a backup; it is not a replacement for private placement.

4. Connect your data provider

  1. Create an account with API-FOOTBALL / API-SPORTS. Verify that your plan covers the current seasons and leagues you need. This connector uses a direct API-SPORTS key, not RapidAPI credentials.
  2. Rename touchline-private/config.example.php to config.php.
  3. Edit api_football_key in that private file. Enter the key directly in cPanel; it is never needed in a chat message.
  4. Set daily_request_budget to your actual allowance or lower. It starts at 100. Leave the server cache settings at their defaults for initial testing.
  5. Make the private folder writable by your PHP process, normally with permissions 700 or 750 depending on your host. Never use 777. The app creates its cache automatically.
<?php
return [
    'api_football_key' => 'ENTER_YOUR_DIRECT_API_SPORTS_KEY',
    'daily_request_budget' => 100,
    'cache_dir' => __DIR__ . '/cache',
    'fixtures_cache_seconds' => 15,
    'statistics_cache_seconds' => 60,
];

5. Open and verify

  1. Visit your app URL using HTTPS and sign in through Directory Privacy.
  2. Open Connection status → Check server configuration. Confirm that the key is configured and cURL is available. This check does not consume a provider request.
  3. Click Connect live feed. Choose a match. Verify its score, cards and statistics against the provider's dashboard. Missing coverage is shown as “—”, never invented as zero.
  4. Confirm that a finished match disappears on the next successful live-list refresh. Upcoming matches, extra time, shootouts and suspended fixtures are excluded.
  5. Use Pause when finished. The app also pauses traffic when its tab is hidden. Prediction records remain local to your browser; export them to retain a copy.

6. Understand the request allowance

Provider pricing checked on 19 October 2026: the free tier is 100 requests/day with season limits; Pro is listed at $19/month with 7,500 requests/day. Confirm current pricing and coverage before purchasing anything.

Watching one selected match in one active browser uses approximately 180 provider requests per hour: a live list every 30 seconds and statistics every 60 seconds, with server caching. Switching matches and changes in score/phase add requests. Multiple users can also increase consumption. A free key is for testing this connection, not continuous monitoring. The package enforces a local daily cap; API errors also count as attempted calls.

Source: provider pricing. The provider's official guide describes 15-second fixture updates and minute-level statistics updates.

7. SportyBet live codes: remaining work

The SportyBet Nigeria interface showed Book Bet after a live selection was added. No wager was placed during testing, and no working code was obtained. This package therefore has no enabled automatic booking adapter.

To finish this feature, a supported or otherwise permitted code-creation route must be established and tested. It must fetch current SportyBet live markets, match the exact event and selection, recheck that the market is active, create a reservation code, then load that code back to verify its contents. A football statistics key alone cannot do this. Your SportyBet password is not needed for the package.

Troubleshooting

Verification limits

Local model and PHP fixture-normalization checks are included. No live provider key or cPanel server was available for an authenticated end-to-end test. Browser visual QA and automatic SportyBet code creation remain unverified.

← Back to the app