A typical COMET DXP Application has an API, an Admin, and optionally multiple sites.
Built with Typescript based on NestJS. NestJS is an aggregator for a lot of well-known libraries. NestJS applications are structured in modules and rely heavily on Dependency Injection (DI).
Interaction with the API is possible using GraphQL except for uploading files where REST is used. We use ApolloServer for creating our GraphQL API. The GraphQL schema is generated using a code-first approach, where the schema is defined programmatically.
We persist our data in PostgreSQL database. As a connector from our API to the database, we use MikroORM.
The admin provides interfaces for managing data. It is built using React with Typescript. We create our admin applications using MUI design library. For interaction with the API we rely on ApolloClient, the counterpart to ApolloServer.
Other core libraries in use:
- FinalForm for creating Forms
- ReactRouter for navigation
Consumer for the data. This part is optional because we are headless. Also, multiple sites for different clients (e.g., website and mobile app) can coexist.
While any technology can be used, we focus on NextJS. With NextJS we can use Typescript and React for building our sites. NextJS provides Server Side Rendering (SSR), Client Side Rendering (CSR), and Static Generation (SG). We focus on SG to optimize for speed while avoiding maintaining a cache.