--- title: Local Development description: "A guide on how to run useSend’s codebase locally" icon: code --- ## Introduction useSend's codebase is fully [open-source on github](https://github.com/usesend/usesend) Here is the codebase structure ``` apps ├── docs ├── marketing ├── web packages ├── eslint-config ├── sdk ├── tailwind-config ├── typescript-config ├── ui ``` The `apps` directory contains the code for: - `web`: Code for our dashboard and email infra - `marketing`: The code for the landing page of useSend - `docs`: The documentation that you are currently reading. The `packages` directory contains the code for: - `eslint-config` package contains shared ESLint configuration settings - `sdk` package contains TypeScript SDK for useSend REST API - `tailwind-config` This package contains a shared Tailwind CSS configuration. - `typescript-config` This package contains a shared typescript configuration - `ui` This package is a collection of reusable UI components like buttons, badges, etc ## Running useSend locally To run useSend locally, you will need to setup the following: - [AWS](https://aws.amazon.com/) Free tier account will work. - [Cloudflare](https://www.cloudflare.com/) Free tier account will work. - [Docker](https://docs.docker.com/engine/install/) Recommended but not mandatory ## Fork and Clone the repo Click on the fork button on [GitHub](https://github.com/usesend/usesend) to fork the repo Once the repo is forked you can clone it on your local machine using: ```bash git clone https://github.com/your-username/usesend.git ``` ## Install Dependencies ```bash corepack enable ``` ```bash pnpm install ``` ## Setup environment variables: ```bash cp .env.example .env ``` Use the following command to generate a key and add it under ```NEXTAUTH_SECRET``` ```bash openssl rand -base64 32 ``` You don't need this setup if you have `FROM_EMAIL` set in your environment variables. for development email link will logged in the console. Next, [create a new GitHub App](https://github.com/settings/applications/new). This will allow you to sign in to useSend with your GitHub account. Add the homepage as: ``` http://localhost:3000/login ``` and callback URL as: ``` http://localhost:3000/api/auth/callback/github ``` Once the app is added you can add the Client ID under `GITHUB_ID`and CLIENT SECRET under `GITHUB_SECRET` You don't need this setup if you are using the local-sen-sns image. But email will not be sent out. Next, we need to add in the [AWS credentials](https://docs.usesend.com/get-started/create-aws-credentials). Follow the detailed guide to get the AWS credentials with accurate permissions and add them in: ``` AWS_ACCESS_KEY= AWS_SECRET_KEY= ``` ## Running useSend locally We are using a local Postgresql server and a local Redis server. But if you don't have docker you can also manually set these up. ### Option 1: Using Docker Recommended ```bash pnpm d ``` Dashboard will be started on ```bash http://localhost:3000 ``` Landing page will be started on ```bash http://localhost:3001 ``` Run the following command to get the URL. Here is the more detailed guide by [cloudflare](https://developers.cloudflare.com/pages/how-to/preview-with-cloudflare-tunnel/) ```bash cloudflared tunnel --url http://localhost:3000 ``` You can paste the URL provided by cloudflare in the Callback URL section ### Option 2: Using your own database or hosted database ```bash DATABASE_URL="" REDIS_URL="" ``` ```bash pnpm db:migrate-dev ``` ```bash pnpm dev ``` Run the following command to get the URL. Here is the more detailed guide by [cloudflare](https://developers.cloudflare.com/pages/how-to/preview-with-cloudflare-tunnel/) ```bash cloudflared tunnel --url http://localhost:3000 ``` You can paste the URL provided by cloudflare in the Callback URL section ## Run documentation To run the documentation run the following command: ```bash pnpm dev:docs ```