Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/notrab/turso-per-user-starter

Database per user
https://github.com/notrab/turso-per-user-starter

multitenancy nextjs sqlite turso

Last synced: 7 days ago
JSON representation

Database per user

Awesome Lists containing this project

README

        

# Turso Per User Starter

A Next.js application that demonstrates how to use the [Turso](https://turso.tech) Platforms API to create a database per user.

![Turso Per User Starter Template](/app/opengraph-image.png)

## Demo

The app below uses a database per user, and is powered by Turso.

[https://turso-per-user-starter.vercel.app](https://turso-per-user-starter.vercel.app)

## Get Started

Deploy your own Turso powered platform in a few easy steps...

- [![Create a Database](https://sqlite.new/button)](https://sqlite.new?dump=https%3A%2F%2Fraw.githubusercontent.com%2Fnotrab%2Fturso-per-user-starter%2Fmain%2Fdump.sql&type=schema)

- Once the database is created, you'll be presented with details about your database, and **Connect** details
- Note down the following (you'll need these later):
- Database name
- Org name
- Group Token (**Create Group Token** -> **Create Token**)
- Platform API Token (**Create Platform API Token** -> **Insert memorable name** -> **Create Token**))

- [Sign up to Clerk](https://clerk.com)
- Create a new application from the dashboard
- Note down the following (you'll need these later):
- Public key
- Secret key
- [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fnotrab%2Fturso-per-user-starter&env=NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY,CLERK_SECRET_KEY,TURSO_API_TOKEN,TURSO_ORG,TURSO_DATABASE_NAME,TURSO_GROUP_AUTH_TOKEN&demo-title=Turso%20Per%20User%20Starter&demo-description=Create%20a%20database%20per%20user&demo-image=https://raw.githubusercontent.com/notrab/turso-per-user-starter/28373b4c9c74f814e3749525ee3d53b603176834/app/opengraph-image.png&demo-url=https%3A%2F%2Fturso-per-user-starter.vercel.app)
- Add the following environment variables (from the details you noted down earlier):
- `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` - Clerk public key
- `CLERK_SECRET_KEY` - Clerk secret key
- `TURSO_API_TOKEN` - Platform API Token
- `TURSO_ORG` - Org name
- `TURSO_DATABASE_NAME` - Database name
- `TURSO_GROUP_AUTH_TOKEN` - Group Token
- Click **Deploy** and you're done!

_You may optionally set up webhooks to automate the creation of databases in the background — [learn more](https://github.com/notrab/turso-per-user-starter/wiki/Webhooks#using-webhooks-in-production)._

## Local Development

Start building your Turso powered platform in a few simple steps...

1.
Clone this repository

Begin by cloning this repository to your machine:

```bash
git clone https://github.com/notrab/turso-per-user-starter.git
cd turso-per-user-starter
```

2.
Install dependencies and initialize .env

Run the following:

```bash
cp .env.example .env
npm install
```

3.
Create a new SQLite schema database with Turso

Follow the instructions to install the [Turso CLI](https://docs.turso.tech/cli/installation), and then run the following:

```bash
turso db create --type schema
```

> Alternatively, you can [sign up](https://app.turso.tech) on the web, and create a new schema database from there.

Now update `.env` to include your organization, and schema database name:

```bash
TURSO_ORG=
TURSO_DATABASE_NAME=
```

> The `TURSO_ORG` can be your personal username, or the name of any organization you have with other users.

4.
Create a new group token

Run the following:

```bash
turso group tokens create
```

Now update `.env` to include the group token:

```bash
TURSO_GROUP_AUTH_TOKEN=
```

> If you didn't already have one, a new group will be created for you with the name `default`.

5.
Run database migrations

Run the following:

```bash
npm run db:migrate
```

> If you make changes to `db/schema.ts`, make sure to run `npm run db:generate` to create the migrations, and `npm run db:migrate` to apply them.

6.
Create a new Turso API Token

Run the following:

```bash
turso auth api-tokens mint clerk
```

Then set the API token in the `.env` file:

```bash
TURSO_API_TOKEN=
```

7.
Configure Clerk

[Sign up to Clerk](https://clerk.com) and create a new application.

Add your Clerk public key and secret key to the `.env` file:

```bash
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
```

8.
Run the application

Run the following:

```bash
npm run dev
```

Now open [http://localhost:3000](http://localhost:3000) with your browser to try out the app!

## Optional: Webhook setup

You can automate the creation of databases per user in the background with webhooks.

[Read the wiki](https://github.com/notrab/turso-per-user-starter/wiki/Webhooks#using-webhooks-locally) for more information on how to set up webhooks with Clerk during development, and production.

## Tech Stack

- [Turso](https://turso.tech) for multi-tenant databases
- [Next.js](https://nextjs.org) for powerful full stack apps
- [Tailwind CSS](https://tailwindcss.com) for utility-first CSS
- [Drizzle](https://orm.drizzle.team) for database migrations and ORM
- [Clerk](https://clerk.com) for authentication
- [Vercel](https://vercel.com) for hosting

## Need help?

> [!WARNING]
> Turso Multi-DB Schemas are currently in beta.

[Join us on Discord](https://tur.so/discord)