How to get Free Calendly-like Scheduling

Mario Speck
4 min readApr 21, 2021

Start your own cloud-free scheduling service in 10 minutes

Scheduling meetings and events can be a time-consuming task. Scheduling services are awesome tools and very helpful in day-to-day business. Services like calendly or acuity make scheduling easy, but require you to connect your calendar to these services and pay a monthly fee.

Did you ever want to have a calendar scheduling service on your own server? Here is how:

Photo by Adam Kring on Unsplash

With the Open Source software calendso (MIT License), docker and a few lines of code, you can set up your own scheduling service for you and your company in just a few minutes. Everything needed is included in the github repository listed below.

With this solution, you can send anyone a link that they can use to schedule any event with you, restricted by your free time slots. All events will be fully integrated in your google calendar. You can access a demo of calendso here.

Requirements

To get this up and running, you need:

  • a server with an https domain
    (subdomain like: https://meetme.<yourdomain.com> recommended)
  • ability to run docker containers on the server
  • docker-compose installed on the server
  • a Google account

Go to your server console and clone my Github repository with all the necessary information.

git clone https://github.com/speckm/calendso-docker.git

You need to configure emails and passwords for your user(s). To do this, copy the .env.example file in the main directory to .env and edit the file as required.

USER1=’sam.spade@<yourdomain.com>’
PASSWORD1=’somesecretstuff'
USER2=
PASSWORD2=
USER3=
PASSWORD3=
GOOGLE_API_CREDENTIALS=’’
NEXTAUTH_URL=’https://meetme.<yourdomain.com>’'
DATABASE_URL=’postgresql://postgres:postgres@db:5432'

First update USER1 and PASSWORD1 to the desired values. This will be the credentials for later logging into your account on your own server. Adapt NEXTAUTH_URL to your domain and leave the DATABASE_URL unchanged.

In order to be able to integrate calendso into your google calendar you need google credentials for this app so that your server can access the google calendar of the users. You can get the credentials with the following steps:

Open Google API Console. If you don’t have a project in your Google Cloud subscription, you’ll need to create one before proceeding further. Under Dashboard pane, select Enable APIS and Services.

  1. In the search box, type calendar and select the Google Calendar API search result.
  2. Enable the selected API.
  3. Next, select OAuth consent screen from the side pane. Select the app type (Internal or External) and enter the basic app details on the first page.
  4. In the second page on Scopes, select Add or Remove Scopes. Search for Calendar.event and select the scope with scope value …/auth/calendar.events and select Update.
  5. Next, under Test Users, add the Google account(s) you’ll using. Make sure the details are correct on the last page of the wizard and your consent screen will be configured.
  6. Now select Credentials from the side pane and then select Create Credentials. Select the OAuth Client ID option.
  7. Select Web Application as the Application Type.
  8. Under Authorized redirect URI’s, select Add URI and then add the URI https://<yourdomain.com>/api/integrations/googlecalendar/callback.
  9. The key will be created and you will be redirected back to the Credentials page. Select the newly generated client ID under OAuth 2.0 Client IDs.
  10. Select Download JSON. Copy the contents of this file and paste the entire JSON string in the .env file as the value for GOOGLE_API_CREDENTIALS key.

The Google instructions above are copied from the calendso git repository. So please check there for updates if something does not work as expected.

Photo by Micah Williams on Unsplash

After you entered the google credentials into the .env file you can start up your own scheduling service by running start.sh script. This will download the needed postgres image, build a calendso container, create your user(s) and start the service. After the service started you can log in to your new scheduling service at https://meetme.<yourdomain.com>

To start scheduling, you need to configure a few more things:

  1. Go to dashboard and set up the integration with google calendar. Please remind, that this won’t work until you set up the GOOGLE_API_CREDENTIALS key in the .env file. If you update the credentials later don’t forget to shutdown and restart your containers.
  2. Go to availability and add one or more new event types.
  3. Go to settings, enter a URL-Shortcut (e.g. samspade), your name and don’t forget to set your timezone!

Congratulation! You just created a calendar scheduling service. A public link like “https://meetme.<yourdomain.com>/samspade” is now available, so that everyone can schedule meetings that are integrated into your google calendar.

Please be aware that calendso supports more than 3 users but my github scripts do not. After the initial installation, you may shutdown the docker containers, change USER1 to USER3 credentials and restart the container to add more users later. You should note as well, that the configuration you just created is not optimized for production.

Conclusion

In this article, you have learned how to set up your own calendly-like scheduling service using the open-source calendso (2700+ stars) solution. You’ll find more details in the github repo or at the calendso website.

References:

[1] Calendso github repository (Apr. 20, 2021) https://github.com/calendso/calendso

[2] Calendso-docker github repository (Apr. 20, 2021)
https://github.com/speckm/calendso-docker

--

--

Mario Speck

Entrepreneur, impact investor & father. Into startups, programming, electronics, energy systems & beach volleyball. Happy to share my 2 cents.