Skip to content

Example monorepo setup using turborepo with NestJS, Remix and shared libraries.

Notifications You must be signed in to change notification settings

sitek94/pnpm-monorepo

Repository files navigation

Pnpm + Turbo Monorepo

Warning

Production deployments for Remix and NestJS are disabled since I'm not currently working on this and I don't want to waste Fly.io resources for unused projects.

TODO

  • move linters and shared packages to root
  • extend tsconfig.json from root based on app
  • create simple Dockerfile for NestJS
  • create simple Dockerfile for Remix
  • update docker compose
  • create CI workflow (lint + build only)
  • add simple tests to CI workflow
  • manually deploy to fly.io
  • create CI deployment workflow to fly.io
  • improve CI deployment workflow to trigger only for changed apps
  • run typecheck, lint, test and build in parallel
  • setup tailwindcss in remix
  • create shared ui lib
  • setup Storybook in shared ui lib
  • build and deploy Storybook
  • set unified path aliases for all apps and shared libs (done for apps/, because libs/ probably don't need them anyway)
  • add unused imports plugin to eslint
  • research if it's worth using turbo - probably yes, to make it easier to run tasks that depend on each other
  • use turbo repo and ensure the following works: lint, test, build, develop, gh actions
  • use turbo prune options to build docker images
  • add some examples for ui lib (use tailwindcss + shadcn/ui)
  • create diagram
  • setup renovate

Links

App URL
NestJS https://pnpm-monorepo-nestjs.fly.dev/
Remix https://pnpm-monorepo-remix.fly.dev/
Docs (Storybook) https://6562c63f0bbf6184dd3b3f1e-aulbjawzef.chromatic.com
MongoDB Project https://cloud.mongodb.com/v2/65616305afb5120f9b3a3536#/overview
Fly.io Dashboard https://fly.io/apps/

Getting started

Pre-requisites

Install dependencies

pnpm install

Database

If you want to use NestJS app, run MongoDB first.

docker compose up mongo

Run NestJS app

pnpm develop:nestjs

Run Remix app

Runs Remix app and all its build dependencies, e.g. ui lib. Whenever you make changes to ui lib, it will be automatically rebuilt and Remix app will be reloaded.

pnpm develop:remix

Run Docs (Storybook)

pnpm develop:docs

References