Home - fincity-india/nocode-saas GitHub Wiki

Introduction

O is a no-code/low-code platform for creating SaaS applications using various resources from the marketplace. These resources from the marketplace help in creating a SaaS application without writing a single line of code. The resources are created by the community from with in our organization.

[!IMPORTANT] The nocode-ui repository is a part of the platform and contains the code for the UI application. It is a React application used to create the UI for SaaS applications built on this platform.

The platform - Backend

  • Security: Security is a crucial component of this platform, providing secure data isolation for different tenants and safeguarding the application from potential attacks.
  • CORE: Core is the heart of the platform, provides various features like functions, storage, triggers, event actions, and many more.
  • UI Backend: UI backend provides the every changing definitions of the applications and the resources used in the application. It serves the UI application which is part of the nocode-ui repository.
  • Files: Files is a storage service that provides the ability to store and retrieve files from the platform. It has the capability to store static files used in the UI or secured files used for business. Both stored in the same place, but the authorization determines the read or write access to a file.
  • Scheduler: Scheduler is a service that provides the ability to schedule a function or event action to run at a specific time or at regular intervals. :bangbang: In future we use this scheduler to schedule events in the BPM engine to run an action or a step at a specific time or at regular intervals.

The platform - UI

  • UI Engine: The UI is a React application that is used to render the definitions served by the UI backend.
  • UI Components: The UI components are the building blocks of the UI application. These components are used to create the pages.
  • KIRun: KIRun is an interpreter written in both Java and JavaScript to interpret the drag and drop logic created in the UI. It is easy to visualize the logic for the user and easy to interpret. The logic is curated based on the drag and drop of functions and the relations among the functions is auto determined.

Other Aspects

  • Caching: Caching is a crucial part of the platform, it provides the ability to cache the data and the resources used in the application. It helps in reducing the load on the server and provides a faster response to the user. We are relying on multi layer caching, the first layer is the in-memory cache called Caffeine and the second layer is the Redis cache.

  • DevOps: DevOps is a crucial part of the platform. Currently, we use github :octocat: Actions for our pipelines. Use AWS EC2 instances to host our services. We also use multiple managed services from AWS like RDS, ElastiCache, S3, CloudFront, and many more. We use Mongo Cloud offering with AWS for Mongo DB. Furthermore, we are planning to move to Kubernetes to provide a better way to manage the services and the resources used in the application.

Future

  • BPM Engine: BPM Engine is a service that provides the ability to create and manage business processes. It provides the ability to create a process, add steps, and define the actions for each step. It also provides the ability to run the process and monitor the progress of the process.

  • Analytics Engine: Analytics Engine is a service that provides the ability to analyze the data and the resources used in the application. It helps in understanding the user behavior and the performance of the application. It provides the ability to create custom reports and dashboards to monitor the application.

  • CDN Server: Current CDN options available in AWS and Akamai is not fitting our need as we need to do multiple things like serve dynamic content from the UI server based on the authorization, client and availability of the resources. Eviction policy for each provider is different. Embedding the logic into the guts of the application make us infrastructure dependent. We will not be able to move out of AWS or Akamai. We are planning to build our own CDN server to serve the UI and the resources used in the application, with proper eviction policies and the ability to serve the content from the nearest location to the user.

  • ChatGPT: Integrating Chat GPT into the platform to provide various abilities like chatbot, summarization, explanation or create images from prompts. This will help in providing a better user experience in creating Web pages and its content. With ChatGPT integration we can provide the ability to the users to write better BPM processes and Logic on server or UI side.

  • KIRun Version 2: KIRun is an interpreter written in both Java and JavaScript to interpret the drag and drop logic created in the UI. This is little slow compared to the native code written in either Java or JavaScript. We are planning to rewrite the KIRun in Rust to provide a faster and more secure interpreter. The way the logic currently curated based on the drag and drop of functions and the relations among the functions is auto determined. The way we are doing it is not the best way to do it. We are planning to rewrite the KIRun to provide a better way to curate the logic and the relations among the functions.

  • DevOps: We are planning to move to AWS EKS and add autoscaling to the platform in near future.

  • Screenshot Service: A service that will generate a screenshot for the URLs. This will help in providing a better user experience in creating Web pages and its content. Also, we need to develop a framework to support external services like this easily integrated into the platform.

Applications

We have written a few base applications to start with and create more applications using these. These base applications are also built and working using the no-code strategy.

  • Apps / App Builder: App Builder is a base application that provides the ability to create and manage applications. It provides the ability to create an application, add resources, and define the UI for the application. This application has the ability to manage security as well.

  • Pages / Page Builder: Page Builder is a base application that provides the ability to create and manage websites/landing pages. These sites/applications will not have much of server side logic, except for occasional storage of a contact form or integrating an API or adding analytics like Google Analytics or Facebook Pixel. Soon we will integrate the ability to manage the

  • Market Place: Market Place is a base application that provides the ability to manage the resources used in the applications or websites or landing pages.

Information for :computer:

Common Libraries

The entire platform relies on several common libraries that are used across the services. These libraries are used to provide the common functionality across the services. These libraries are written by us. Please go through the following links to understand the libraries we used.

  • Cache Layer - Cache Layer is the base library used by other services in the platform to retreive the data from the cache. It is used in multiple services.
  • Commons - Base library for the platform as these will be used in multiple services.
  • Commons-jooq - Base library for those services which use Mysql as backend and JOOQ as the DSL tool in Spring to query data from the database.
  • Commons-mongo - Base library for those services which use Mongo as backend and Spring Data Mongo to query data from the database.
  • Commons-mq - Base library for those services which use RabbitMQ as the message broker.
  • Commons-security - Base library for those services which use Spring Security for security.

Helper services

There are other services in the platform which are used to manage the main services.

  • Admin - Admin service is used to manage the other services and see the health of the service and to query logs, but this will soon be retired.

  • Config - Config service is Spring Cloud Config application which will serve the configuration in various environments for all the services in the platform. For the services running locally we have put the configuration in the configfiles folder. But for the services running in the cloud we are using a repository in a private git server.

  • Eureka - Eureka service is a service registry for the platform. It provides the ability to register and discover the services in the platform. It is Spring Eureka application.

  • Gateway - Gateway service is a gateway for the platform. It provides the ability to route the requests to the services in the platform. It is Spring Gateway application.