OS Apps for Appointments

Published: Nov 7, 2024 by Isaac Johnson

I have found I have a need to enable folks to book time with me. Recently I found a way to get this done with a new O365 feature at work and it prompted me to see if I could do similar with Open-Source tools.

Today we’ll take a look at three options; EasyAppointments which is older but easy to self-host, an appointments app and lastly cal.com (both self-hosted and SaaS).

EasyAppointments

The first we’ll explore is EasyAppointments which is a NodeJS based app from Alex T which I actually first discovered from a MariusHosting post.

I want to start with the docker based option using Docker compose. We can follow the compose file from his Docker hub page

version: '3.1'
services:
  easyapointments:
    image: 'easyappointments:1.4.3'
    environment:
      - BASE_URL=http://localhost
      - DEBUG_MODE=TRUE
      - DB_HOST=mysql
      - DB_NAME=easyappointments
      - DB_USERNAME=root
      - DB_PASSWORD=secret
    ports:
      - '80:80'
  mysql:
    image: 'mysql:8.0'
    volumes:
      - './docker/mysql:/var/lib/mysql'
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=easyappointments

Actually, I’ll ask Co-pilot to transform that into a nice Helm chart for me so we can just use Kubernetes to start.

NOTE: If you want to follow along, I put the chart in full here

/content/images/2024/11/easyappt-01.png

I built that out locally to test

builder@LuiGi:~/Workspaces/aptChart$ tree .
.
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── pvc.yaml
│   └── service.yaml
└── values.yaml

2 directories, 5 files

I can now see it running

$ kubectl get pods | grep easy
easyappointments-655446fdbb-gl4xf                    1/1     Running            0                   22s

However, a port-forward

$ kubectl port-forward svc/easyappointments 8088:80
Forwarding from 127.0.0.1:8088 -> 80
Forwarding from [::1]:8088 -> 80
Handling connection for 8088
Handling connection for 8088

just showed an error

/content/images/2024/11/easyappt-02.png

I tried different ports as it was clear this was redirecting to a “localhost” URL which matched a containerized instance of Cachet - which would explain the PHP in the URL

Just to test, I’ll tell it that it lives on 8999

$ helm upgrade --install easyappt --set easyappointments.env.BASE_URL="http://localhost:8999" ./
Release "easyappt" has been upgraded. Happy Helming!
NAME: easyappt
LAST DEPLOYED: Sun Nov  3 11:23:17 2024
NAMESPACE: default
STATUS: deployed
REVISION: 3
TEST SUITE: None

Then use the same forwarding service this time for port 8999

$ kubectl port-forward svc/easyappointments 8999:80
Forwarding from 127.0.0.1:8999 -> 80
Forwarding from [::1]:8999 -> 80

This time we get a proper setup page

/content/images/2024/11/easyappt-03.png

I can now see a proper calendar page

/content/images/2024/11/easyappt-04.png

One thing I noticed right off was that the default TZ was UTC. I switched it to CST for my user

/content/images/2024/11/easyappt-05.png

At present, my only provider is “Jane Doe”

/content/images/2024/11/easyappt-06.png

For a test, I’ll pretend that I’m being booked to wipe a NAS cross town at lunch Monday

/content/images/2024/11/easyappt-07.png

This saved a record out to my customers database

/content/images/2024/11/easyappt-08.png

I can also view my calendar as a list which might be useful as a field technician

/content/images/2024/11/easyappt-09.png

When I went to enable sync, I was blocked due to a likely missing Google auth API client ID and secret

/content/images/2024/11/easyappt-10.png

I looked in the Git repo and found where one can trigger the sync

Similar to what we did with Hedgedoc and earlier this week with Beszel, let’s add a new Google Auth client using https://console.cloud.google.com/auth/clients

/content/images/2024/11/easyappt-11.png

As I’m not using it for Federated Auth, I’ll just create a new Web Application and name

/content/images/2024/11/easyappt-12.png

I can then click on my created Client to fetch the ID and Secret

/content/images/2024/11/easyappt-13.png

I’ll try adding this to my Helm chart (with default as FALSE)

diff --git a/values.yaml b/values.yaml
index 077218b..4aa3bbf 100644
--- a/values.yaml
+++ b/values.yaml
@@ -1,15 +1,18 @@
 easyappointments:
-  image: easyappointments:1.4.3
+  image: alextselegidis/easyappointments:1.4.3
   service:
     type: ClusterIP
     port: 80
   env:
-    BASE_URL: http://localhost
+    BASE_URL: "http://localhost"
     DEBUG_MODE: "TRUE"
-    DB_HOST: mysql
-    DB_NAME: easyappointments
-    DB_USERNAME: root
-    DB_PASSWORD: secret
+    DB_HOST: "mysql"
+    DB_NAME: "easyappointments"
+    DB_USERNAME: "root"
+    DB_PASSWORD: "secret"
+    GOOGLE_SYNC_FEATURE: "FALSE"
+    GOOGLE_CLIENT_ID: ""
+    GOOGLE_CLIENT_SECRET: ""

 mysql:
   image: mysql:8.0
@@ -17,8 +20,8 @@ mysql:
     type: ClusterIP
     port: 3306
   env:
-    MYSQL_ROOT_PASSWORD: secret
-    MYSQL_DATABASE: easyappointments
+    MYSQL_ROOT_PASSWORD: "secret"
+    MYSQL_DATABASE: "easyappointments"
   persistence:
     enabled: true
:
+              value: "{{ .Values.easyappointments.env.DB_HOST }}"
             - name: DB_NAME
-              value: {{ .Values.easyappointments.env.DB_NAME }}
+              value: "{{ .Values.easyappointments.env.DB_NAME }}"
             - name: DB_USERNAME
-              value: {{ .Values.easyappointments.env.DB_USERNAME }}
+              value: "{{ .Values.easyappointments.env.DB_USERNAME }}"
             - name: DB_PASSWORD
-              value: {{ .Values.easyappointments.env.DB_PASSWORD }}
+              value: "{{ .Values.easyappointments.env.DB_PASSWORD }}"
+            - name: GOOGLE_SYNC_FEATURE
+              value: "{{ .Values.easyappointments.env.GOOGLE_SYNC_FEATURE }}"
+            - name: GOOGLE_CLIENT_ID
+              value: "{{ .Values.easyappointments.env.GOOGLE_CLIENT_ID }}"
+            - name: GOOGLE_CLIENT_SECRET
+              value: "{{ .Values.easyappointments.env.GOOGLE_CLIENT_SECRET }}"

 ---
 apiVersion: apps/v1
diff --git a/values.yaml b/values.yaml
index 077218b..4aa3bbf 100644
--- a/values.yaml
+++ b/values.yaml
@@ -1,15 +1,18 @@
 easyappointments:
-  image: easyappointments:1.4.3
+  image: alextselegidis/easyappointments:1.4.3
   service:
     type: ClusterIP
     port: 80
   env:
-    BASE_URL: http://localhost
+    BASE_URL: "http://localhost"
     DEBUG_MODE: "TRUE"
-    DB_HOST: mysql
-    DB_NAME: easyappointments
-    DB_USERNAME: root
-    DB_PASSWORD: secret
+    DB_HOST: "mysql"
+    DB_NAME: "easyappointments"
+    DB_USERNAME: "root"
+    DB_PASSWORD: "secret"
+    GOOGLE_SYNC_FEATURE: "FALSE"
+    GOOGLE_CLIENT_ID: ""
+    GOOGLE_CLIENT_SECRET: ""

 mysql:
   image: mysql:8.0
@@ -17,8 +20,8 @@ mysql:
     type: ClusterIP
     port: 3306
   env:
-    MYSQL_ROOT_PASSWORD: secret
-    MYSQL_DATABASE: easyappointments
+    MYSQL_ROOT_PASSWORD: "secret"
+    MYSQL_DATABASE: "easyappointments"
   persistence:
     enabled: true
     size: 1Gi

I’ll now try and fire it up passing in my values

$ helm upgrade --install easyappt --set easyappointments.env.BASE_URL="http://localho
st:8999" --set easyappointments.env.GOOGLE_SYNC_FEATURE="TRUE" --set easyappointments.env.GOOGLE_CLIENT_ID="511842454269-i3kkdo7ftv7v809dncqvd3fiut58fdka.apps.googleusercontent.com" --set easyappointments.env.GOOGLE_CLIENT_SECRET="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" ./
Release "easyappt" has been upgraded. Happy Helming!
NAME: easyappt
LAST DEPLOYED: Sun Nov  3 12:07:25 2024
NAMESPACE: default
STATUS: deployed
REVISION: 5
TEST SUITE: None

Then fired up a fresh test

$ kubectl port-forward svc/easyappointments 8999:80
Forwarding from 127.0.0.1:8999 -> 80
Forwarding from [::1]:8999 -> 80
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999
Handling connection for 8999

I noted this time it’s blocked due to a URI mismatch which is likely because the redirect would be to localhost:8999

/content/images/2024/11/easyappt-14.png

I’m curious if a proper TLS with public Ingress would fix this.

Ingress with TLS

This time I’ll use GCP CloudDNS

I’ll first make an A Record

$ gcloud dns --project=myanthosproject2 record-sets create easyappt.steeped.space --zone="steepedspace" --type="A" --ttl="300" --rrdatas="75.73.224.240"
NAME                     TYPE  TTL  DATA
easyappt.steeped.space.  A     300  75.73.224.240

I’ll now create and apply a cert

$ cat ingress.easyappt.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: gcpleprod2
    ingress.kubernetes.io/proxy-body-size: "0"
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.org/client-max-body-size: "0"
    nginx.org/proxy-connect-timeout: "3600"
    nginx.org/proxy-read-timeout: "3600"
    nginx.org/websocket-services: easyappointments
  name: easyapptgcpingress
spec:
  rules:
  - host: easyappt.steeped.space
    http:
      paths:
      - backend:
          service:
            name: easyappointments
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - easyappt.steeped.space
    secretName: easyapptgcp-tls

$ kubectl apply -f ./ingress.easyappt.yml
ingress.networking.k8s.io/easyapptgcpingress created

Once the cert was satisified

