Database

SaaSInMinutes uses Supabase (PostgreSQL) for database management. This guide shows you how to work with the database.

Setup

1. Create a Supabase project at supabase.com

2. Get your database URL from Settings → Database

3. Add it to your .env.local file:

.env.local
1SUPABASE_URL=https://your-project.supabase.co
2SUPABASE_ANON_KEY=your-anon-key
3SUPABASE_SERVICE_ROLE_KEY=your-service-role-key

Create a table

Create tables in the Supabase dashboard or using SQL migrations:

migrations/001_create_users.sql
1CREATE TABLE users (
2  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
3  email TEXT UNIQUE NOT NULL,
4  name TEXT,
5  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
6);

Query data

app/users/page.tsx
1import { createServerComponentClient } from '@supabase/auth-helpers-nextjs';
2import { cookies } from 'next/headers';
3
4export default async function UsersPage() {
5  const supabase = createServerComponentClient({ cookies });
6  const { data: users, error } = await supabase
7    .from('users')
8    .select('*')
9    .limit(10);
10
11  if (error) {
12    console.error('Error:', error);
13    return <div>Error loading users</div>;
14  }
15
16  return (
17    <div>
18      <h1>Users</h1>
19      <ul>
20        {users?.map((user) => (
21          <li key={user.id}>{user.email}</li>
22        ))}
23      </ul>
24    </div>
25  );
26}

Insert data

app/users/create/page.tsx
1import { createServerComponentClient } from '@supabase/auth-helpers-nextjs';
2import { cookies } from 'next/headers';
3
4export default async function CreateUserPage() {
5  const supabase = createServerComponentClient({ cookies });
6  
7  const { data, error } = await supabase
8    .from('users')
9    .insert([
10      { email: 'user@example.com', name: 'John Doe' }
11    ])
12    .select();
13
14  if (error) {
15    console.error('Error:', error);
16    return <div>Error creating user</div>;
17  }
18
19  return <div>User created: {data[0].email}</div>;
20}

Update data

1const { data, error } = await supabase
2  .from('users')
3  .update({ name: 'Jane Doe' })
4  .eq('id', userId)
5  .select();

Delete data

1const { error } = await supabase
2  .from('users')
3  .delete()
4  .eq('id', userId);

Next steps

Learn more about Supabase in the official documentation.