Documentação

Aplicações independentes e multistack

A Vupi aceita sites estáticos, JavaScript, TypeScript, PHP, Python, Go, Java e outras stacks detectáveis. O desenvolvedor escolhe framework, versões, gerenciador de pacotes, nomes de pastas e camadas. Aplicações independentes não precisam de Routes/web.php, Database/, Storage/ nem db.js. Arquivos criados no explorador nascem vazios; snippets só são inseridos quando escolhidos no autocomplete.

Banco automático e sem segredo no workspace

A plataforma cria um banco exclusivo e injeta a conexão no runtime. Prefira DATABASE_URL quando o driver aceitar. Também estão disponíveis DB_HOST, DB_PORT, DB_NOME, DB_USUARIO, DB_SENHA e aliases nativos de PostgreSQL, MySQL, Flyway e Liquibase. Não crie um .env com essas credenciais.

Um arquivo db.js é apenas uma opção para reutilizar um pool; não é obrigatório. A consulta pode ficar diretamente na rota ou em qualquer repository escolhido. A linguagem ainda precisa do próprio driver, como pg, psycopg, PDO, JDBC ou pgx.

// JavaScript ou TypeScript, dentro do arquivo escolhido
const banco = new Pool({ connectionString: process.env.DATABASE_URL });
const { rows } = await banco.query('SELECT * FROM tarefas ORDER BY criada_em DESC');
# Python
with psycopg.connect(os.environ['DATABASE_URL']) as banco:
    tarefas = banco.execute('SELECT * FROM tarefas ORDER BY criada_em DESC').fetchall()
// Go
db, err := sql.Open("pgx", os.Getenv("DATABASE_URL"))
// Java
Connection db = DriverManager.getConnection(
    System.getenv("FLYWAY_URL"),
    System.getenv("FLYWAY_USER"),
    System.getenv("FLYWAY_PASSWORD")
);

Rotas públicas e privadas

No módulo PHP, uma rota sem middleware é pública. Use diretamente $auth, $privado ou $protected para exigir JWT ou API Key do projeto; os aliases são fornecidos automaticamente:

$router->get('/api/status', [StatusController::class, 'show']);
$router->get('/api/tarefas', [TarefaController::class, 'index'], $auth);

Em aplicações independentes, use o middleware da stack com um nome explícito como requireProjectAuth, ou coloque @private, @protected, @auth ou @privado imediatamente acima da declaração. Ao ativar, a plataforma publica essa política no gateway. Antes de encaminhar a requisição ao container, o proxy valida X-API-Key e os scopes do método, ou Bearer JWT HS256, expiração e emissor do projeto. O middleware da aplicação pode acrescentar autorização de negócio.

app.get('/api/status', status);
app.get('/api/tarefas', requireProjectAuth, listarTarefas);
// @private
app.delete('/api/tarefas/:id', removerTarefa);

No API Route Tester, rotas privadas abrem a aba Auth. Selecione API Key do projeto para enviar X-API-Key ou Bearer Token para enviar o JWT. Confirme que a rota responde 401 sem credencial e funciona com uma credencial válida.

Versões e estrutura

Frontend e backend podem ficar juntos, por exemplo em apps/web e apps/api, e ser separados depois. Outros nomes e estruturas válidas também são aceitos. O serviço HTTP deve escutar em 0.0.0.0 e usar a porta de PORT.

Terminal, publicação e isolamento

O terminal trabalha em /workspace e permite instalar dependências, compilar e testar. Ele não recebe socket Docker, dispositivos, rede do host ou acesso à VPS. Na ativação, a plataforma valida uma release candidata e somente troca o domínio depois dos health checks; uma falha preserva a versão saudável.