Starter Content). Both come back here. */ defined('FROM_GETTING_STARTED') || die("Direct file access is not allowed"); defined('FROM_STARTER_CONTENT') || define('FROM_STARTER_CONTENT', true); require_once dirname(__DIR__) . '/post/demo_data_model.php'; $gs_demo = demoDataStatus($mysqli); $gs_clients = mysqli_query($mysqli, "SELECT client_id, client_name FROM clients WHERE client_archived_at IS NULL ORDER BY client_created_at DESC, client_id DESC LIMIT 3"); $gs_client_count = intval(mysqli_fetch_row(mysqli_query($mysqli, "SELECT COUNT(*) FROM clients WHERE client_archived_at IS NULL"))[0] ?? 0); $gs_defaults = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT config_default_hourly_rate, config_default_net_terms FROM settings WHERE company_id = 1")) ?: []; ?>

Add another

'gsClientName', 'icon' => 'fa-user-friends', 'label' => 'Client', 'required' => true, 'maxlength' => 200, 'placeholder' => 'Name or company']) ?>
'gsClientWebsite', 'icon' => 'fa-globe', 'label' => 'Website', 'maxlength' => 200, 'placeholder' => 'example.com']) ?>
'gsClientContact', 'icon' => 'fa-user', 'label' => 'Who you talk to', 'maxlength' => 200, 'placeholder' => 'Their name']) ?>
'gsClientEmail', 'icon' => 'fa-envelope', 'type' => 'email', 'label' => 'Their email', 'maxlength' => 200, 'placeholder' => 'name@example.com']) ?>

The website's domain and certificate are added too, to watch for renewals. The rest - their address, phones, rate and SLAs - is on the client once it's made, and Clients > Import brings in a whole list from a CSV.

Look around with the demo data first
of the demo clients are here. Remove them all in Maintenance > Starter Content once you're done. made-up clients, each with contacts, assets, tickets and a year of invoices. They come out again in one go from Maintenance > Starter Content.