# On-site service visits

Service requests, addresses, preferred dates, staff dispatch, collision checks, job lifecycle and private customer tracking.

## Install

Use the verified installer in the website container. It installs dependencies, checks checksums, and refuses to replace customer changes:

```sh
python /opt/runalio/catalog_install.py service-visits
python /opt/runalio/catalog_install.py --status
```

Review the preview and click Publish to promote backend code and pages. Production data remains separate.

To undo the last installation before publishing: `python /opt/runalio/catalog_install.py --rollback`.

## Settings

The customer enters these in Runalio, Settings → Website modules → this module (never in files or chat):

| Name | Required | Secret | Purpose |
|---|---|---|---|
| `BUSINESS_TIMEZONE` | no | no | IANA time zone for local schedules and messaging, such as America/Chicago. |
| `OWNER_EMAIL` | no | no | Business email for new requests and paid-order notices. |

## What the customer needs to do

- Add available services in Business profile.
- Add site/service-visits.js and a data-runalio-visits element to the page.
- Manage dispatch and job status in Business admin. Preferred dates are requests until staff confirm scheduling.

## Administration and data

Business admin opens from the portal Settings. Managed websites use portal team membership and same-origin mutation checks. Customer data stays in the website SQLite database and participates in consistent backups. Agent changes to source and page snippets remain drafts until Publish. No customer credentials are embedded in pages or chat.
