The first quarter of 2021 is over, so I figured it was a great time to review what I’ve been working on and how things have gone. I feel really lucky to be able to work from home, with some flexibility of hours, and my work not really being affected by the ongoing pandemic. I’ve continued to have a handful of monthly clients, as well as other sporadic projects, that fill my time. I’m going to dive into a few of the more interesting projects I’ve been working on.
HubSpot and JazzHR synchronization
Because of my previous work with JazzHR, I had a new organization contact me about creating an elaborate integration between their HubSpot CRM and JazzHR recruitment tool. They wanted to be able to have applicants, who fill in a form at HubSpot, added automatically to JazzHR and associated with a specific job. They also wanted the workflow stage from JazzHR to be synced back to the appropriate contact at HubSpot. Instead of creating a scheduled syncing process where our script contacts the API and asks for information that may have changed since the last sync, we were able to utilize webhooks with both sites. I like to think of webhooks as a passive API interaction because our webhook url sits waiting until it receives an update. This provides a reliable way of dealing with updates because anytime something changes at HubSpot or JazzHR they let us know what changed and we then take action.
In this case, HubSpot sends us details about an application form submission and we store a bit of data in our database, then use the JazzHR REST API to let them know the contact details. If the user has previously applied for a job, we can just connect their existing JazzHR contact to the new job, otherwise we create the new contact. Later on in the process, the HR admins may change the user’s status in JazzHR, and when that happens the webhook notification from JazzHR visits our url with details about which HubSpot user needs to be updated and we use the REST API to make the appropriate change. Each API had its own authentication style, webhook hash protection scheme, and limitations to work through, but I was able to overcome these challenges and they are both excellent APIs to work with. For this project, I got to use Laravel Lumen for the first time. Lumen is a slimmed down version with reduced functionality that fits great into simpler PHP projects like being the intermediary between two APIs.
The even bigger project
One of my retainer clients has asked me to create a new web application for them to replace an online tool that their sales team uses on a daily basis. This project will inevitably turn out to be a timesaver for them as we create an online tool that is customized to their specific needs and work with a few other services they want integrated. I started work on this late last year and this was my first new Laravel project in a while. It’s nice to get to work with a fresh version of Laravel compared to some of the older projects I maintain. I decided to use Laravel Jetstream as the starting point because it offers great authentication and structure for a web application right out of the box. As part of the development stack for this project, I also am working with Tailwind and Inertia.js for the first time. Tailwind is a CSS framework that tackles web styling from a different approach than most, opting for classes based on the utility they offer (margin, padding, flex, align, etc) instead of describing the object being styled (modal, column, call-out, menu, etc). It takes a bit to get used to, but really makes StyleSheet upkeep simple, and I’ve barely touched the surface with what it can do. Inertia.js came integrated into Laravel Jetstream and simplifies the process of connecting the Laravel backend to my Vue.js interface. It assists with the routing and communications between the two, and I would definitely like to use it again, although I probably don’t understand how it works as deeply as I should.
A few other things
This year there have been a couple other projects I’ve been able to work on, including creating email newsletter content using Higher Logics Real Magnet API from content on a WordPress site and attempting an integration between a Twilio phone service and SimplyBookMe’s API for booking appointments. If there’s one thing I know, it’s that I could probably spend my life learning new API’s and never run out of them.