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/v1and a/healthzendpoint 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.
