CliqMind has a rich history. At InKnowTex, we consistently aimed to optimise our enterprise software, RaaiVan, to be suitable for teams and small businesses.
In 2019, I realised that instead of just wanting to make this change, we should take action. I reached out to my business partner with the idea: we've been considering an agile RaaiVan, so why not make it happen? My partner agreed, and we decided to go for it.
With a talented team already in place, we gathered everyone and announced our new project, CliqMind. The whole team was on board!
We initiated three simultaneous activities:
In this article, I will discuss the technical aspects of our journey.
CliqMind is essentially a streamlined version of RaaiVan designed for small teams and enterprises. It's a team productivity tool that allows teams to reuse existing templates for Forms
and Workflows
, or create their own customised versions using CliqMind's intuitive and user-friendly tools. Additionally, it features a social space
and a wiki
with a block editor, enabling teams to collaborate and share information effectively.
From the website:
Teams deal with different types of information about different things every day. CliqMind boosts team productivity by collecting and connecting team information in a Digital Team Brain. Create a timeless and shared understanding within your team by CliqMind.
I served as the Technical Lead
at CliqMind, the same role I held at InKnowTex. Our team included:
With a small technical team, I was responsible not only for leading but also for all non-front-end technical aspects.
As mentioned, CliqMind is a revolutionary version of RaaiVan tailored for teams and small businesses. Unlike RaaiVan, which is a monolithic
application, CliqMind features a cloud-friendly architecture with multiple microservices
.
The microservices and their tech stacks are as follows:
The authentication server is written in Java Spring Boot
and uses PostgreSQL
as its database. It handles authentication and authorisation, with authentication based on JWT
tokens.
This microservice manages subscriptions and service usage. It is also written in Java Spring Boot
and uses MongoDB
as its database.
The search engine is a cluster of Solr
nodes synchronised by Zookeeper
.
CliqMind includes several modules such as Core
, Forms
, Workflow Engine
, Wiki
, and Social
, each with its own API server.
These API servers originated from RaaiVan’s large API server, which was written in C# .NET Framework
. We split them into microservices, implementing some with C# .NET 6
and others with Java Spring Boot
. All APIs are fully annotated with OpenAPI
and accessible via Swagger UI
.
The databases used are a combination of MS SQL Server
and PostgreSQL
.
We developed the front-end with React
and TypeScript
, later transitioning to Next.js
. This was particularly challenging because the original front-end was written in plain JavaScript
, and converting everything to React
would have taken a long time. Therefore, we used both side by side, gradually migrating the legacy code to modern code.
We also developed a component library using React
and TypeScript
, which we auto-published as an npm package using GitHub Actions
. We implemented the design system and numerous reusable components in the library. The components were available on Storybook
and published on Chromatic
for design review and visual regression testing (VRT)
.
We utilised RabbitMQ
for messaging, primarily for:
Solr
, our search engine. When a user updates any part of a page, it emits a notification to re-index the page. Due to frequent triggers for a single page, throttling was necessary.
This microservice, implemented with Java Spring Boot
, has a single API endpoint for converting HTML content to PDF. It includes features to add headers, footers, page numbers, and passwords to the generated PDF documents.
In addition to the microservices mentioned, we also used the following technologies:
S3
for file storage
Jenkins
along with GitHub Actions
and GitHub Webhooks
to automate the CI/CD
process
Docker
and Kubernetes
for deploying the product to different environments
Redis
for caching
I highly recommend Ramin as a full stack developer and colleague. I have had the privilege of working alongside him for many years, and he has consistently proven to be an exceptional talent in the field. Ramin's passion for tackling challenges and making a meaningful impact is truly inspiring.
His expertise in programming, software & database design, and software development is outstanding. Ramin's ability to approach complex problems with logical and structured solutions sets him apart. He is not only a smart and capable developer but also a dedicated and honest team member.
Ramin is undoubtedly an asset to any team, and I have no doubt that he will continue to excel in his career and contribute significantly to any organization he joins. It's been a pleasure working alongside him, and I wholeheartedly endorse him for any professional endeavor.