$ kubectl get cert easyapptgcp-tls
NAME              READY   SECRET            AGE
easyapptgcp-tls   True    easyapptgcp-tls   88s

I can now update the chart to use the new BASE_URL

$ helm upgrade --install easyappt --set easyappointments.env.BASE_URL="http://localhost:8999" --set easyappointments.env.GOOGLE_SYNC_FEATURE="TRUE" --set easyappointments.env.GOOGLE_CLIENT_ID="511842454269-i3kkdo7ftv7v809dncqvd3fiut58fdka.apps.googleusercontent.com" --set easyappointments.env.GOOGLE_CLIENT_SECRET="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" --set easyappointments.env.BASE_URL="https://easyappt.steeped.space" ./
Release "easyappt" has been upgraded. Happy Helming!
NAME: easyappt
LAST DEPLOYED: Mon Nov  4 19:51:47 2024
NAMESPACE: default
STATUS: deployed
REVISION: 6
TEST SUITE: None

I can now access and login with the base url

/content/images/2024/11/easyappt-15.png

I still got the error so I decided to try adding this URL to the authorized callers on the OAuth Client I had created

/content/images/2024/11/easyappt-16.png

I kind of want the Provider to not be “Jane Doe”, so I’m going to edit that to be me

/content/images/2024/11/easyappt-17.png

Let’s test it. If I want to book time, I can use the public endpoint

/content/images/2024/11/easyappt-18.png

I’ll pretend I’m booking for tomorrow at 9am

/content/images/2024/11/easyappt-19.png

It will get booked for Tristan, our customer

/content/images/2024/11/easyappt-20.png

Lastly, we confirm the appointment

/content/images/2024/11/easyappt-21.png

I then get a confirmation page

/content/images/2024/11/easyappt-22.png

The “Add to Google Calendar” brings up the cal dialog

/content/images/2024/11/easyappt-23.png

I can it now on my calendar when i login

/content/images/2024/11/easyappt-24.png

I’ll continue to check, but I didn’t get an email from any of those systems so we’ll have to check.

“appointment-app”

While (spoiler-alert) this one really didn’t work for me, perhaps you will have better luck. I’ll still share the journey in case you see a glaring mistake:

I’ll clone

Cloning into 'appointment-app'...
remote: Enumerating objects: 184, done.
remote: Counting objects: 100% (184/184), done.
remote: Compressing objects: 100% (143/143), done.
remote: Total 184 (delta 99), reused 108 (delta 38), pack-reused 0 (from 0)
Receiving objects: 100% (184/184), 490.30 KiB | 2.20 MiB/s, done.
Resolving deltas: 100% (99/99), done.

and fire up Docker Compose

builder@LuiGi:~/Workspaces$ cd appointment-app/
builder@LuiGi:~/Workspaces/appointment-app$ docker compose up
[+] Running 13/15
 ⠸ db 14 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿] 104.9MB/110.2MB Pulling                                                          25.4s
   ✔ a480a496ba95 Pull complete                                                                                    6.0s
   ✔ f5ece9c40e2b Pull complete                                                                                    0.5s
   ✔ 241e5725184f Pull complete                                                                                    2.2s
   ✔ 6832ae83547e Pull complete                                                                                    2.3s
   ✔ 4db87ef10d0d Pull complete                                                                                    6.6s
   ✔ 979fa3114f7b Pull complete                                                                                    3.9s
   ✔ f2bc6009bf64 Pull complete                                                                                    5.2s
   ✔ c9097748b1df Pull complete                                                                                    6.3s
   ⠹ 9d5c934890a8 Downloading     [===============================================>   ]...                        23.3s
   ✔ d14a7815879e Download complete                                                                                6.9s
   ✔ 442a42d0b75a Download complete                                                                                7.3s
   ✔ 82020414c082 Download complete                                                                                7.8s
   ✔ b6ce4c941ce7 Download complete                                                                                8.2s
   ✔ 42e63a35cca7 Download complete                                                                                8.8s

Though it fails

 => ERROR [nestjs development 6/6] RUN npm run build                                                               0.6s
------
 > [nestjs development 6/6] RUN npm run build:
0.525
0.525 > appointment-app@0.0.1 prebuild /usr/src/app
0.525 > rimraf dist
0.525
0.529 sh: rimraf: not found
0.531 npm ERR! code ELIFECYCLE
0.531 npm ERR! syscall spawn
0.531 npm ERR! file sh
0.531 npm ERR! errno ENOENT
0.532 npm ERR! appointment-app@0.0.1 prebuild: `rimraf dist`
0.532 npm ERR! spawn ENOENT
0.532 npm ERR!
0.532 npm ERR! Failed at the appointment-app@0.0.1 prebuild script.
0.532 npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
0.540
0.540 npm ERR! A complete log of this run can be found in:
0.540 npm ERR!     /root/.npm/_logs/2024-11-05T02_45_34_192Z-debug.log
------
failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1

I updated the package.json with rimraf script invokation

"scripts": {
    ...
    "rimraf": "./node_modules/rimraf/bin.js",
}

and did an npm install ---save rimraf

