guias
Integrações

Veloz + Neon

Como usar Neon PostgreSQL como banco de dados do seu app na Veloz.

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

  1. Acesse neon.tech e crie uma conta
  2. Clique em Create Project
  3. 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 init

Schema

// 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 init

Usar 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 deploy

Com Drizzle

Alternativa mais leve ao Prisma.

Instalar

npm install drizzle-orm postgres
npm install -D drizzle-kit

Schema

// 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 deploy

Próximos passos