Blog
Personal by Dimitri de Jong 3 min read

Why I built Ghostbase

I have a Spotify, a Simkl account for tracking what I watch, a GitHub profile, a Discord presence, and a habit of writing things down. None of that lived in one place, and every "link in bio" tool I tried was built for creators posting content, not for someone who just wants a home base on the internet. So I built my own. It's called Ghostbase, it runs at razerghost.xyz, and it's open source.

The first version was almost too simple: a page with links to my socials and projects, because I was tired of my bio linking to a Linktree that looked like everyone else's Linktree. That would have been a fine place to stop. It wasn't, because the moment I had a page that was mine, I kept noticing gaps.

Would it be cool if this page knew what I'm listening to right now? Would it be cool if this page just showed my watchlist directly — the kdramas and anime Simkl already keeps merged into one place — instead of making me go check it separately? What if my devlog lived next to everything else I do? Each question turned into a feature, and each feature turned into a small piece of infrastructure I hadn't planned on building — a cache layer here, an import pipeline there, a full-text search index for my own notes.

What it actually does now

Ghostbase has grown into something closer to a personal dashboard than a links page:

  • Live status — what I'm playing on Spotify, what I'm watching, my Discord presence, pulled together instead of scattered across four tabs
  • A watchlist (/watchlist) — my kdramas and anime, pulled from Simkl's merged view instead of making me check it separately
  • A devlog (/devlog) — markdown posts with embeddable interactive components (before/after sliders, terminal replays, diagrams) for writing about what I'm actually building
  • A project showcase (/projects) — the things I've shipped, tagged and searchable
  • A listening history (/listens) — my Spotify history, browsable on its own page instead of buried in a Spotify wrapped once a year
  • A gear page (/gear) — the hardware and setup behind all of this
  • A note-taking system (/notes) — with autosave, soft delete, and revision history, because I trust "the cloud" with my notes about as much as I trust a browser tab I forgot to bookmark
  • A /newtab dashboard — a drag-and-dock replacement for my browser's new tab page, complete with a pomodoro timer and rotating Unsplash backgrounds
  • An admin panel (/admin) — a proper CMS behind a login for editing the devlog and projects, managing backups and media, and watching the health of every integration, instead of hand-editing files on a server

None of this was on a roadmap. It's the accumulated result of building the tool I actually wanted to open every day, one annoyance at a time.

Why it's worth writing about

Most software I'll build for other people won't be shareable — client work tends to live under NDA, and even when it doesn't, screenshots of an internal ops dashboard don't tell you much. Ghostbase is the opposite: it's mine, it's public, the code is open, and every decision in it was made because I had to live with the consequences, not because someone else signed off on a spec.

That's a different kind of pressure than working to someone else's requirements, and an instructive one. When you're both the developer and the only user, you can't blame unclear requirements for a bad decision — you just made a bad decision, and you'll be the one annoyed by it next week. It's the same discipline I intend to bring to every project, minus anywhere to hide.

Curious how I work, or want to see the code? Ghostbase is open source — and if you want something built with that same care, let's talk.

Share this post