← Back to news
ZBuild News

Bouw een Full-Stack Bookmark Manager met OpenCode in 30 minuten (stap voor stap)

Een projectgebaseerde OpenCode tutorial waarin je een complete bookmark manager bouwt met tags, zoekfunctie en een REST API — met behulp van de OpenCode AI agent in de terminal. Elke functie wordt geïntroduceerd wanneer je deze nodig hebt, niet in een lijst met functies.

Published
2026-03-27
Author
ZBuild Team
Reading Time
14 min read
opencode tutorialopencode guideopencode installopencode setupopencode configurationopencode ai coding agent
Bouw een Full-Stack Bookmark Manager met OpenCode in 30 minuten (stap voor stap)
ZBuild Teamnl
XLinkedIn

Wat we gaan bouwen

Vergeet functielijsten. De beste manier om een tool te leren kennen is door er iets mee te bouwen.

In deze tutorial gebruik je OpenCode — de open-source AI-coding agent met meer dan 120K GitHub-sterren — om vanaf nul een volledige bookmark manager te bouwen. De app krijgt:

  • Een REST API met Express.js en TypeScript
  • Een SQLite database met full-text search
  • Een tagsysteem voor het organiseren van bookmarks
  • Een eenvoudige maar functionele frontend
  • Unit tests

Elke OpenCode-functie wordt geïntroduceerd op het moment dat je deze nodig hebt — niet in een abstracte sectie met functies. Aan het einde weet je hoe je OpenCode installeert, modellen configureert, de Build- en Plan-modi gebruikt, MCP-servers instelt en aangepaste agents maakt — allemaal omdat je ze hebt gebruikt om een echt project te bouwen.

Tijd: ~30 minuten Vereisten: Node.js 18+ geïnstalleerd, een terminal (macOS, Linux, of WSL op Windows) Kosten: Gratis (met OpenCode Zen-modellen)


Fase 1: OpenCode installeren en het project opzetten (5 minuten)

Installeer OpenCode

Open je terminal en voer een van deze commando's uit:

# 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

Verifieer de installatie:

opencode --version

Je zou het versienummer moeten zien. Vanaf March 2026 is de nieuwste stabiele release beschikbaar op de OpenCode GitHub repository.

Maak de projectmap aan

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

Start OpenCode voor de eerste keer

opencode

Dit opent de TUI van OpenCode — een schermvullende interactieve interface gebouwd met Bubble Tea. Je ziet onderaan een chat-input en een conversatievenster in het hoofdgedeelte.

Kies een model

Bij de eerste start zal OpenCode je vragen om een model te selecteren. Je hebt drie opties:

Gratis (Zen-modellen): Typ /models en selecteer een van de gratis Zen-modellen. Voor deze tutorial werken Grok Code Fast 1 of GLM 4.7 goed. Deze zijn gratis en vereisen geen API-sleutel.

Lokaal (Ollama): Als je Ollama hebt geïnstalleerd, zal OpenCode dit automatisch detecteren. Het aanbevolen model voor Ollama is glm-4.7:cloud.

Betaald (gebruik je eigen sleutel): Typ /connect om je Anthropic, OpenAI of Google API-sleutel te koppelen. Sleutels worden lokaal opgeslagen in ~/.local/share/opencode/auth.json.

Voor deze tutorial werkt elk model. Modellen met hogere capaciteiten (Claude Sonnet 4.6, GPT-5.4) zullen betere resultaten leveren bij complexe taken, maar de gratis Zen-modellen kunnen alles aan wat we hier bouwen.


Fase 2: Het project opzetten met Build-modus (4 minuten)

OpenCode start standaard in de Build mode. De Build mode geeft de AI-agent volledige toegang om bestanden te maken, code te bewerken en commando's uit te voeren. Dit is wat we willen voor de initiële opzet.

Je eerste prompt

Typ dit in de OpenCode-chat:

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.

OpenCode zal:

  1. Een tsconfig.json maken
  2. Dependencies installeren met npm install
  3. src/index.ts maken met de Express-server setup
  4. package.json bijwerken met start-scripts

Bekijk de TUI — je ziet de agent terminalcommando's uitvoeren, bestanden maken en bij elke stap uitleggen wat hij doet. Dit is geen codegeneratie in een vacuüm; OpenCode heeft volledige toegang tot je bestandssysteem en terminal.

Verifieer of het werkt

Zodra OpenCode klaar is, zeg je:

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

