Skip to content

⭐ Getting Started

Course Builder is a Turborepo project that includes the website, this docs site you are reading right now, and the various libraries and packages that represent the Course Builder platform.

It’s non-trivial and these guides are going to make several assumptions:

This is a lot of assumptions!

There will be plenty of detail and links, but if you are not familiar with these technologies, you may want to start with some of the links above.

Next.js and the T3 Stack

The Course Builder website is built with Next.js. It uses create-t3-app to scaffold the project. This provides a consistent opinionated starting point for Next.js projects.

  • NextAuth
  • TailwindCSS
  • tRPC
  • Drizzle ORM
  • CASL

Course Builder is using the Next.js App Router which makes use of React Server Components.

For the sake of simplicity, Course Builder is deployed to Vercel. This might not be a strict requirement, but hosting on other platforms is left as an exercise for the reader.

Integrated Third-Party Services

Course Builder is integrated with several third-party services. These are all currently required for the project to function. This means that you will need to create accounts with these services and configure them for your project by adding the various keys and secrets to your environment variables in the course-builder-web app.

It’s possible to swap these out to suit your needs and preferences, but the assumption in these guides is that you will be using these services.

Clone the Repository

git clone https://www.github.com/badass-courses/course-builder

Install Dependencies

pnpm install

Configure Environment Variables

cd /apps/course-builder-web
cp .env.example .env

They are all required.

NEXTAUTH_URL="YOUR_TUNNEL.ngrok-free.app/api/auth"
UPLOADTHING_URL="http://localhost:3000"
NEXT_PUBLIC_URL="https://YOUR_TUNNEL.ngrok-free.app/"

This is because the project is using several different services that need to know the URL of the project. This is a bit of a pain, but it’s the way it is for now. :::