Manual de Desenvolvimento Moderno

Guia Interativo: Next.js, TypeScript, Supabase & Zustand

Passo 1: Configuração Inicial

Execute o comando abaixo para criar a estrutura base do projeto.

npx create-next-app@latest seu-app-supabase

Passo 2: Setup do Supabase e SQL

No SQL Editor do seu projeto Supabase, execute o script abaixo para criar a tabela de perfis e configurar a segurança.

-- Cria a tabela para perfis públicos
CREATE TABLE public.profiles (
  id UUID NOT NULL PRIMARY KEY,
  username TEXT,
  avatar_url TEXT,
  CONSTRAINT "profiles_id_fkey" FOREIGN KEY (id) REFERENCES auth.users (id) ON DELETE CASCADE
);
-- ... (resto do SQL)

Passo 3: Integração com Next.js

Instale as bibliotecas do Supabase e configure suas variáveis de ambiente.

npm install @supabase/supabase-js @supabase/ssr

Passo 4: Estrutura de Pastas

A organização final do seu projeto se parecerá com esta:

/
├── app/
├── components/
├── lib/
├── store/
├── .env.local
└── middleware.ts

Passo 5: Store com Zustand

Instale o Zustand e crie a store em store/userStore.ts.

import { create } from 'zustand'
// ... (código da store)

Passo 6: Páginas de Autenticação

Crie as páginas de Login e Cadastro, como app/login/page.tsx.

'use client'
import { useState } from 'react'
// ... (código da página de login)

Passo 7: AuthProvider

Crie o "ouvinte" de autenticação em components/AuthProvider.tsx.

'use client'
import { useEffect } from 'react'
// ... (código do AuthProvider)

Passo 8: Middleware de Proteção

Crie o arquivo middleware.ts na raiz do projeto.

import { createServerClient } from '@supabase/ssr'
// ... (código do middleware)

Passo 9: Dashboard e Logout

A página final do dashboard, onde o usuário logado chega e pode sair.

'use client'
import { useUserStore } from '@/store/userStore'
// ... (código do dashboard)