OpenCode zal npx nodemon src/index.ts uitvoeren en bevestigen dat de server luistert. Je zou output moeten zien zoals Server running on http://localhost:3000.

Wat er zojuist is gebeurd (Functie: Build mode)

Build mode is de standaardagent van OpenCode. Deze heeft toegang tot alle tools: lezen/schrijven van bestanden, uitvoering in de terminal en het bewerken van code. Volgens de OpenCode documentatie kun je het zien als een AI-pair-programmer met volledige toegang tot je ontwikkelomgeving.


Fase 3: Het datamodel en de database maken (4 minuten)

Ontwerp het schema

Typ deze 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.

OpenCode zal de volledige databasemodule genereren. Let op hoe het de FTS5-configuratie (Full-Text Search 5) afhandelt — dit is een SQLite-functie die later onze zoekfunctionaliteit zal aansturen.

Initialiseer de database bij het opstarten van de server

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

Maak de opencode.json-configuratie

Dit is een goed moment om projectconfiguratie te introduceren. Maak een bestand aan door OpenCode te vertellen:

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."

Dit maakt het projectconfiguratiebestand aan dat OpenCode bij het opstarten leest. Het geeft de AI blijvende context over je project — programmeerstandaarden, architectuurbeslissingen en beperkingen — zodat je deze niet in elke prompt hoeft te herhalen.


Fase 4: De REST API-endpoints bouwen (5 minuten)

Genereer de routes

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 }

Registreer de routes

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

Testen met 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.

OpenCode zal deze commando's in je terminal uitvoeren en je de antwoorden tonen. Dit is waar de tool uitblinkt — je verlaat de terminal nooit en de AI verifieert zijn eigen werk.


Fase 5: Zoekfunctie toevoegen met FTS5 (4 minuten)

Maak kennis met de Plan-modus

Voordat we de zoekfunctie bouwen, gebruiken we de Plan mode om de implementatie te overdenken. Schakel over van modus:

/plan

Nu ben je in de Plan mode. De AI kan je code lezen en analyseren, maar kan geen bestanden wijzigen. Dit is handig voor het plannen voordat je wijzigingen aanbrengt.

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.

OpenCode zal je code onderzoeken, een plan schrijven naar .opencode/plans/ en zijn aanpak uitleggen zonder bestanden aan te raken. Lees het plan, pas het indien nodig aan en schakel dan terug:

/build

Implementeer de zoekfunctie

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.

Test de zoekfunctie

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

Wat er zojuist is gebeurd (Functie: Plan mode)

De Plan/Build-workflow is hoe ervaren ontwikkelaars OpenCode gebruiken voor complexe taken. Eerst plannen, de aanpak beoordelen en dan bouwen. De planbestanden worden opgeslagen in .opencode/plans/ en kunnen later worden geraadpleegd door de build-agent. Dit voorkomt dat de AI gaandeweg grote structurele beslissingen neemt.


Fase 6: Het tagsysteem implementeren (4 minuten)

Maak tag-endpoints aan

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.

Test de tag-flow

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: Een eenvoudige frontend bouwen (5 minuten)

Genereer de 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.

OpenCode zal de volledige frontend genereren — HTML-structuur, CSS-styling en JavaScript voor API-interacties — in één keer. Het voordeel van het bouwen hiervan in de terminal met een AI-agent is dat deze onmiddellijk kan testen of de frontend verbinding maakt met de API.

Test de volledige stack

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: Tests toevoegen met een aangepaste agent (5 minuten)

Maak een aangepaste test-agent

Dit is waar de functie aangepaste agents van OpenCode om de hoek komt kijken. In plaats van de generieke Build-agent te gebruiken voor het testen, maken we een gespecialiseerde.

Voeg dit toe aan je 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"]
    }
  }
}

Schakel nu over naar de test-agent:

/agent test

Genereer tests

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.

Voer de tests uit

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

Wat er zojuist is gebeurd (Functie: Custom Agents)

Met aangepaste agents kun je gerichte persona's maken met specifieke instructies en toegang tot tools. De test-agent die we hebben gemaakt, kan alleen bestanden lezen, testbestanden schrijven en terminalcommando's uitvoeren — hij kan de broncode niet wijzigen. Deze beperking voorkomt het veelvoorkomende probleem dat AI je broncode "repareert" wanneer tests falen, in plaats van de tests te repareren.

Je kunt agents maken voor elke gespecialiseerde workflow: code review, documentatie, databasemigraties, DevOps-scripts. De OpenCode agents documentatie bevat meer voorbeelden.


Bonus: Een MCP-server verbinden voor verbeterde functionaliteit

Als je je bookmark manager wilt uitbreiden, kun je externe tools verbinden via MCP (Model Context Protocol) servers.

Voorbeeld: Een Link Preview MCP-server toevoegen

Stel je voor dat je wilt dat OpenCode automatisch metadata (titel, beschrijving, favicon) van URL's ophaalt bij het maken van bookmarks. Je kunt een MCP-server verbinden die HTTP-fetching uitvoert:

Voeg dit toe aan je opencode.json:

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

Nu heeft OpenCode een nieuwe tool beschikbaar: het kan URL-metadata ophalen als onderdeel van zijn workflow. Wanneer je vraagt om "add a bookmark for https://example.com and auto-fill the title and description," zal het de MCP-server gebruiken om die gegevens op te halen.

Externe MCP-servers

Gebruik voor cloudservices externe MCP-servers met automatische OAuth-afhandeling:

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

OpenCode detecteert 401-antwoorden en start de OAuth-flow automatisch als de server Dynamic Client Registration ondersteunt.


Bonus: OpenCode gebruiken in CI/CD

OpenCode heeft een CLI mode die werkt zonder de TUI — perfect voor automatisering. Je kunt het gebruiken in GitHub Actions of elke CI-pipeline:

# 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

Voor onze bookmark manager zou je een CI-stap kunnen toevoegen die OpenCode gebruikt om PR's automatisch te beoordelen. De OpenCode GitHub-integratie biedt een meer gestroomlijnde versie van deze workflow.


De volledige projectstructuur

Na het volgen van deze tutorial zou je project er zo uit moeten zien:

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

Wat je hebt geleerd

Door een echt project te bouwen, heb je geoefend met deze OpenCode-mogelijkheden:

FunctieWaar je het hebt gebruikt
InstallatieFase 1 — npm, Homebrew, of curl
Zen-modellen (gratis)Fase 1 — een model kiezen zonder API-sleutel
Build modeFase 2-7 — volledige ontwikkeling met bestands- en terminaltoegang
Plan modeFase 5 — code analyseren en zoekfunctie plannen voor implementatie
opencode.jsonFase 3 — projectconfiguratie met regels voor consistent AI-gedrag
Custom agentsFase 8 — een agent voor het schrijven van tests die de broncode niet kan wijzigen
MCP-serversBonus — OpenCode uitbreiden met externe tools
CLI modeBonus — OpenCode draaien in CI/CD zonder de TUI

Het belangrijkste verschil tussen OpenCode en andere AI-coding tools is dat het volledig open source is, in je terminal draait en je code of contextgegevens niet opslaat. Jij hebt de controle over de modellen, de gegevens blijven lokaal en de gemeenschap van meer dan 800 bijdragers zorgt ervoor dat het zich snel blijft ontwikkelen.

Voor teams die meerdere AI-tools gebruiken, werkt OpenCode goed als de terminal-gebaseerde aanvulling op IDE-assistenten. Bij ZBuild gebruiken we het vaak naast editor-gebaseerde tools voor verschillende onderdelen van de ontwikkelingsworkflow.


Volgende stappen

Nu je een werkende bookmark manager hebt en een goed begrip van OpenCode, zijn hier enkele richtingen om te verkennen:

  1. Authenticatie toevoegen — Gebruik de Build-agent om JWT-gebaseerde authenticatie met gebruikersaccounts toe te voegen
  2. Implementeren in productie — Vraag OpenCode om een Dockerfile te genereren en te implementeren op Fly.io of Railway
  3. Bouw een browserextensie — Maak een Chrome-extensie die bookmarks toevoegt via de API
  4. Ontdek meer Zen-modellen — Probeer Big Pickle, MiniMax M2.1, of draai een lokaal model via Ollama
  5. Maak meer aangepaste agents — Een "refactor"-agent, een "docs"-agent of een "security audit"-agent

De OpenCode documentatie en de awesome-opencode repository bevatten meer plugins, thema's en community-configuraties om te verkennen.


Bronnen

Back to all news
Enjoyed this article?
FAQ

Common questions

Wat gaan we bouwen in deze tutorial?+
Een full-stack bookmark manager met een Node.js/Express REST API, SQLite database, tag-systeem, full-text search en een eenvoudige HTML/CSS/JS frontend. De volledige app wordt gebouwd met OpenCode als de AI coding agent in de terminal, waarbij echte workflows worden gedemonstreerd in plaats van het simpelweg opsommen van functies.
Heb ik een API key nodig om deze tutorial te volgen?+
Nee. OpenCode biedt gratis Zen models aan, waaronder Grok Code Fast, GLM 4.7 en Big Pickle die werken zonder API keys. Je kunt ook volledig offline werken met local models via Ollama. Als je een Claude, GPT of Gemini API key hebt, kun je die gebruiken voor output van hogere kwaliteit.
Hoe lang duurt het om het volledige project te bouwen?+
Ongeveer 30 minuten als je stap voor stap meedoet. De tutorial is gestructureerd in 7 fasen: project setup, data model, API endpoints, search, tags, frontend en testing. Elke fase duurt 3-5 minuten waarbij OpenCode de code generation afhandelt.
Kan ik OpenCode gebruiken in VS Code of Cursor?+
Ja. OpenCode werkt in elke geïntegreerde terminal. Open een split terminal in VS Code (Cmd+Esc op Mac) of Cursor en start OpenCode van daaruit. Het deelt automatisch je selectie en geopende bestandscontext met de AI agent.
Wat is het verschil tussen Build mode en Plan mode?+
Build mode geeft de AI agent volledige toegang om code te lezen, schrijven en uit te voeren. Plan mode beperkt het tot read-only analyse — de agent kan je code onderzoeken en plan-bestanden maken, maar kan niets wijzigen. We gebruiken Plan mode in deze tutorial voor belangrijke refactoring stappen.
Hoe voeg ik MCP servers toe aan OpenCode?+
Voeg ze toe in je opencode.json configuratie onder de mcp-key. Elke MCP server heeft een unieke naam nodig, een type (local of remote) en verbindingsdetails. Local servers gebruiken een command-veld; remote servers gebruiken een url-veld met optionele headers. OpenCode handelt OAuth voor remote MCP servers automatisch af.
Recommended Tools

Useful follow-ups related to this article.

Browse All Tools

Bouw met ZBuild

Verander je idee in een werkende app — geen coderen nodig.

46.000+ ontwikkelaars bouwden deze maand met ZBuild

Probeer het zelf

Beschrijf wat je wilt — ZBuild bouwt het voor je.

46.000+ ontwikkelaars bouwden deze maand met ZBuild
More Reading

Related articles

8 beste OpenCode alternatieven in 2026: van Claude Code tot Cursor en gratis opties
2026-03-27T00:00:00.000Z

8 beste OpenCode alternatieven in 2026: van Claude Code tot Cursor en gratis opties

Op zoek naar een OpenCode alternatief? We hebben 8 AI coding tools vergeleken op benchmarks, prijzen en echte developer workflows. Vind de beste keuze voor terminal-first, IDE-based en no-code ontwikkeling in 2026.

OpenCode geblokkeerd door Anthropic: Wat er gebeurde, waarom, en hoe developers reageren in 2026
2026-03-27T00:00:00.000Z

OpenCode geblokkeerd door Anthropic: Wat er gebeurde, waarom, en hoe developers reageren in 2026

Een uitgebreide analyse van het blokkeren van OpenCode door Anthropic voor toegang tot Claude modellen in 2026. Leer wat de ban veroorzaakte, de juridische en technische details, community-reacties van DHH en anderen, beschikbare workarounds, en wat dit betekent voor de toekomst van open-source AI coding tools.

OpenCode vs Claude Code vs Cursor in 2026: De eerlijke analyse van een developer
2026-03-27T00:00:00.000Z

OpenCode vs Claude Code vs Cursor in 2026: De eerlijke analyse van een developer

We hebben OpenCode, Claude Code en Cursor zij-aan-zij getest op echte projecten. Dit is hoe ze vergelijken op snelheid, kosten, token efficiency en developer experience — met gegevens uit onafhankelijke benchmarks.

Harness Engineering: De complete gids voor het bouwen van systemen voor AI Agents en Codex in 2026
2026-03-27T00:00:00.000Z

Harness Engineering: De complete gids voor het bouwen van systemen voor AI Agents en Codex in 2026

Leer alles over harness engineering — de nieuwe discipline van het ontwerpen van systemen die AI coding agents op grote schaal echt laten werken. Behandelt OpenAI's Codex-experiment van een miljoen regels code, golden principles, dependency layers, repository-first architecture, garbage collection en praktische implementatie voor je eigen team.