Skip to content

Getting started

This guide takes you from an empty server to a working booking page. It covers the quickest supported path (Docker) and a local development setup.

  • A Linux server with root or sudo access. That is all — the install script installs Docker and everything else for you.
  • A domain name if you want public HTTPS booking pages. You can start without one and add it later.

Tidetime runs one company per instance. If you need to schedule for several unrelated organizations, run a separate instance for each.

On a fresh server, run:

Terminal window
curl -fsSL https://raw.githubusercontent.com/Sulaiman-Dauda/Tidetime/main/install.sh | bash

The script does the whole setup end to end: it installs Docker, git, and openssl if they are missing, adds a swap file on low-memory hosts, opens firewall ports 80 and 443, downloads Tidetime, generates the required secrets, starts the stack, and waits until it is healthy. When it finishes it prints the address to open, for example http://<your-server-ip>. Read the script first if you prefer; piping to a shell always deserves a look.

Access is on port 80 through the bundled Caddy proxy, so the URL is http://<your-server-ip> with no port. HTTPS is only available once you attach a domain (a bare IP address cannot get a certificate) — see Custom domain and HTTPS.

Terminal window
git clone https://github.com/Sulaiman-Dauda/Tidetime.git tidetime
cd tidetime
cp .env.example .env

Edit .env and set at least these values:

  • APP_URL is the public URL of the instance, for example https://book.yourcompany.com.
  • DATABASE_URL can stay as the bundled database in the production Compose file.
  • POSTGRES_PASSWORD is the password for the bundled PostgreSQL container.
  • AUTH_SECRET and CRON_SECRET are random values of at least 32 characters each.

Generate a secret with:

Terminal window
openssl rand -base64 32

Then start everything:

Terminal window
docker compose -f docker-compose.prod.yml up -d --build

The app applies database migrations on startup. For domains, backups, and upgrades, see the deployment guide.

  1. Open your instance in a browser at http://<your-server-ip> and go to /setup. (During the manual Compose setup the app is also reachable on the server itself at http://localhost:3000, its localhost-bound port.)
  2. Create the company and the owner account. This is a one-time step and is only available while the instance has no users.
  3. You land in the dashboard.
  1. Go to Members and confirm your owner account is listed. Invite teammates here by email; each gets a role (Admin, Scheduler, or Member).
  2. Go to Services and create a service. Give it a name, a duration, and a location such as a Jitsi meeting or a phone call. Assign at least one provider (a member who will take its bookings).
  3. Go to Availability and set the working hours for each provider.
  1. Open your public booking page at /book/<your-company-slug>.
  2. Choose the service, pick a provider or leave it on “any available”, and choose a time.
  3. Fill in the details and confirm.

The booking now appears under Bookings in the dashboard, and a confirmation email is sent if email is configured. To set up email, branding, and your custom domain, continue with the admin guide.

For working on the code rather than running in production:

Terminal window
git clone https://github.com/Sulaiman-Dauda/Tidetime.git tidetime
cd tidetime
cp .env.example .env
npm install
docker compose up -d postgres
npm run db:migrate
npm run db:seed # optional demo company and service
npm run dev

The dev server runs at http://localhost:3100. See the contributing guide for the full workflow and checks.