O Neon é PostgreSQL serverless — escala a zero quando ninguém está usando e liga instantaneamente quando recebe uma query. Perfeito para apps na Veloz.
Por que Neon?
- Serverless — Paga só pelo que usa, escala a zero
- Free tier generoso — 512 MB storage, 190 horas de compute/mês
- Branching — Crie branches do banco como no Git (preview deploys)
- Rápido — Cold start em ~500ms, quente é instantâneo
- PostgreSQL puro — Sem abstrações, compatível com qualquer ORM
Setup rápido
1. Criar conta e projeto
- Acesse neon.tech e crie uma conta
- Clique em Create Project
- Escolha um nome e região (US East é o mais próximo do Brasil por enquanto)
2. Copiar a connection string
No dashboard do Neon, copie a Connection String:
postgres://user:pass@ep-cool-name-123456.us-east-2.aws.neon.tech/mydb?sslmode=require
3. Configurar na Veloz
veloz env set DATABASE_URL="postgres://user:pass@ep-cool-name-123456.us-east-2.aws.neon.tech/mydb?sslmode=require"Pronto. Seu app na Veloz agora se conecta ao Neon.
Com Prisma
A stack mais popular entre vibecoders.
Instalar
npm install prisma @prisma/client
npx prisma initSchema
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
name String
email String @unique
posts Post[]
createdAt DateTime @default(now())
}
model Post {
id String @id @default(cuid())
title String
content String?
author User @relation(fields: [authorId], references: [id])
authorId String
createdAt DateTime @default(now())
}Criar tabelas
npx prisma migrate dev --name initUsar no app
// lib/db.ts
import { PrismaClient } from "@prisma/client";
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
export const prisma = globalForPrisma.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma;
}// app/api/users/route.ts
import { prisma } from "@/lib/db";
export async function GET() {
const users = await prisma.user.findMany({
include: { posts: true },
});
return Response.json(users);
}
export async function POST(req: Request) {
const data = await req.json();
const user = await prisma.user.create({ data });
return Response.json(user, { status: 201 });
}Deploy com migrations
# Rodar migrations em produção
npx prisma migrate deploy
# Deploy o app
veloz deployCom Drizzle
Alternativa mais leve ao Prisma.
Instalar
npm install drizzle-orm postgres
npm install -D drizzle-kitSchema
// db/schema.ts
import { pgTable, text, timestamp } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: text("id").primaryKey(),
name: text("name").notNull(),
email: text("email").notNull().unique(),
createdAt: timestamp("created_at").defaultNow(),
});
export const posts = pgTable("posts", {
id: text("id").primaryKey(),
title: text("title").notNull(),
content: text("content"),
authorId: text("author_id").references(() => users.id),
createdAt: timestamp("created_at").defaultNow(),
});Conectar
// db/index.ts
import { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import * as schema from "./schema";
const sql = postgres(process.env.DATABASE_URL!);
export const db = drizzle(sql, { schema });Usar
import { db } from "@/db";
import { users } from "@/db/schema";
// Listar
const allUsers = await db.select().from(users);
// Inserir
await db.insert(users).values({
id: crypto.randomUUID(),
name: "Jean",
email: "jean@loud.gg",
});Neon Branching
O recurso mais poderoso do Neon para desenvolvimento:
# Criar branch para desenvolvimento
npx neonctl branches create --name dev
# Usar a connection string do branch
veloz env set DATABASE_URL="postgres://...branch-dev..."Branches são cópias instantâneas do banco — perfeitos para testar migrations sem afetar produção.
Connection pooling
Para apps com muitas conexões simultâneas, use o pooler do Neon:
# Connection string com pooler (-pooler no hostname)
veloz env set DATABASE_URL="postgres://user:pass@ep-cool-name-123456-pooler.us-east-2.aws.neon.tech/mydb?sslmode=require"O Prisma requer uma URL separada para migrations:
veloz env set DATABASE_URL="postgres://...pooler..."
veloz env set DIRECT_URL="postgres://...sem-pooler..."datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}Deploy
# Migrations
npx prisma migrate deploy
# App
veloz deployPróximos passos
- Veloz + Supabase — Alternativa com Auth, Storage e Real-time
- Full-Stack App — Arquitetura completa
- Variáveis de Ambiente — Gerenciar secrets