[2:49:17 AM] Starting compilation in watch mode...
nest-appointment-app  |
postgres-db           | CREATE DATABASE
postgres-db           |
postgres-db           |
postgres-db           | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
postgres-db           |
postgres-db           | waiting for server to shut down...2024-11-05 02:49:17.462 UTC [48] LOG:  received fast shutdown request
postgres-db           | .2024-11-05 02:49:17.467 UTC [48] LOG:  aborting any active transactions
postgres-db           | 2024-11-05 02:49:17.469 UTC [48] LOG:  background worker "logical replication launcher" (PID 54) exited with exit code 1
postgres-db           | 2024-11-05 02:49:17.470 UTC [49] LOG:  shutting down
postgres-db           | 2024-11-05 02:49:17.475 UTC [49] LOG:  checkpoint starting: shutdown immediate
postgres-db           | 2024-11-05 02:49:17.762 UTC [49] LOG:  checkpoint complete: wrote 921 buffers (5.6%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.034 s, sync=0.234 s, total=0.293 s; sync files=301, longest=0.007 s, average=0.001 s; distance=4238 kB, estimate=4238 kB; lsn=0/1908980, redo lsn=0/1908980
postgres-db           | 2024-11-05 02:49:17.774 UTC [48] LOG:  database system is shut down
postgres-db           |  done
postgres-db           | server stopped
postgres-db           |
postgres-db           | PostgreSQL init process complete; ready for start up.
postgres-db           |
postgres-db           | 2024-11-05 02:49:17.887 UTC [1] LOG:  starting PostgreSQL 17.0 (Debian 17.0-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
postgres-db           | 2024-11-05 02:49:17.888 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres-db           | 2024-11-05 02:49:17.888 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres-db           | 2024-11-05 02:49:17.898 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-db           | 2024-11-05 02:49:17.909 UTC [64] LOG:  database system was shut down at 2024-11-05 02:49:17 UTC
postgres-db           | 2024-11-05 02:49:17.916 UTC [1] LOG:  database system is ready to accept connections
nest-appointment-app  | [2:49:19 AM] Found 0 errors. Watching for file changes.
nest-appointment-app  |
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [NestFactory] Starting Nest application...
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [InstanceLoader] TypeOrmModule dependencies initialized +38ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [InstanceLoader] ConfigHostModule dependencies initialized +0ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [InstanceLoader] AppModule dependencies initialized +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [InstanceLoader] ConfigModule dependencies initialized +3ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [InstanceLoader] TypeOrmCoreModule dependencies initialized +133ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [InstanceLoader] TypeOrmModule dependencies initialized +0ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:20 AM     LOG [InstanceLoader] AppointmentsModule dependencies initialized +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [RoutesResolver] AppController {/}: +777ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [RouterExplorer] Mapped {/, GET} route +2ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [RoutesResolver] AppointmentsController {/appointments}: +0ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [RouterExplorer] Mapped {/appointments, GET} route +3ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [RouterExplorer] Mapped {/appointments, POST} route +2ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [RouterExplorer] Mapped {/appointments/:id, PATCH} route +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [RouterExplorer] Mapped {/appointments/:id, DELETE} route +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:49:21 AM     LOG [NestApplication] Nest application successfully started +2ms

But this just shows a basic Hello World page

/content/images/2024/11/easyappt-25.png

And /appointments gives me prompt

/content/images/2024/11/easyappt-26.png

That’s just a JSON response

/content/images/2024/11/easyappt-27.png

Try as I might, i couldn’t really get this one to work

[2:50:56 AM] Starting compilation in watch mode...
nest-appointment-app  |
nest-appointment-app  | [2:50:59 AM] Found 0 errors. Watching for file changes.
nest-appointment-app  |
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [NestFactory] Starting Nest application...
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [InstanceLoader] TypeOrmModule dependencies initialized +32ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [InstanceLoader] ConfigHostModule dependencies initialized +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [InstanceLoader] AppModule dependencies initialized +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [InstanceLoader] ConfigModule dependencies initialized +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [InstanceLoader] TypeOrmCoreModule dependencies initialized +201ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [InstanceLoader] TypeOrmModule dependencies initialized +0ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:01 AM     LOG [InstanceLoader] AppointmentsModule dependencies initialized +2ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [RoutesResolver] AppController {/}: +752ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [RouterExplorer] Mapped {/, GET} route +3ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [RoutesResolver] AppointmentsController {/appointments}: +0ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [RouterExplorer] Mapped {/appointments, GET} route +3ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [RouterExplorer] Mapped {/appointments, POST} route +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [RouterExplorer] Mapped {/appointments/:id, PATCH} route +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [RouterExplorer] Mapped {/appointments/:id, DELETE} route +1ms
nest-appointment-app  | [Nest] 29  - 11/05/2024, 2:51:02 AM     LOG [NestApplication] Nest application successfully started +3ms
postgres-db           | 2024-11-05 02:56:28.531 UTC [27] LOG:  checkpoint starting: time
postgres-db           | 2024-11-05 02:56:34.270 UTC [27] LOG:  checkpoint complete: wrote 58 buffers (0.4%); 0 WAL file(s) added, 0 removed, 0 recycled; write=5.665 s, sync=0.033 s, total=5.740 s; sync files=19, longest=0.006 s, average=0.002 s; distance=277 kB, estimate=277 kB; lsn=0/1984288, redo lsn=0/19841F8
^CGracefully stopping... (press Ctrl+C again to force)
[+] Stopping 2/2
 ✔ Container nest-appointment-app  Stopped                                                                                                                              2.7s
 ✔ Container postgres-db           Stopped                                                                                                                              1.0s
canceled
builder@LuiGi:~/Workspaces/appointment-app$

Cal.com

I kept searching and finally found another self-hosted option, cal.com

Which lead me to the Docker invokation with steps on the Github page

We can clone it down and use the default env to test

builder@LuiGi:~/Workspaces$ git clone https://github.com/calcom/docker.git
Cloning into 'docker'...
remote: Enumerating objects: 3596, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 3596 (delta 14), reused 17 (delta 8), pack-reused 3569 (from 1)
Receiving objects: 100% (3596/3596), 525.13 KiB | 629.00 KiB/s, done.
Resolving deltas: 100% (1869/1869), done.
builder@LuiGi:~/Workspaces$ cd docker/
builder@LuiGi:~/Workspaces/docker$ cp .env.example .env

I can now fire it up

builder@LuiGi:~/Workspaces/docker$ docker compose up
[+] Running 12/12
 ✔ studio 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                               592.0s
   ✔ 7d98d813d54f Pull complete                                                                                                                                        22.0s
   ✔ da802df85c96 Pull complete                                                                                                                                        11.0s
   ✔ 7aadc5092c3b Pull complete                                                                                                                                        23.8s
   ✔ ad1c7cfc347f Pull complete                                                                                                                                        96.8s
   ✔ 59ee42d02ee5 Pull complete                                                                                                                                        23.5s
   ✔ eb173c1dbe92 Pull complete                                                                                                                                        39.6s
   ✔ f110c757afc5 Pull complete                                                                                                                                        25.3s
   ✔ e3d8693bad2f Pull complete                                                                                                                                        27.0s
   ✔ 34fb88955182 Pull complete                                                                                                                                        28.8s
   ✔ 46680cba0830 Pull complete                                                                                                                                       225.7s
 ✔ calcom Pulled                                                                                                                                                      592.0s
[+] Running 5/5
 ✔ Network stack                  Created                                                                                                                               0.2s  ✔ Volume "docker_database-data"  Created                                                                                                                               0.1s
 ✔ Container database             Created                                                                                                                               1.1s
 ✔ Container docker-calcom-1      Created                                                                                                                               0.3s
 ✔ Container docker-studio-1      Created                                                                                                                               0.3s
Attaching to database, calcom-1, studio-1
database  | The files belonging to this database system will be owned by user "postgres".
database  | This user must also own the server process.
database  |
database  | The database cluster will be initialized with locale "en_US.utf8".
database  | The default database encoding has accordingly been set to "UTF8".
database  | The default text search configuration will be set to "english".
database  |
database  | Data page checksums are disabled.
database  |
database  | fixing permissions on existing directory /var/lib/postgresql/data ... ok
database  | creating subdirectories ... ok
database  | selecting dynamic shared memory implementation ... posix
database  | selecting default "max_connections" ... 100
database  | selecting default "shared_buffers" ... 128MB
database  | selecting default time zone ... Etc/UTC
database  | creating configuration files ... ok
database  | running bootstrap script ... ok
calcom-1  | + scripts/replace-placeholder.sh http://localhost:3000 http://localhost:3000
calcom-1  | Nothing to replace, the value is already set to http://localhost:3000.
calcom-1  | + scripts/wait-for-it.sh database:5432 -- echo database is up
calcom-1  | nc command is missing!
calcom-1  | + npx prisma migrate deploy --schema /calcom/packages/prisma/schema.prisma
database  | performing post-bootstrap initialization ... ok
database  | syncing data to disk ... ok
database  |
database  |
database  | Success. You can now start the database server using:
database  |
database  |     pg_ctl -D /var/lib/postgresql/data -l logfile start
database  |
database  | initdb: warning: enabling "trust" authentication for local connections
database  | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
database  | waiting for server to start....2024-11-07 00:34:21.667 UTC [48] LOG:  starting PostgreSQL 17.0 (Debian 17.0-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
database  | 2024-11-07 00:34:21.680 UTC [48] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
database  | .2024-11-07 00:34:21.778 UTC [51] LOG:  database system was shut down at 2024-11-07 00:34:19 UTC
database  | 2024-11-07 00:34:21.851 UTC [48] LOG:  database system is ready to accept connections
database  |  done
database  | server started
database  | CREATE DATABASE
database  |
database  |
database  | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
database  |
database  | waiting for server to shut down....2024-11-07 00:34:23.302 UTC [48] LOG:  received fast shutdown request
database  | 2024-11-07 00:34:23.311 UTC [48] LOG:  aborting any active transactions
database  | 2024-11-07 00:34:23.348 UTC [48] LOG:  background worker "logical replication launcher" (PID 54) exited with exit code 1
database  | 2024-11-07 00:34:23.348 UTC [49] LOG:  shutting down
database  | 2024-11-07 00:34:23.359 UTC [49] LOG:  checkpoint starting: shutdown immediate
database  | 2024-11-07 00:34:24.230 UTC [49] LOG:  checkpoint complete: wrote 921 buffers (5.6%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.254 s, sync=0.569 s, total=0.882 s; sync files=301, longest=0.027 s, average=0.002 s; distance=4238 kB, estimate=4238 kB; lsn=0/1908980, redo lsn=0/1908980
database  | 2024-11-07 00:34:24.272 UTC [48] LOG:  database system is shut down
database  |  done
database  | server stopped
database  |
database  | PostgreSQL init process complete; ready for start up.
database  |
database  | 2024-11-07 00:34:24.500 UTC [1] LOG:  starting PostgreSQL 17.0 (Debian 17.0-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
database  | 2024-11-07 00:34:24.502 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
database  | 2024-11-07 00:34:24.502 UTC [1] LOG:  listening on IPv6 address "::", port 5432
database  | 2024-11-07 00:34:24.519 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
database  | 2024-11-07 00:34:24.553 UTC [64] LOG:  database system was shut down at 2024-11-07 00:34:24 UTC
database  | 2024-11-07 00:34:24.579 UTC [1] LOG:  database system is ready to accept connections
studio-1  | Prisma schema loaded from packages/prisma/schema.prisma
studio-1  | Prisma Studio is up on http://localhost:5555
calcom-1  | Prisma schema loaded from packages/prisma/schema.prisma
calcom-1  | Datasource "db": PostgreSQL database "calendso", schema "public" at "database:5432"
calcom-1  |
calcom-1  | 340 migrations found in prisma/migrations
calcom-1  |
calcom-1  | Applying migration `20210605225044_init`
calcom-1  | Applying migration `20210605225507_added_bookings`
calcom-1  | Applying migration `20210606013704_made_booking_uid_unique`
calcom-1  | Applying migration `20210613133618_add_team_membership_verification`
calcom-1  | Applying migration `20210615140247_added_selected_calendar`
calcom-1  | Applying migration `20210615142134_added_custom_event_name`
calcom-1  | Applying migration `20210615153546_added_buffer_time`
calcom-1  | Applying migration `20210615153759_add_email_verification_column`
calcom-1  | Applying migration `20210618140954_added_event_type_custom`
calcom-1  | Applying migration `20210628153550_password_reset_request`
calcom-1  | Applying migration `20210629160507_hide_branding`
calcom-1  | Applying migration `20210630014738_schedule_availability`
calcom-1  | Applying migration `20210709231256_add_user_theme`
calcom-1  | Applying migration `20210714151216_event_type_period_settings`
calcom-1  | Applying migration `20210717120159_booking_confirmation`
calcom-1  | Applying migration `20210718184017_reminder_mails`
calcom-1  | Applying migration `20210722225431_minimum_booking_notice`
calcom-1  | Applying migration `20210725123357_add_location_to_booking`
calcom-1  | Applying migration `20210813142905_event_payment`
calcom-1  | Applying migration `20210813194355_add_slug_to_team`
calcom-1  | Applying migration `20210814175645_custom_inputs_type_enum`
calcom-1  | Applying migration `20210820130519_add_placeholder_to_custom_event_types`
calcom-1  | Applying migration `20210824054220_add_bio_branding_logo_to_team`
calcom-1  | Applying migration `20210825004801_schedule_schema`
calcom-1  | Applying migration `20210830064354_add_unique_to_team_slug`
calcom-1  | Applying migration `20210902112455_event_type_unique_user_id_slug`
calcom-1  | Applying migration `20210902121313_user_plan`
calcom-1  | Applying migration `20210902125945_user_username_unique`
calcom-1  | Applying migration `20210904162403_add_booking_status_enum`
calcom-1  | Applying migration `20210908042159_teams_feature`
calcom-1  | Applying migration `20210908220336_add_daily_data_table`
calcom-1  | Applying migration `20210908235519_undo_unique_user_id_slug`
calcom-1  | Applying migration `20210913211650_add_meeting_info`
calcom-1  | Applying migration `20210918013258_add_two_factor_fields`
calcom-1  | Applying migration `20210918152354_user_id_slug_fix`
calcom-1  | Applying migration `20210919174415_add_user_locale`
calcom-1  | Applying migration `20210922004424_add_disable_guests_to_event_type`
calcom-1  | Applying migration `20211004231654_add_webhook_model`
calcom-1  | Applying migration `20211011152041_non_optionals`
calcom-1  | Applying migration `20211028233838_add_user_webhooks_relation`
calcom-1  | Applying migration `20211101151249_update_rejected_bookings`
calcom-1  | Applying migration `20211105200545_availability_start_and_end_time_as_time`
calcom-1  | Applying migration `20211106121119_add_event_type_position`
calcom-1  | Applying migration `20211110063531_add_custom_brand_color`
calcom-1  | Applying migration `20211110142845_add_identity_provider_columns`
calcom-1  | Applying migration `20211111013358_period_type_enum`
calcom-1  | Applying migration `20211112145539_add_saml_login`
calcom-1  | Applying migration `20211115182559_availability_issue`
calcom-1  | Applying migration `20211120211639_add_payload_template`
calcom-1  | Applying migration `20211207010154_add_destination_calendar`
calcom-1  | Applying migration `20211209201138_membership_admin_role`
calcom-1  | Applying migration `20211210182230_add_invited_to`
calcom-1  | Applying migration `20211217201940_upgrade_to_v3`
calcom-1  | Applying migration `20211217215952_added_slot_interval_to_event_type`
calcom-1  | Applying migration `20211220192703_email_to_lowercase`
calcom-1  | Applying migration `20211222174947_placeholder`
calcom-1  | Applying migration `20211222181246_add_sc_address`
calcom-1  | Applying migration `20211228004752_adds_user_metadata`
calcom-1  | Applying migration `20211231142312_add_user_on_delete_cascade`
calcom-1  | Applying migration `20220105104913_add_away_field`
calcom-1  | Applying migration `20220113145333_rename_column_sc_address_to_smart_contract_address`
calcom-1  | Applying migration `20220117193242_trial_users_by_default`
calcom-1  | Applying migration `20220121210720_add_cancellation_reason`
calcom-1  | Applying migration `20220125035907_add_attendee_locale`
calcom-1  | Applying migration `20220131170110_add_metadata_column_to_event_type`
calcom-1  | Applying migration `20220205135022_add_verified_column`
calcom-1  | Applying migration `20220209082843_add_rejection_reason`
calcom-1  | Applying migration `20220217093836_add_webhook_for_event`
calcom-1  | Applying migration `20220228122419_add_time_format`
calcom-1  | Applying migration `20220302035831_add_before_and_after_event_buffer`
calcom-1  | Applying migration `20220302110201_add_dark_mode_brand_color`
calcom-1  | Applying migration `20220303171305_adds_user_trial_ends_at`
calcom-1  | Applying migration `20220305233635_availability_schedules`
calcom-1  | Applying migration `20220305233635_rename_indexes`
calcom-1  | Applying migration `20220306010113_renames_verification_request_to_verification_token`
calcom-1  | Applying migration `20220323033335_reschedule_fields_to_bookings_table`
calcom-1  | Applying migration `20220323162642_events_hide_notes`
calcom-1  | Applying migration `20220328185001_soft_delete_booking_references`
calcom-1  | Applying migration `20220330071743_add_dynamic_group_booking`
calcom-1  | Applying migration `20220404132522_redirect_url`
calcom-1  | Applying migration `20220409155714_impersonate_users`
calcom-1  | Applying migration `20220409195425_index_event_types_team_id_slug`
calcom-1  | Applying migration `20220412172742_payment_on_delete_cascade`
calcom-1  | Applying migration `20220413002425_adds_api_keys`
calcom-1  | Applying migration `20220413173832_add_seats_to_event_type_model`
calcom-1  | Applying migration `20220420152505_add_hashed_event_url`
calcom-1  | Applying migration `20220420230104_update_booking_id_constrain`
calcom-1  | Applying migration `20220420230105_rename_verification_token_unique_id`
calcom-1  | Applying migration `20220423022403_recurring_event`
calcom-1  | Applying migration `20220423175732_added_next_auth_models`
calcom-1  | Applying migration `20220502154345_adds_apps`
calcom-1  | Applying migration `20220503183922_add_external_calendar_id_to_booking_reference`
calcom-1  | Applying migration `20220503194835_adds_app_relation_to_webhook_and_api_keys`
calcom-1  | Applying migration `20220511095513_add_custom_inputs_to_booking`
calcom-1  | Applying migration `20220513151152_adds_feedback_table`
calcom-1  | Applying migration `20220518201335_add_user_relationship_to_feedback`
calcom-1  | Applying migration `20220525110759_add_user_impersonation_toggle`
calcom-1  | Applying migration `20220525182228_cal_video_preinstalled`
calcom-1  | Applying migration `20220526151550_cascades_impersonations_on_user_delete`
calcom-1  | Applying migration `20220604144700_fixes_booking_status`
calcom-1  | Applying migration `20220604210102_removes_booking_confirmed_rejected`
calcom-1  | Applying migration `20220614090326_add_webhook_secret`
calcom-1  | Applying migration `20220616072241_app_routing_forms`
calcom-1  | Applying migration `20220620181226_add_all_userid_to_users`
calcom-1  | Applying migration `20220622110735_allow_one_schedule_to_apply_to_multiple_event_types`
calcom-1  | Applying migration `20220628184929_adds_missing_owner_relationship`
calcom-1  | Applying migration `20220628190334_adds_missing_oncascades`
calcom-1  | Applying migration `20220628191702_adds_default_date_to_feedback`
calcom-1  | Applying migration `20220629151617_connect_destination_calendar_to_credential`
calcom-1  | Applying migration `20220711182928_add_workflows`
calcom-1  | Applying migration `20220714175322_destination_calendar_one_to_many_bookings`
calcom-1  | Applying migration `20220719110415_form_submitted_webhook`
calcom-1  | Applying migration `20220719144253_disabled_impersonation_teams`
calcom-1  | Applying migration `20220721183745_`
calcom-1  | Applying migration `20220723001233_`
calcom-1  | Applying migration `20220728111440_add_created_at_form_response`
calcom-1  | Applying migration `20220803090845_migrate_daily_event_reference_to_booking_reference`
calcom-1  | Applying migration `20220803091114_drop_daily_event_reference`
calcom-1  | Applying migration `20220811132430_add_unique_index_to_webhook`
calcom-1  | Applying migration `20220811234822_add_after_meeting_ends_trigger`
calcom-1  | Applying migration `20220817201039_`
calcom-1  | Applying migration `20220827082641_reschedule_workflow_trigger_added`
calcom-1  | Applying migration `20220912134714_add_automation_category`
calcom-1  | Applying migration `20220913034937_move_n8n_zapier_to_automation_category`
calcom-1  | Applying migration `20220914215052_convert_pro_plan_to_free`
calcom-1  | Applying migration `20220917042621_rename_routing_forms_slug`
calcom-1  | Applying migration `20220917201512_revert_convert_pro_plan_to_free`
calcom-1  | Applying migration `20220926105434_add_booking_limit`
calcom-1  | Applying migration `20220929132137_add_seats_hide_attendees`
calcom-1  | Applying migration `20221006044939_routing_form_type_migration`
calcom-1  | Applying migration `20221006121954_add_after_event_ends_workflow_trigger`
calcom-1  | Applying migration `20221006133952_add_analytics_category`
calcom-1  | Applying migration `20221007112203_add_email_address_workflow_action`
calcom-1  | Applying migration `20221011001632_make_team_name_slug_required`
calcom-1  | Applying migration `20221011012344_add_membership_cascade`
calcom-1  | Applying migration `20221017115710_add_number_required_to_workflow_step`
calcom-1  | Applying migration `20221017205314_add_invalid_field_credential_table`
calcom-1  | Applying migration `20221028093727_add_routing_form_settings`
calcom-1  | Applying migration `20221107201132_add_team_subscription_cols`
calcom-1  | Applying migration `20221110164757_add_sender_to_workflow_step`
calcom-1  | Applying migration `20221111152547_add_enabled_col_to_apps`
calcom-1  | Applying migration `20221121115813_`
calcom-1  | Applying migration `20221129112344_adding_radio_custom_input`
calcom-1  | Applying migration `20221129125935_add_metadata_to_booking`
calcom-1  | Applying migration `20221201191836_credential_invalid_col_default_false`
calcom-1  | Applying migration `20221206152547_set_enabled_to_current_apps`
calcom-1  | Applying migration `20221208221811_remove_user_plan`
calcom-1  | Applying migration `20221214210020_set_seats_show_attendees_to_default_false`
calcom-1  | Applying migration `20221215120525_add_verified_numbers`
calcom-1  | Applying migration `20230105203125_add_hide_book_a_team_member`
calcom-1  | Applying migration `20230105212846_add_availability_schedule_indexes`
calcom-1  | Applying migration `20230111183922_add_host_relation`
calcom-1  | Applying migration `20230124154235_add_booking_fields`
calcom-1  | Applying migration `20230125175109_remove_type_from_payment_and_add_app_relationship`
calcom-1  | Applying migration `20230125182832_add_deployment`
calcom-1  | Applying migration `20230129094557_add_recording_exist`
calcom-1  | Applying migration `20230131062229_add_theme_and_brand_colors_for_teams`
calcom-1  | Applying migration `20230210132534_add_workflows_to_teams`
calcom-1  | Applying migration `20230210182245_add_verified_numbers_to_team`
calcom-1  | Applying migration `20230214083325_add_duration_limits`
calcom-1  | Applying migration `20230216134219_managed_events`
calcom-1  | Applying migration `20230216171757_host_user_id_event_type_id`
calcom-1  | Applying migration `20230217230604_add_cancelled_to_workflow_reminder`
calcom-1  | Applying migration `20230222152136_assign_event_type_ownership`
calcom-1  | Applying migration `20230303162003_add_booking_seat_reference`
calcom-1  | Applying migration `20230303195431_add_feature_flags`
calcom-1  | Applying migration `20230303195432_add_feature_flag_default_values`
calcom-1  | Applying migration `20230309203435_make_booking_and_workflow_step_optional_for_workflow_reminder`
calcom-1  | Applying migration `20230328204152_add_selected_slots_table`
calcom-1  | Applying migration `20230329000000_add_insights_feature_flag`
calcom-1  | Applying migration `20230330030031_add_payment_option`
calcom-1  | Applying migration `20230404100155_remove_reminder_body_email_subject_from_reminder_template`
calcom-1  | Applying migration `20230404202721_add_feature_flag_managed_event_types`
calcom-1  | Applying migration `20230410234751_add_foreign_key_indexes`
calcom-1  | Applying migration `20230412094052_fix_apps`
calcom-1  | Applying migration `20230414112451_add_recording_ready`
calcom-1  | Applying migration `20230417102118_app_logo_subdomain`
calcom-1  | Applying migration `20230418002117_booking_time_status`
calcom-1  | Applying migration `20230420222915_add_whatsapp_workflow_migrations`
calcom-1  | Applying migration `20230422152301_add_team_invite_token`
calcom-1  | Applying migration `20230424163718_offset_start_times`
calcom-1  | Applying migration `20230428142539_event_type_workflow_uniqueness`
calcom-1  | Applying migration `20230513235419_add_booking_webhooks`
calcom-1  | Applying migration `20230515121841_add_team_webhooks`
calcom-1  | Applying migration `20230518084145_add_feature_flag_google_workspace`
calcom-1  | Applying migration `20230522115850_add_enum_booking_requested_booking_rejected`
calcom-1  | Applying migration `20230523101834_email_verification_feature_flag`
calcom-1  | Applying migration `20230524105015_added_newbooker_feature_flag`
calcom-1  | Applying migration `20230531133843_organizations`
calcom-1  | Applying migration `20230601141825_add_locale_timezone_timeformat_in_team`
calcom-1  | Applying migration `20230601181657_disable_signup_feature_flag`
calcom-1  | Applying migration `20230603115613_reorganise_app_categories`
calcom-1  | Applying migration `20230605142353_team_routing_forms`
calcom-1  | Applying migration `20230606202918_add_team_id_to_credential`
calcom-1  | Applying migration `20230622164946_remove_host_remnants_from_old_team_members`
calcom-1  | Applying migration `20230629083927_add_team_id_in_api_key`
calcom-1  | Applying migration `20230629124638_membership_autoinc_id`
calcom-1  | Applying migration `20230701125542_add_is_private`
calcom-1  | Applying migration `20230712192734_fixes_team_verification_tokens`
calcom-1  | Applying migration `20230717175901_add_booker_email_verification`
calcom-1  | Applying migration `20230719214513_update_booking_time_status_fields_event_parent_id`
calcom-1  | Applying migration `20230726083334_fix_workflow_reminders_not_canceled_for_canceled_seats`
calcom-1  | Applying migration `20230803132959_adds_field_for_seo_indexing_checking`
calcom-1  | Applying migration `20230804153419_add_backup_codes`
calcom-1  | Applying migration `20230815080823_zapier_scheduled_triggers`
calcom-1  | Applying migration `20230815131901_add_position_column_to_routing_forms_and_workflows`
calcom-1  | Applying migration `20230828094603_add_include_calendar_event`
calcom-1  | Applying migration `20230828175052_`
calcom-1  | Applying migration `20230902163155_add_seats_show_availability_count_field`
calcom-1  | Applying migration `20230904102526_add_booking_payment_initiated`
calcom-1  | Applying migration `20230907002853_add_calendar_cache`
calcom-1  | Applying migration `20230911172537_connect_selected_calendar_to_credential`
calcom-1  | Applying migration `20230920175742_add_oauth_model`
calcom-1  | Applying migration `20230921002822_fix_booking_time_status`
calcom-1  | Applying migration `20231001101010_add_user_email_to_booking_time_status`
calcom-1  | Applying migration `20231014180034_add_temp_org_redirect`
calcom-1  | Applying migration `20231016125421_add_username_idx`
calcom-1  | Applying migration `20231016153526_add_workflow_reminder_indexes`
calcom-1  | Applying migration `20231020090443_add_lock_timezone_toggle`
calcom-1  | Applying migration `20231024173642_idx_booking_status_starttime_endtime`
calcom-1  | Applying migration `20231110122349_paid_apps`
calcom-1  | Applying migration `20231113131945_idx_teamid_verification_token`
calcom-1  | Applying migration `20231113202947_add_ical_columns_to_booking`
calcom-1  | Applying migration `20231114090318_add_avatar_url`
calcom-1  | Applying migration `20231117002911_add_users_locked`
calcom-1  | Applying migration `20231117081852_idx_eventtype_scheduleid`
calcom-1  | Applying migration `20231201233433_add_new_user_field_app_theme`
calcom-1  | Applying migration `20231202181233_adding_show_first_available_timeslot`
calcom-1  | Applying migration `20231203154633_adding_is_mandatory_reminder_field_for_mandatory_reminders`
calcom-1  | Applying migration `20231206191034_add_cal_video_logo`
calcom-1  | Applying migration `20231206220118_add_recurring_event_id`
calcom-1  | Applying migration `20231213083720_add_meeting_started_webhook`
calcom-1  | Applying migration `20231213153230_add_instant_meeting`
calcom-1  | Applying migration `20231220152005_add_email_in_destination_calendar`
calcom-1  | Applying migration `20240105110500_removed_newbooker_feature_flag`
calcom-1  | Applying migration `20240109041925_add_out_of_office_entry_table`
calcom-1  | Applying migration `20240111075727_remove_brand_colours_default`
calcom-1  | Applying migration `20240114195534_assign_all_team_members`
calcom-1  | Applying migration `20240116085902_add_pending_payment_column_to_teams`
calcom-1  | Applying migration `20240117062434_move_org_metadata_to_org_settings`
calcom-1  | Applying migration `20240130134919_add_profile_table_and_add_event_type_relation`
calcom-1  | Applying migration `20240131021824_revert_20230404202721_add_feature_flag_managed_event_types`
calcom-1  | Applying migration `20240205185412_add_email_field_in_booking`
calcom-1  | Applying migration `20240206162624_add_priority_field_to_host`
calcom-1  | Applying migration `20240208075646_use_event_type_destination_calendar`
calcom-1  | Applying migration `20240209223121_adds_user_password`
calcom-1  | Applying migration `20240213081819_add_secondary_email`
calcom-1  | Applying migration `20240213220617_drop_deprecated_passwords`
calcom-1  | Applying migration `20240214093418_add_banner_url`
calcom-1  | Applying migration `20240220151951_add_dsync_data`
calcom-1  | Applying migration `20240221051147_link_secondary_email_with_token`
calcom-1  | Applying migration `20240222120917_link_secondary_emails_with_events`
calcom-1  | Applying migration `20240223033247_add_dsync_team_group_mapping`
calcom-1  | Applying migration `20240226125946_add_idempotency_key`
calcom-1  | Applying migration `20240229154858_add_insights_db_indexes`
calcom-1  | Applying migration `20240304093822_lock_eventtype_creation_for_orgs`
calcom-1  | Applying migration `20240305054507_add_reasons_to_out_of_office_entries`
calcom-1  | Applying migration `20240305054508_default_reasons_out_of_office`
calcom-1  | Applying migration `20240306041233_move_dsyncdata_to_organization_settings`
calcom-1  | Applying migration `20240307200336_rename_dsync_org_id_to_organization_id`
calcom-1  | Applying migration `20240307203026_rename_team_group_mapping_org_id_to_organization_id`
calcom-1  | Applying migration `20240308211937_add_notes_field_to_ooo_entry`
calcom-1  | Applying migration `20240308214010_add_is_banner_in_avatar`
calcom-1  | Applying migration `20240313151954_connect_dsync_data_to_org_settings_org_id`
calcom-1  | Applying migration `20240314152130_platform_wide_webhooks`
calcom-1  | Applying migration `20240318085938_add_provider_email`
calcom-1  | Applying migration `20240319144740_platform`
calcom-1  | Applying migration `20240321143215_move_avatars_cols_to_avatar_table`
calcom-1  | Applying migration `20240321153033_add_travel_schedules`
calcom-1  | Applying migration `20240322152654_add_webhook_to_scheduled_webhook_triggers`
calcom-1  | Applying migration `20240325082604_add_is_platform_flag_to_team`
calcom-1  | Applying migration `20240325162556_add_user_is_platform_managed`
calcom-1  | Applying migration `20240327121006_added_rating_workflow_template`
calcom-1  | Applying migration `20240327130910_added_rating_feedback_and_noshowhost_for_booking`
calcom-1  | Applying migration `20240327153218_adds_tasker_feature`
calcom-1  | Applying migration `20240327165803_forward_parameters_on_success_redirect`
calcom-1  | Applying migration `20240328080307_add_ai_phone_call_config`
calcom-1  | Applying migration `20240329084749_platform_snake_case_to_pascal_case`
calcom-1  | Applying migration `20240401034329_add_admin_review_org`
calcom-1  | Applying migration `20240404092234_add_guest_company_and_email`
calcom-1  | Applying migration `20240405142908_make_guest_company_and_email_optional`
calcom-1  | Applying migration `20240408155446_add_phone_number_in_attendee`
calcom-1  | Applying migration `20240411114622_platform_urls_emails`
calcom-1  | Applying migration `20240417175106_add_sms_lock_state`
calcom-1  | Applying migration `20240419114622_add_ratings_to_insights`
calcom-1  | Applying migration `20240425121424_platform_billing`
calcom-1  | Applying migration `20240429100018_add_org_admin_no_slots_notification`
calcom-1  | Applying migration `20240502213807_add_webhook_scheduled_triggers_to_bookings`
calcom-1  | Applying migration `20240506065443_added_notifications_subscriptions_table`
calcom-1  | Applying migration `20240506101739_add_rolling_window_period_type`
calcom-1  | Applying migration `20240508134359_add_retry_count_to_workflow_reminder`
calcom-1  | Applying migration `20240513101457_add_verified_emails`
calcom-1  | Applying migration `20240517144241_add_org_wide_workflows`
calcom-1  | Applying migration `20240531082824_add_meeting_attendee_no_show_column`
calcom-1  | Applying migration `20240605135455_rescheduled_by_and_cancelled_by_for_bookings`
calcom-1  | Applying migration `20240607082125_removal_of_logo_and_avatar`
calcom-1  | Applying migration `20240610084425_add_cal_ai_template`
calcom-1  | Applying migration `20240611054408_add_ooo_created_as_webhook_enum`
calcom-1  | Applying migration `20240619195146_add_booking_no_show_updated_webhook`
calcom-1  | Applying migration `20240624195855_add_instant_meeting_expiry_offset`
calcom-1  | Applying migration `20240626171118_add_weights_to_host`
calcom-1  | Applying migration `20240626191137_add_recording_transcription_ready_webhook`
calcom-1  | Applying migration `20240627170642_host_schedule`
calcom-1  | Applying migration `20240711080953_unique_username_in_org`
calcom-1  | Applying migration `20240712162735_default_no_show_host_to_false`
calcom-1  | Applying migration `20240722105401_add_is_admin_api_enabled_organization_setting`
calcom-1  | Applying migration `20240724124035_update_null_no_show_host_to_false`
calcom-1  | Applying migration `20240730122536_add_created_by_oauth_client_to_org_teams`
calcom-1  | Applying migration `20240730142744_delete_platform_team_when_oauth_client_deleted`
calcom-1  | Applying migration `20240802053512_allow_rescheduling_with_same_round_robin_host`
calcom-1  | Applying migration `20240802124001_webhooks_oauth_client`
calcom-1  | Applying migration `20240804185106_add_sms_lock_reviewed_by_admin_flag_in_user_and_team_table`
calcom-1  | Applying migration `20240808084028_add_attribute_tables`
calcom-1  | Applying migration `20240810164200_event_type_color`
calcom-1  | Applying migration `20240816083533_attribute_feature_flag`
calcom-1  | Applying migration `20240816160101_support_multiple_hashed_links_for_an_event_type`
calcom-1  | Applying migration `20240823033245_booking_one_time_password`
calcom-1  | Applying migration `20240823092832_add_requires_confirmation_will_block_slot`
calcom-1  | Applying migration `20240830084943_add_instant_meeting_schedule`
calcom-1  | Applying migration `20240909084221_add_referal_link_id`
calcom-1  | Applying migration `20240909162522_union_insights_data`
calcom-1  | Applying migration `20240912150824_add_booking_limits_to_team`
calcom-1  | Applying migration `20240918202101_adds_per_user_and_team_feature_flags`
calcom-1  | Applying migration `20240920000000_adds_feature_flag_organizer_request_email_v2`
calcom-1  | Applying migration `20240920100549_add_daily_no_show`
calcom-1  | Applying migration `20240920192534_add_no_show_daily_webhook_trigger`
calcom-1  | Applying migration `20240920195815_add_time_unit_in_webhooks`
calcom-1  | Applying migration `20240924112248_booking_reference_null_credential_on_delete`
calcom-1  | Applying migration `20240925153154_add_hide_calendar_event_details`
calcom-1  | Applying migration `20241001091544_add_api_key_rate_limit`
calcom-1  | Applying migration `20241003145122_add_include_managed_events_in_limits_to_teams`
calcom-1  | Applying migration `20241007134700_add_connection_bw_booking_and_routing_form_response`
calcom-1  | Applying migration `20241008124232_remove_attribute_value_unique`
calcom-1  | Applying migration `20241010070020_add_active`
calcom-1  | Applying migration `20241010171846_add_eventtype_parent_id_index`
calcom-1  | Applying migration `20241014202509_add_form_submitted_no_event_webhook`
calcom-1  | Applying migration `202410181114246_add_membership_indices`
calcom-1  | Applying migration `20241018121846_add_credentials_invalid_index`
calcom-1  | Applying migration `20241025143558_add_reassign_reason_to_booking`
calcom-1  | Applying migration `20241031084229_add_reassign_by_column_to_booking`
calcom-1  |
calcom-1  | The following migrations have been applied:
calcom-1  |
calcom-1  | migrations/
calcom-1  |   └─ 20210605225044_init/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210605225507_added_bookings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210606013704_made_booking_uid_unique/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210613133618_add_team_membership_verification/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210615140247_added_selected_calendar/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210615142134_added_custom_event_name/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210615153546_added_buffer_time/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210615153759_add_email_verification_column/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210618140954_added_event_type_custom/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210628153550_password_reset_request/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210629160507_hide_branding/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210630014738_schedule_availability/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210709231256_add_user_theme/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210714151216_event_type_period_settings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210717120159_booking_confirmation/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210718184017_reminder_mails/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210722225431_minimum_booking_notice/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210725123357_add_location_to_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210813142905_event_payment/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210813194355_add_slug_to_team/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210814175645_custom_inputs_type_enum/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210820130519_add_placeholder_to_custom_event_types/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210824054220_add_bio_branding_logo_to_team/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210825004801_schedule_schema/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210830064354_add_unique_to_team_slug/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210902112455_event_type_unique_user_id_slug/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210902121313_user_plan/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210902125945_user_username_unique/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210904162403_add_booking_status_enum/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210908042159_teams_feature/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210908220336_add_daily_data_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210908235519_undo_unique_user_id_slug/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210913211650_add_meeting_info/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210918013258_add_two_factor_fields/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210918152354_user_id_slug_fix/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210919174415_add_user_locale/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20210922004424_add_disable_guests_to_event_type/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211004231654_add_webhook_model/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211011152041_non_optionals/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211028233838_add_user_webhooks_relation/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211101151249_update_rejected_bookings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211105200545_availability_start_and_end_time_as_time/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211106121119_add_event_type_position/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211110063531_add_custom_brand_color/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211110142845_add_identity_provider_columns/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211111013358_period_type_enum/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211112145539_add_saml_login/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211115182559_availability_issue/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211120211639_add_payload_template/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211207010154_add_destination_calendar/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211209201138_membership_admin_role/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211210182230_add_invited_to/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211217201940_upgrade_to_v3/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211217215952_added_slot_interval_to_event_type/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211220192703_email_to_lowercase/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211222174947_placeholder/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211222181246_add_sc_address/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211228004752_adds_user_metadata/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20211231142312_add_user_on_delete_cascade/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220105104913_add_away_field/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220113145333_rename_column_sc_address_to_smart_contract_address/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220117193242_trial_users_by_default/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220121210720_add_cancellation_reason/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220125035907_add_attendee_locale/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220131170110_add_metadata_column_to_event_type/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220205135022_add_verified_column/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220209082843_add_rejection_reason/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220217093836_add_webhook_for_event/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220228122419_add_time_format/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220302035831_add_before_and_after_event_buffer/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220302110201_add_dark_mode_brand_color/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220303171305_adds_user_trial_ends_at/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220305233635_availability_schedules/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220305233635_rename_indexes/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220306010113_renames_verification_request_to_verification_token/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220323033335_reschedule_fields_to_bookings_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220323162642_events_hide_notes/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220328185001_soft_delete_booking_references/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220330071743_add_dynamic_group_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220404132522_redirect_url/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220409155714_impersonate_users/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220409195425_index_event_types_team_id_slug/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220412172742_payment_on_delete_cascade/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220413002425_adds_api_keys/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220413173832_add_seats_to_event_type_model/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220420152505_add_hashed_event_url/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220420230104_update_booking_id_constrain/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220420230105_rename_verification_token_unique_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220423022403_recurring_event/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220423175732_added_next_auth_models/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220502154345_adds_apps/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220503183922_add_external_calendar_id_to_booking_reference/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220503194835_adds_app_relation_to_webhook_and_api_keys/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220511095513_add_custom_inputs_to_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220513151152_adds_feedback_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220518201335_add_user_relationship_to_feedback/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220525110759_add_user_impersonation_toggle/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220525182228_cal_video_preinstalled/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220526151550_cascades_impersonations_on_user_delete/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220604144700_fixes_booking_status/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220604210102_removes_booking_confirmed_rejected/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220614090326_add_webhook_secret/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220616072241_app_routing_forms/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220620181226_add_all_userid_to_users/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220622110735_allow_one_schedule_to_apply_to_multiple_event_types/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220628184929_adds_missing_owner_relationship/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220628190334_adds_missing_oncascades/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220628191702_adds_default_date_to_feedback/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220629151617_connect_destination_calendar_to_credential/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220711182928_add_workflows/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220714175322_destination_calendar_one_to_many_bookings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220719110415_form_submitted_webhook/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220719144253_disabled_impersonation_teams/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220721183745_/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220723001233_/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220728111440_add_created_at_form_response/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220803090845_migrate_daily_event_reference_to_booking_reference/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220803091114_drop_daily_event_reference/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220811132430_add_unique_index_to_webhook/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220811234822_add_after_meeting_ends_trigger/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220817201039_/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220827082641_reschedule_workflow_trigger_added/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220912134714_add_automation_category/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220913034937_move_n8n_zapier_to_automation_category/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220914215052_convert_pro_plan_to_free/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220917042621_rename_routing_forms_slug/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220917201512_revert_convert_pro_plan_to_free/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220926105434_add_booking_limit/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20220929132137_add_seats_hide_attendees/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221006044939_routing_form_type_migration/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221006121954_add_after_event_ends_workflow_trigger/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221006133952_add_analytics_category/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221007112203_add_email_address_workflow_action/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221011001632_make_team_name_slug_required/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221011012344_add_membership_cascade/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221017115710_add_number_required_to_workflow_step/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221017205314_add_invalid_field_credential_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221028093727_add_routing_form_settings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221107201132_add_team_subscription_cols/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221110164757_add_sender_to_workflow_step/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221111152547_add_enabled_col_to_apps/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221121115813_/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221129112344_adding_radio_custom_input/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221129125935_add_metadata_to_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221201191836_credential_invalid_col_default_false/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221206152547_set_enabled_to_current_apps/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221208221811_remove_user_plan/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221214210020_set_seats_show_attendees_to_default_false/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20221215120525_add_verified_numbers/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230105203125_add_hide_book_a_team_member/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230105212846_add_availability_schedule_indexes/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230111183922_add_host_relation/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230124154235_add_booking_fields/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230125175109_remove_type_from_payment_and_add_app_relationship/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230125182832_add_deployment/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230129094557_add_recording_exist/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230131062229_add_theme_and_brand_colors_for_teams/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230210132534_add_workflows_to_teams/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230210182245_add_verified_numbers_to_team/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230214083325_add_duration_limits/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230216134219_managed_events/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230216171757_host_user_id_event_type_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230217230604_add_cancelled_to_workflow_reminder/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230222152136_assign_event_type_ownership/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230303162003_add_booking_seat_reference/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230303195431_add_feature_flags/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230303195432_add_feature_flag_default_values/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230309203435_make_booking_and_workflow_step_optional_for_workflow_reminder/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230328204152_add_selected_slots_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230329000000_add_insights_feature_flag/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230330030031_add_payment_option/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230404100155_remove_reminder_body_email_subject_from_reminder_template/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230404202721_add_feature_flag_managed_event_types/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230410234751_add_foreign_key_indexes/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230412094052_fix_apps/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230414112451_add_recording_ready/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230417102118_app_logo_subdomain/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230418002117_booking_time_status/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230420222915_add_whatsapp_workflow_migrations/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230422152301_add_team_invite_token/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230424163718_offset_start_times/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230428142539_event_type_workflow_uniqueness/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230513235419_add_booking_webhooks/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230515121841_add_team_webhooks/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230518084145_add_feature_flag_google_workspace/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230522115850_add_enum_booking_requested_booking_rejected/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230523101834_email_verification_feature_flag/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230524105015_added_newbooker_feature_flag/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230531133843_organizations/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230601141825_add_locale_timezone_timeformat_in_team/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230601181657_disable_signup_feature_flag/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230603115613_reorganise_app_categories/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230605142353_team_routing_forms/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230606202918_add_team_id_to_credential/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230622164946_remove_host_remnants_from_old_team_members/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230629083927_add_team_id_in_api_key/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230629124638_membership_autoinc_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230701125542_add_is_private/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230712192734_fixes_team_verification_tokens/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230717175901_add_booker_email_verification/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230719214513_update_booking_time_status_fields_event_parent_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230726083334_fix_workflow_reminders_not_canceled_for_canceled_seats/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230803132959_adds_field_for_seo_indexing_checking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230804153419_add_backup_codes/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230815080823_zapier_scheduled_triggers/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230815131901_add_position_column_to_routing_forms_and_workflows/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230828094603_add_include_calendar_event/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230828175052_/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230902163155_add_seats_show_availability_count_field/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230904102526_add_booking_payment_initiated/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230907002853_add_calendar_cache/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230911172537_connect_selected_calendar_to_credential/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230920175742_add_oauth_model/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20230921002822_fix_booking_time_status/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231001101010_add_user_email_to_booking_time_status/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231014180034_add_temp_org_redirect/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231016125421_add_username_idx/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231016153526_add_workflow_reminder_indexes/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231020090443_add_lock_timezone_toggle/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231024173642_idx_booking_status_starttime_endtime/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231110122349_paid_apps/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231113131945_idx_teamid_verification_token/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231113202947_add_ical_columns_to_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231114090318_add_avatar_url/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231117002911_add_users_locked/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231117081852_idx_eventtype_scheduleid/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231201233433_add_new_user_field_app_theme/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231202181233_adding_show_first_available_timeslot/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231203154633_adding_is_mandatory_reminder_field_for_mandatory_reminders/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231206191034_add_cal_video_logo/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231206220118_add_recurring_event_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231213083720_add_meeting_started_webhook/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231213153230_add_instant_meeting/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20231220152005_add_email_in_destination_calendar/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240105110500_removed_newbooker_feature_flag/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240109041925_add_out_of_office_entry_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240111075727_remove_brand_colours_default/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240114195534_assign_all_team_members/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240116085902_add_pending_payment_column_to_teams/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240117062434_move_org_metadata_to_org_settings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240130134919_add_profile_table_and_add_event_type_relation/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240131021824_revert_20230404202721_add_feature_flag_managed_event_types/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240205185412_add_email_field_in_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240206162624_add_priority_field_to_host/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240208075646_use_event_type_destination_calendar/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240209223121_adds_user_password/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240213081819_add_secondary_email/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240213220617_drop_deprecated_passwords/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240214093418_add_banner_url/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240220151951_add_dsync_data/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240221051147_link_secondary_email_with_token/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240222120917_link_secondary_emails_with_events/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240223033247_add_dsync_team_group_mapping/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240226125946_add_idempotency_key/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240229154858_add_insights_db_indexes/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240304093822_lock_eventtype_creation_for_orgs/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240305054507_add_reasons_to_out_of_office_entries/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240305054508_default_reasons_out_of_office/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240306041233_move_dsyncdata_to_organization_settings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240307200336_rename_dsync_org_id_to_organization_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240307203026_rename_team_group_mapping_org_id_to_organization_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240308211937_add_notes_field_to_ooo_entry/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240308214010_add_is_banner_in_avatar/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240313151954_connect_dsync_data_to_org_settings_org_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240314152130_platform_wide_webhooks/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240318085938_add_provider_email/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240319144740_platform/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240321143215_move_avatars_cols_to_avatar_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240321153033_add_travel_schedules/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240322152654_add_webhook_to_scheduled_webhook_triggers/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240325082604_add_is_platform_flag_to_team/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240325162556_add_user_is_platform_managed/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240327121006_added_rating_workflow_template/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240327130910_added_rating_feedback_and_noshowhost_for_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240327153218_adds_tasker_feature/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240327165803_forward_parameters_on_success_redirect/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240328080307_add_ai_phone_call_config/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240329084749_platform_snake_case_to_pascal_case/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240401034329_add_admin_review_org/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240404092234_add_guest_company_and_email/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240405142908_make_guest_company_and_email_optional/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240408155446_add_phone_number_in_attendee/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240411114622_platform_urls_emails/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240417175106_add_sms_lock_state/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240419114622_add_ratings_to_insights/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240425121424_platform_billing/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240429100018_add_org_admin_no_slots_notification/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240502213807_add_webhook_scheduled_triggers_to_bookings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240506065443_added_notifications_subscriptions_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240506101739_add_rolling_window_period_type/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240508134359_add_retry_count_to_workflow_reminder/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240513101457_add_verified_emails/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240517144241_add_org_wide_workflows/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240531082824_add_meeting_attendee_no_show_column/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240605135455_rescheduled_by_and_cancelled_by_for_bookings/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240607082125_removal_of_logo_and_avatar/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240610084425_add_cal_ai_template/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240611054408_add_ooo_created_as_webhook_enum/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240619195146_add_booking_no_show_updated_webhook/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240624195855_add_instant_meeting_expiry_offset/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240626171118_add_weights_to_host/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240626191137_add_recording_transcription_ready_webhook/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240627170642_host_schedule/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240711080953_unique_username_in_org/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240712162735_default_no_show_host_to_false/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240722105401_add_is_admin_api_enabled_organization_setting/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240724124035_update_null_no_show_host_to_false/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240730122536_add_created_by_oauth_client_to_org_teams/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240730142744_delete_platform_team_when_oauth_client_deleted/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240802053512_allow_rescheduling_with_same_round_robin_host/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240802124001_webhooks_oauth_client/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240804185106_add_sms_lock_reviewed_by_admin_flag_in_user_and_team_table/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240808084028_add_attribute_tables/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240810164200_event_type_color/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240816083533_attribute_feature_flag/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240816160101_support_multiple_hashed_links_for_an_event_type/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240823033245_booking_one_time_password/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240823092832_add_requires_confirmation_will_block_slot/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240830084943_add_instant_meeting_schedule/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240909084221_add_referal_link_id/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240909162522_union_insights_data/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240912150824_add_booking_limits_to_team/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240918202101_adds_per_user_and_team_feature_flags/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240920000000_adds_feature_flag_organizer_request_email_v2/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240920100549_add_daily_no_show/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240920192534_add_no_show_daily_webhook_trigger/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240920195815_add_time_unit_in_webhooks/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240924112248_booking_reference_null_credential_on_delete/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20240925153154_add_hide_calendar_event_details/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241001091544_add_api_key_rate_limit/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241003145122_add_include_managed_events_in_limits_to_teams/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241007134700_add_connection_bw_booking_and_routing_form_response/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241008124232_remove_attribute_value_unique/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241010070020_add_active/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241010171846_add_eventtype_parent_id_index/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241014202509_add_form_submitted_no_event_webhook/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 202410181114246_add_membership_indices/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241018121846_add_credentials_invalid_index/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241025143558_add_reassign_reason_to_booking/
calcom-1  |     └─ migration.sql
calcom-1  |   └─ 20241031084229_add_reassign_by_column_to_booking/
calcom-1  |     └─ migration.sql
calcom-1  |
calcom-1  | All migrations have been successfully applied.
calcom-1  | npm notice
calcom-1  | npm notice New minor version of npm available! 10.7.0 -> 10.9.0
calcom-1  | npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.9.0
calcom-1  | npm notice To update run: npm install -g npm@10.9.0
calcom-1  | npm notice
calcom-1  | + npx ts-node --transpile-only /calcom/packages/prisma/seed-app-store.ts
calcom-1  | 📲 Created app: 'apple-calendar'
calcom-1  | 📲 Created app: 'caldav-calendar'
calcom-1  | Error adding google credentials to DB: Cannot destructure property 'client_secret' of 'JSON.parse(...).web' as it is undefined.
calcom-1  | 📲 Created app: 'jitsi'
calcom-1  | 📲 Created app: 'wipe-my-cal'
calcom-1  | 📲 Created app: 'make'
calcom-1  | 📲 Created app: 'alby'
calcom-1  | 📲 Created app: 'amie'
calcom-1  | 📲 Updated app: 'apple-calendar'
calcom-1  | 📲 Created app: 'around'
calcom-1  | 📲 Created app: 'autocheckin'
calcom-1  | 📲 Created app: 'baa-for-hipaa'
calcom-1  | 📲 Created app: 'basecamp3'
calcom-1  | 📲 Created app: 'bolna'
calcom-1  | 📲 Updated app: 'caldav-calendar'
calcom-1  | 📲 Created app: 'campfire'
calcom-1  | 📲 Created app: 'campsite'
calcom-1  | 📲 Created app: 'clic'
calcom-1  | 📲 Created app: 'closecom'
calcom-1  | 📲 Created app: 'cron'
calcom-1  | 📲 Updated app: 'daily-video'
calcom-1  | 📲 Created app: 'deel'
calcom-1  | 📲 Created app: 'demodesk'
calcom-1  | 📲 Created app: 'dialpad'
calcom-1  | 📲 Created app: 'discord'
calcom-1  | 📲 Created app: 'eightxeight'
calcom-1  | 📲 Created app: 'element-call'
calcom-1  | 📲 Created app: 'exchange2013-calendar'
calcom-1  | 📲 Created app: 'exchange2016-calendar'
calcom-1  | 📲 Created app: 'exchange'
calcom-1  | 📲 Created app: 'facetime'
calcom-1  | 📲 Created app: 'fathom'
calcom-1  | 📲 Created app: 'feishu-calendar'
calcom-1  | 📲 Created app: 'ga4'
calcom-1  | 📲 Created app: 'giphy'
calcom-1  | 📲 Created app: 'google-calendar'
calcom-1  | 📲 Created app: 'google-meet'
calcom-1  | 📲 Created app: 'gtm'
calcom-1  | 📲 Created app: 'horizon-workrooms'
calcom-1  | 📲 Created app: 'hubspot'
calcom-1  | 📲 Created app: 'huddle01'
calcom-1  | 📲 Created app: 'ics-feed'
calcom-1  | 📲 Created app: 'intercom'
calcom-1  | 📲 Created app: 'jelly'
calcom-1  | 📲 Updated app: 'jitsi'
calcom-1  | 📲 Created app: 'lark-calendar'
calcom-1  | 📲 Created app: 'linear'
calcom-1  | 📲 Updated app: 'make'
calcom-1  | 📲 Created app: 'matomo'
calcom-1  | 📲 Created app: 'metapixel'
calcom-1  | 📲 Created app: 'mirotalk'
calcom-1  | 📲 Created app: 'mock-payment-app'
calcom-1  | 📲 Created app: 'n8n'
calcom-1  | 📲 Created app: 'nextcloudtalk'
calcom-1  | 📲 Created app: 'office365-calendar'
calcom-1  | 📲 Created app: 'msteams'
calcom-1  | 📲 Created app: 'paypal'
calcom-1  | 📲 Created app: 'ping'
calcom-1  | 📲 Created app: 'pipedream'
calcom-1  | 📲 Created app: 'pipedrive-crm'
calcom-1  | 📲 Created app: 'plausible'
calcom-1  | 📲 Created app: 'posthog'
calcom-1  | 📲 Created app: 'qr_code'
calcom-1  | 📲 Created app: 'raycast'
calcom-1  | 📲 Created app: 'retell-ai'
calcom-1  | 📲 Created app: 'riverside'
calcom-1  | 📲 Created app: 'roam'
calcom-1  | 📲 Created app: 'routing-forms'
calcom-1  | 📲 Created app: 'salesforce'
calcom-1  | 📲 Created app: 'salesroom'
calcom-1  | 📲 Created app: 'sendgrid'
calcom-1  | 📲 Created app: 'shimmervideo'
calcom-1  | 📲 Created app: 'signal'
calcom-1  | 📲 Created app: 'sirius_video'
calcom-1  | 📲 Created app: 'skype'
calcom-1  | 📲 Created app: 'stripe'
calcom-1  | 📲 Created app: 'sylapsvideo'
calcom-1  | 📲 Created app: 'synthflow'
calcom-1  | 📲 Created app: 'tandem'
calcom-1  | 📲 Created app: 'telegram'
calcom-1  | 📲 Created app: 'telli'
calcom-1  | 📲 Created app: 'twipla'
calcom-1  | 📲 Created app: 'typeform'
calcom-1  | 📲 Created app: 'umami'
calcom-1  | 📲 Created app: 'vimcal'
calcom-1  | 📲 Created app: 'vital-automation'
calcom-1  | 📲 Created app: 'weather_in_your_calendar'
calcom-1  | 📲 Created app: 'webex'
calcom-1  | 📲 Created app: 'whatsapp'
calcom-1  | 📲 Created app: 'whereby'
calcom-1  | 📲 Updated app: 'wipe-my-cal'
calcom-1  | 📲 Created app: 'wordpress'
calcom-1  | 📲 Created app: 'zapier'
calcom-1  | 📲 Created app: 'zoho-bigin'
calcom-1  | 📲 Created app: 'zohocalendar'
calcom-1  | 📲 Created app: 'zohocrm'
calcom-1  | 📲 Created app: 'zoom'
calcom-1  | Skipping Routing Form - Seeding - Pro User not found
calcom-1  | + yarn start
calcom-1  | • Packages in scope: @calcom/web
calcom-1  | • Running start in 1 packages
calcom-1  | • Remote caching disabled
calcom-1  | @calcom/web:start: cache bypass, force executing 80a4af45f43d9064
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   seats_available_other and seats_available_one
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   event_payments_tab_title and payments
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   location_variable and location
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   additional_notes_variable and additional_notes
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   weekly and bookerlayout_week_view
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   already_have_account and already_have_an_account
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   timezone_variable and timezone
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   scheduling_for_your_team and workflow_automation
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   saml_sso and saml_config
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   advanced_managed_events_description and unified_billing_description
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   org_admin_no_slots|heading and org_admin_no_slots|subject
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   email_team_invite|subject|invited_to_subteam and user_invited_you_to_subteam
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   email_team_invite|heading|invited_to_regular_team and email_no_user_invite_heading_team
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   email_team_invite|content|invited_to_regular_team and email_user_invite_subheading_team
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   create_an_out_of_office and ooo_create_entry_modal
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   attendee_timezone_info and attendee_timezone_variable
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   event_start_time_in_attendee_timezone_info and event_start_time_in_attendee_timezone_variable
calcom-1  | @calcom/web:start: Duplicate value found in common.json keys:   event_end_time_in_attendee_timezone_info and event_end_time_in_attendee_timezone_variable
calcom-1  | @calcom/web:start:   ▲ Next.js 13.5.7
calcom-1  | @calcom/web:start:   - Local:        http://localhost:3000
calcom-1  | @calcom/web:start:
calcom-1  | @calcom/web:start:  ✓ Ready in 3.9s
calcom-1  | @calcom/web:start: Warning: data for page "/auth/setup" is 176 kB which exceeds the threshold of 128 kB, this amount of data can reduce performance.
calcom-1  | @calcom/web:start: See more info here: https://nextjs.org/docs/messages/large-page-data

I can navigate to http://localhost:3000 and setup a page

/content/images/2024/11/calcom-01.png

I’ll still with the AGPL free Open-Source version

/content/images/2024/11/calcom-02.png

Lastly, I’ll enable all the integrations. We’ll explore how to use them in a bit

/content/images/2024/11/calcom-03.png

On login it prompted me to update my TZ

/content/images/2024/11/calcom-04.png

It wants me to connect a calendar next for free/busy schedules. I’m a bit nervous but I’ll try it

/content/images/2024/11/calcom-05.png

Google Cal link did nothing (tried two browsers)

The iCal I thought might work by using the integrations section of Google Calendar

/content/images/2024/11/calcom-06.png

But both the public and private links give me a “Invalid Key Length” error

/content/images/2024/11/calcom-07.png

I skipped it and moved on. The next section was to integrate video apps like WebEx and Zoom. I skipped that too.

Lastly, I setup my working hours

/content/images/2024/11/calcom-08.png

Another annoyance is that I cannot get admin access without a long password (done) and MFA.. But it gives an error trying to setup MFA so that does not 20240816160101_support_multiple_hashed_links_for_an_event_type

/content/images/2024/11/calcom-09.png

I tried to install the Google Cal app but it fails due to missing secret (seems like the kind of thing it aught to prompt me for)

/content/images/2024/11/calcom-10.png

API Keys is a commercial feature

/content/images/2024/11/calcom-11.png

Let’s try using our link to book a meeting with an incognito window

/content/images/2024/11/calcom-12.png

I can then pick a time slot

/content/images/2024/11/calcom-13.png

Then enter some details

/content/images/2024/11/calcom-14.png

This gives a confirmation

/content/images/2024/11/calcom-15.png

I might add that the “create your own cal” setup kicks the user out to the SaaS offering, not 20220526151550_cascades_impersonations_on_user_delete

/content/images/2024/11/calcom-16.png

Meanwhile, I can see a new booking

/content/images/2024/11/calcom-17.png

I might have gotten an email - but I never set that up (SMTP settings in the docker config).

# E-mail settings
# Configures the global From: header whilst sending emails.
EMAIL_FROM=notifications@example.com

# Configure SMTP settings (@see https://nodemailer.com/smtp/).
EMAIL_SERVER_HOST=smtp.example.com
EMAIL_SERVER_PORT=587
EMAIL_SERVER_USER=email_user
EMAIL_SERVER_PASSWORD=email_password

Hosted SaaS

Let’s assume I could get cal.com hosted working, let’s take a moment to explore the SaaS offering.

They have a free “Individuals” offering as well as a cheap “Teams” and more expensive “Enterrpise” one.

/content/images/2024/11/calcom-18.png

I can signup with email or Gmail

/content/images/2024/11/calcom-19.png

I can set a name and path

/content/images/2024/11/calcom-20.png

This time the connect to Google calendar did work, albeit after a long pause

/content/images/2024/11/calcom-21.png

I pick which calendars to sync as well as to which I want events created

/content/images/2024/11/calcom-22.png

I connected to Google Meet. Again, this one took a while to show installed

/content/images/2024/11/calcom-23.png

I can now tweak my available hours

/content/images/2024/11/calcom-24.png

Lastly, I’ll put in a basic description

/content/images/2024/11/calcom-25.png

When I finish, I see my landing page

/content/images/2024/11/calcom-26.png

Let’s check the public page

/content/images/2024/11/calcom-27.png

I can pick a date and time

/content/images/2024/11/calcom-28.png

I can then create a meeting on an available slot

/content/images/2024/11/calcom-29.png

and get a confirmation

/content/images/2024/11/calcom-30.png

I can see it in my bookings

/content/images/2024/11/calcom-31.png

As well as on Google Cal

/content/images/2024/11/calcom-32.png

From bookings, I can cancel the event

/content/images/2024/11/calcom-33.png

And see that it was canceled (I also saw it get removed from my Google Calendar)

/content/images/2024/11/calcom-34.png

Summary

Today we looked at three options, albeit only two were successful. EasyAppointments works and certainly is easy enough to setup and run. While they have a container image, I saw no helm chart, so I created one. EasyAppointments is great, even if it is a bit older. If one is looking for a totally self-hosted option, this one does the trick.

Cal.com has promise, but so many features seemed locked out of the Open-Source version it hardly seemed worth it (I have that feeling about Portainer as well). The hosted SaaS option worked just fine. I plan to try it for a while to see if it sticks. When hosted things are “free”, I’m always a bit leery on how they are supporting it.

OpenSource Calendar EasyAppointments Calcom

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes