Calendis, appointments made in Perl

Home/Perl, Perl Case Studies, Written by our colleagues/Calendis, appointments made in Perl
  • calendis banner article blog appointments made in perl

I have been a Perl developer for most of my professional career,  since I first started to write code for a living, about 6 years ago. I mostly did back-end for web applications, but I also remember a Voice over IP app and some DevOps scripts I wrote. I am still a Perl developer after all these years because of the friendly – local and international – community and the open-source characteristic of the language, which offers a lot of flexibility and some robust frameworks at the same time. Currently, I am the Scrum Master & Team Lead at Calendis, which is, in brief, an online booking solution with 3 web platforms and a mobile one.

Calendis was born 3 years ago on the idea that plane tickets and accommodation were not the only things that can be booked online, that everyday services everyone uses, like dentists, gyms, mechanics, hair salons can also be booked in the same manner. This way the classic appointment book of most businesses can be replaced with an online tool and users can more easily book appointments.

Functionality

At present, Calendis offers solutions for two types of users:

  • end users, that can make appointments for various services
  • businesses, that can manage their appointments and clients (the end users)

For businesses, it is also a tool for managing employees, services, customers, track history of appointments, follow sales reports, send email and SMS reminders to their customers as well as sending them newsletter campaigns.

Business managers can also set a public profile with a public calendar and a public identity of all their data, which is shown to the end users, so they can make their own appointments. This way Calendis becomes an online market where offer meets demand, a lot faster, anywhere, anytime.

However, the main feature of Calendis is the interactive calendar. It’s an easy way to keep track of a schedule that belongs to the business user or end user or both. For instance, a user can be a hairstylist managing end user appointments and can also use the same account to make appointments to the dentist or any other service.

From a technical point of view, most of the time we have challenges on the front-end and related to user experience, but we also need a strong back-end to save data and keep the consistency of the schedules in real time.

 

Perl in Calendis

Perl, as an open-source language, has one of the strongest module repositories, where developers and testers from all over the world have contributed to solid frameworks for web and diverse small modules. Using the Comprehensive Perl Archive Network (CPAN) anyone can find a solution – or more – to almost everything.

This is why we use Perl at Calendis, this is why we built our 3 back-end platforms using the Catalyst web-framework.

For the Admin platform there is a simple web app with the basic HTML, CSS and JavaScript on the front-end, but for the Business and Client platforms there is a REST API for scheduling, management and so on, among basic HTTP end-points content built with Mason, which is served for the not so dynamic pages, such as “Terms and conditions” or “Contact”. The APIs allow us to interact with different interfaces on web and mobile.

For businesses, there is a web interface built with Backbone.js, a JavaScript framework that deals with Collections and Models and embraces Handlebars.js, a HTML&CSS templating system, which allows to build components with the same structure and style that can be easily rendered and multiplied at need. This improves the user interface and the user experience overall. There is also a Mobile App, interacting with the same back-end API, which uses React Native, a framework that lets us build front-end screens simultaneously for Android and iOS devices.

For clients, there is a web interface built in React for a nice UX of the 2 main functionalities: search and making appointments. Everything on the client-side is responsive and most of our end users access Calendis on their mobile devices, but we also have a work-in-progress Client Mobile App, which will be available soon.

There are also other back-end side jobs. We send email reminders in-house, but we integrate with a third-party API of a mobile provider for the SMS reminders. We also have transactional emails using our own mail server, however newsletter campaigns are sent using Amazon Web Services (AWS). As you can imagine, configurations are always something to pay attention to, whenever something changes, and as we grow, we test more before we release.

This is why we use Docker for deployment, so we have little to change in configurations between servers, most of them being done at the docker image level. We have a Perl 5.20 image with 3 instances of it, but we also have images for a DBMS, session storage and a proxy server –  we use MySQL, Redis and NGINX, respectively. However, these images are not used on all our environments.  For example, in development, some developers prefer to use their own servers, so Docker is really helpful on this part.

To sum up, we faced some challenges in building this startup and we still go through new challenges every day. We focus on the scalability of this great tool, which was at first a replacement for the old-school appointment book and is now closer to an online market.

Calendis now has now over 15000 users on the client platform (www.calendis.ro), where anyone can make appointments and service providers can publish their services,. We also have almost 100 businesses from Cluj-Napoca and Bucharest on the business platform (business.calendis.ro), from different fields: Sports, Beauty, Medicine, Dental, Psychology and Human Resources.

From a start-up point of view, after 3 years of studying and adapting to the market, I would say it is only the beginning of Calendis.

 

            Mihai Pop   

2017-07-13T13:19:29+00:00 June 21st, 2017|Categories: Perl, Perl Case Studies, Written by our colleagues|Tags: , , , |

Leave A Comment