Monorepo organized with Turborepo + pnpm, containing three applications: NestJS backend, Next.js web, and Expo mobile
nextjs-nestjs-expo-template — Next.js Starter Template
By barisgit
A Turborepo-based full-stack TypeScript monorepo template integrating a NestJS backend, Next.js web app, and Expo mobile app, with end-to-end type safety via tRPC and typed WebSockets.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
End-to-end type safety between frontend and backend via tRPC and typed Socket.IO wrappers
Reusable shared packages under packages/: db, services, trpc, ui, websockets, analytics, etc.
Data layer uses TypeORM with PostgreSQL, authentication integrates Clerk, analytics integrates PostHog
Web uses TailwindCSS and ShadCN UI; mobile uses Tamagui
Provides a pnpm dev:setup one-command initialization script handling environment variables, database, Redis, migrations, and seed data
Template Details
This is a monorepo starter template for full-stack TypeScript projects, using Turborepo and pnpm to organize the workspace. The repository splits the backend, web, and mobile into three applications: apps/backend (NestJS), apps/web (Next.js), and apps/mobile (Expo React Native). Under packages/, it provides shared packages such as analytics, db, services, trpc, ui, and websockets for reusing database models, authentication and Redis services, tRPC routes, UI components, and typed WebSocket implementations.
The template emphasizes end-to-end type safety: types are passed between backend and frontend via tRPC, and real-time communication is based on Socket.IO wrapped as typed clients and events. The data layer uses TypeORM to connect to PostgreSQL, authentication integrates Clerk, and product analytics integrates PostHog. The web app uses TailwindCSS and ShadCN UI, while the mobile app uses Tamagui.
Before use, you need Node.js (v18+), PostgreSQL, and pnpm. The repository provides a pnpm dev:setup script to copy .env files, configure the database and Redis via Docker or manually, run migrations, and seed data. Then you can use pnpm dev to start all three development services simultaneously, or run dev:backend, dev:web, and dev:mobile separately. The repository also includes environment variable check scripts under scripts/ and README documentation for each app and package.
Is it right for your project?
Use Cases
- Full-stack projects that need to develop web and mobile simultaneously and want to share types and business logic
- Combined development with NestJS as the API service, Next.js as the web frontend, and Expo as the mobile app
- Projects requiring end-to-end type-safe APIs and typed real-time communication (e.g., rooms, message events)
- Teams wanting to manage database models, authentication, analytics, and UI components uniformly in a monorepo
Suitable For
- Developers familiar with TypeScript, pnpm, and Turborepo workflows
- Teams needing a unified starting structure for NestJS + Next.js + Expo across three platforms
- Projects planning to use PostgreSQL, Clerk, and PostHog as infrastructure
- Full-stack projects wanting to reuse tRPC, WebSocket, and UI code as shared packages
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js (v18+), PostgreSQL, and pnpm; pnpm can be installed via npm install -g pnpm
- 2
After cloning the repository, run pnpm i to install dependencies, then run pnpm dev:setup to initialize environment variables, database, Redis, migrations, and seed data
- 3
If using the default Docker setup for PostgreSQL and Redis, ensure Docker is running; the script will prompt for necessary information or read an existing .env file
- 4
Use pnpm dev to start all development services, or run pnpm dev:backend, pnpm dev:web, and pnpm dev:mobile separately
- 5
You can check the contents of .env files under apps/ and packages/ via pnpm inspect:envs to verify environment variable configuration
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license from the public repository; the free scope is the code of this version and does not imply that external services or third-party assets are free.
Must comply with when using
- Permits free use, modification, commercial use, and distribution of this version's code.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Authentication relies on the third-party service Clerk, requiring a Clerk account and API key configuration, and may involve external service fees.
- Analytics relies on the third-party service PostHog, requiring an account and API key configuration, and may involve external service fees.
- The default initialization script relies on Docker to run PostgreSQL and Redis, requiring Docker to be installed and running locally.
- Before running, you must prepare Node.js v18+, a PostgreSQL database, and the pnpm package manager.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
- **👤 Authentication**: Clerk integration for secure user management
Original README
- **📊 Analytics**: PostHog integration for tracking user behavior
Original README
# NOTE: Ensure Docker is running if you rely on the default Docker setup for PostgreSQL and Redis.
Original README
https://github.com/barisgit/nextjs-nestjs-expo-template/blob/main/LICENSEhttps://github.com/barisgit/nextjs-nestjs-expo-template/blob/main/README.md- Node.js (v18+) - PostgreSQL - pnpm (`npm install -g pnpm`)
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-03. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 81 / 100
- Technologies
- Next.js · React
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2025-04-25
- Screenshot last checked
- 2026-10-03
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: 1792f795cd061c7268b6a5ca1e2506ea2964b8d069fb2ce3932e06682b0f7455
2026-10-03T00:41:00.778Z
Source file / repository# Next.js + NestJS + Expo Monorepo Template
<div align="center">
<a href="https://nestjs.com"><img src="https://img.shields.io/badge/nestjs-%23E0234E.svg?style=for-the-badge&logo=nestjs&logoColor=white" alt="NestJS" /></a>
<a href="https://nextjs.org"><img src="https://img.shields.io/badge/Next-black?style=for-the-badge&logo=next.js&logoColor=white" alt="Next.js" /></a>
<a href="https://expo.dev"><img src="https://img.shields.io/badge/expo-1C1E24?style=for-the-badge&logo=expo&logoColor=#D04A37" alt="Expo" /></a>
<a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript" /></a>
<a href="https://tailwindcss.com"><img src="https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white" alt="TailwindCSS" /></a>
<a href="https://socket.io"><img src="https://img.shields.io/badge/Socket.io-black?style=for-the-badge&logo=socket.io&badgeColor=010101" alt="Socket.io" /></a>
<a href="https://typeorm.io"><img src="https://img.shields.io/badge/TypeORM-E83524?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xNiA4SDhjLS4yNjYgMC0uNTIuMTA1LS43MDcuMjkzQTEgMSAwIDAgMCA3IDl2MTRhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTFWOWExIDEgMCAwIDAtMS0xem0tMSAydjEySDl2LTEyem05LTJoLThhMSAxIDAgMCAwLTEgMXYxNGExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVY5YTEgMSAwIDAgMC0xLTF6bS0xIDJ2MTJoLTZ2LTEyeiIvPjwvc3ZnPg==" alt="TypeORM" /></a>
<a href="https://trpc.io"><img src="https://img.shields.io/badge/tRPC-%232596BE.svg?style=for-the-badge&logo=trpc&logoColor=white" alt="tRPC" /></a>
<a href="https://tamagui.dev"><img src="https://img.shields.io/badge/Tamagui-2C4159?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMDI0IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8Y2lyY2xlIGN4PSI1MTIiIGN5PSI1MTIiIHI9IjUxMiIgZmlsbD0iIzE4QTBGQiIvPgo8cGF0aCBkPSJNMjY1Ljg1MSAyNDMuOTFWNDk3LjAwN0MyNjUuODUxIDU0MC42MjMgMzAxLjIzNSA1NzYuMDA3IDM0NC44NTEgNTc2LjAwN0g1OTUuNDc3QzYzOS4wOTMgNTc2LjAwNyA2NzQuNDc3IDU0MC42MjMgNjc0LjQ3NyA0OTcuMDA3VjI0My45MUw0NjguNjgxIDc5LjYzMzNDNDUxLjk5NSA2OC42ODE5IDQyOS45NDMgNjguNjM1OCA0MTMuMjE5IDc5LjUxNzJMMjY1Ljg1MSAyNDMuOTFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNzYxLjQ1NSA3NzguNzc1VjUyNS42NzlDNzYxLjQ1NSA0ODIuMDYzIDcyNi4wNzEgNDQ2LjY3OSA2ODIuNDU1IDQ0Ni42NzlINDMxLjgyOUMzODguMjEzIDQ0Ni42NzkgMzUyLjgyOSA0ODIuMDYzIDM1Mi44MjkgNTI1LjY3OVY3NzguNzc1TDU1OC42MjUgOTQzLjA1MkM1NzUuMzExIDk1NC4wMDMgNTk3LjM2MyA5NTQuMDUgNjE0LjA4NyA5NDMuMTY4TDc2MS40NTUgNzc4Ljc3NVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPg==" alt="Tamagui" /></a>
<a href="https://clerk.com"><img src="https://img.shields.io/badge/Clerk-6C47FF?style=for-the-badge&logo=clerk&logoColor=white" alt="Clerk" /></a>
<a href="https://tanstack.com/query"><img src="https://img.shields.io/badge/TanStack%20Query-FF4154?style=for-the-badge&logo=react-query&logoColor=white" alt="TanStack Query" /></a>
<a href="https://posthog.com"><img src="https://img.shields.io/badge/PostHog-000000?style=for-the-badge&logo=posthog&logoColor=white" alt="PostHog" /></a>
<a href="https://www.postgresql.org"><img src="https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white" alt="PostgreSQL" /></a>
<a href="https://turbo.build"><img src="https://img.shields.io/badge/Turborepo-000000?style=for-the-badge&logo=turborepo&logoColor=white" alt="Turborepo" /></a>
[](https://opensource.org/licenses/MIT)
[](https://github.com/barisgit/nextjs-nestjs-expo-template/stargazers)
[](https://makeapullrequest.com)
A modern full-stack, type-safe monorepo template with real-time capabilities and cross-platform support.
[Demo](https://demo-link.com) · [Report Bug](https://github.com/barisgit/nextjs-nestjs-expo-template/issues) · [Request Feature](https://github.com/barisgit/nextjs-nestjs-expo-template/issues)
</div>
<!-- <p align="center">
<img src="https://via.placeholder.com/800x400?text=Next.js+NestJS+Expo+Template" alt="Project Banner" width="800"/>
</p> -->
## ✨ Features
- **📦 Monorepo Setup**: Turborepo with pnpm for efficient workspace management
- **🔄 Full Type Safety**: End-to-end type safety from backend to frontend with tRPC and typed WebSockets
- **🚀 Modern Stack**: Next.js, NestJS, and Expo with TypeScript
- **🔌 Real-time Communication**: Type-safe WebSockets integration with Socket.IO
- **👤 Authentication**: Clerk integration for secure user management
- **📊 Analytics**: PostHog integration for tracking user behavior
- **🎨 UI Components**: TailwindCSS with ShadCN UI for web and Tamagui for mobile
- **🧩 Modular Architecture**: Well-organized packages for code sharing
## 🚀 Quick Start
### Prerequisites
- Node.js (v18+)
- PostgreSQL
- pnpm (`npm install -g pnpm`)
### One-click Setup
```bash
# Clone the repository
git clone https://github.com/barisgit/nextjs-nestjs-expo-template.git
cd nextjs-nestjs-expo-template
# Install dependencies
pnpm i # or pnpm install
# Run the development setup script
# This command handles:
# - Copying .env files
# - Setting up database (Docker or manual)
# - Setting up Redis (Docker)
# - Running database migrations
# - Seeding the database
pnpm dev:setup
# NOTE: Ensure Docker is running if you rely on the default Docker setup for PostgreSQL and Redis.
# The script will prompt you for necessary details or use .env files if they exist.
# Start all development servers (Backend, Web, Mobile)
pnpm dev
# Or run individual servers:
# pnpm dev:backend # NestJS
# pnpm dev:web # Next.js
# pnpm dev:mobile # Expo
```
## 📂 Project Structure
```text
nextjs-nestjs-expo-template/
├── apps/
│ ├── backend/ # NestJS API server
│ ├── web/ # Next.js web application
│ └── mobile/ # Expo React Native application
├── packages/
│ ├── analytics/ # PostHog analytics integration
│ ├── db/ # Database models and TypeORM configuration
│ ├── services/ # Shared services (auth, redis, webhooks)
│ ├── trpc/ # tRPC API router definitions and context
│ ├── ui/ # Shared UI components (ShadCN UI for web)
│ ├── websockets/ # Type-safe WebSocket implementation
│ ├── eslint-config/ # Shared ESLint configuration
│ └── typescript-config/ # Shared TypeScript configuration
```
## 🖥️ Tech Stack
<p align="center">
<a href="https://nestjs.com/"><img src="https://docs.nestjs.com/assets/logo-small.svg" alt="NestJS" width="50" /></a>
<a href="https://nextjs.org/"><img src="https://cdn.worldvectorlogo.com/logos/next-js.svg" alt="Next.js" width="50" /></a>
<a href="https://expo.dev/"><img src="https://www.vectorlogo.zone/logos/expoio/expoio-icon.svg" alt="Expo" width="50" /></a>
<a href="https://trpc.io/"><img src="https://avatars.githubusercontent.com/u/78011399?s=200&v=4" alt="tRPC" width="50" /></a>
<a href="https://www.typescriptlang.org/"><img src="https://cdn.worldvectorlogo.com/logos/typescript.svg" alt="TypeScript" width="50" /></a>
<a href="https://tailwindcss.com/"><img src="https://cdn.worldvectorlogo.com/logos/tailwindcss.svg" alt="TailwindCSS" width="50" /></a>
<a href="https://socket.io/"><img src="https://cdn.worldvectorlogo.com/logos/socket-io.svg" alt="Socket.io" width="50" /></a>
<a href="https://typeorm.io/"><img src="https://raw.githubusercontent.com/typeorm/typeorm/master/resources/logo_big.png" alt="TypeORM" height="50" /></a>
<a href="https://tamagui.dev/"><img src="https://avatars.githubusercontent.com/u/94025540?s=48&v=4" alt="Tamagui" height="50" /></a>
<a href="https://ui.shadcn.com/"><img src="https://avatars.githubusercontent.com/u/139895814?s=200&v=4" alt="shadcn/ui" height="50" /></a>
<a href="https://clerk.com/"><img src="https://clerk.com/images/clerk-logo.svg" alt="Clerk" height="50" /></a>
<a href="https://tanstack.com/query"><img src="https://tanstack.com/_build/assets/logo-color-100w-br5_Ikqp.png" alt="TanStack Query" height="50" /></a>
<a href="https://posthog.com/"><img src="https://posthog.com/brand/posthog-logo.svg" alt="PostHog" height="50" /></a>
<a href="https://turbo.build/"><img src="https://turbo.build/images/docs/repo/repo-hero-logo-dark.svg" alt="Turborepo" height="50" /></a>
</p>
### Backend
- **NestJS**: A progressive Node.js framework for scalable server-side applications
- **TypeORM**: ORM for TypeScript and JavaScript with PostgreSQL
- **Socket.IO**: Real-time bidirectional event-based communication with type safety
- **PostgreSQL**: Open-source relational database
### Frontend
- **Next.js**: React framework for production-grade applications
- **TailwindCSS**: Utility-first CSS framework
- **ShadCN UI**: Beautifully designed components built with Radix UI and Tailwind CSS
- **TanStack Query**: Data fetching and caching library
### Mobile
- **Expo**: Platform for making universal React applications
- **React Native**: Framework for building native apps using React
- **Tamagui**: UI library for React Native with performance and developer experience in mind
### Common
- **TypeScript**: Typed superset of JavaScript
- **tRPC**: End-to-end typesafe APIs
- **Turborepo**: High-performance build system for JavaScript/TypeScript monorepos
- **Clerk**: Authentication and user management
- **PostHog**: Open-source product analytics platform
## 📖 Documentation
Each package and application contains its own detailed documentation:
- [Backend Documentation](apps/backend/README.md)
- [Mobile Documentation](apps/mobile/README.md)
- [Analytics Package](packages/analytics/README.md)
- [Database Package](packages/db/README.md)
- [Services Package](packages/services/README.md)
- [tRPC Package](packages/trpc/README.md)
- [UI Package](packages/ui/README.md)
- [WebSockets Package](packages/websockets/README.md)
## 💡 Usage Examples
### Type-safe API with tRPC
```tsx
// Client component
function UserProfile() {
const { data, isLoading } = trpc.users.getProfile.useQuery();
if (isLoading) return <div>Loading...</div>;
return (
<div>
<h1>Welcome, {data.name}!</h1>
</div>
);
}
```
### Type-safe Real-time Communication
```tsx
// WebSocket setup with type safety
import { createTypedSocketClient, ClientEvents, ServerEvents } from '@repo/websockets';
const socket = createTypedSocketClient('http://your-api-url');
socket.emit(ClientEvents.JOIN_ROOM, roomId);
// Listen for messages with full type safety
socket.on(ServerEvents.MESSAGE, (message) => {
console.log('New message:', message);
});
```
## 🛠️ Development Scripts
This project includes several helpful scripts for development and maintenance, located in the `scripts/` directory.
### Environment Variable Inspection
```bash
pnpm inspect:envs
```
This command scans the `apps/` and `packages/` directories for all `.env*` files (e.g., `.env`, `.env.local`, `.env.example`). It then prints the key-value pairs found in each file, grouped by project (app or package).
This is useful for:
- Verifying that all necessary environment variables are present in example files.
- Quickly checking the configured values across different environments.
- Debugging environment-related issues.
The script is powered by the `EnvManager` utility (`scripts/utilities/env-manager.ts`), which is designed to parse `.env` files while preserving comments and whitespace, making it useful for both reading and programmatically modifying environment configurations.
## 🤝 Contributing
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/amazing-feature`)
3. Commit your Changes (`git commit -m 'Add some amazing feature'`)
4. Push to the Branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## 📜 License
Distributed under the MIT License. See `LICENSE` for more information.
## 📧 Contact
Blaž Aristovnik - [@barisgit](https://github.com/barisgit) - [aristovnik.me](https://aristovnik.me)
## 🙏 Acknowledgments
- [Turborepo](https://turbo.build/)
- [NestJS](https://nestjs.com/)
- [Next.js](https://nextjs.org/)
- [Expo](https://expo.dev/)
- [tRPC](https://trpc.io/)
- [TypeORM](https://typeorm.io/)
- [Socket.IO](https://socket.io/)
- [ShadCN UI](https://ui.shadcn.com/)
- [Tamagui](https://tamagui.dev/)
- [Clerk](https://clerk.dev/)
- [PostHog](https://posthog.com/)
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
