DEV Community

Juan Fernandes
Juan Fernandes

Posted on • Originally published at juanfernandes.uk on

Building BKMRKS | A Lightweight Bookmarks Manager Project

I’ve always relied on bookmarks to save useful links — design systems, dev docs, tools, inspiration, articles I want to revisit later. The problem is: browser bookmarks quickly become cluttered, messy, and difficult to manage across devices. I wanted something cleaner, more organised, and under my control.

So I decided to build my own solution: BKMRKS — a minimal, full-featured bookmark manager that runs anywhere, needs no database, and can be deployed on simple shared hosting.

The Starting Point

Originally, I experimented with Supabase as the backend for authentication, storage, and APIs. While it worked, it quickly felt like overkill. I didn’t want to depend on a hosted service, worry about migrations, or deal with vendor lock-in.

I asked myself: “Do I really need a database at all?”

The answer was no. For my use case — static bookmark storage, tagging, filtering, and importing/exporting JSON — a simple file-based approach was enough.

The Approach

I set out to build BKMRKS as a static-first app:

  • Frontend in React: Clean UI, fast search, category filtering, and tagging.

  • Data as JSON: Bookmarks live in a simple .json file — human-readable, portable, and easy to back up.

  • Import/Export: Users can upload/export their own bookmarks as JSON.

  • Deploy Anywhere: Works on Netlify, Vercel, or even plain old shared hosting. No database required.

This decision massively simplified the architecture. Instead of a stack with a database, auth, and server-side code, BKMRKS is essentially just a React app plus a JSON file.

Key Features

Despite its simplicity, BKMRKS is designed to feel complete:

  • Search – instantly find bookmarks by title, tag, or description.

  • Categories – group links under T-shirts, Hoodies... (just kidding 😅) — I mean Work, Design, Dev Tools, Articles, etc.

  • Tagging – flexible organisation across categories.

  • Import/Export – add bookmarks from your browser, or back them up in seconds.

  • Static Storage – everything is in JSON. No logins, no databases, just pure portability.

Lessons Learned

Dropping Supabase was the right move. I didn’t need realtime sync, row-level security, or a hosted PostgreSQL instance for something that’s essentially a personal library.

By keeping things static:

  • Setup is easier — no config, no environment variables.

  • Maintenance is zero — it just works on shared hosting.

  • Performance is great — no server round-trips, everything is local.

It’s a reminder that not every project needs a “modern stack” with APIs and databases. Sometimes, plain JSON files do the job.

What’s Next?

I want to expand BKMRKS with a few ideas:

  • Better UI polish — more drag-and-drop, cleaner category browsing.

  • Optional cloud sync — without tying users to a single provider.

  • Public sharing — the ability to make collections of bookmarks public.

For now though, it’s already doing what I need: a clean, no-frills way to manage my links across devices.

Why This Matters

Building BKMRKS reminded me why I enjoy side projects: solving my own problems in the simplest way possible. It’s lightweight, portable, and future-proof — no SaaS dependencies, just a little React app and a JSON file.

Sometimes, that’s all you need.

Top comments (0)