← Back to news
ZBuild News

Construa um Gerenciador de Favoritos Full-Stack com OpenCode em 30 Minutos (Passo a Passo)

Um tutorial OpenCode baseado em projetos onde você constrói um gerenciador de favoritos completo com tags, busca e uma REST API — usando o agente de IA do OpenCode no terminal. Cada funcionalidade é introduzida conforme a necessidade, não em uma lista de recursos.

Published
2026-03-27
Author
ZBuild Team
Reading Time
15 min read
opencode tutorialopencode guideopencode installopencode setupopencode configurationopencode ai coding agent
Construa um Gerenciador de Favoritos Full-Stack com OpenCode em 30 Minutos (Passo a Passo)
ZBuild Teampt
XLinkedIn

O Que Estamos Construindo

Esqueça listas de funcionalidades. A melhor maneira de aprender uma ferramenta é construindo algo com ela.

Neste tutorial, você usará o OpenCode — o agente de codificação de IA open-source com 120K+ GitHub stars — para construir um bookmark manager completo do zero. O app terá:

  • Uma REST API com Express.js e TypeScript
  • Um banco de dados SQLite com full-text search
  • Um sistema de tags para organizar bookmarks
  • Um frontend simples, mas funcional
  • Testes unitários

Cada funcionalidade do OpenCode é introduzida no momento em que você precisa dela — não em uma seção abstrata de funcionalidades. Ao final, você saberá como instalar o OpenCode, configurar modelos, usar os modos Build e Plan, configurar servidores MCP e criar agentes personalizados — tudo porque você os usou para construir um projeto real.

Tempo: ~30 minutes Pré-requisitos: Node.js 18+ instalado, um terminal (macOS, Linux, ou WSL no Windows) Custo: Grátis (usando modelos OpenCode Zen)


Fase 1: Instalando o OpenCode e Configurando o Projeto (5 minutes)

Instale o OpenCode

Abra seu terminal e execute um destes comandos:

# Option 1: npm (recommended)
npm i -g opencode-ai@latest

# Option 2: Homebrew (macOS/Linux)
brew install sst/tap/opencode

# Option 3: One-line installer
curl -fsSL https://opencode.ai/install.sh | bash

Verifique a instalação:

opencode --version

Você deverá ver o número da versão. Em March 2026, a versão estável mais recente está disponível no OpenCode GitHub repository.

Crie o Diretório do Projeto

mkdir bookmark-manager && cd bookmark-manager
git init
npm init -y

Inicie o OpenCode pela Primeira Vez

opencode

Isso abre a TUI (Terminal User Interface) do OpenCode — uma interface interativa em tela cheia construída com Bubble Tea. Você verá uma entrada de chat na parte inferior e um painel de conversa na área principal.

Escolha um Modelo

No primeiro lançamento, o OpenCode solicitará que você selecione um modelo. Você tem três caminhos:

Grátis (Zen models): Digite /models e selecione um dos free Zen models. Para este tutorial, Grok Code Fast 1 ou GLM 4.7 funcionam bem. Estes são gratuitos e não requerem API key.

Local (Ollama): Se você tiver o Ollama instalado, o OpenCode o detectará automaticamente. O recommended model for Ollama é glm-4.7:cloud.

Pago (traga sua própria chave): Digite /connect para vincular sua Anthropic, OpenAI, ou Google API key. As chaves são armazenadas localmente em ~/.local/share/opencode/auth.json.

Para este tutorial, qualquer modelo funciona. Modelos de maior capacidade (Claude Sonnet 4.6, GPT-5.4) produzirão melhores resultados em tarefas complexas, mas os modelos gratuitos Zen lidam com tudo o que estamos construindo aqui.


Fase 2: Estruturando o Projeto com o Build mode (4 minutes)

O OpenCode inicia no Build mode por padrão. O Build mode dá ao agente de IA acesso total para criar arquivos, editar código e executar comandos. É isso que queremos para a estruturação.

Seu Primeiro Prompt

Digite isto no chat do OpenCode:

Set up a TypeScript Node.js project with Express for a bookmark manager REST API.
Use SQLite via better-sqlite3 for the database. Add TypeScript, ts-node, and
nodemon as dev dependencies. Create a src/ directory with an index.ts entry point
that starts an Express server on port 3000.

O OpenCode irá:

  1. Criar um tsconfig.json
  2. Instalar dependências com npm install
  3. Criar src/index.ts com a configuração do servidor Express
  4. Atualizar o package.json com scripts de inicialização

Observe a TUI — você verá o agente executando comandos de terminal, criando arquivos e explicando o que faz em cada etapa. Isso não é geração de código no vácuo; o OpenCode tem acesso total ao seu sistema de arquivos e terminal.

