Setting up a new project is time-consuming. The purpose of this project is to make it effortless with state-of-the-art technology and tooling.
In short - it's a monorepo with Node.js backend, GraphQL API, and React frontend. The whole stack is with TypeScript.
- Node.js with TypeScript
- GraphQL Yoga Server API
- Prisma ORM with PostgreSQL database
- Winston/Grafana Loki logging
- ESBuild bundling
- React with TypeScript
- Apollo Client with cache
- Tailwind CSS
- Vite building
- GitHub Actions CI/CD
- Prometheus metrics
- Grafana monitoring
- Sentry error monitoring
- Railway hosting
- PNPM package manager
- Jest testing
- ESLint linting
- Turborepo caching
- Install Docker Compose
- Install dependencies in all projects:
pnpm install --recursive
- Build types from GraphQL schema:
pnpm run graphql-codegen
- Create the file
server/.env.development
and add the fields fromserver/.env.example
- Run DB:
docker-compose up db
- Migrate DB schema:
npx prisma migrate dev
inserver
- Generate types:
npx prisma generate
inserver
- Run server:
pnpm run dev --prefix server
- Create the file
app/.env.development
and add the fields fromapp/.env.example
: - Run app:
pnpm run dev --prefix app
- Edit DB schema in
server/prisma/schema.prisma
- Migrate DB schema by running
npx prisma migrate dev
inserver
- Generate types by running
npx prisma generate
inserver
- Open DB admin panel by running
npx prisma studio
inserver
- Generate types by running
pnpm run graphql-codegen
- Edit GraphQL Schema in
server/src/schema.graphql
- Open GraphiQL in
localhost:4000
while running server
- Run
pnpm run extract-translations
inapp
- Edit json files in
app/src/assets/translations
- Run tests with
pnpm run test --recursive
- Configure deploys in
server/railway.toml
andapp/railway.toml
- Setup environment variables based on
.env.example
in each folder - Add
RAILWAY_TOKEN
to GitHub actions secret
- Setup Turborepo docker image
- Add
TURBO_TOKEN
to GitHub actions secret - Edit
.turbo/config.json