Home›Visitora›Quickstart
Visitora · Quickstart

Visitora Quickstart, as shipped in the download

The QUICKSTART.txt in the download — the same steps your delivery email carries.

VISITORA — QUICKSTART
=====================

Visitor sign-in kiosk with an evacuation roll-call — self-hosted PHP + MySQL/SQLite.


REQUIREMENTS
------------
  - PHP 8.0+ with extensions: pdo, pdo_sqlite (or pdo_mysql), mbstring, openssl, curl, json
  - MySQL 5.7+ OR SQLite 3 (SQLite requires no extra setup — the default)
  - A web server (Apache with mod_rewrite — the shipped .htaccess does the routing — or Nginx with try_files)
  - No Composer packages, no Node, no build step, no external services.


SHARED HOSTING / CPANEL (RECOMMENDED FOR MOST BUYERS)
------------------------------------------------------
1. Upload the contents of the `app/` folder to your web root (e.g. public_html/)
   or a subdirectory (e.g. public_html/visitora/).

2. Make sure this directory is writable by PHP (it holds the SQLite file, uploads and backups):
     data/

   Via cPanel File Manager: right-click -> Permissions -> set to 755 or 775.
   (If data/ is missing, Visitora creates it on first run.)

3. Visit https://yourdomain.com/install/ in your browser.

4. Fill in the installer:
     - Database: choose MySQL (host, database name, user, password) or SQLite (no setup;
       the file is data/visitora.sqlite)
     - Business name
     - Timezone
     - Your name, email and password (the first admin)

5. The installer writes config.php and sends you to the login page.


FIRST STEPS (what to do in the first ten minutes)
-------------------------------------------------
1. Put a tablet on the front desk and open https://yourdomain.com/kiosk — sign-in, agreement, badge, sign-out.
2. One rule decides who is in the building: a visit with a sign-in time and no sign-out time. The dashboard, the CSV, the badge check and the API all read that one rule.
3. Set the retention window and the badge pool in Settings; badges are reused, and the manual says what happens when they run out.
4. Run the evacuation roll-call once as a drill (everyone on site, one screen).
5. Give reception and security their own accounts (Users and roles).
6. Optional: texts. Connect your own SMS account in Settings → Text messages (off until you do; your provider bills
   you for each text). Each host then turns on their own arrival texts from their phone link (Hosts → Phone link).

The manual (docs/MANUAL.md in this download, or the product page on the store) covers every
screen and every rule above, each with the line of source it comes from.


SCHEDULED JOB
-------------
  cron/purge.php — enforces the retention window you set — visits older than it are removed. Run it nightly:

    15 2 * * * php /path/to/app/cron/purge.php

  Without the job the application still works; only the scheduled part above does not happen.


VPS / SELF-HOSTED
-----------------
Requirements same as above. Apache example:

  <VirtualHost *:80>
    DocumentRoot /var/www/visitora/app
    <Directory /var/www/visitora/app>
      AllowOverride All
      Require all granted
    </Directory>
  </VirtualHost>

Run the web installer as above. Demo data on a FRESH install only (it wipes what is there):

  php bin/demo.php


DOCKER (QUICK TEST)
-------------------
  The app/ folder ships a Dockerfile (Apache + PHP 8.3, mod_rewrite on):

    docker build -t visitora .
    docker run --rm -p 8080:80 -v visitora-data:/var/www/html/data visitora

  Then visit http://localhost:8080/install/


POST-INSTALL SECURITY CHECKLIST
--------------------------------
  [ ] config.php, data/ and the *.sqlite file are blocked by the shipped .htaccess (Apache).
      On Nginx, deny /data/, /src/, /bin/, /tests/, /controllers/, /views/ and config.php yourself.
  [ ] Open https://yourdomain.com/data/ once — it must answer 403, never a listing.
  [ ] Use HTTPS in production.
  [ ] Keep PHP updated.
  [ ] If you ran bin/demo.php, change or delete the demo accounts before going live.
  [ ] Back up data/ (Settings -> Backups writes to data/backups/).


LOOKING AFTER IT (from 4.0)
---------------------------
  * Updates: open Updates in the menu, save your license key once, press Check for updates.
    Reaching 4.0 from 3.x is the last update by hand: replace the files; config.php and data/ stay.
  * Sample data: the installer offers to start with a sample; remove it later with one click.
  * Backups: "Back up once a day by itself" is on by default (/restore); add an S3-compatible bucket there for
    a copy somewhere else. The Health page (/health) says whether all of this is working.
  * On Nginx: use the server block in the manual ("On Nginx: keep data/ private", https://ownware.io/p/visitora/manual);
    it opens the installer and keeps data/ private.
  * One-line install for technical owners:
    curl -fsSL https://ownware.io/install.sh | sh -s -- visitora <your license key>

NOTES
-----
  * Signing out cannot be broken by a double-tap: two taps produce exactly one sign-out.
  * Signing in someone already on site is refused — two rows for one body is the error that leaves somebody inside.
  * What a visitor agreed to is stored with the visit, self-contained.
  * REST API + MCP endpoint for agents: see API.md.

← Back to Visitora · Manual · API · Test run