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.
What you need
Section titled “What you need”- 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.
Option 1: install script
Section titled “Option 1: install script”On a fresh server, run:
curl -fsSL https://raw.githubusercontent.com/Sulaiman-Dauda/Tidetime/main/install.sh | bashThe 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.
Option 2: Docker Compose by hand
Section titled “Option 2: Docker Compose by hand”git clone https://github.com/Sulaiman-Dauda/Tidetime.git tidetimecd tidetimecp .env.example .envEdit .env and set at least these values:
APP_URLis the public URL of the instance, for examplehttps://book.yourcompany.com.DATABASE_URLcan stay as the bundled database in the production Compose file.POSTGRES_PASSWORDis the password for the bundled PostgreSQL container.AUTH_SECRETandCRON_SECRETare random values of at least 32 characters each.
Generate a secret with:
openssl rand -base64 32Then start everything:
docker compose -f docker-compose.prod.yml up -d --buildThe app applies database migrations on startup. For domains, backups, and upgrades, see the deployment guide.
First run
Section titled “First run”- 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 athttp://localhost:3000, its localhost-bound port.) - Create the company and the owner account. This is a one-time step and is only available while the instance has no users.
- You land in the dashboard.
Create your first bookable service
Section titled “Create your first bookable service”- Go to Members and confirm your owner account is listed. Invite teammates here by email; each gets a role (Admin, Scheduler, or Member).
- 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).
- Go to Availability and set the working hours for each provider.
Take a test booking
Section titled “Take a test booking”- Open your public booking page at
/book/<your-company-slug>. - Choose the service, pick a provider or leave it on “any available”, and choose a time.
- 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.
Local development
Section titled “Local development”For working on the code rather than running in production:
git clone https://github.com/Sulaiman-Dauda/Tidetime.git tidetimecd tidetimecp .env.example .envnpm installdocker compose up -d postgresnpm run db:migratenpm run db:seed # optional demo company and servicenpm run devThe dev server runs at http://localhost:3100. See the contributing guide for the full workflow and checks.