Verifique se Funciona

Assim que o OpenCode terminar, diga a ele:

Run the server and verify it starts correctly on port 3000.

O OpenCode executará npx nodemon src/index.ts e confirmará que o servidor está escutando. Você deverá ver uma saída como Server running on http://localhost:3000.

O Que Acabou de Acontecer (Funcionalidade: Build mode)

O Build mode é o agente padrão do OpenCode. Ele tem acesso a todas as ferramentas: leitura/escrita de arquivos, execução de terminal e edição de código. De acordo com a OpenCode documentation, você pode pensar nele como um programador parceiro de IA com acesso total ao seu ambiente de desenvolvimento.


Fase 3: Criando o Modelo de Dados e o Banco de Dados (4 minutes)

Projete o Schema

Digite este prompt:

Create a database module at src/db.ts that:
1. Initializes a SQLite database at ./data/bookmarks.db
2. Creates a bookmarks table with: id (auto-increment), url (text, unique),
   title (text), description (text, nullable), created_at (datetime),
   updated_at (datetime)
3. Creates a tags table with: id (auto-increment), name (text, unique)
4. Creates a bookmark_tags junction table for many-to-many relationships
5. Enables WAL mode for concurrent read performance
6. Creates an FTS5 virtual table for full-text search on title and description
Export a function to get the database instance.

O OpenCode gerará o módulo de banco de dados completo. Preste atenção em como ele lida com a configuração do FTS5 (Full-Text Search 5) — esta é uma funcionalidade do SQLite que alimentará nossa funcionalidade de busca mais tarde.

Inicialize o Banco de Dados no Início do Servidor

Import the database module in index.ts and initialize it when the server starts.
Log a confirmation message.

Crie a Configuração opencode.json

Este é um bom momento para introduzir a configuração do projeto. Crie um arquivo dizendo ao OpenCode:

Create an opencode.json file in the project root with the project name
"bookmark-manager" and a rule that says "This is a TypeScript Express API
using better-sqlite3. Follow RESTful conventions. Use async/await. Return
JSON responses with consistent error formatting."

Isso cria o project configuration file que o OpenCode lê na inicialização. Ele fornece à IA um contexto persistente sobre o seu projeto — padrões de codificação, decisões de arquitetura e restrições — para que você não precise repeti-los em cada prompt.


Fase 4: Construindo os Endpoints da REST API (5 minutes)

Gere as Rotas

Create a routes module at src/routes/bookmarks.ts with these endpoints:
- POST /api/bookmarks — create a bookmark (validate url and title are present)
- GET /api/bookmarks — list all bookmarks with pagination (page, limit params)
- GET /api/bookmarks/:id — get a single bookmark with its tags
- PUT /api/bookmarks/:id — update a bookmark
- DELETE /api/bookmarks/:id — delete a bookmark and its tag associations
Use proper HTTP status codes. Return JSON with a consistent shape:
{ success: boolean, data: any, error?: string }

Registre as Rotas

Import the bookmark routes in index.ts and register them. Also add
express.json() middleware and a global error handler.

Teste com curl

Start the server, then create a test bookmark using curl:
curl -X POST http://localhost:3000/api/bookmarks \
  -H "Content-Type: application/json" \
  -d '{"url": "https://opencode.ai", "title": "OpenCode - AI Coding Agent"}'
Then fetch all bookmarks to verify it was saved.

O OpenCode executará esses comandos no seu terminal e mostrará as respostas. É aqui que a ferramenta brilha — você nunca sai do terminal, e a IA verifica seu próprio trabalho.


Fase 5: Adicionando Busca com FTS5 (4 minutes)

Introduza o Plan mode

Antes de construir a busca, vamos usar o Plan mode para pensar na implementação. Alterne os modos:

/plan

Agora você está no Plan mode. A IA pode ler seu código e analisá-lo, mas não pode modificar nenhum arquivo. Isso é útil para planning before making changes.

Analyze my current database schema and FTS5 table. Plan how to implement a
search endpoint that queries the FTS5 table and returns bookmarks ranked by
relevance. Consider edge cases: empty queries, special characters, partial
matches.

O OpenCode examinará seu código, escreverá um plano em .opencode/plans/ e explicará sua abordagem sem tocar em nenhum arquivo. Leia o plano, ajuste se necessário e então volte:

/build

Implemente a Busca

Based on the plan, implement a GET /api/bookmarks/search?q=query endpoint
that uses the FTS5 virtual table for full-text search. Include snippet
highlighting and relevance ranking. Handle edge cases from the plan.

Teste a Busca

Create three more test bookmarks with different titles and descriptions,
then test the search endpoint with a query that should match two of them.

O Que Acabou de Acontecer (Funcionalidade: Plan mode)

O fluxo de trabalho Plan/Build é como desenvolvedores experientes usam o OpenCode em tarefas complexas. Planeje primeiro, revise a abordagem e depois construa. Os arquivos de plano são salvos em .opencode/plans/ e can be referenced later pelo agente de build. Isso evita que a IA tome grandes decisões estruturais de improviso.


Fase 6: Implementando o Sistema de Tags (4 minutes)

Crie os Endpoints de Tag

Create a routes module at src/routes/tags.ts with:
- POST /api/tags — create a new tag
- GET /api/tags — list all tags with bookmark counts
- POST /api/bookmarks/:id/tags — add a tag to a bookmark
- DELETE /api/bookmarks/:id/tags/:tagId — remove a tag from a bookmark
- GET /api/bookmarks?tag=tagname — filter bookmarks by tag (update existing
  list endpoint to support this query parameter)
Register the tag routes in index.ts.

Teste o Fluxo de Tags

Create two tags: "dev-tools" and "tutorials". Add the "dev-tools" tag to
the OpenCode bookmark. Then fetch bookmarks filtered by the "dev-tools" tag.

Fase 7: Construindo um Frontend Simples (5 minutes)

Gere o Frontend

Create a public/ directory with a single-page frontend:
- index.html with a clean, minimal design (no framework, just HTML/CSS/JS)
- A form to add bookmarks (url, title, description)
- A search bar that queries the search endpoint with debounced input
- A list of bookmarks showing title, url, tags, and a delete button
- A tag filter sidebar that shows all tags with counts
- Use fetch() for API calls. Mobile responsive. No build step needed.
Serve the public/ directory as static files from Express.

O OpenCode gerará o frontend completo — estrutura HTML, estilização CSS e JavaScript para interações com a API — em uma única passagem. A vantagem de construir isso no terminal com um agente de IA é que ele pode testar imediatamente se o frontend se conecta à API.

Teste a Stack Completa

Start the server, open http://localhost:3000 in a description, and verify
that adding a bookmark from the form, searching, and filtering by tag all
work correctly.

Fase 8: Adicionando Testes com um Agente Personalizado (5 minutes)

Crie um Agente de Teste Personalizado

É aqui que entra a funcionalidade de custom agents do OpenCode. Em vez de usar o agente Build genérico para testes, criaremos um especializado.

Adicione isto ao seu opencode.json:

{
  "agents": {
    "test": {
      "name": "Test Writer",
      "instructions": "You are a testing specialist. Write comprehensive tests using Vitest. Focus on edge cases and error paths. Never modify source code — only create and edit test files.",
      "tools": ["read", "write", "terminal"]
    }
  }
}

Agora mude para o agente de teste:

/agent test

Gere os Testes

Write comprehensive tests for the bookmark API using Vitest and supertest.
Cover:
- Creating a bookmark with valid data
- Creating a bookmark with missing required fields
- Fetching all bookmarks with pagination
- Searching with FTS5 (matching and non-matching queries)
- Adding and removing tags
- Deleting a bookmark removes its tag associations
Use an in-memory SQLite database for test isolation.

Execute os Testes

Install vitest and supertest as dev dependencies, add a test script to
package.json, then run the test suite.

O Que Acabou de Acontecer (Funcionalidade: Agentes Personalizados)

Agentes personalizados permitem que você crie personas focadas com instruções específicas e acesso a ferramentas. O agente de teste que criamos só pode ler arquivos, escrever arquivos de teste e executar comandos de terminal — ele não pode modificar o código-fonte. Essa restrição evita o problema comum da IA "corrigir" seu código-fonte quando os testes falham, em vez de corrigir os testes.

Você pode criar agentes para qualquer fluxo de trabalho especializado: revisão de código, documentação, migrações de banco de dados, scripts de DevOps. A OpenCode agents documentation tem mais exemplos.


Bônus: Conectando um Servidor MCP para Funcionalidade Aprimorada

Se você quiser estender seu bookmark manager, pode conectar ferramentas externas via servidores MCP (Model Context Protocol).

Exemplo: Adicionando um Servidor MCP de Link Preview

Imagine que você quer que o OpenCode busque automaticamente metadados (título, descrição, favicon) de URLs ao criar bookmarks. Você pode conectar um servidor MCP que faz buscas HTTP:

Adicione isto ao seu opencode.json:

{
  "mcp": {
    "link-preview": {
      "type": "local",
      "command": ["npx", "link-preview-mcp-server"]
    }
  }
}

Agora o OpenCode tem uma nova ferramenta disponível: ele pode buscar metadados de URL como parte de seu fluxo de trabalho. Quando você pedir para ele "add a bookmark for https://example.com and auto-fill the title and description," ele usará o servidor MCP para buscar esses dados.

Servidores MCP Remotos

Para serviços em nuvem, use servidores MCP remotos com automatic OAuth handling:

{
  "mcp": {
    "cloud-storage": {
      "type": "remote",
      "url": "https://mcp.example.com/storage",
      "headers": {
        "Authorization": "Bearer ${STORAGE_TOKEN}"
      }
    }
  }
}

O OpenCode detecta respostas 401 e inicia o fluxo OAuth automaticamente se o servidor suportar Dynamic Client Registration.


Bônus: Usando OpenCode em CI/CD

O OpenCode possui um CLI mode que funciona sem a TUI — perfeito para automação. Você pode usá-lo no GitHub Actions ou em qualquer pipeline de CI:

# Run a single prompt and exit
opencode -p "Review the changes in the last commit for security issues" --no-tui

# Use a specific model
opencode -m "claude-sonnet-4-6" -p "Generate a changelog entry for this release" --no-tui

Para o nosso bookmark manager, você poderia adicionar uma etapa de CI que executa o OpenCode para revisar PRs automaticamente. A OpenCode GitHub integration fornece uma versão mais simplificada deste fluxo de trabalho.


A Estrutura Completa do Projeto

Depois de seguir este tutorial, seu projeto deve se parecer com isto:

bookmark-manager/
  opencode.json          # OpenCode project config + custom agents + MCP
  package.json
  tsconfig.json
  src/
    index.ts             # Express server entry point
    db.ts                # SQLite database module with FTS5
    routes/
      bookmarks.ts       # CRUD + search endpoints
      tags.ts            # Tag management endpoints
  public/
    index.html           # Single-page frontend
  tests/
    bookmarks.test.ts    # API test suite
  data/
    bookmarks.db         # SQLite database (gitignored)
  .opencode/
    plans/               # Plans from Plan mode sessions

O Que Você Aprendeu

Ao construir um projeto real, você praticou estas capacidades do OpenCode:

FuncionalidadeOnde Você a Usou
InstalaçãoFase 1 — npm, Homebrew, ou curl
Zen models (grátis)Fase 1 — escolhendo um modelo sem uma API key
Build modeFases 2-7 — desenvolvimento completo com acesso a arquivos e terminal
Plan modeFase 5 — analisando código e planejando busca antes de implementar
opencode.jsonFase 3 — config de projeto com regras para comportamento consistente da IA
Agentes personalizadosFase 8 — um agente de escrita de testes que não pode modificar o código-fonte
Servidores MCPBônus — estendendo o OpenCode com ferramentas externas
CLI modeBônus — executando o OpenCode em CI/CD sem a TUI

A principal diferença entre o OpenCode e outras ferramentas de codificação por IA é que ele é entirely open source, roda no seu terminal e não armazena seu código ou dados de contexto. Você controla os modelos, os dados permanecem locais e a comunidade de 800+ colaboradores o mantém evoluindo rápido.

Para equipes que usam múltiplas ferramentas de IA, o OpenCode funciona bem como o complemento baseado em terminal para assistentes de IDE. Na ZBuild, frequentemente o usamos ao lado de ferramentas baseadas em editor para diferentes partes do fluxo de trabalho de desenvolvimento.


Próximos Passos

Agora que você tem um bookmark manager funcional e uma compreensão sólida do OpenCode, aqui estão algumas direções para explorar:

  1. Adicione autenticação — Use o agente Build para adicionar auth baseada em JWT com contas de usuário
  2. Implante em produção — Peça ao OpenCode para gerar um Dockerfile e implantar no Fly.io ou Railway
  3. Construa uma extensão de navegador — Crie uma extensão do Chrome que adicione bookmarks via API
  4. Explore mais Zen models — Experimente Big Pickle, MiniMax M2.1, ou execute um modelo local através do Ollama
  5. Crie mais agentes personalizados — Um agente de "refactor", um agente de "docs" ou um agente de "security audit"

A OpenCode documentation e o awesome-opencode repository têm mais plugins, temas e configurações da comunidade para explorar.


Fontes

Back to all news
Enjoyed this article?
FAQ

Common questions

O que estamos construindo neste tutorial?+
Um gerenciador de favoritos full-stack com uma REST API Node.js/Express, banco de dados SQLite, sistema de tags, busca de texto completo e um frontend simples em HTML/CSS/JS. Todo o app é construído usando OpenCode como o agente de codificação por IA no terminal, demonstrando fluxos de trabalho reais em vez de apenas listar recursos.
Preciso de uma API key para seguir este tutorial?+
Não. O OpenCode oferece modelos Zen gratuitos, incluindo Grok Code Fast, GLM 4.7 e Big Pickle, que funcionam sem API keys. Você também pode rodar totalmente offline com modelos locais via Ollama. Se você tiver uma API key do Claude, GPT ou Gemini, pode usá-las para obter resultados de maior qualidade.
Quanto tempo leva para construir o projeto completo?+
Cerca de 30 minutos se você seguir o passo a passo. O tutorial está estruturado em 7 fases: setup do projeto, modelo de dados, API endpoints, busca, tags, frontend e testes. Cada fase leva de 3 a 5 minutos com o OpenCode lidando com a geração de código.
Posso usar o OpenCode no VS Code ou Cursor?+
Sim. O OpenCode roda em qualquer terminal integrado. Abra um terminal dividido no VS Code (Cmd+Esc no Mac) ou Cursor e inicie o OpenCode a partir dali. Ele compartilha automaticamente sua seleção e o contexto do arquivo aberto com o agente de IA.
Qual é a diferença entre o modo Build e o modo Plan?+
O modo Build dá ao agente de IA acesso total para ler, escrever e executar código. O modo Plan o restringe à análise apenas de leitura — o agente pode examinar seu código e criar arquivos de plano, mas não pode modificar nada. Usamos o modo Plan neste tutorial antes de etapas importantes de refatoração.
Como adiciono servidores MCP ao OpenCode?+
Adicione-os na sua configuração opencode.json sob a chave mcp. Cada servidor MCP precisa de um nome exclusivo, um tipo (local ou remoto) e detalhes de conexão. Servidores locais usam um campo command; servidores remotos usam um campo url com headers opcionais. O OpenCode gerencia o OAuth para servidores MCP remotos automaticamente.
Recommended Tools

Useful follow-ups related to this article.

Browse All Tools

Construir com ZBuild

Transforme sua ideia em um app funcional — sem programação.

Mais de 46.000 desenvolvedores construíram com ZBuild neste mês

Experimente você mesmo

Descreva o que você quer — ZBuild constrói para você.

Mais de 46.000 desenvolvedores construíram com ZBuild neste mês
More Reading

Related articles

As 8 melhores alternativas ao OpenCode em 2026: Do Claude Code ao Cursor e opções gratuitas
2026-03-27T00:00:00.000Z

As 8 melhores alternativas ao OpenCode em 2026: Do Claude Code ao Cursor e opções gratuitas

Procurando por uma alternativa ao OpenCode? Comparamos 8 ferramentas de codificação por IA em benchmarks, preços e fluxos de trabalho reais de desenvolvedores. Encontre a melhor opção para desenvolvimento terminal-first, baseado em IDE e no-code em 2026.

OpenCode Blocked by Anthropic: O que aconteceu, por que e como os desenvolvedores estão respondendo em 2026
2026-03-27T00:00:00.000Z

OpenCode Blocked by Anthropic: O que aconteceu, por que e como os desenvolvedores estão respondendo em 2026

Uma análise detalhada do bloqueio da Anthropic ao OpenCode no acesso aos modelos Claude em 2026. Saiba o que desencadeou o banimento, os detalhes legais e técnicos, as reações da comunidade de DHH e outros, os contornos disponíveis e o que isso significa para o futuro das ferramentas de codificação de IA de código aberto.

OpenCode vs Claude Code vs Cursor em 2026: Uma Análise Sincera de um Desenvolvedor
2026-03-27T00:00:00.000Z

OpenCode vs Claude Code vs Cursor em 2026: Uma Análise Sincera de um Desenvolvedor

Testamos OpenCode, Claude Code e Cursor lado a lado em projetos reais. Veja como eles se comparam em speed, cost, token efficiency e developer experience — com dados de benchmarks independentes.

Melhor IA para Programação 2026: Ranking Completo de 15 Ferramentas por Desempenho no Mundo Real
2026-03-27T00:00:00.000Z

Melhor IA para Programação 2026: Ranking Completo de 15 Ferramentas por Desempenho no Mundo Real

Um ranking baseado em dados de todas as principais ferramentas de IA para programação em 2026. Abrange pontuações no SWE-bench, preços, satisfação dos desenvolvedores e desempenho no mundo real para Claude Code, Cursor, GitHub Copilot, Windsurf, Devin, OpenCode, Aider, Cline e mais.