The proposed project is a comprehensive office attendance management system, designed to streamline the process of logging and tracking office days for all team members. Divided into two main backend services and two frontend applications, the system ensures a microservices-based architecture that enhances maintainability and scalability. The backend services are built using Nest.js, with one service handling authentication and settings, and the other managing timing table data, all backed by a Postgresql database and Prisma as the ORM. On the frontend, we have two separate Next.js applications, the first frontend app is focused on authentication, while the second handles user settings and office day entries. The entire project is structured as a monorepo using Turborepo, ensuring streamlined workflow and code sharing, with GitHub Actions and Vercel handling the CI/CD pipeline, and an OpenAPI specification in place to auto-generate the data layer for the frontend, ensuring consistency and speeding up the development process. This setup not only facilitates a clear separation of concerns but also provides a robust, scalable, and user-friendly solution to office attendance management.
This Turborepo includes the following packages/apps:
ui
: a stub React component library shared by both web
and docs
applicationsconfig
: eslint
and tsconfig
and tailwind
configurationsEach package/app is 100% TypeScript.
This Turborepo has some additional tools already setup for you:
To build all apps and packages, run the following command:
yarn build
To develop all apps and packages, run the following command:
yarn dev
Turborepo can use a technique known as Remote Caching to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can create one, then enter the following commands:
npx turbo login
This will authenticate the Turborepo CLI with your Vercel account.
Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo:
npx turbo link
Learn more about the power of Turborepo: