Back to Home
Project

Mark

A lightweight bookmark manager built to learn Go + Nuxt and run efficiently on a personal VPS.

Gallery
Project image 1

Overview

Mark is a full-stack bookmark manager I built after struggling to find bookmarks I had saved across social media platforms like X and Facebook. I wanted one place to store, organize, and quickly retrieve links, so I designed this app as a hands-on learning project for Go and Nuxt 3 while keeping operational costs low on a personal VPS. The backend is a Go REST API with MySQL persistence and SQL migrations. The frontend is a Nuxt 3 single-page app that manages bookmarks and categories with a clean, responsive UI. The goal is to practice a production-style architecture while maintaining a lightweight footprint that is easy to deploy and maintain.

Key Features

  • Bookmark CRUD: Create, edit, delete, and list bookmarks with optional titles and descriptions.
  • Category Management: Organize bookmarks by categories with color tags and validation.
  • REST API + Health Check: Versioned API under /api/v1 and a /healthz endpoint for uptime monitoring.
  • MySQL Migrations: Schema managed with SQL migrations for repeatable deployments.
  • Demo-Friendly UI: Pre-seeded demo data for showcasing the experience without a live database.

Challenges

  • Data validation: Ensuring clean inputs for URLs, names, and colors across API and UI.
  • Schema evolution: Handling migration changes like optional bookmark titles without downtime.
  • VPS optimization: Keeping the stack small, efficient, and easy to run on a single low-cost server.

Technologies Used

  • Go: REST API, services, and repository pattern.
  • Chi: Minimal HTTP routing and middleware.
  • MySQL: Primary data store with SQL migrations.
  • Nuxt 3: Single-page application for the UI.
  • Pinia: Client-side state management for bookmarks and categories.

Reference